German AI_Battel kleines Spiel zum Üben

8 replies
Goto Page
To the start Previous 1 Next To the start
Up
Hi,
vor 3 Wochen kam mir auf der Fahrt nach Hause die Idee ein sehr kleines und simples Spiel zu programmieren, welches so aufgebaut ist das sich relativ leicht 2 Bots schreiben lassen, welche das Spiel gegeneinander spielen.


Bilder >


Das Spiel ist in Java geschrieben und um es "spielen" zu können sollte man über eine Entwicklungsumgebung (optimalerweise Eclipse) für Java verfügen, da es sich nur um den Source Code handelt.

Das ganze ist wie gesagt nichts großartiges und bis jetzt kaum getestet (was ihr tun sollt ). Der Source Code sieht nicht schön aus scheint aber zu funktionieren.

Erklärung wie alles funktioniert >


Wie gesagt es ist nichts großartiges oder aufwändiges, aber vielleicht gibt es ja irgendjemanden der das Programm gebrauchen kann .
Version 6.11.2014
http://www.wikiupload.com/Y3VK73T0Q8PETRF

Bugs, Verbesserungsvorschläge usw. können entweder in den Thread oder per PM an mich

Changelog >

Bugs >


Die momentane Version scheint stabil zu sein

mfG Feuer der veränderung
edited 12×, last 06.11.14 02:43:21 pm
Dies ist ein Beitrag zur Füllung der Festplatten bei Prism und Tempora
28.10.14 06:54:54 am
Up
ohaz
User
Offline Off
Solche Spiele sind toll! Tipp: Bau eine Skriptsprache für die AI ein. Dann muss man nicht immer das ganze Ding kompilieren.
https://ohaz.engineer - Software Engineering
28.10.14 08:19:15 am
Up
Kann ich versuchen, allerdings wäre die Skriptsprache deutlich beschränkter als Java d.h. ich würde es eher als (schlechte) Alternative einbauen, wenn der Rest gut funktioniert usw.
Dies ist ein Beitrag zur Füllung der Festplatten bei Prism und Tempora
28.10.14 08:42:00 am
Up
ohaz
User
Offline Off
Wäre nicht wirklich beschränkter. Du musst nur Anbindungen an die Funktionen geben die du hast, das sollte mit zum Beispiel im Fall von Python mit Jython gehen (siehe http://stackoverflow.com/questions/8898765/calling-python-in-java ).
edited 1×, last 28.10.14 08:54:29 am
https://ohaz.engineer - Software Engineering
28.10.14 10:42:40 am
Up
Hab noch einen Bug gefunden, welcher sehr effizient zu Abstürzen führt d.h. versuch den bis heute Abend behoben zu haben
Dies ist ein Beitrag zur Füllung der Festplatten bei Prism und Tempora
31.10.14 09:13:50 am
Up
ohaz
User
Offline Off
Habe mir mal ein wenig den Sourcecode angeschaut. Ein paar Tips die eventuell Probleme lösen könnten oder allgemein zu schönerem Code führen:
• Nutze nicht einen reinen String für die Befehle. Nimm lieber eine Queue. Die fügt automatisch hinten ein und nimmt vorne raus - das ist ja im Prinzip genau das was du willst. Du kannst dann in einer while schleife darüber gehen, mit peek testen ob es noch einen Eintrag gibt, diesen mit .pop() holen und darauf arbeiten.
• Damit du in Parametern nicht immer eine Zahl hinter den Parameter hängen musst kannst du (z.b.) die folgende Funktion auch so schreiben:
Code:
1
2
3
4
5
6
7
8
Dein Code:
public void adminUebergabe (Administrator admin1) {
     admin=admin1;
}
Die schönere Variante:
public void adminUebergabe (Administrator admin) {
     this.admin=admin;
}

• Mit Strings zu arbeiten ist allgemein ziemlich... sch*** langsam, aber das sollte hier nochmal OK sein. Wenn das Spiel größer wird, arbeite lieber mit normalen Objekten die den Befehl repräsentieren. Die kann man auch cool in die Queue packen und rausholen - das spart dir eine menge Tokenizing und Strings zusammenbauen / auseinandernehmen. Ausserdem viel besser erweiterbar
• allgemein schönerer Codestil: Normalerweise heißen die Funktionen die eine Variable des Objektes zurückgeben nicht give... sondern get....
• irgendwie scheint dein tokenizer ziemlich oft zu sterben - auch da würde ein einfaches Objekt das einen Befehl darstellt besser sein
• aus irgendeinem mir jetzt auf dem ersten Blick unersichtlichem Problem wird das Teil ziemlich schnell sehr lahm. Liegt vielleicht auch daran dass du mit ziemlich explodierender Stringgröße arbeitest.
• Administrator.java Zeile 10 bester Kommentar
Edit: Achja, es heißt Battle, nicht Battel
https://ohaz.engineer - Software Engineering
31.10.14 09:43:12 am
Up
Danke .

Das es ab einer bestimmten größe ziemlich lahm wird ist mir auch schon aufgefallen , werde demnächst mal unter den ganzen Strings aufräumen (und es wahrscheinlich so machen wie du es vorgeschlagen hast).

ohaz has written:
Code:
1
2
3
4
5
6
7
8
Dein Code:
public void adminUebergabe (Administrator admin1) {
     admin=admin1;
}
Die schönere Variante:
public void adminUebergabe (Administrator admin) {
     this.admin=admin;
}

Ich persönlich finde es immer etwas verwirrend wenn Parameter so heißen wie Exemplarvariablen

An meinem Codingstyle muss ich noch arbeiten (und auch daran sinnvolle Kommentare zu schreiben)

edit:
Kurzes Zwischenergebniss:
Konnte die Geschwindigkeit durch entfernen eines unnötigen repaint() 's erhöhen und versuche jetzt das ganze Rundenende System so wie ohaz es vorgeschlagen hat umzuschreiben.

Ansonsten noch eine kurze Umfrage: Welche Informationen sollen auf dem Spielbildschirm angezeigt werden? Soll ich die Möglichkeit des Scrollens und Zoomens mit einbauen? Oder reicht die Darstellung des Spiels nur mit der Veränderung der Feldfarben aus?
edited 1×, last 03.11.14 09:11:19 am
Dies ist ein Beitrag zur Füllung der Festplatten bei Prism und Tempora
04.11.14 11:05:47 pm
Up
Dragonisser
User
Offline Off
Ist das ne epileptiker party oder was xD?

Außer dauerhaftes Braun, Grün, Gelb, Rot seh ich nix

IMG:http://i.imgur.com/PtLHr2D.png
IMG:http://i.epvpimg.com/es3Fe.png
04.11.14 11:28:06 pm
Up
Die aktuelle Version (die ich durch Praxis Tests an meinen Mitstudenten optimiert habe ) sollte keine Epileptiker Party mehr sein
Dies ist ein Beitrag zur Füllung der Festplatten bei Prism und Tempora
To the start Previous 1 Next To the start