Snake mit Bluej

Thommi

Mitglied
Hey,
ich bräuchte eure Hilfe bei einem kleinen Problem mit BlueJ, einem Programm mit dem Schülern der Umgang mit Java beigebracht werden soll

Erstmal ganz am anfang: Ich bin ein blutiger Anfänger und deshalb nicht wundern wenn manche sachen unnötog kompliziert sind ;)

Ich hab jetzt seit fast einem Jahr Informatik in der Schule, und dachte mit,, ich könnte auch mal ein Spiel Programmieren und bin dann eben bei dem Handyklassiker Snake gelandet. Aber jetzt zum Thema.

Ich muss die Schlange ja irgendwie zum "kriechen" bekommen, also dass jedes Segment auf den Platz des vorherigen aufrückt, das erste Segment ist steuerbar. Dazu übernehm ich einfach die Koordinaten und setzte sie in ein array und die Segmente rufen diese dann auf.

Java:
public void bewegeOben(int Zeit)
    {
         
        if(y>0) 
        {
         x = x;
         y = y - 10 * Zeit ;
         q.setzePosition((int)x, (int)y);
         y=b;  
          ort[0]=x;
          ort[1]=b-10;
}

mit der Funktion steuer ich das erste Segment, entsprechende Methoden gibt es eben auch für links, recht und unten.
Die koordinaten des punktes werden jetzt eben im array gespeichert.

Hiermit rufe ich sie auf, eben abhängig das wievielte Segment es ist und speicher dann auch gleich die Positionen.

Java:
 public void Krieche(int n1, int n2, int p)
     {
        q.setzePosition(ort[n1],ort[n2]);
        ort[n1]=ort[p*2];
        ort[n2]=ort[p*2+1];
     }

Wenn ich jetzt die Schlange bewegen will springen erst alle nachfolgenden Segmente zu (0,0) und schließlich auch das erste Segment, ich hab allerdings keine ahnung woran das liegt.
Ich hänge mal meine bisherige Arbeit noch an, vielleicht kann mir jemand helfen.
 

Anhänge

  • PROJEKT EPIC.7z
    143,7 KB · Aufrufe: 128

JavaMeetsBlueJ

Bekanntes Mitglied
Hi, allen Lesern würde es gut tun, wenn du vielleicht mal ein bischen mehr Code posten würdest, damit man auch Zusammenhänge erkennen kann.

Dein Code ist mir nicht ganz schlüssig. Wieso codest du sowas wie
Java:
x=x;
?

MfG
 

Thommi

Mitglied
frag mich nicht :) einfach übersichtlichkeit, wenn ich da schon x und y definier dann schreib ich halt das x noch mal hin :) mit den zusammmenhängen ist es schon ein bisschen schwierig; das ganze ist eigentlich auf nur 3 Klassen aufgebaut, ich kann die ja mal alle posten:

Erst mal die Hauptklasse:

Java:
import java.util.Random;

public class SPIEL implements ITuWas, ITastatur
{   
    private Rechteck Spielfeld;
    private KÖRPER Körper;
    private Taktgeber takt,takt1,takt2,takt3;
    private Taste Pause,Wiederaufnahme,Neustart;
    int a,b,Level,z;
    Bild bild;
    Tastatur t;
    
    public SPIEL()
    {
        Zeichnung.setzeFenstergroesse(1100,800);
        
        Spielfeld = new Rechteck (700,500);
        //bild = new Bild(50,500, "rahmen.jpg");
        Körper = new KÖRPER();
        a=190;
        b=210;
        
        Level= 400;
        
        takt = new Taktgeber();
        takt.setzteZeitZwischenAktionen(Level);
        takt.setzeLink(this);
        takt.setzeID(10);
        
        takt1 = new Taktgeber();
        takt1.setzteZeitZwischenAktionen(Level);
        takt1.setzeLink(this);
        takt1.setzeID(20);
        
        takt2 = new Taktgeber();
        takt2.setzteZeitZwischenAktionen(Level);
        takt2.setzeLink(this);
        takt2.setzeID(30);
        
        takt3 = new Taktgeber();
        takt3.setzteZeitZwischenAktionen(Level);
        takt3.setzeLink(this);
        takt3.setzeID(40);
        
        t= new Tastatur();
        t.setzeLink(this);
        t.meldeAnTaste('w', "up");
        t.meldeAnTaste('a', "left");
        t.meldeAnTaste('s', "down");
        t.meldeAnTaste('d', "right");
        t.meldeAnTaste('+', "lvlup");
        t.meldeAnTaste('-', "lvldown");
        
        StartSchlange();
        z=0;
        
        Pause = new Taste ("Pause", 700, 100, 150,50);
        Pause.setzeLink(this);
        Pause.setzeID(1000);
        
        Neustart = new Taste ("Neustart", 700, 200, 150,50);
        Neustart.setzeLink(this);
        Neustart.setzeID(50);
        
        Wiederaufnahme = new Taste ("Fortfahren", 700, 300, 150,50);
        Wiederaufnahme.setzeLink(this);
        Wiederaufnahme.setzeID(90);
        
        //SchnickSchnack = new Taste ("SchnickSchnack", 700, 100, 150,50);
        //SchnickSchnack.setzeLink(this);
        //SchnickSchnack.setzeID(60);
        
        //SchnickSchnack = new Taste ("SchnickSchnack", 700, 100, 150,50);
        //SchnickSchnack.setzeLink(this);
        //SchnickSchnack.setzeID(70);
        
        //SchnickSchnack = new Taste ("SchnickSchnack", 700, 100, 150,50);
        //SchnickSchnack.setzeLink(this);
        //SchnickSchnack.setzeID(80);
        
        
       
              
    }
    
    public void tastenAktion(String r)
       {
        if(r.equals("up"))
        {
           Up();
        }
        if(r.equals("down"))
        {
            Down();
        }
        if(r.equals("left"))
        {
            Left();
        }
        if(r.equals("right"))
        {
            Right();
        }
        if(r.equals("lvlup"))
        {
            if(Level>100)
            {
                Level=Level-100;
            }
        }
        if(r.equals("lvldown"))
        {
            if(Level<1000)
            {
                Level=Level+100;
            }
        }
       }
    
    public void tuWas(int ID)
    {
        if(ID == 10) 
        {
            ticke();
        }
        else if(ID == 20) 
        {
           ticke1();
        }
        else if(ID == 30)
        {
            ticke2();
        }
        else if(ID == 40)
        {
            ticke3();
        }
        else if(ID == 1000)
        {
            Stoppe();
        }
        else if(ID == 50)
        {
            //Neustart();
        }
        else if(ID == 60)
        {
            //SchnickSchnackMethode();
        }
        else if(ID == 70)
        {
           //SchnickSchnackMethode();
        }
        else if(ID == 80)
        {
            //SchnickSchnackMethode();
        }
        else if(ID == 90)
        {
            //Fortfahren();
        }
    }
    
         private void ticke()
       {
         Körper.bewegeO(1);
         z=1;
       }
       private void ticke1()
       {
         Körper.bewegeU(1);
         z=2;
       }
       private void ticke2()
       {
         Körper.bewegeL(1);
         z=3;
       }
       private void ticke3()
       {
         Körper.bewegeR(1);
         z=4;
       }
    
    public void Up ()
    {
        if(z==1 || z==2 )
       {
       }
        else
       {
            takt1.stop();
            takt2.stop();
            takt3.stop();
            takt.endlos();
       }
    }
    public void Down ()
    {
        if(z==2 || z==1)
       {
       }
        else
      {
            takt.stop();
            takt2.stop();
            takt3.stop();
            takt1.endlos();
       }
    }
    public void Left ()
    {
        
        if(z==3 || z==4)
        {
        }
        else
       {
        takt1.stop();
        takt3.stop();
        takt.stop();
        takt2.endlos();
       }
    }
    
    public void Right ()
    {
       if(z==4 || z==3)
        {
        }
       else
       {takt1.stop();
        takt2.stop();
        takt.stop();
        takt3.endlos();
       }
    }
    
    public void StartSchlange()
    {
      
          for(int i=0; i<5; i++)
         {
             SEGMENT n = new SEGMENT(200-i*10,210,Körper);
             Körper.fuegeSegmentHinzu(n);
        }
    }
    
    public void Wachse ()
    {
        
            SEGMENT n = new SEGMENT(a,b,Körper);
            Körper.fuegeSegmentHinzu(n);
        
     }
    
    public void Stoppe()
    {
            takt.stop();
            takt1.stop();
            takt2.stop();
            takt3.stop();
    }
     
}

Die bezieht sich dann eben auf
Java:
public class KÖRPER
{
    private SEGMENT[] s;
    private int anzahl;
    
    
    public KÖRPER ()
    {
        anzahl = 0;
        s = new SEGMENT[1000];
    
    }
    
    public void fuegeSegmentHinzu (SEGMENT elementNeu)
    {
        if (anzahl < 1000)
        {
         s[anzahl] = elementNeu;
         anzahl = anzahl + 1;
        }
    }
    
    public void bewegeO(int Zeit)
    {
        s[0].bewegeOben(Zeit);
        for(int i=0;i<anzahl-1;i++)
        {
            s[i+1].Krieche(i*2,1+i*2,i+1);
        }
       
    }
    
    public void bewegeU(int Zeit)
    {
        s[0].bewegeUnten(Zeit);
    }
    
    public void bewegeL(int Zeit)
    {
        s[0].bewegeLinks(Zeit);
    }
    
    public void bewegeR(int Zeit)
    {
        s[0].bewegeRechts(Zeit);
    }

und auf
Java:
import java.util.Random;
public class SEGMENT 
{
    private Quadrat q;
    private int x;
    private int y;
    private int[] ort;
    //anzahl der koordinaten
    int b;

      
    
   
    public SEGMENT(int xStart, int yStart, KÖRPER r)
    {
        x= xStart;
        y= yStart;
        q=new Quadrat(x, y, 10);
        ort=new int[10000000];
        b=0;
      
    }
    
    public void bewegeOben(int Zeit)
    {
         
        if(y>0) 
        {
         x = x;
         y = y - 10 * Zeit ;
         q.setzePosition((int)x, (int)y);
         y=b;  
          ort[0]=x;
          ort[1]=b-10;
         
        }
    }   
    public void bewegeUnten(int Zeit)
    {
         if(x<600 && y<400 && x>-1 && y>-1) 
        {
         x = x ;
         y = y +10 * Zeit ;
         q.setzePosition((int)x, (int)y);
         // ort[0]=x;
         //ort[1]=y-10;
       }
      
    }   
    public void bewegeLinks(int Zeit)
    {
         if(x<600 && y<400 && x>-1 && y>-1) 
       {
        x = x - 10 * Zeit;
        y = y;
        q.setzePosition((int)x, (int)y);
        //ort[0]=x+10;
        // ort[1]=y;
       }
    }   
    public void bewegeRechts(int Zeit)
    {
        if(x<600 && y<400 && x>-1 && y>-1) 
       {
        x = x + 10 * Zeit;
        y = y;
        q.setzePosition((int)x, (int)y);
        //ort[0]=x-10;
        // ort[1]=y;
       }
    }  
    
    public void Krieche(int n1, int n2, int p)
     {
        q.setzePosition(ort[n1],ort[n2]);
        ort[n1]=ort[p*2];
        ort[n2]=ort[p*2+1];
     }
    
     }

Falls ein paar ungereimtheiten drin sind, liegt das unteranderem daran dass ich einfach noch nicht fertig bin und jetzt erst einamal die bewegung "zum laufen" bringen will

Im voraus danke an alle die mir helfen
 

JavaMeetsBlueJ

Bekanntes Mitglied
Also ich habe jetzt nicht she rviel davon gelesen, aber was dir später und auch jetzt schon viel schreibarbeit erspart und den Code lesbarer macht ist der verkettet Konstruktoraufruf:

statt
Java:
        takt1 = new Taktgeber();
        takt1.setzteZeitZwischenAktionen(Level);
        takt1.setzeLink(this);
        takt1.setzeID(20);
        
        takt2 = new Taktgeber();
        takt2.setzteZeitZwischenAktionen(Level);
        takt2.setzeLink(this);
        takt2.setzeID(30);
        
        takt3 = new Taktgeber();
        takt3.setzteZeitZwischenAktionen(Level);
        takt3.setzeLink(this);
        takt3.setzeID(40);

Gestalte den Konstruktor folgend:
Einen Parameterlosen Konstruktor

Java:
public Taktgeber()
{
  setzteZeitZwischenAktionen(Level);
  setzeLink(this);


}

Und einen mit Parameter:
Java:
public Taktgeber( int id)
{
 this();
 setzeID(id);

}

Das this() ruft denjenigen Konstruktor auf, der dieselbe Paramneterliste besitzt, in dem Fall also den ohne Argumente.

Dann musst du nur folgende Aufrufe machen:
Java:
        takt1 = new Taktgeber(20);

        takt2 = new Taktgeber(30);

        takt3 = new Taktgeber(40);


Auch wenn ich dir deine Frage nicht beantworten konnte, hoffe ich mal, dass dir das ein klein wenig hilft;)

MfG
 
Zuletzt bearbeitet:

Thommi

Mitglied
Hat schon ein wenig geholfen, danke :) habs ein bisschen übersichtlicher hinbekommen, (wirklich nur ein bisschen aber immerhin)
Aber wie gesagt ist das leider nicht das hauptproblem :) aber auf jedenfall trotzdem danke
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Snake-BlueJ Bewegung Java Basics - Anfänger-Themen 7
Z SNAKE Schlange beim Aufheben von Essen verlängern Java Basics - Anfänger-Themen 4
AmsananKING Methoden Moving Snake Forward Java Basics - Anfänger-Themen 0
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
B "Snake"-Game verbuggt Java Basics - Anfänger-Themen 0
K Diverse Bugs in einem Snake Spiel Java Basics - Anfänger-Themen 4
J Snake Movement Java Basics - Anfänger-Themen 7
W Snake pausieren Java Basics - Anfänger-Themen 4
C Java Nullpointer Exception in 2D-Spiel Snake Java Basics - Anfänger-Themen 8
N Snake Java Basics - Anfänger-Themen 2
S Snake Punktezähler funktioniert nicht Java Basics - Anfänger-Themen 9
C Minispiel Snake Java Basics - Anfänger-Themen 3
A Snake programmieren? Java Basics - Anfänger-Themen 31
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
W Pfeilenformen im BlueJ Java Basics - Anfänger-Themen 9
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
aero043 Hilfe bei BlueJ Hausübung Java Basics - Anfänger-Themen 27
M BlueJ Objekt in Objektliste Java Basics - Anfänger-Themen 2
H BlueJ: was genau ist hier der Fehler? Java Basics - Anfänger-Themen 14
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
Vernon.098 Java (BlueJ) Mensch ärgere dich nicht Programmien Java Basics - Anfänger-Themen 6
momo96 bluej Java Basics - Anfänger-Themen 2
K BlueJ Ball an Rand Reflektieren Java Basics - Anfänger-Themen 2
YAZZ BlueJ Bewegung einer Figur im Kreis Java Basics - Anfänger-Themen 4
Delonyg Bluej Supermarkt Java Basics - Anfänger-Themen 2
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
N BlueJ Implementation Analoguhr Java Basics - Anfänger-Themen 33
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
C Projekt öffnen BlueJ Java Basics - Anfänger-Themen 1
M BlueJ - Array als Paramter einer Methode eingeben Java Basics - Anfänger-Themen 12
K Testen in BlueJ Java Basics - Anfänger-Themen 2
C BlueJ Zahlenschloss programmieren Java Basics - Anfänger-Themen 5
1 BlueJ Fehler ? Java Basics - Anfänger-Themen 7
L Bluej Error: Cannot find Symbol Java Basics - Anfänger-Themen 13
H Methoden Bluej Anfänger Java Basics - Anfänger-Themen 13
D BlueJ Java: Strings voneinander trennen Java Basics - Anfänger-Themen 11
V ToString-Methode mit JUnit testen(BlueJ) Java Basics - Anfänger-Themen 10
G Variablen Variable nimmt keinen Wert an (BlueJ) Java Basics - Anfänger-Themen 4
I BlueJ importdatei fehlt Java Basics - Anfänger-Themen 4
D Java BlueJ Programm wiederholen? Java Basics - Anfänger-Themen 6
J Uniprojekt (BlueJ) Java Basics - Anfänger-Themen 17
H Klassen Hilfe bei BlueJ, Supermario Java Basics - Anfänger-Themen 5
W Testmethoden in BlueJ Java Basics - Anfänger-Themen 12
F Java BlueJ Dinge verschwinden lassen Java Basics - Anfänger-Themen 2
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
E Hilfe bei Lambda-Ausdrücken in BlueJ Java Basics - Anfänger-Themen 1
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
K BlueJ Terminverwaltung erstellen Java Basics - Anfänger-Themen 1
J BlueJ - kompilieren - und wie weit kommt man mit BlueJ? Java Basics - Anfänger-Themen 4
J Thread erstellen (BlueJ Projekt) Java Basics - Anfänger-Themen 3
I Erste Schritte BlueJ Fehler Java Basics - Anfänger-Themen 8
C Manuelle Parametereingabe in BlueJ Java Basics - Anfänger-Themen 5
D Wer wird Millionär ? BlueJ Java Java Basics - Anfänger-Themen 2
P BlueJ Sieb des Eratothenes Java Basics - Anfänger-Themen 4
M Ausgeben eines 2D Arrays mit int UND String werten - BLUEJ! Java Basics - Anfänger-Themen 4
G BlueJ Stacks Bahnhof Java Basics - Anfänger-Themen 2
J BlueJ öffnet package falsch Java Basics - Anfänger-Themen 2
J BlueJ Liste Würfel Projekt Java Basics - Anfänger-Themen 2
P Java mit BlueJ - Hilfe - Gegenstände Java Basics - Anfänger-Themen 10
H BlueJ Java Basics - Anfänger-Themen 3
L Queue programmieren via BlueJ Java Basics - Anfänger-Themen 5
R Nach Ubuntu-Update: Konsole spuckt bei neu Kompilierten Programmen Fehler aus (BlueJ)(Ubuntu12.04) Java Basics - Anfänger-Themen 11
X Erste Schritte Java BlueJ Programmieren Java Basics - Anfänger-Themen 36
Tally Methoden BlueJ - Datum als Kalendertag int - tagImJahr Java Basics - Anfänger-Themen 6
J BlueJ canvas Buttons adden? Java Basics - Anfänger-Themen 2
J BlueJ Tic Tac Toe öffnen? Java Basics - Anfänger-Themen 6
T Erste Schritte BlueJ kapitel 4 frage Schleifen ? Java Basics - Anfänger-Themen 4
V BlueJ: Funktionierende .jar Datei erstellen Java Basics - Anfänger-Themen 2
G Methoden BlueJ SuM Methode wird nicht gefunden Java Basics - Anfänger-Themen 9
S Pakete in BlueJ Java Basics - Anfänger-Themen 5
S Erste Schritte Bluej Automatisches Einfügen von Objekten Java Basics - Anfänger-Themen 4
R BlueJ - Hilfe bei for-Struktur Java Basics - Anfänger-Themen 11
S Erste Schritte BlueJ-Aufgabe: Programmcode / Brauche dringend Hilfe !!! Java Basics - Anfänger-Themen 37
B Verständnisfrage:Beispielprogramm BlueJ Java Basics - Anfänger-Themen 3
P Java BlueJ Schatzsuche Java Basics - Anfänger-Themen 2
H Erste Schritte von BlueJ zu Eclipse Java Basics - Anfänger-Themen 10
I Rc4 Verschlüsselung in BlueJ Java Basics - Anfänger-Themen 18
H Buch: Java lernen mit BlueJ Modulo-Operator Java Basics - Anfänger-Themen 16
X Methoden Java Dublikatsuche Hilfe(BlueJ) Java Basics - Anfänger-Themen 9
X Interpreter-Fehler "java.lang.NullPionterException: null" bei BlueJ Java Basics - Anfänger-Themen 10
C Problem bei BlueJ - Pfeil bleibt nicht in der Dartscheibe stecken Java Basics - Anfänger-Themen 4
M mit BlueJ einen Ticketautomaten programmieren Java Basics - Anfänger-Themen 9
Binary.Coder Bluej ähnlicher Inspektor gesucht Java Basics - Anfänger-Themen 3
T problem mit der maus in BlueJ Java Basics - Anfänger-Themen 14
J BlueJ! 2 kleine Fragen zum Spiel. Java Basics - Anfänger-Themen 3
R BlueJ Pacman Java Basics - Anfänger-Themen 17
B BlueJ Turtle nicht gefunden Java Basics - Anfänger-Themen 6
J start(); bei bluej Java Basics - Anfänger-Themen 3
E BlueJ Projekt öffnen Java Basics - Anfänger-Themen 15
Jats Probleme mit BlueJ und Bankkonto-Methoden Java Basics - Anfänger-Themen 7
A BlueJ BMI berechnen Java Basics - Anfänger-Themen 9
D BlueJ Anzeigeproblem Java Basics - Anfänger-Themen 5
L String Variable zurückgeben mit BlueJ Java Basics - Anfänger-Themen 12
J BlueJ Zeichen, Dart-Pfeil Java Basics - Anfänger-Themen 59
B Paket in BlueJ einfügen Java Basics - Anfänger-Themen 5
C BlueJ zum Laufen bekommen Java Basics - Anfänger-Themen 14
M BlueJ Problem Java Basics - Anfänger-Themen 6
P BlueJ hängt sich beim compilen auf Java Basics - Anfänger-Themen 9
P BlueJ Fehlermeldung - Illegal Start of Type Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben