Hello everybody! I recently started with programming in java! I learned from a dutch book written by David J. Barnes en Michael Kölling. The book is translated form the english version: Objects First With Java a parctical introduction using BlueJ. Now that I'm finally through the book i was looking for a task! That's when I stumbled upon a task which was from my brother in 2004! I first asked him but he couldn't answer me (he mostly is programming in LabView, like 9 years)
First I want to apologize for my bad English typing I from Belgium and I am trying really hard!!
the task: I need to create a maze in which a player is moving! He can only be moved by the air of a ventilator or by the attraction of a magnet. So by clicking with the mouse on those items, the ventilator or magnet need the become an active element. Whether it affects the player depends on the position of the player and ventilator/magnet! By performing those clicks you have to show the player to the exit of the maze.
I first started with the development of an algorithm for generating a maze, after 8 hours I finally gave up. Now I've created a maze by defining a 2D-array in which I declared which position is a wall and which is a path, probably not the right way but good enough for the time being.
Than I made one head Class 'Vak' from that class I extended 'a Path', 'a Wall', 'a Ventilator', 'a Magneet' and finally 'a player'. Those are all the items I guess I need for solving this problem. I created a play area 'Speelbord'. Here I Stored all of my logic (source code)! Here is also where my problem starts. Specifically in this piece of source code:
the piece in Bold is which I did to collect the positions and see whether the player can or cannot move. This will still compile in BlueJ. Now I've created an other class 'controller' Here I make a mouseListener and I am trying to declare it. There for I wrote the following source code:public void beweeg([B]Speler s, Vak vk, Ventilator vr, Magneet mt[/B]) { if (gameover == false && s.getX() == vk.getX())//we gaan nu VERTICAAL bewegen { //voor een Ventilator zien de bewegings mogelijkheden er als volgt uit: if (s.getY() > vk.getY() && vk.getKleur() == vr.getKleur()) { int dy = s.getY() + vr.getKracht();//de Ventilator ligt boven de speler -> hij moet dus naar onder bewegen (het aantal vakjes volgens de kracht) = optellen y = y + dy;// is dy == kracht? } if (s.getY() < vk.getY() && vk.getKleur() == vr.getKleur()) { int dy = s.getY() - vr.getKracht();//de Ventilator ligt onder de speler -> hij moet dus naar boven bewegen (het aantal vakjes volgens de kracht) = aftrekken y = y - dy;// is dy == kracht? } //voor een Magneet zien de bewegings mogelijkheden er als volgt uit: if (s.getY() > vk.getY() && vk.getKleur() == mt.getKleur()) { int dy = s.getY() - mt.getKracht();// de Magneet ligt boven de speler -> hij moet dus naar boven bewegen (het aantal vakjes volgens de kracht) = aftrekken y = y - dy;// is dy == kracht? } if (s.getY() < vk.getY() && vk.getKleur() == mt.getKleur()) { int dy = s.getY() + mt.getKracht();// de Magneet ligt onder de speler -> hij moet dus naar onder bewegen (het aantal vakjes volgens de kracht) = optellen y = y - dy;// is dy == kracht? } } if (gameover == false && s.getY() == vk.getY())// we gaan nu HORIZONTAAL bewegen { //voor een Ventilator zien de bewegings mogelijkheden er als volgt uit: if (s.getX() > vk.getX() && vk.getKleur() == vr.getKleur()) { int dx = s.getX() + vr.getKracht();//de Ventilator ligt links van de speler -> hij moet dus naar rechts bewegen (het aantal vakjes volgens de kracht) = optellen x = x + dx; //is dx == kracht? } if (s.getX() < vk.getX() && vk.getKleur() == vr.getKleur()) { int dx = s.getX() - vr.getKracht();//de Ventilator ligt rechts van de speler -> hij moet dus naar links bewegen (het aantal vakjes volgens de kracht) = aftrekken x = x - dx; //is dx == kracht? } //voor een Magneet zien de bewegings mogelijkheden er als volgt uit: if (s.getX() > vk.getX() && vk.getKleur() == mt.getKleur()) { int dx = s.getX() - mt.getKracht();//de Magneet ligt rechts van de speler -> hij moet dus naar links bewegen (het aantal vakjes volgens de kracht) = aftrekken x = x - dx;//is dx == kracht? } if (s.getX() < vk.getX() && vk.getKleur() == vr.getKleur()) { int dx = s.getX() + mt.getKracht();// de Magneet ligt links van de speler -> hij moet dus naar rechts bewegen (het aantal vakjes volgens de kracht) = optellen x = x + dx;//is dx == kracht? } } }
If I compile now I got the following error: cannot find symbol- method beweegVerticaal. Which is wired because I wrote it (prove above) Now after trying to solve it and reading on the internet I guess I know what the problem might be. My guess is he is expecting some class of those in bold (Speler, Vak, Ventilator, Magneet)/** * MouseEvents vanaf hier. */ public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseClicked(MouseEvent e, Magneet mt, Ventilator vr, Speler s) //deze heb ik nodig voor het permanent actief maken van Magneet/Ventilator { x = e.getX();//x-coördinaat van de click y = e.getY();//y-coördinaat van de click //Wanneer zowel x en y coördinaat hetzelfde zijn mag de beweging worden uitgevoerd zoals beschreven in speelbord if (e.getX() == mt.getX() && e.getY() == mt.getY() && s.getX() == e.getX()) { bord.beweegVerticaal();//deze methode staat in speelbord bord view.repaint(); } else if (e.getX() == vr.getX() && e.getY() == vr.getY() && s.getY() == e.getY()) { bord.beweegHorizontaal(); view.repaint(); } }
But I cannot put that class there because when I perform a click there need to be a move... So my guess is I need to change my logic, I need the change the way I am thinking but how, how can I do it?
I've also uploaded my program so far! So if my explanation is wrong and/or a little bit vague you can go and look!
MagnetischDoolhof_theGame.rar download - 2shared
thx in advance!!