AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Das Problem mit dem letzten Spielstein
Thema durchsuchen
Ansicht
Themen-Optionen

Das Problem mit dem letzten Spielstein

Ein Thema von Mr.Wrong · begonnen am 16. Jun 2010 · letzter Beitrag vom 17. Jun 2010
Antwort Antwort
Seite 1 von 2  1 2      
Mr.Wrong

Registriert seit: 16. Jun 2010
6 Beiträge
 
Delphi 2 Desktop
 
#1

Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 10:26
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 10:32
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#3

AW: Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 10:45
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;
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 10:46
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
tkone

Registriert seit: 2. Okt 2009
Ort: Sachsen
63 Beiträge
 
Delphi 7 Professional
 
#5

AW: Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 11:00
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.
  Mit Zitat antworten Zitat
Mr.Wrong

Registriert seit: 16. Jun 2010
6 Beiträge
 
Delphi 2 Desktop
 
#6

AW: Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 17:30
[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
  Mit Zitat antworten Zitat
Mr.Wrong

Registriert seit: 16. Jun 2010
6 Beiträge
 
Delphi 2 Desktop
 
#7

AW: Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 17:35
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...
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
  Mit Zitat antworten Zitat
Mr.Wrong

Registriert seit: 16. Jun 2010
6 Beiträge
 
Delphi 2 Desktop
 
#8

AW: Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 17:38
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...

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

Registriert seit: 16. Jun 2010
6 Beiträge
 
Delphi 2 Desktop
 
#9

AW: Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 17:42
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.
Vielleicht hätte ich das Wort "Farbe" nicht benutzen sollen...

Aber andere haben mir dafür schon weitergeholfen.
Gruß Mr.Wrong
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Das Problem mit dem letzten Spielstein

  Alt 16. Jun 2010, 17:53
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.)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.
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