Forum: java problem

Forum huvudsida -> Programmering -> java problem

Sidor: 1

Till botten

Dread 14:10 - 4:e September 2007 | Post #1
Medlem
Inlägg: 135


Skicka PM
jag har en klass, Turtle.
  1. import se.lth.cs.ptdc.window.SimpleWindow;
  2.  
  3. public class Turtle {
  4. private double x;
  5. private double y;
  6. private double radians;
  7. private double dir = 90;
  8. private boolean drawLine = false;
  9. private SimpleWindow w;
  10. //private final double degree = 360/(2*Math.PI); fel
  11. /** Skapar en sköldpadda som ritar i ritfönstret w. Från början befinner
  12. sig sköldpaddan i punkten x,y med pennan lyft och huvudet pekande
  13. rakt uppåt i fönstret (i negativ y-riktning) */
  14. public Turtle(SimpleWindow w, double x, double y) {
  15. this.x = x;
  16. this.y = y;
  17. this.w = w;
  18. w.moveTo((int)x, (int)y);
  19. }
  20.  
  21. /** Sänker pennan */
  22. public void penDown() {
  23. drawLine = true;
  24. }
  25.  
  26. /** Lyfter pennan */
  27. public void penUp() {
  28. drawLine = false;
  29. }
  30.  
  31. /** Går rakt framåt n pixlar i den riktning som huvudet pekar */
  32. public void forward(int n) {
  33.  
  34. radians = Math.toRadians(dir);// * degree;
  35. x += (int)Math.round( n * Math.cos(radians));
  36. y -= (int)Math.round(n * Math.sin(radians));
  37. if (drawLine){
  38. w.lineTo((int)(x),(int)( y));
  39. }else{
  40. w.moveTo((int)(x),(int)(y));
  41. }
  42. }
  43.  
  44. /** Vrider beta grader åt vänster runt pennan */
  45. public void left(int beta) {
  46. dir+=beta;
  47. }
  48.  
  49. /** Går till punkten newX,newY utan att rita. Pennans läge och
  50. huvudets riktning påverkas inte */
  51. public void jumpTo(int newX, int newY) {
  52. x = newX;
  53. y = newY;
  54. }
  55.  
  56. /** ...terställer huvudriktningen till den ursprungliga */
  57. public void turnNorth() {
  58. dir = 90;
  59. }
  60.  
  61. /** Tar reda på x-koordinaten för sköldpaddans aktuella position */
  62. public double getX() {
  63. return x;
  64. }
  65.  
  66. /** Tar reda på y-koordinaten för sköldpaddans aktuella position */
  67. public double getY() {
  68. return y;
  69. }
  70.  
  71. /** Tar reda på sköldpaddans riktning, i grader från positiv x-led */
  72. public int getDirection() {
  73. return (int)dir;
  74. }
  75. }


och sen ett program som utnyttjar den;
  1. import java.util.Random;
  2.  
  3. import se.lth.cs.ptdc.window.SimpleWindow;
  4.  
  5. public class doubleTurtleCrash {
  6. public static void main(String[] args) {
  7. Random rand = new Random();
  8. SimpleWindow w = new SimpleWindow(600, 600, "doubleTurtkeCrash");
  9. Turtle t = new Turtle(w, 350, 350);
  10. Turtle t2 = new Turtle(w,250,250);
  11. t.penDown();
  12. t2.penDown();
  13. while(Math.sqrt(Math.pow((t.getX()-t2.getX()),2)+Math.pow((t.getY()-t2.getY()),2))>50){
  14. t.forward(1+rand.nextInt(10));
  15. t2.forward(1+rand.nextInt(10));
  16. t.left(180-rand.nextInt(361));
  17. t2.left(180-rand.nextInt(361));
  18. SimpleWindow.delay(100);
  19.  
  20. }
  21. }
  22. }


meningen är att sköldpaddorna ska köra hur som helst över hela fönstret till dess att dem 50 pixlar ifrån varandra. Men jag tror det blir någon form av krock någonstans, kan inte hitta det tyvärr, för ritar jag en sköldpadda så funkar den, skapar jag två så funkar ingetdera(!?). Hittar inget som kan krocka, men vet att det ska gå då en klasskamrat gjorde det, dock med annan kod, för vi hade till uppgift att fylla i det mesta i turtleklassen, variabler etc... vilket inte tycktes vara alldeles för meckigt, men blev dess värre det ett tag.

just det ja, glömde skriva vad som händer. blir mer eller mindre streck som vridersig, med växande längd.

tacksam för svar.

-------------------------
c++



FunkyChicken 15:48 - 4:e September 2007 | Post #2
Nyhetsredaktör
Inlägg: 800


Skicka PM
Du kanske ska ha en w.moveTo i din forward-funktion? Nu vet jag inte hur SimpleWindow-klassen ser ut, men det verkar ju som att du flyttar pennan till den andra sköldpaddans position när den initieras, och sen aldrig flyttar tillbaka den när det är ettans tur att rita.




Dread 17:08 - 4:e September 2007 | Post #3
Medlem
Inlägg: 135


Skicka PM
http://www.cs.lth.se/EDA016/javadoc/cs_eda016_doc/
är dokumentationens hemsida om det underlättar, kunde ju ha lagt in den i första inlägget egentligen.

kan visa hur det ska se ut:


och hur det blir med min kod med 2 sköldpaddor:


jag har svårt att se hur den skulle missa att hoppa tillbaka till "t" från "t2", men allt är väl möjligt antar jag. Hur som helst som det är nu är det bara fel. t och t2 funkar var för sig (kommenterar bort dem), men tillsammans blir de fel...

-------------------------
c++



FunkyChicken 21:33 - 4:e September 2007 | Post #4
Nyhetsredaktör
Inlägg: 800


Skicka PM
Lägg in detta först i forward-funktionen:

w.moveTo((int)(x),(int)(y));




Dread 21:54 - 4:e September 2007 | Post #5
Medlem
Inlägg: 135


Skicka PM
ok, nu förstår jag hur du menade i första inlägget!, tack så jätte mkt, funkade alldeles utmärkt.

-------------------------
c++



Sidor: 1

Forum huvudsida -> Programmering -> java problem
Atom feed

Du får inte posta i den här tråden | Till toppen