Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

31

24.11.2013, 21:10

@Nacho - okay das wussste ich noch garnicht, dass es dafür schon ne vorhandene Methode gibt zweidimensionales in eindimensionale positionen umrechnen zu lassen. wieder was gelernt, gleich erstmal nachschauen wie das denn heißt^^

@Schorsch - hab grad nochmal über die 1-dimensionale variante nachgedacht

im grunde kann ich bei nem feld

0 | 1 | 2
--------
3 | 4 | 5
--------
6 | 7 | 8

wie folgt arbeiten:


ich hab mein Zug gemacht und überprüft ob der geht etc.
dann speicher ich mir in einer variablen (z.b. "int lastMove") den letzten Zug
den geb ich dann an ne funktion weiter

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
//(pseudeocode)
checkWin(lastMove) {
    int row = lastMove / 3;
    if(_feld[row] == _feld[row+1] == _feld[row+2]) {
        //derzeit noch aktiver Spieler gewinnt
    }
    int column = lastMove % 3;
    if(_feld[column] == _feld[column+3] == _feld[column+6]) {
        //derzeit noch aktiver Spieler gewinnt
    }
}


richtig? (habs nu noch nicht getestet, aber scheint für mich sinn zu geben^^)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

32

24.11.2013, 21:22

Im Speicher sind mehrdimensionale Arrays auch nichts anderes als ein eindimensionales Array der größe breite+länge.
Nur in unserer Vorstellung wird ein Quadrad daraus. Ich sehe an deinem Pseudocode das du das eigentlich schon lang verstanden hast. Schau dir mal dein Feld an. Fällt dir auf, dass die Zeilen mit 0, 3 und 6 anfangen? Sie liegen immer drei Felder weiter. Wäre das Spielfeld vier Felder breit wären es Vier. Daraus dürftest du recht schnell schließen, dass die Formel y*breite+x ist. Das hättest du auch herausfinden können indem du die Operationen in deinem Pseudocode umgestellt hättest.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Renegade123

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

33

24.11.2013, 21:49



ich hab mein Zug gemacht und überprüft ob der geht etc.
dann speicher ich mir in einer variablen (z.b. "int lastMove") den letzten Zug
den geb ich dann an ne funktion weiter

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
//(pseudeocode)
checkWin(lastMove) {
    int row = lastMove / 3;
    if(_feld[row] == _feld[row+1] == _feld[row+2]) {
        //derzeit noch aktiver Spieler gewinnt
    }
    int column = lastMove % 3;
    if(_feld[column] == _feld[column+3] == _feld[column+6]) {
        //derzeit noch aktiver Spieler gewinnt
    }
}


richtig? (habs nu noch nicht getestet, aber scheint für mich sinn zu geben^^)


Und anstatt nur auf drei Positionen diagonal, vertikal und horizontal zu prüfen könntest du auch stattdessen die Funktion so implementieren, dass sie einfach alle Felder diagonal, horizontal und vertikal zum gesetzten Spielstein prüft.
Das ist nicht viel komplizierter, aber im Stil besser.
Liebe Grüße,
René

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

34

25.11.2013, 06:34

Im Speicher sind mehrdimensionale Arrays auch nichts anderes als ein eindimensionales Array der größe breite+länge.
Nein, sie sind ein eindimensionaler Array der Größe Breite*Länge. ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

35

25.11.2013, 09:51

Natürlich da hab ich mich wohl vertippt. Sorry!
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

36

25.11.2013, 10:36

Schon klar. Ich dachte nur, dass ich drauf hinweise, bevor es bei Lesern zu Verwirrung führt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

feltnix

Frischling

Beiträge: 8

Beruf: Dipl.-Ing. Elektrotechnik

  • Private Nachricht senden

37

25.11.2013, 20:02

Gutes und schlechtes auf Youtube

Achja, Finger weg von Youtubevideos wenn es um Programmiersprachen geht(bei Bibliotheken, Frameworks usw. ists in Ordnung), denn die Autoren sind leider häufig auf etwa deinem Stand...
Ein sehr gutes Positivbeispiel ist m.E. die folgende Vorlesung auf Youtube:

Informatik A (Algorithmen und Datenstrukturen)
Universität Osnabrück 2012-2013
Prof. Dr. Oliver Vornberger



Die Algorithmen werden in Java realisiert, sind aber sehr leicht in andere Sprachen zu übersetzen, da es sich fast nur um einfache Schleifen und Kontrollstrukturen handelt. Es ist für Anfänger sicher beeindruckend, wie viel man mit diesen elementaren Dingen programmieren kann. Außerdem wird (hoffentlich) klar, in welche Fallen man stolpern kann, wenn man z.B. den Bedarf an Speicher und Rechenzeit falsch einschätzt.


Es mag abschreckend klingen, dass es sich um eine Vorlesung handelt, aber wer wirklich Spiele programmieren will sollte sich mit der Strukturierung von Daten und den grundlegendsten Algorithmen vertraut machen. Der Vorteil der Videos gegenüber Vorlesungen, die das Thema mit Pseudocode abhandeln, wird klar wenn man die
Beispielprogramme und Übungen nachvollzieht.
Dann wird z.B. auch klar, wie Arrays gespeichert werden. Das ist wichtig, um etwa mit Pointern in C klar zu kommen.


MfG


38

29.11.2013, 18:26

Hab nu nochmal n weiteres update gemacht:
Sieg wird nur noch in abhängigkeit vom letzten Zug geprüft (ausgenommen der diagonalen)
das Zeichnen wird nu über schleifen gelöst, statt wie zuvor durch massenhaftes tippen
und ich hab glaub hier und da auch noch 1-2 kleinigkeiten geändert.

Minimax hab ich mir mal angeguckt, vll bau ich das auch nochmal ein - wollt aber mal mit was neuem anfangen für den moment
nichts desto trotz, wenns wieder neue oder andere größere mängel oder vorschläge gibt nur her damit - ich setz mich damit auseinander, werd aber erstmal keine aktualisierte version hiervon anfertigen

in diesem sinne:
danke nochmal für die viele hilfe und die vielen dinge von denen ich vorher teils nichmal was gehört hab^^

39

29.11.2013, 20:19

Noch zwei kleine Anmerkungen von mir:
1) Du benutzt sehr gern Postkrement. (irgendwas++) Gewöhne dir an Prekrement zu benutzen. Der wesentliche Unterschied ist der folgende:

Quellcode

1
2
3
4
5
6
//Array mit 2 Elementen, array[0]=="Nummer 1", array[1]=="Nummer 2"
int i=0;
array[i] // "Nummer 1", i==0
array[i++] // "Nummer 1", i==1
array[--i] // "Nummer 1", i==0
array[++i] // "Nummer 2", i==1

Ich denk das machts deutlich, würd ich das in Worten umschreiben müssen, gäbs bei meinem Stil wohl nur Verwirrung. :crazy:
Bleib dir zumindest dem Unterschied bewusst, falls du ihn noch nicht kanntest.
2) Ansonsten ist mir noch aufgefallen, dass du so manche Variablen als Member deklarierst, aber auch locker als Parameter einfach übergeben kannst, du brauchst sie später nicht mehr.
Ein Beispiel dafür ist der Boolean _KI

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

40

29.11.2013, 20:38

Post oder Prekrement ist total egal, solange man es korrekt einsetzt. Mich wundert es ehrlich, dass über sowas noch immer geredet wird als sei es ein heiliger Krieg ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige