![]() |
xxo spiel, benötige eure hilfe
hi,
habe ein xxo spiel mit ki zugeschickt bekommen (danke an dieser stelle).. aber ich muss das jmd erklären, un weiß echt nicht was in den einzelnen abschnitten gemacht bzw erzielt wird. wäre echt nett, wenn mir jmd mit einfachen kommentaren wie zB //spieler 1 macht einen zug ... weiterhelfen kann, weil blick da echt nicht durch ^^ danke im voraus
Delphi-Quellcode:
unit UMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TSpieler = (keiner, mensch, maschine, unentschieden); TFeld = (nix, rot, blau); TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Shape3: TShape; Shape4: TShape; Shape5: TShape; Shape6: TShape; Shape7: TShape; Shape8: TShape; Shape9: TShape; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure initgame; procedure reinitgame; function bewertung(spieler, gegner: TSpieler): integer; procedure ki; function gwinner: TSpieler; procedure myMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; spieler: TSpieler; runden: integer; spielende: boolean; felder: array[1..9] of TFeld; implementation {$R *.dfm} function TForm1.bewertung(spieler, gegner: TSpieler): integer; begin result := 0; if gwinner = spieler then result := 1; if gwinner = gegner then result := -1; end; procedure TForm1.ki; var nextone: integer; function minimax(Level, MaxLevel: Integer; Spieler, Gegner: TSpieler; var aBestMove: integer): integer; var S, MaxS, i: Integer; Dummy: integer; begin MaxS := - maxint; for i := 1 To 9 Do if felder[i] = nix then begin case Spieler of mensch: felder[i] := rot; maschine: felder[i] := blau; end; S := Bewertung(Spieler, Gegner); if (S = 0) and (Level < MaxLevel) then S := - minimax(Level + 1, MaxLevel, Gegner, Spieler, Dummy); felder[i] := nix; if S > MaxS then begin MaxS := s; aBestMove := i; If s > 0 then begin Result := s; exit; end; end; end; If MaxS = - maxint then begin Result := Bewertung(Spieler, Gegner); aBestMove := -1; end else Result := MaxS; end; begin nextone := 5; if not spielende then begin if (runden = 1) and (felder[5] = rot) then nextone := 1; if runden > 1 then minimax(0, maxint, maschine, mensch, nextone); if felder[nextone] = nix then begin felder[nextone] := blau; tshape(findcomponent('shape' + inttostr(nextone))).brush.color := clblue; if gwinner = maschine then begin spielende := true; showmessage('Du hast verloren'); end else if gwinner = unentschieden then begin spielende := true; showmessage('Unentschieden'); end; spieler := mensch; inc(runden); end; end; end; procedure TForm1.initgame; var rand: byte; begin spielende := false; runden := 0; rand := random(2); if rand = 0 then spieler := mensch else begin spieler := maschine; ki; end; end; procedure TForm1.reinitgame; var i: integer; begin for i := 1 to 9 do begin felder[i] := nix; TShape(findcomponent('shape' + inttostr(i))).brush.color := clwhite; end; initgame; end; function TForm1.gwinner: TSpieler; function checkf(farbe: TFeld): boolean; begin result := ((felder[1] = farbe) and (felder[2] = farbe) and (felder[3] = farbe)) or ((felder[4] = farbe) and (felder[5] = farbe) and (felder[6] = farbe)) or ((felder[7] = farbe) and (felder[8] = farbe) and (felder[9] = farbe)) or ((felder[1] = farbe) and (felder[4] = farbe) and (felder[7] = farbe)) or ((felder[2] = farbe) and (felder[5] = farbe) and (felder[8] = farbe)) or ((felder[3] = farbe) and (felder[6] = farbe) and (felder[9] = farbe)); if ((felder[1] = farbe) and (felder[5] = farbe) and (felder[9] = farbe)) then result := true; if ((felder[3] = farbe) and (felder[5] = farbe) and (felder[7] = farbe)) then result := true; end; var i: integer; ucheck: boolean; begin ucheck := true; result := keiner; if checkf(rot) then result := mensch; if checkf(blau) then result := maschine; if (result = keiner) then begin for i := 1 to 9 do if felder[i] = nix then begin ucheck := false; break; end; if ucheck then result := unentschieden; end; end; procedure TForm1.myMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (spieler = mensch) and (not spielende) and (felder[TShape(Sender).Tag] = nix) then begin felder[TShape(Sender).Tag] := rot; TShape(Sender).brush.color := clred; { //wird eh nie in kraft treten ^^ if gwinner = mensch then begin spielende := true; showmessage('Du hast gewonnen'); end else } if gwinner = unentschieden then begin spielende := true; showmessage('Unentschieden'); end; spieler := maschine; inc(runden); ki; end; end; procedure TForm1.FormCreate(Sender: TObject); var i: byte; begin for i := 1 to 9 do TShape(findcomponent('Shape' + inttostr(i))).Tag := i; initgame; end; procedure TForm1.Button1Click(Sender: TObject); begin reInitGame; end; Initialization randomize; end. |
Re: xxo spiel, benötige eure hilfe
Vieleicht solltest Du F34r0fTh3D4rk mal Fragen ob Er Dir den Code erklärt, falls Du nicht mehr weißt wo hier.
![]() |
Re: xxo spiel, benötige eure hilfe
Leute gibts ... ^^
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz