AI_Battel kleines Spiel zum Üben
8 replies



27.10.14 10:09:28 pm
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.
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.
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
Die momentane Version scheint stabil zu sein
mfG Feuer der veränderung
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.
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

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
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
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
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
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
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
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:
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


Code:
1
2
3
4
5
6
7
8
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;
}
public void adminUebergabe (Administrator admin1) {
admin=admin1;
}
Die schönere Variante:
public void adminUebergabe (Administrator admin) {
this.admin=admin;
}







Edit: Achja, es heißt Battle, nicht Battel
https://ohaz.engineer - Software Engineering
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).
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?

Das es ab einer bestimmten größe ziemlich lahm wird ist mir auch schon aufgefallen

ohaz has written:
Code:
1
2
3
4
5
6
7
8
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;
}
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
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



