Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Abbruchbedingung und Bewegung bei 4 Gewinnt (https://www.delphipraxis.net/111300-abbruchbedingung-und-bewegung-bei-4-gewinnt.html)

HolleDP 1. Apr 2008 20:55


Abbruchbedingung und Bewegung bei 4 Gewinnt
 
Schön juten Tag.
Ich versuch mich gerade an dem Spiel "4 Gwinnt". Bin auch schon relativ weit voran geschritten, habe aber jetzt ein Problem mit der Steuerung.
Da ich meine Programme meistens immer sehr komplex mache, dachte ich mir mal, dass man den Chip ja per Cursortasten bewegen könnte.
Die Bewegung nach Links und nach Rechts habe ich schon fertig, was mir jetzt aber noch fehlt wäre die Bewegung nach unten.
Diese habe ich mir folgenderweise vorgestellt:
- Pfeiltaste "unten" wird gedrückt
- Timer bewegt den Chip langsam nach unten
- wird überprüft wann das Ende des Spielfeldes kommt bzw. ob ein Chip schon unter
ihm liegt
Bei dieser Problematik benötige ich jetzt mal bitte Hilfe.
Wäre nett, wenn mir jemand weiter helfen könnte.
Mfg Holle

mkinzler 1. Apr 2008 20:58

Re: Abbruchbedingung und Bewegung bei 4 Gewinnt
 
Wie verwaltest du das Spielfeld?

HolleDP 1. Apr 2008 21:01

Re: Abbruchbedingung und Bewegung bei 4 Gewinnt
 
Das Spielfeld hab ich mir von Delphi zeichnen lassen.
Also with image1.canvas do.....
Bisschen umständlich, ich weiß^^

taaktaak 1. Apr 2008 21:05

Re: Abbruchbedingung und Bewegung bei 4 Gewinnt
 
Zur Bewegung schaust du vielleicht hier, da hatten wir gestern etwas ähnliches :wink:

dajuhsa 1. Apr 2008 21:08

Re: Abbruchbedingung und Bewegung bei 4 Gewinnt
 
erstmal legst du ein array mit den feldern an
Delphi-Quellcode:
TSpielerSeite = (Rot, Gelb);
TFeld = (Rot,Gelb,None)
TFelder = Array[0..6,0..5] of TFeld;
var
Felder:TFelder;
SpielerAnDerReihe:TSpielerSeite;
dort kannst du reinspeichern deine Chips
Delphi-Quellcode:
Felder[ChipX,ImpactY(ChipX)] := SpielerAnDerReihe;
und um herauszufinden, welches feld in der spalte das niedrigstmögliche ist, benutzt du ImpactY
Delphi-Quellcode:
function ImpactY(X:Integer): Integer;
var
i:integer;
begin
for i := 0 to 5 do
  if Felder[X,i] <> None then
  begin
    result := i - 1;
    exit;
  end;
end;
velleicht hilft dir das

HolleDP 2. Apr 2008 16:34

Re: Abbruchbedingung und Bewegung bei 4 Gewinnt
 
@taaktaak
Mhh...das scheint ja vlt. gut zu sein (kann das nich so einschätzen :| ), aber das ist nich ganz das was mir weiterhelfen könnte.
Dass ich das mit GetAsyncKeyState machen muss, das wusste ich schon (sorry, dass ich das noch nich hingeschrieben habe).


@dajuhsa
Also deine ersten beiden Quellcode's vertsteh ich ja, aber deinen letzten versteh ich nicht wirklich.
Könnteste den mal bitte erklären?! Wär nett.

shmia 2. Apr 2008 16:41

Re: Abbruchbedingung und Bewegung bei 4 Gewinnt
 
Du solltest den Chip beim Drücken der Tasten "1" bis "7" in der entsprechenden Spalte fallenlassen.
Und zwar ganz unabhängig davon, dass es auch noch eine 2. Möglichkeit gibt, den Chip fallen zu lassen.

dajuhsa 4. Apr 2008 21:03

Re: Abbruchbedingung und Bewegung bei 4 Gewinnt
 
Delphi-Quellcode:
function ImpactY(X:Integer): Integer; //X gibt die Zeile an, in der der "Einschlag" stattfindet
var
  i:integer;
begin
  for i := 0 to 5 do //6 Felder Hoch ist das Spielfeld denke ich mal, alle felder in Zeile X durchgehen
    if Felder[X,i] <> None then //wenn das aktuelle Feld nicht leer also belegt ist,
    begin
      result := i - 1; //dann landet der chip im feld darüber (Y - 1)
      exit; //und da das ergebnis feststeht wird die function beendet
    end; //wenn das oberste besetzt ist, kommt als ergebnis -1 raus, das musst du im programm halt abfragen
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 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