Netbeans /Gamegrid hilfe!?

AquiLa93

Mitglied
Hallo zusammen,
programmiere momentan das Spiel Tank1990 für die Schule.

Battle City (AKA Tank 1990) - NES Gameplay #1 - YouTube

Doch leider bin ich mom an einem Punkt, wo ich gar nicht mehr weiter weiß...

Also momentan habe ich ein Spielfeld, worin sich Bausteine befinden, die ich mit meinem steuerbaren Tank abschießen kann. Zudem habe ich Items, welche meine Reichweite(3Felder weit) erweitern können. Zudem habe ich noch 3 weitere Tanks, welche LEIDER nur umher irren.

Nur sollen diese eben auch schießen können (mit einem gewissen Zeittankt!?) und sobald sie mich sehen mich abschießen, ansonsten ist das Ziel von ihnen den Adler zu vernichten, welcher sich unten in der Maze befindet.

Nur habe ich keine Ahnung, wie man "dem Computer" Eigenschaften verleihen soll, habe bisher auch keine beispielcodes bei Gamegrid gefunden...:(

Daher hoffe ich des ihr mir vllt. ein klein wenig beim Programmieren helfen könntet...

Liebe Grüße
AquiLa
 

timbeau

Gesperrter Benutzer
Also grundsätzlich kannst du dir ein wenig über Spiele-KI anlesen. Letztendlich führt der Computer Berechnungen durch und löst Aktionen aus. (Schiesse, Fahre links, Fahre rechts etc)

Diese Berechnungen können z.B. sowas sein, dass sie ihre Fahrtrichtung auf Gegner scannen und wenn einer gesehen wird, wird geschossen.
 

AquiLa93

Mitglied
hmm so wirklich einfach klingt das nicht...

Vorallem habe ich auch keine Beispielcodes zum Schießen finden können bzw. überhaupt KI-Quellcodes die ich mit Java programmieren könnte...
 

timbeau

Gesperrter Benutzer
Fang doch mal an, mit jedem deiner Panzerobjekte von seinem Standpunkt aus, die maximal 4 Wege zu scannen.

Wichtig ist, dass du testest und von jedem weißt, wieviel er fahren kann etc.

Du hast ja anscheinend schon das schiessen implementiert laut deinem ersten Post. Jetzt sag dem Computerspieler, dass er alle 2 Sekunden z.B. feuert, oder sich bewegt oder sowas.
 

Gossi

Bekanntes Mitglied
hmm so wirklich einfach klingt das nicht...

Naja, in Pseudocode würde das so aussehen:

Java:
private int range = 10; //Sind Pixel

public boolean targetInRange(Point p) {
     if(player.getY() < p.getY() + range && player.getY() > p.getY() - range) {
          //Hierbei befindet sich der Player auf der Y-Achse auf schussreichweite, aber vorher muss noch die
          //X-Achse überprüft werden:
          if(player.getX() < p.getX() + range && player.getX() > p.getX() - range) {
               //Wenn du nun hierhin kommst, dann kannst du der KI sagen, sie soll schießen.
          } else {
               //Wenn der Panzer erkennt, dass auf der Y-Achse der Player in Reichweite ist, kannst
               //du sowas machen wie:
               if(player.getX < p.getX() {
                    //Panzer nach links bewegen
               } else {
                    //Panzer nach rechts bewegen
               }
          }
     } else {
          //Irgendwo langfahren
     }
}
 

AquiLa93

Mitglied
danke Gossi,
werde es mal so versuchen... =)

Nein, da liegt ein missverständnis dann vor, nur "ich" kann schießen, die anderen Tanks noch nicht, und das ist ja auch ein Problem von mir, welches ich nicht beheben kann...
 

AquiLa93

Mitglied
so:

Code:
case KeyEvent.VK_SPACE:
        Bomb bomb = new Bomb(maxSteps); 
        bomb.setDirection(getDirection());
        gameGrid.addActor(bomb, getLocation());
            switch((int)getDirection())
       {
        case 0:bomb.setDirection(Location.SOUTH);break; 
        case 90:bomb.setDirection(Location.WEST);break;
        case 180:bomb.setDirection(Location.NORTH);break;
        case 270:bomb.setDirection(Location.EAST);break;
       }
        //nbShots++;
 

vimar

Bekanntes Mitglied
typisch Lehrer, erklärt den schülern kein bissl java sondern sagt: hier gamegrid, viel spass und die schüler wissen nichtmal was GUI bedeutet oder wie man eine variable inkrementiert. dann wird massig copypaste gemacht und daher ist es auch dann völlig unklar wie der andere panzer schiesst (dein panzer schiesst und du weisst nicht mal warum).

absolut nicht ok was dein lehrer da abzieht.
 

vimar

Bekanntes Mitglied
grundsätzlich schiessen die anderen panzer nicht, die drücken ja sozusagen auch keine leertaste ^-^

irgendwie muss man doch checken in welcher zelle sich dein panzer befindet, dann die zellen wo sich die anderen panzer befinden. die panzer haben scheinbar die aufgabe sich nach unten durchzuballern zu irgendeinem ziel und wenn die dich(deinen panzer) sehen dann schiessen die auch auf dich.

also würd ich so ne art ki schreiben von wegen: wenn dein panzer und der gegner panzer auf den selben X oder Y zellen wert haben und kein objekt(wand,mauer) dazwischen steht soll der new bomb machen in deine richtung. wenn das nicht der fall ist soll der panzer immer nach süden schiessen falls da ne mauer is und dann weiterfahren nach unten. und wieder ne mauer kaputtschiessen usw. jedenfalls kann der gegnerpanzer halt auch new bomb machen. das ging in visual basic ziemlich einfach, da hat man einfach nen timer auf die form gezogen und alles reingeschrieben damit der panzer ja auch nicht dauerfeuer macht. ich denke in java gehts mit threads. o0
 

Gossi

Bekanntes Mitglied

Mach daraus lieber sowas:

Java:
public whatEver method() {
        case KeyEvent.VK_SPACE:
                shoot((int)getDirektion, maxSteps);
}

public void shoot(int direktion, int maxSteps) {
        Bomb bomb = new Bomb(maxSteps); 
        bomb.setDirection(getDirection());
        gameGrid.addActor(bomb, getLocation());
            switch((int)getDirection())
       {
        case 0:bomb.setDirection(Location.SOUTH);break; 
        case 90:bomb.setDirection(Location.WEST);break;
        case 180:bomb.setDirection(Location.NORTH);break;
        case 270:bomb.setDirection(Location.EAST);break;
       }
}
        //nbShots++;
Dann kannst du bei den Gegnern die
Code:
shoot();
-Methode aufrufen
 

AquiLa93

Mitglied
habe das so auch übernommen, und so verändert, dass es in meinen Quellcode reinpasst...

Nur schießen die nun ab einer gewissen Reichweite ununterbrochen und bewegen sich nicht mehr oder laufen einfach gar nicht mehr weiter. und wenn ich die reichweite runtersetze, dann machen sie einfach gar nichts bzw. laufen eben normal weiter(schießen nicht), auch wenn ich neben ihnen steh. Zudem kann ich nun iwi auch durch meine Maze laufen, was früher nicht so war...

[JAVA=42]public void keyRepeated(int KeyCode)
{
Location next = null;
switch (KeyCode)
{
case KeyEvent.VK_UP:
setDirection(270);
next = getLocation().getNeighbourLocation(Location.NORTH);
break;
case KeyEvent.VK_RIGHT:
setDirection(0);
next = getLocation().getNeighbourLocation(Location.EAST);

break;
case KeyEvent.VK_LEFT:
setDirection(180);
next = getLocation().getNeighbourLocation(Location.WEST);

break;
case KeyEvent.VK_DOWN:
setDirection(90);
next = getLocation().getNeighbourLocation(Location.SOUTH);

break;
case KeyEvent.VK_SPACE:
shoot((int)getDirection(), maxSteps);
break;
}
move();
}

public void shoot(int direction, int maxSteps)
{
Bomb bomb = new Bomb(maxSteps);
bomb.setDirection(getDirection());
gameGrid.addActor(bomb, getLocation());
switch(direction)
{
case 90:bomb.setDirection(Location.SOUTH);break;
case 180:bomb.setDirection(Location.WEST);break;
case 270:bomb.setDirection(Location.NORTH);break;
case 0:bomb.setDirection(Location.EAST);break;
}

//nbShots++;
}
public void act()
{
tryToEat();
}

private boolean canMove(Location location)
{
Color c = getBackground().getColor(location);
if (c.equals(Color.black))
return false;
if (c.equals(Color.blue))
return false;
else
return true;
}
[/code]
das ist der Quellcode von meinem tank...
und nun im folgenden die badtanks, die rumspinnen:

Java:
  private boolean canMove(Location location)
  {
    Color c = getBackground().getColor(location);
    if (c.equals(Color.black))
      return false;
    if (c.equals(Color.blue))
        return false;
    else
      return true;
  }
   
 
public void targetInRange(Point p) 
{
    if(Tank1.getY() < p.getY() + range && Tank1.getY() > p.getY() - range) 
    {
          if(Tank1.getX() < p.getX() + range && Tank1.getX() > p.getX() - range) 
          {
               shoot((int)getDirection(), range);//Wenn du nun hierhin kommst, dann kannst du der KI sagen, sie soll schießen.
          } else 
            {
               //Wenn der Panzer erkennt, dass auf der Y-Achse der Player in Reichweite ist, kannst
               //du sowas machen wie:
               if(Tank1.getX() < p.getX()) 
               {
                    //Panzer nach links bewegen
               } 
               else 
               {
                    //Panzer nach rechts bewegen
               }
            }
     } 
    else 
     {
          moveS();
     }
}


 public void shoot(int direction, int maxSteps) 
        {
        Bomb bomb = new Bomb(maxSteps); 
        bomb.setDirection(getDirection());
        gameGrid.addActor(bomb, getLocation());
        switch(direction)
       {
        case 0:bomb.setDirection(Location.SOUTH);break; 
        case 90:bomb.setDirection(Location.WEST);break;
        case 180:bomb.setDirection(Location.NORTH);break;
        case 270:bomb.setDirection(Location.EAST);break;
       }
}
}

über weitere Lösungsvorschläge wäre ich sehr dankbar...
 

Gossi

Bekanntes Mitglied
Wenn ich dir noch einen Tipp geben darf, mach eine Klasse Tank

Java:
public class Tank {
        
        //Methoden wie bewegen etc. und:

        public void shoot(int direction, int maxSteps) 
                {
                Bomb bomb = new Bomb(maxSteps); 
                bomb.setDirection(getDirection());
                gameGrid.addActor(bomb, getLocation());
                switch(direction)
               {
                        case 0:bomb.setDirection(Location.SOUTH);break; 
                        case 90:bomb.setDirection(Location.WEST);break;
                        case 180:bomb.setDirection(Location.NORTH);break;
                        case 270:bomb.setDirection(Location.EAST);break;
               }
        }

}

Und lass deinen Panzer und die BadTanks davon erben:

Java:
public class BadTank extends Tank {

        //Hier die Methoden an deine BadTanks anpassen

}

Dann musst du shoot nur einmal schreiebn und kannst sie in deinen Klassen benutzen, wäre dann halt auch OO konform.
 

AquiLa93

Mitglied
[JAVA=1]public void Ki(Location p)
{
Location ap = p;
Location TankLocation = Tank1.getLocation();
Location.CompassDirection compassDir = ap.getCompassDirectionTo(TankLocation);
Location ziel = getLocation().getNeighbourLocation(compassDir);
System.out.println(ziel);
Color c = getBackground().getColor(ziel);
if(c.equals(Color.black))
{
shoot((int)getDirection(),3);
System.out.println("boom");
}

ap = getLocation().getNeighbourLocation(Location.WEST);
if (Tank1.getX() < p.getX() && canMove(ap)== true)
{
Location next = getLocation().getNeighbourLocation(Location.WEST);
setLocation(next);
}
ap = getLocation().getNeighbourLocation(Location.EAST);
if (Tank1.getX() > p.getX() && canMove(ap)== true)
{
Location next = getLocation().getNeighbourLocation(Location.EAST);
setLocation(next);
}
ap = getLocation().getNeighbourLocation(Location.SOUTH);
if (Tank1.getY() > p.getY() && canMove(ap)== true)
{
Location next = getLocation().getNeighbourLocation(Location.SOUTH);
setLocation(next);
}
ap = getLocation().getNeighbourLocation(Location.NORTH);
if (Tank1.getY() < p.getY() && canMove(ap)== true)
{
Location next = getLocation().getNeighbourLocation(Location.NORTH);
setLocation(next);
}



}


public void shoot(int direction, int maxSteps)
{
Bomb bomb = new Bomb(maxSteps);
bomb.setDirection(getDirection());
gameGrid.addActor(bomb, getLocation());
switch(direction)
{
case 0:bomb.setDirection(Location.SOUTH);break;
case 90:bomb.setDirection(Location.WEST);break;
case 180:bomb.setDirection(Location.NORTH);break;
case 270:bomb.setDirection(Location.EAST);break;
}
}
[/code]


habe das Problem nun so gelöst, nur schießen sie sich auch gegenseitig ab auf der Jagt nach mir und befinden sich größtensteils aufeinander weil sie nur mich jagen, und den Adler gar nicht betrachten.

zum Schießen: ich müsste doch eigentlich 2 unterschiedliche Bombs schreiben, und die Bombs von den Badtanks sollen nur den Mauern ,dem adler und mir was tun...!?(nur wie kann man sowas einschränken)


und probier gerade bisschen was mit Levels aus...

:bahnhof:
 

Gossi

Bekanntes Mitglied
Nunja, die einfachste Lösung dafür wäre ertsmal eine Prüfung ob in der Schussrichtung in Range und VOR deinem Panzer ein BadTank ist, is dies der Fall, shoot nicht aufrufen...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Netbeans Anwendungsfilename Java Basics - Anfänger-Themen 1
Juelin Netbeans mit JavaFX, FXML und Scenebuilder Java Basics - Anfänger-Themen 11
Juelin Netbeans und javafx Java Basics - Anfänger-Themen 6
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
I GUI über Eclipse oder NetBeans Java Basics - Anfänger-Themen 23
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
K Netbeans Deployment - lib in einziges jar integrieren Java Basics - Anfänger-Themen 2
M Erste Schritte NetBeans Fehlermeldung Java Basics - Anfänger-Themen 2
MiMa Klassen in Projekte wiederverwenden ?? (Netbeans IDE) Java Basics - Anfänger-Themen 8
Bluedaishi Netbeans Problem Java Basics - Anfänger-Themen 12
J Projekt nicht editierbar modifizieren (NetBeans 8) Java Basics - Anfänger-Themen 10
T Netbeans und Eclipse Probiere programmiere probiere Java Basics - Anfänger-Themen 2
M Netbeans Projekt lauffähig abspeichern Java Basics - Anfänger-Themen 3
M In Netbeans Programm so abspeichern dass es funktioniert Java Basics - Anfänger-Themen 8
W Fehler in der Entwicklungsumgebung NetBeans Java Basics - Anfänger-Themen 14
C Erste Schritte (Netbeans) no main classes found Java Basics - Anfänger-Themen 5
K Erste Schritte Netbeans Programm läuft nicht Java Basics - Anfänger-Themen 23
J Libraries in Netbeans Java Basics - Anfänger-Themen 5
G Java mit NetBeans Java Basics - Anfänger-Themen 5
B Netbeans Java Version 8.0.2 und Yosemite Java Basics - Anfänger-Themen 1
S Konsole Lanterna in NetBeans einbinden Java Basics - Anfänger-Themen 5
S Template Choosing "Primeface" in Netbeans 8.0.2 Java Basics - Anfänger-Themen 0
F Text anhand bestimmter Trennzeichen in Textteile trennen (netbeans) Java Basics - Anfänger-Themen 7
Lord.Djerun (Netbeans) Bei TimeUnit.Seconds,Sleep() hängt sich das komplette Programm auf.. Java Basics - Anfänger-Themen 8
Lord.Djerun (Taschenrechner Netbeans) Komma nur einmal schreiben & 0 ersetzen Java Basics - Anfänger-Themen 1
P Problem mit Netbeans Java Basics - Anfänger-Themen 8
T Java Netbeans Grobrasterfilter Java Basics - Anfänger-Themen 0
K Seltsames Ergebnis in Netbeans bei einfacher Multiplikation Java Basics - Anfänger-Themen 5
F APP außerhalb von Netbeans starten Java Basics - Anfänger-Themen 2
D netbeans 7.3 fxapplication Java Basics - Anfänger-Themen 2
-horn- While Ausgabe Netbeans Java Basics - Anfänger-Themen 3
T NetBeans - Int in Textfield Java Basics - Anfänger-Themen 11
L NetBeans Applet in html Java Basics - Anfänger-Themen 4
H [JAVA] NetBeans GUI Builder - Events Java Basics - Anfänger-Themen 10
M NetBeans Code Java Basics - Anfänger-Themen 12
T Classpath Klassen einbinden netbeans Java Basics - Anfänger-Themen 5
M Netbeans streicht Methodenbezeichner durch Java Basics - Anfänger-Themen 2
S ButtonKlick mit JFrame (Netbeans) fragen.. Java Basics - Anfänger-Themen 8
T jTable - netbeans Java Basics - Anfänger-Themen 2
C jTable Netbeans Java Basics - Anfänger-Themen 3
M Netbeans ausführbare Jar erzeugen Java Basics - Anfänger-Themen 4
P Netbeans Platform - JLabel und JPanel setLocation Problem Java Basics - Anfänger-Themen 2
H NEtBeans: Fehler: XXX has private access... Java Basics - Anfänger-Themen 2
M In Netbeans kein Problem, im Terminal schon Java Basics - Anfänger-Themen 3
P Java Datei ohne Netbeans ausführen Java Basics - Anfänger-Themen 7
G NetBeans Contains files with errors Java Basics - Anfänger-Themen 14
F NetBeans Clear and Build löscht Dateien? Java Basics - Anfänger-Themen 5
M Netbeans Listener - Anonymous, inner class, main class? Java Basics - Anfänger-Themen 4
I Netbeans - jTabbedPane Hintergrundfarbe ändern Java Basics - Anfänger-Themen 13
J Argumenten eingabe Netbeans Java Basics - Anfänger-Themen 5
R Netbeans hängt sich beim profilen auf Java Basics - Anfänger-Themen 4
O Build in Netbeans Java Basics - Anfänger-Themen 12
U Input/Output FileNotFoundException in Netbeans, in Eclipse nicht Java Basics - Anfänger-Themen 5
F Probleme nach dem Wechsel von Eclipse zu NetBeans Java Basics - Anfänger-Themen 15
S Erste Schritte HelloWorld in NetBeans Java Basics - Anfänger-Themen 8
B assert befehl in netbeans Java Basics - Anfänger-Themen 3
D Libarie und Javadoc in Netbeans einbinden? Java Basics - Anfänger-Themen 6
B Netbeans SQL Stmt Escapen Java Java Basics - Anfänger-Themen 9
MisterSeven Netbeans - Dropdown Menü erstellen? Java Basics - Anfänger-Themen 4
J Netbeans + JApplet-Form Java Basics - Anfänger-Themen 5
E Netbeans, "class does not have a main method" Java Basics - Anfänger-Themen 8
D Selbstprogrammierte Datein in Netbeans nutzen? Java Basics - Anfänger-Themen 2
J NetBeans-Projekt zu Datei? Java Basics - Anfänger-Themen 2
Hindi93 Netbeans Datei exportieren Java Basics - Anfänger-Themen 7
N NetBeans Projekt im Terminal starten Java Basics - Anfänger-Themen 2
C Netbeans will Plugin mangelns JDK nicht installieren ? Java Basics - Anfänger-Themen 2
N netbeans schaltfläche mit code belegen ? Java Basics - Anfänger-Themen 7
T Netbeans: Import von Externen Packet Java Basics - Anfänger-Themen 5
S Netbeans instalieren Java Basics - Anfänger-Themen 2
B Zeilenweises ausführen in NetBeans Java Basics - Anfänger-Themen 2
P Datentypen HTML Dokument speichern (Netbeans) Java Basics - Anfänger-Themen 10
N Anordnug der Komponenten mit NetBeans Java Basics - Anfänger-Themen 9
J Wie kann ich Netbeans in Eclipse integrieren? Java Basics - Anfänger-Themen 7
S Unterschiede Netbeans und .jar Java Basics - Anfänger-Themen 4
S NetBeans Project erstellen Java Basics - Anfänger-Themen 17
M netbeans exe Java Basics - Anfänger-Themen 5
S Programm erstellen (mit netbeans) Java Basics - Anfänger-Themen 15
B JAR Datei mit NetBeans erstellen und ausführen Java Basics - Anfänger-Themen 23
O Mit Netbeans .jar erstellen Java Basics - Anfänger-Themen 2
Spin GUI Builder in Netbeans Java Basics - Anfänger-Themen 3
C setResizable(false) unter NetBeans Java Basics - Anfänger-Themen 3
M netbeans GUI builder Java Basics - Anfänger-Themen 2
S Wo speichere ich Bilder für Applets (Netbeans) Java Basics - Anfänger-Themen 5
T MySQL-Dienst starten und stoppen aus Netbeans Java Basics - Anfänger-Themen 3
M package in Netbeans IDE Java Basics - Anfänger-Themen 3
D Eclipse und NetBeans Java Basics - Anfänger-Themen 3
J Programm läuft in Netbeans, aber nicht in der Konsole Java Basics - Anfänger-Themen 6
H Multiple JFrames im GUI Editor von NetBeans Java Basics - Anfänger-Themen 2
V Merkwürdiges Problem mit Netbeans und implements Java Basics - Anfänger-Themen 10
M Benutzer löschen mittels Netbeans Java Basics - Anfänger-Themen 4
M Klassendiagramm in Netbeans Java Basics - Anfänger-Themen 7
B Grafiken/Bilder mit Netbeans in Jdialog Java Basics - Anfänger-Themen 7
C Ein Handy Spiel programmieren mit Netbeans Java Basics - Anfänger-Themen 1
L wo muß die Jar stehen, Netbeans, Compile Java Basics - Anfänger-Themen 3
R Java Problem (mit NetBeans) - html gibt nur java logo aus Java Basics - Anfänger-Themen 7
G Netbeans: Klasse wird bei Run der Main Klasse nicht gefunden Java Basics - Anfänger-Themen 2
Spin Objekte in Netbeans Java Basics - Anfänger-Themen 6
T Netbeans 'Currency Converter' / DataInputStream readInt() Java Basics - Anfänger-Themen 2
B Netbeans Keypressed Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben