10.7


Meine checkt übrigens immer das ganze Feld in der Reihenfolge:

Attachment:
Reihenfolge.gif: https://fsi.cs.fau.de/unb-attachments/post_47246/Reihenfolge.gif


also ich mache das anders :wink:
ich checke pro runde nur einmal, allerdings, wird hier zuerst nach einem gewinn von a, dann b gesucht.
d.h. es kommt falls a zuerst gewonnen hat das richitge ergebnis raus, b darf allerdings vorher nochmal was ihm nix bringt, bzw einmal zuviel…

und ich checke anders: ich suche einfach jeden stein von a, und guge dann jeweils ob nach rechts, oder oben, oder rechtsoben oder linksoben zu einer reihe fotsetzten lässt.
falls das irgendwann abbricht nächster stein usw.


dann ist aber auch im „ergebnisfeld“ evtl. ein stein zu viel drin?


jap… aber steht ja nirgendwo das das falsch wäre, oder? ist halt sinnlose zusätzliche aber nicht falsche information :wink:


Hallo zusammen!
Ich habe noch eine Frage zur Array-Geschichte. Ich arbeite auch mit einem char-Array, in das die Symbole der Spieler eingetragen werden. Dieses möchte ich in ein String-Array umwandeln, um es den Spielern zu übergeben.
Das schaut bei mir folgendermaßen aus:

[...]
	public char[][] feld;
	public String[] stringFeld;
[...]
		for(int i = 0; i < hoeheFeld - 1; i++) {
			stringFeld[i] =  String(feld[i][]);		
		}
[...]

Leider funktioniert das noch nicht hundertprozentig. Ich wäre dankbar für einen kleinen Tip!
Danke


Du brauchst noch eine zweite for-schleife.

for(int i = 0; i < hoeheFeld - 1; i++) {
     for(int x = 0; x < feld[i].length; x++) {
          stringFeld[i] =  String(feld[i][x]); 
     }       
}

So gehts:

private char[][] field; (...) String[] result = new String[height]; for (int y = 0; y < height; y++) { result[y] = new String(field[y]); }


Danke ihr beiden, jetzt funktionierts!




So, bezüglich Interface anderung: Doch, das ist ein Problem, da ich dan nzwei testcases (jenachdem wer was implementiert hat) schreiben müsste.
Ich geb euch aber mal folgenden Designvorschlag:

public boolean starteSpiel(int breite, int hoehe, char symbol){
    return starteSpiel(breite,hoehe,symbol,-1);
}

public boolean starteSpiel(int breite, int hoehe, char symbol, int n){
    //was auch immer und n ist richtig, oder -1
}

Benutzt wird das halt dann mit :

if (spieler instanceof KonsolenSpieler) {
    ((KonsolenSpier)spieler).starteSpiel(breite, hoehe, symbol,n);
} else {
    spieler.starteSpiel(breite,hoehe,symbol);
}

Und alle sind Glücklich :slight_smile:


Das Spiel soll schon zu Ende sein, sobald einer n in einer Reihe hat und nicht danach noch irgendwelche unnötigen Züge verlangen.

@Der Ich: Mein Testcase hat natürlich meine eigenen Spieler, die voll automatisch spielen und so fehler finden. Eure Spieler werden seperat geprüft.


@marc: nun gut, die eine break-anweisung ist ja eh nur auskommentiert, aber da er dann doppelt prüft, ist das programm auch doppelt so langsam :smiley: , also 2 sec dann :stuck_out_tongue:


Dann solltest du lieber deine Methode fürs Reihenfinden nochmal überarbeiten, anstatt nur bei jedem zweiten, dritten, vierten Zug oder sonst irgendwie lückenhaft zu kontrollieren. Bei mir (2.4GHz AthlonX2) dauert ein ein 15-Gewinnt-Spiel mit einem 30x30 Feld nur 0.2 Sekunden.


Yeah, fertig :slight_smile:
30x30 Spielfeld, 15-Gewinnt:

real    0m2.102s
user    0m1.888s
sys     0m0.109s

Aber die Funktion zum Prüfen, ob jemand gewonnen hat, ist (in meinen Augen) so schlimm programmiert, die zeig ich lieber niemandem^^
Ich geh allerdings das Feld anders durch:
Von oben nach unten und links nach rechts ist klar, aber diagonal von links unten nach rechts oben und rechts unten nach links oben, d.h. ich fang nicht in der Mitte sondern auch in den Ecken an. Leider kann ich keine so tolle Animation machen^^
NGewinnt.java: 280 Zeilen
Konsolenspieler.java: 130 Zeilen
Mit Kommentaren und Leerzeilen

Mir ist allerdings noch unklar, was genau in die starteSpiel() soll. Momentan schau ich ob breite oder hoehe <= 0 sind und returne dann false, ansonsten true. Was habt Ihr da?


also a) waren 2 sec rein geschätzt, und b) teste ich nicht lückenhaft, sondern nur nach andren regeln.
ich weiß ja nicht obs ne offizielle 4-gewinnt-regelwerk gibt, aber ich kannte das spiel wirklich so, dass wenn derjenige der angefangen hat, gewonnen hat, und der andre der ja quasi nochmal darf, auch gewinnt, es ein unentschieden gibt.
aber da das glaube ich total wurst ist, kommt da ne zeile rein und fini… und dann teste ich nochmal genau, wie lange es dauert, und gut ist…


ohne große änderungen (und da ginge noch min 50% weniger) bin ich bei circa. 573020314 nano-sec, was 0,57 sec entsprechen.
womit ich dann wieder auf deinem niveau wäre herr jazz :wink:

PS: der fehlende edit button nervt.


Das wären aber komische Regeln. So ungefähr wie wenn beim Schach einer Schachmatt ist, er aber trotzdem nochmal ziehen darf.


Na dann lass uns doch ein Bierchen trinken. :wink:


ich denk ma auch ich habs…aber was mich viel mehr interessieren würde…

hat sich jemand mal an einem swingspieler versucht…

wär cool wenn da jemand was dazu posten könnte, das bisher hat ja wunderbar funktioniert aber mit java.swing hab ich selbst (bis auf die buttonbox) noch nix programmiert…


Nein, das nicht, aber dafür einen schlauen gegner =)
leider kann er nur ca 5-7 Rekursionsstufen, weil er sonst ganz schön viel speicher/rechenzeit verbraucht, spielt aber dafür relativ stark