AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

4 Gewinnt

Offene Frage von "BrabusMercedes"
Ein Thema von BrabusMercedes · begonnen am 1. Dez 2004 · letzter Beitrag vom 3. Dez 2004
Antwort Antwort
BrabusMercedes

Registriert seit: 6. Okt 2004
3 Beiträge
 
#1

4 Gewinnt

  Alt 1. Dez 2004, 20:43
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!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: 4 Gewinnt

  Alt 1. Dez 2004, 20:46
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#3

Re: 4 Gewinnt

  Alt 1. Dez 2004, 20:47
Hier könnte was dabei sein.
Julian J. Pracht
  Mit Zitat antworten Zitat
BrabusMercedes

Registriert seit: 6. Okt 2004
3 Beiträge
 
#4

Re: 4 Gewinnt

  Alt 1. Dez 2004, 21:13
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.
Angehängte Dateien
Dateityp: dfm unit1_185.dfm (861 Bytes, 17x aufgerufen)
Dateityp: dpr project1_192.dpr (188 Bytes, 20x aufgerufen)
Dateityp: pas unit1_123.pas (1,1 KB, 22x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: 4 Gewinnt

  Alt 1. Dez 2004, 21:46
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...


Thomas
  Mit Zitat antworten Zitat
BrabusMercedes

Registriert seit: 6. Okt 2004
3 Beiträge
 
#6

Re: 4 Gewinnt

  Alt 2. Dez 2004, 20:41
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!
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#7

Re: 4 Gewinnt

  Alt 2. Dez 2004, 21:02
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!
  Mit Zitat antworten Zitat
chkdsk
(Gast)

n/a Beiträge
 
#8

Re: 4 Gewinnt

  Alt 2. Dez 2004, 23:33
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!
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#9

Re: 4 Gewinnt

  Alt 3. Dez 2004, 03:04
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.
Miniaturansicht angehängter Grafiken
viergewinnt.png  
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:46 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