Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Das Problem mit dem letzten Spielstein (https://www.delphipraxis.net/152243-das-problem-mit-dem-letzten-spielstein.html)

Mr.Wrong 16. Jun 2010 10:26

Das Problem mit dem letzten Spielstein
 
Hallo und guten Tag zusammen,

habe mich soeben hier angemeldet, weil ich hoffe, hier die Infos zu bekommen, die ich schon so lange suche und nirgends finde.
Um das Problem näher zu erklären, vielleicht erst mal ein kleiner Rückblick:
Ich bin schon ein etwas älterer Jahrgang und stehe kurz vor der Frührente. Doch, doch - es gibt auch solche Leute ;-)
Jetzt, dachte ich, wäre es mal an der Zeit, statt dieser ewigen Firmen-internen Software doch mal ein einfaches Spiel zu schreiben. Am liebsten so ein "3-gewinnt-Spiel", wo ein Spielstein mit einem Nachbarn getauscht wird, bis 3 waagerecht oder senkrecht in einer Reihe liegen. Also ein ganz einfaches 2D-Game.
Das Problem dabei ist die Frage nach dem letzten Spielstein: Als ich das Programmieren gelernt habe (in den 80er Jahren), da gab es nur zweifarbige Bildschirme und allenfalls eine 16-Farben-VGA-Karte - das war aber schon "Luxus". Dementsprechend mies war die Ausbildung im grafischen Teil. Ehrlich gesagt, außer Shapes und Rectangles, Circle etc. wurde damals kein Wort dazu verloren.
Auch als dann wenig später die Farbe und die Grafikkarten besser wurden, war das Problem, das Spielfeld (Array) nach dem letzten Stein (einer Farbe oder überhaupt) abzufragen, nur durch eine Assambler-Routine möglich. Alles andere dauerte viel zu lange, um damit ein Spiel anzureichern.
Inzwischen sind wir ja aus diesem Zeitalter heraus und ich denke, das gesamte Array (z.B. 10 mal 10 Felder oder auch mehr) nach einem bestimmten Spielstein abzufragen, dürfte doch heute kein Problem mehr sein. Jedenfalls muß man dafür nicht mehr Assambler lernen. Nur: Ich finde nirgendwo einen Hinweis, obwohl ich schon seit Monaten danach suche.
Dummerweise wird die Abfrage des Spielbrettes bei fast allen Zügen benötigt, nicht nur beim allerletzten Stein. Doch wie macht man das in der Praxis?? Kann mir da jemand weiterhelfen?
Es würde mir reichen, ein entsprechendes einfaches Spiel im Source-Code mal zu sehen, so daß man nachvollziehen kann, wie das im Spiel bewerkstelligt wird. Aber alles, was ich finde, sind Source-Codes zu Shootern, 3D-Games usw - aber kein einziger zu einem 3-Gewinnt-Spiel. :cry:

Wer kann hier mal weiterhelfen und mir entweder sagen, wie dieses Problem in Delphi (7) z.B. gelöst wird oder wo ich einen solchen Source-Code (möglichst kommentiert) finde?Vielen Dank schon mal im voraus an evtl. "Antworter",
Gruß Mr.Wrong

Bummi 16. Jun 2010 10:32

AW: Das Problem mit dem letzten Spielstein
 
Warum willst Du die Farbe vom Spielfeld nehmen, Du könntest ja auch Bitmaps hier "gemalt" haben.

Verwalte doch einfach im Hintergrund ein Array mit den ensprechenden Informationen.

fLaSh11 16. Jun 2010 10:45

AW: Das Problem mit dem letzten Spielstein
 
Ich glaube, es geht ihm darum, festzustellen, wer gewonnen hat.
Zitat:

Dummerweise wird die Abfrage des Spielbrettes bei fast allen Zügen benötigt, nicht nur beim allerletzten Stein.
So verstehe ich den Satz zumindest.

Wenns das ist, was du suchst, ist das ja nicht schwer. Mir fällt im Augenblick nur die hardcode-Variante ein. Man hat ja ein 3x3-Spielfeld. D.h. mann muss wie folgt prüfen:

Als grundlage wähle ich jetzt einfach mal das Spielfeld als Array of Integer.

Delphi-Quellcode:
var
  Spielfeld: Array[1..3, 1..3] of Integer; //nur ein Beispiel: Ohne Spielstein 0; Spieler 1 gesetzt: 1; Spieler 2 gesetzt: 2

//Durchsucht Spielfeld und gibt den Spieler zurück; hat keiner gewonnen: 0
function Gewonnen: integer;
var
  i: integer;
begin
  Result := 0;

  //Alle Zeilen auf eine Reihe durchforsten:

  for i := 1 to 3 do
  begin
    if (Spielfeld[i, 1] = Spielfeld[i, 2]) and (Spielfeld[i, 2] = Spielfeld[i, 3]) then
    begin
      Result = Spielfeld[i, 1];
      Exit;
    end;
  end;

  //das gleiche mit den Spalten machen
  //...

  //und anschließend noch die beiden Diagonalen testen
  //...

end;

MrSpock 16. Jun 2010 10:46

AW: Das Problem mit dem letzten Spielstein
 
Hallo Mr.Wrong,

zunächst einma herzlich willkommen in der Delphi-PRAXiS.

Du solltest dir die Belegung der Felder in einer Struktur (z.B. einem zweidimensionalem Array) merken und in der Paint Methode der Komponente zeichnen. Dann musst du nicht die Farben vom Bildschirm abfragen.

tkone 16. Jun 2010 11:00

AW: Das Problem mit dem letzten Spielstein
 
ich fang mal an. (unoptimiert ;) )
also wenn du das 10x10 array mit werten gefüllt hast (z.b. 0 für leer, 1 für spieler1 und -1 für spieler2)
dann kannst du recht einfache schleifen und if abfragen kombinieren.

eine schleife(z.b. for-downto-schleife), die das array senkrecht von 10-1 durchläuft. (sinnvoll, da man ja auch von unten die felder füllt)
in dieser schleife sollte eine weitere schleife eingebunden sein(z.b. for-to-schleife), die waagerecht die werte von 1-10 durchläuft.
so kannst du erstmal auf alle felder zugreifen.
in dieser schleifenkonstruktion kannst du nun den zellenwert vergleichen mit 1 und -1 (if-abfrage)
wenn du nun einen wert 1 oder -1 findest, dann kannst du innerhalb der schleife das nächste feld mit dem entsprechenden wert vergleichen. stimmt dieser auch, muss du nochmal ein feld vorraus gehen und vergleichen. stimmt das auch, so ist das spiel beendet.

Mr.Wrong 16. Jun 2010 17:30

AW: Das Problem mit dem letzten Spielstein
 
[QUOTE=Bummi;1029279]Warum willst Du die Farbe vom Spielfeld nehmen, Du könntest ja auch Bitmaps hier "gemalt" haben.
QUOTE]

Ich glaube, Du hast da bei der Fragestellung etwas falsch verstanden. Es geht hier nicht um "Farbe"... :)
Gruß Mr.Wrong

Mr.Wrong 16. Jun 2010 17:35

AW: Das Problem mit dem letzten Spielstein
 
Hallo Flash11,

vielen Dank für die schnelle Antwort! In der Tat deutet das auf das hin, was ich suche. Offenbar wird das heute doch in for-Schleifen abgefragt. Ich dachte, da steckt mehr dahinder... :-D
Damals jedenfalls war ein Array von simplen 10x10 Feldern mit Schleifen nicht abzufragen, das dauerte viel zu lange. Aber wenn das heute ohne weiteres so geht - wer hätte das gedacht...
Dann setze ich mich mal ran an's Problem. :)
Thx,
Mr. Wrong

Mr.Wrong 16. Jun 2010 17:38

AW: Das Problem mit dem letzten Spielstein
 
Hallo tkone,

auch Dir danke für die schnelle Antwort! Ja, das hilft mir weiter, siehe auch weiter oben Antwort an Flash11. Wenn das so einfach ist, dann fange ich gleich mal an, hehe... :-D

Schönen Tag noch und dank auch an alle anderen,
Gruß Mr.Wrong

Mr.Wrong 16. Jun 2010 17:42

AW: Das Problem mit dem letzten Spielstein
 
Zitat:

Zitat von MrSpock (Beitrag 1029287)
Du solltest dir die Belegung der Felder in einer Struktur (z.B. einem zweidimensionalem Array) merken und in der Paint Methode der Komponente zeichnen. Dann musst du nicht die Farben vom Bildschirm abfragen.

Hallo MrSpock,

das hatte ich auch nicht vor, die Farben vom Bildschirm abzufragen. Offenbar noch ein Mißverständnis. :oops:
Vielleicht hätte ich das Wort "Farbe" nicht benutzen sollen...

Aber andere haben mir dafür schon weitergeholfen.
Gruß Mr.Wrong

stahli 16. Jun 2010 17:53

AW: Das Problem mit dem letzten Spielstein
 
Hallo Mr. Wrong,
evtl. kannst Du für einen "Spielstein" auch direkt ein TPanel verwenden. Die Panels kann man dann beliebig färben und positionieren.
(Wenn ich richtig verstanden habe, was Du willst.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz