Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   4 Gewinnt (https://www.delphipraxis.net/35045-4-gewinnt.html)

BrabusMercedes 1. Dez 2004 19:43


4 Gewinnt
 
Hallo ihr da draußen, ich braüchte für die Schule unbedingt so ein Programm, hab aber keine Ahnung wie ich das ganze programieren soll! Alle Beiträge, die es zu diesem Thema schon gibt sind für meine bisherigen Delphi-Kenntnisse zu hoch! Ich würd mich freuen, wenn mir einer von euch helfen könnte!
Das Spiel 4 gewinnt funktioniert nach folgenden Regeln:
Das Spielfeld besteht aus einem Feld aus 7x7 Quadraten. Zwei Spieler besetzen abwechselnd ein Quadrat. Dabei kann das Spielfeld nur von unten nach oben besetzt werden. Gewonnen hat derjenige Spieler, der als erster vier seiner Spielsteine in einer Reihe, einer Spalte oder einer Diagonalen angeordnet hat. Das Spiel ist beendet, wenn ein Spieler gewonnen hat, oder wenn kein Stein mehr gesetzt werden kann. Entwerfen und implementieren Sie eine Unit Spiel, die folgendes leistet: Initialisierung des Spielfeldes - alle Quadrate sind unbesetzt,
Ausgabe des Spielfeldes, Setzen eines Spielsteins Ausweitung des Spielstandes.
Entwerfen und implementieren Sie eine Unit Spielen, mit der zwei Spieler dieses Spiel spielen können. Die Unit Spielen soll dabei die Unit Spiel importieren.

Thx schonmal im Vorraus!

Luckie 1. Dez 2004 19:46

Re: 4 Gewinnt
 
Zitat:

Zitat von BrabusMercedes
Hallo ihr da draußen, ich braüchte für die Schule unbedingt so ein Programm, hab aber keine Ahnung wie ich das ganze programieren soll! Alle Beiträge, die es zu diesem Thema schon gibt sind für meine bisherigen Delphi-Kenntnisse zu hoch!

Dann stell entsprechende Fragen zu den Beiträgen wo du was nicht verstehst.

Zitat:

Ich würd mich freuen, wenn mir einer von euch helfen könnte!
Schon geschehen.

Desweiteren liefert eine Fornsuche nach Hier im Forum suchenvier gewinnt genug Treffer mit Quellcodes, mit denen man sich einfach mal auseinandersetzten kann.

Ultimator 1. Dez 2004 19:47

Re: 4 Gewinnt
 
Hier könnte was dabei sein.

BrabusMercedes 1. Dez 2004 20:13

Re: 4 Gewinnt
 
Liste der Anhänge anzeigen (Anzahl: 3)
Ok, ich weiß nicht, wie ich es erklären soll, aber ich brauch verschiedene Proceduren die ich dann in der Button1.klick-Procedure nacheinander aufrufen kann. So z.B. eine Procedure "Steinsetzen" was ich ja insoweit versteh, aber wie erklär ich nun dem PC, dass die Spieler abwechselnd ein X bzw. O machen? Wie vereinbare ich überhaupt, dass Spieler1 ein X und Spieler2 ein O macht? Ich hab ja schoneinmal ein wenig ausgetestet, habe aber immer diverse Fehlermeldung, die ich nicht verstehe, da ich erst seit 4Monaten Delphi in der Schule programmiere.

atreju2oo0 1. Dez 2004 20:46

Re: 4 Gewinnt
 
Hab gerade mal in deine .pas reingeschaut und muss sagen dass Du erhebliche Denkfehler machst...
Delphi-Quellcode:
procedure TForm1Button1Click(Sender: TObject);
var spieler1, spieler2: char;
    a: integer;
begin
  spieler1 := 'X';
  spieler2 := 'O';
  repeat
    setzen
  until a = 49; //Spielfeld voll oder Prüfung-->Gewinner
  //PRÜFEN
end;
end;
Das kann so nicht gut funktionieren!

Besser wäre es so:

Delphi-Quellcode:
//  Sagen wir mal deine Form ist 70 mal 70 pixel groß
//  und es gibt die globalen Variablen aktivSpieler und Spielfeld=arry[0..6,0..6]of byte

procedure TForm1OnMouseDown(x,y:integer;Sender: TObject);
var a,b:byte;
begin
 
a:=x div 10;
b:=y div 10;

Spielfeld[a,b]:=aktivSpieler;

if aktivspieler=1 then aktivspieler:=2 else aktivSpieler:=1;
end;
Das sollte Dir erstmal helfen den Aufbau zu verstehen... Hoffe ich!
Bei Unklarheiten einfach explizit die Frage stellen!
Ein fertiges Prog wird Dir hier hoffentlich keiner geben, weil mich sowas in Info immer
aufgeregt hat wenn man selber denkt und ein Quelltextschnorrer dann ne 1 bekommt!
Aber Hilfsstellungen geben hier alle...


:dp:

BrabusMercedes 2. Dez 2004 19:41

Re: 4 Gewinnt
 
Ich soll explizite Fragen stellen, oder? Kann ich dich dann mal bitten die Schritte exakt zu kommentieren, um das ich die Schritte auch richtig nachvollziehen kann. Desweiteren hast du eine Procedure geschrieben, die soweit ich weiß auf einen Mausklick reagiert, oder? Ich soll aber ein Programm schreiben, so wie ich es in der .pas Datei schon begonnen hab, ich brauche eine Procedure setzen, die die Funktion MouseToCell aufruft, sich diese Zelle dann merkt und in diese Zelle ein Zeichen macht. Weitere Fragen, was bedeutet die Variablenvereinbarung a,b : byte? Ich weiß das klingt alles ziemlich planlos, aber ich bin echt noch dabei zu verstehen wie Delphi funktioniert!

bigg 2. Dez 2004 20:02

Re: 4 Gewinnt
 
Mit einem Byte kann man Zahlen von 0-255 darstellen.
Ein Byte besteht aus 8 Bit. Mit Hilfe dieser 8 Bit kann,
man nun alle Zahlen von 0-255 darstellen.

Ein Byte ist also eine Zahl von 0 bis 255.
Warum macht man das? Um Speicher zu sparen!

chkdsk 2. Dez 2004 22:33

Re: 4 Gewinnt
 
Delphi-Quellcode:
//  Sagen wir mal deine Form ist 70 mal 70 pixel groß
//  und es gibt die globalen Variablen aktivSpieler und Spielfeld=array[0..6,0..6]of byte

procedure TSpielfeldOnMouseDown(x,y:integer;Sender: TObject);
begin
 
Spielfeld[(x div 10),(y div 10)]:=aktivSpieler;

//Ins Feld einzeichnen (z.B. durch Füll-Methoden)

aktivspieler := 3 - aktivspieler;

//checken, ob ein Spieler 4 Steine in einer Reihe hat
end;
Ist vielleicht noch ein bisschen kürzer.

Zum Verständnis:

Das Spielfeld kannst du ja mit einem Graphicprogramm zeichnen und dann in die Komponente nett einbinden.
(x div 10) //Berechnung Spielfeldkoordinate aus Pixelposition
aktivspieler := 3 - aktivspieler; //liefert jeweils anderen Spieler.

Was noch fehlt: Siehe Kommentare

Vielleicht noch die Anzeige, wer gerade dran ist, eine KI, etc., aber ansonsten wäre das Spiel dann fertig!

bigg 3. Dez 2004 02:04

Re: 4 Gewinnt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
var i, f, circle: Integer;

const d = 50;              // Durchmesser aller Kreise in Pixel
Abstand = 15;              // Abstand zu jedem Kreis in Pixel

begin
circle := d + Abstand;

with Self.Canvas do
begin
Brush.Style := bsSolid;    // Hintergrundtyp
Brush.Color := clWindow;   // Hintergrundfarbe
FillRect(ClipRect);        // Hintergrund ausmalen

Pen.Width := 1;            // Linienbreite
Pen.Style := psDot;        // Linientyp
Pen.Color := clGray;       // Linienfarbe

for f := 0 to 6 do
begin                      // Zeichne alle Spalten

for i := 0 to 6 do
begin                      // Zeichne eine Spalte

Ellipse(                    // Zeichne einen Kreis
(f * circle) + Abstand,    // Left
(i * circle) + Abstand,    // Top
d + (f * circle) + Abstand, // Width
d + (i * circle) + Abstand // Height
);

end;
end;
end; {with Self.Canvas}
end;
Das Grundgerüst des Spiels könnte so aussehen.
Kopier das Ganze in das Onpaint-Ereignis deines Fensters.


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