| Autor |
Beitrag |
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 06.02.05 21:48
hier mal mein ganzer code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320:
| unit UMain;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus;
type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; MainMenu1: TMainMenu; Spiel1: TMenuItem; Neustart1: TMenuItem; N1: TMenuItem; Beenden1: TMenuItem; procedure FormCreate(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image2Click(Sender: TObject); procedure Image3Click(Sender: TObject); procedure Image4Click(Sender: TObject); procedure Image5Click(Sender: TObject); procedure Image6Click(Sender: TObject); procedure Image7Click(Sender: TObject); procedure Image8Click(Sender: TObject); procedure Image9Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Neustart1Click(Sender: TObject); private public end;
var Form1: TForm1; i, j, k: integer; player: boolean; map: array of array of integer; able: array[1..9] of boolean;
implementation
{$R *.dfm}
function HCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if map[0,0] and map[0,1] and map[0,2] = player then result:= true; if map[1,0] and map[1,1] and map[1,2] = player then result:= true; if map[2,0] and map[2,1] and map[2,2] = player then result:= true; end; end;
function VCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if map[0,0] and map[1,0] and map[2,0] = player then result:= true; if map[0,1] and map[1,1] and map[2,1] = player then result:= true; if map[0,2] and map[1,2] and map[2,2] = player then result:= true; end; end;
function DCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if map[0,0] and map[1,1] and map[2,2] = player then result:= true; if map[0,2] and map[1,1] and map[2,0] = player then result:= true; end; end;
function WinCheck(Player: integer): boolean; begin if HCheck(Player) or VCheck(Player) or DCheck(Player) = true then showmessage('Spieler ' + inttostr(player) + ' hat gewonnen!'); end;
procedure TForm1.FormCreate(Sender: TObject); var PMap : TComponent; begin setlength(map,3,3); SetBounds((Screen.Width - Width) div 2, (Screen.Height - Height) div 2, Width, Height); player:= true; for j:= 0 to 2 do for k:= 0 to 2 do map[j,k]:= 0; for i:= 1 to 9 do begin able[i]:= true; PMap := FindComponent('image'+IntToStr(i)); if PMap <> nil then with Timage(Pmap).Canvas do begin brush.color:= clwhite; rectangle(0,0,Timage(Pmap).width,Timage(Pmap).width); end; end; end;
procedure TForm1.Image1Click(Sender: TObject); begin if able[1] = true then begin if player = true then map[0,0]:= 1 else map[0,0]:= 2; player:= not player; if map[0,0] = 1 then with image1.Canvas do begin brush.Color:= clred; ellipse(0,0,image1.Width,image1.Height); end; if map[0,0] = 2 then with image1.Canvas do begin brush.Color:= clblue; ellipse(0,0,image1.Width,image1.Height); end; able[1]:= false; end; case player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image2Click(Sender: TObject); begin if able[2] = true then begin if player = true then map[0,1]:= 1 else map[0,1]:= 2; player:= not player; if map[0,1] = 1 then with image2.Canvas do begin brush.Color:= clred; ellipse(0,0,image2.Width,image2.Height); end; if map[0,1] = 2 then with image2.Canvas do begin brush.Color:= clblue; ellipse(0,0,image2.Width,image2.Height); end; able[2]:= false; end; case player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image3Click(Sender: TObject); begin if able[3] = true then begin if player = true then map[0,2]:= 1 else map[0,2]:= 2; player:= not player; if map[0,2] = 1 then with image3.Canvas do begin brush.Color:= clred; ellipse(0,0,image3.Width,image3.Height); end; if map[0,2] = 2 then with image3.Canvas do begin brush.Color:= clblue; ellipse(0,0,image3.Width,image3.Height); end; able[3]:= false; end; case player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image4Click(Sender: TObject); begin if able[4] = true then begin if player = true then map[1,0]:= 1 else map[1,0]:= 2; player:= not player; if map[1,0] = 1 then with image4.Canvas do begin brush.Color:= clred; ellipse(0,0,image4.Width,image4.Height); end; if map[1,0] = 2 then with image4.Canvas do begin brush.Color:= clblue; ellipse(0,0,image4.Width,image4.Height); end; able[4]:= false; end; case player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image5Click(Sender: TObject); begin if able[5] = true then begin if player = true then map[1,1]:= 1 else map[1,1]:= 2; player:= not player; if map[1,1] = 1 then with image5.Canvas do begin brush.Color:= clred; ellipse(0,0,image5.Width,image5.Height); end; if map[1,1] = 2 then with image5.Canvas do begin brush.Color:= clblue; ellipse(0,0,image5.Width,image5.Height); end; able[5]:= false; end; case player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image6Click(Sender: TObject); begin if able[6] = true then begin if player = true then map[1,2]:= 1 else map[1,2]:= 2; player:= not player; if map[1,2] = 1 then with image6.Canvas do begin brush.Color:= clred; ellipse(0,0,image6.Width,image6.Height); end; if map[1,2] = 2 then with image6.Canvas do begin brush.Color:= clblue; ellipse(0,0,image6.Width,image6.Height); end; able[6]:= false; end; case player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image7Click(Sender: TObject); begin if able[7] = true then begin if player = true then map[2,0]:= 1 else map[2,0]:= 2; player:= not player; if map[2,0] = 1 then with image7.Canvas do begin brush.Color:= clred; ellipse(0,0,image7.Width,image7.Height); end; if map[2,0] = 2 then with image7.Canvas do begin brush.Color:= clblue; ellipse(0,0,image7.Width,image7.Height); end; able[7]:= false; end; case player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image8Click(Sender: TObject); begin if able[8] = true then begin if player = true then map[2,1]:= 1 else map[2,1]:= 2; player:= not player; if map[2,1] = 1 then with image8.Canvas do begin brush.Color:= clred; ellipse(0,0,image8.Width,image8.Height); end; if map[2,1] = 2 then with image8.Canvas do begin brush.Color:= clblue; ellipse(0,0,image8.Width,image8.Height); end; able[8]:= false; end; case player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image9Click(Sender: TObject); begin if able[9] = true then begin if player = true then map[2,2]:= 1 else map[2,2]:= 2; player:= not player; if map[2,2] = 1 then with image9.Canvas do begin brush.Color:= clred; ellipse(0,0,image9.Width,image9.Height); end; if map[2,2] = 2 then with image9.Canvas do begin brush.Color:= clblue; ellipse(0,0,image9.Width,image9.Height); end; able[9]:= false; end; case player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Beenden1Click(Sender: TObject); begin application.terminate; end;
procedure TForm1.Neustart1Click(Sender: TObject); var PMap : TComponent; begin player:= true; for j:= 0 to 2 do for k:= 0 to 2 do map[j,k]:= 0; for i:= 1 to 9 do begin able[i]:= true; PMap := FindComponent('image'+IntToStr(i)); if PMap <> nil then with Timage(Pmap).Canvas do begin brush.color:= clwhite; rectangle(0,0,Timage(Pmap).width,Timage(Pmap).width); end; end; end;
end |
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 06.02.05 22:08
Moin!
Zunächstmal: Du kannst ja doch Code formatieren!  Glückwunsch. Jetzt kann man da auch mal reinsehen...
Ich habe mir den Code noch nicht genau genug angesehen, aber das fällt mir erstmal auf:
Delphi-Quelltext 1:
| if map[0,0] and map[0,1] and map[0,2] = player then result:= true; |
Das kann so nicht klappen, denn du vergleichst da das Ergebnis einer mehrfachen binären Und-Operation mit einem Integer. Also eigentlich passiert da sowas:
Delphi-Quelltext 1:
| if ( (map[0,0] and map[0,1] and map[0,2]) = player) then result:= true; |
Es wird also das Ergebnis der Und-Operationen mit der Variable player verglichen, das kann nicht das sein, was du willst.
Das ließe sich auch so formulieren:
Delphi-Quelltext 1: 2: 3:
| Result := ( (map[0,0] = player) and (map[0,1] = player) and (map[0,2] = player) ); |
Wenn du Ausdrücke klammerst, auch wenn das auf den ersten Blick nicht notwendig ist, dann passiert einem sowas nicht aus Versehen; ist auch einfacher beim Umstieg auf andere Programmiersprachen und man macht weniger Fehler in der Operatorenrangfolge.
----------
//EDIT: So, hab mir den Code mal angesehen; leider ist dein Konzept etwas... naja... egal. Da du dir die Arbeit mit dem Code gemacht hast, will ich dir im Gegenzug diesen Lösungsvorschlag machen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166:
| const WinPos: Array [0..7,0..2] of Integer = ( (0,1,2), (3,4,5), (6,7,8), (0,3,6), (1,4,7), (2,5,8), (0,4,8), (2,4,6) ); type TPlayer = (pvNone,pvRed,pvBlue);
TEndCondition = (ecRunning,ecRemis,ecRedWon,ecBlueWon);
TMapPoint = record Image: TImage; Value: TPlayer; end;
TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; MainMenu1: TMainMenu; Spiel1: TMenuItem; Neustart1: TMenuItem; N1: TMenuItem; Beenden1: TMenuItem; procedure FormCreate(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Neustart1Click(Sender: TObject); procedure ImageClick(Sender: TObject); function CheckEndCondition: TEndCondition; private public end;
var Form1: TForm1; CurrentPlayer: TPlayer; GameState: TEndCondition; Map: Array [0..8] of TMapPoint;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Map[0].Image := Image1; Map[1].Image := Image2; Map[2].Image := Image3; Map[3].Image := Image4; Map[4].Image := Image5; Map[5].Image := Image6; Map[6].Image := Image7; Map[7].Image := Image8; Map[8].Image := Image9; Neustart1Click(Self); end;
procedure TForm1.Neustart1Click(Sender: TObject); var i: Integer; begin for i := 0 to 8 do begin with Map[i].Image.Canvas do begin Brush.Color := clWhite; Rectangle(0,0,Map[i].Image.Width,Map[i].Image.Height); end; Map[i].Value := pvNone; end; GameState := ecRunning; CurrentPlayer := pvRed; end;
function TForm1.CheckEndCondition: TEndCondition; var i: Integer; FreeAvail: Boolean; begin Result := ecRunning; FreeAvail := FALSE; i := 0; while ( (i <= High(WinPos)) and (Result = ecRunning) ) do begin if ( (Map[WinPos[i,0]].Value = Map[WinPos[i,1]].Value) and (Map[WinPos[i,0]].Value = Map[WinPos[i,2]].Value) ) then case Map[WinPos[i,0]].Value of pvRed: Result := ecRedWon; pvBlue: Result := ecBlueWon; end; Inc(i); end; if (Result = ecRunning) then begin for i := 0 to 8 do FreeAvail := ( FreeAvail or (Map[i].Value = pvNone) ); if (NOT FreeAvail) then Result := ecRemis; end; end;
procedure TForm1.ImageClick(Sender: TObject); var i: Integer; begin if (GameState < ecRemis) then begin i := 0; while (Map[i].Image <> Sender) do Inc(i); if (Map[i].Value = pvNone) then begin Map[i].Value := CurrentPlayer; case CurrentPlayer of pvRed: begin Map[i].Image.Canvas.Brush.Color := clRed; CurrentPlayer := pvBlue; end; pvBlue: begin Map[i].Image.Canvas.Brush.Color := clBlue; CurrentPlayer := pvRed; end; end; Map[i].Image.Canvas.Ellipse(0,0,Map[i].Image.Width,Map[i].Image.Height); GameState := CheckEndCondition; case GameState of ecRemis: ShowMessage('Unentschieden!'); ecRedWon: ShowMessage('Rot hat gewonnen!'); ecBlueWon: ShowMessage('Blau hat gewonnen!'); end; end; end else ShowMessage('Das Spiel ist beendet!'); end;
procedure TForm1.Beenden1Click(Sender: TObject); begin Application.Terminate; end; |
Entscheidende konzeptionelle Änderungen gegenüber deinem Code:
- um den Code überhaupt laufen lassen zu können, mußt du in deinem Projekt die OnClick-Ereignisse ALLER(!) Images auf die entsprechende, zentrale Prozedur umstellen
- statisches Feld, statt dynamisches (ist unnötig, da die Images auch statisch sind)
- alle zu einem Feld gehörenden Eigenschaften in ein Record verpackt, dazu entsprechende Aufzählungstypen angelegt
- die Gewinnbedingungen sind als 2d-Array fest im Code verankert; bei dem Spielfeld sind Algorithmen (egal welche) oversized!
- du hast keinen globalen Spielzustand in deinem Code gehabt und auch kein Remis
- wenn das Spiel beendet ist, geht nix mehr, bis man neu startet
Schau´s dir mal genau an und stell Fragen, wenn du etwas nicht verstanden hast; es wäre jetzt SEHR SCHADE (und ich ziemlich geknickt!), wenn du dir einen ins Fäustchen lachst nach dem Motto: "Endlich hat´s einer ausgespuckt! Hauptsache ist, man nervt lange genug rum und schreibt schön viele Schiebepostings", anstatt etwas daraus zu lernen.
cu
Narses
PS: Ich gebe zu, ich habe absichtlich gewartet, damit es nicht mehr für Montag erreichbar für dich ist; ich möchte so den "Hausaufgaben-Effekt" umgehen. Sorry. 
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 07.02.05 13:32
ich versteh nicht was du am anfang meintest, das funktioniert doch ???
nur mein problem ist, dass es erst beim nächsten klick abgefragt wird
und wenn die bedingung zum gewinnen mehrmals erfüllt wird, ist das spiel nicht gewonnen.
das liegt am if ... or ... or, da müsste sowas wie UND/ODER hin aber wie mache ich das ?
deinen code werde ich mal testen wenn ich zu Hause bin, also so gefällt der mir schonmal ganz gut ^^
Die Gewinn-Reihen in einem Array zu speichern ist natürlich net schlecht
Delphi-Quelltext
sowas wollte ich auch machen, aber ich fands anfangs unelegant, ich wollte das zuerst auf eine externe procedure auslagern, aber du hast ja recht
dein code ist zwar recht schön, aber ich hätte es ja nicht wirklich alleine gelöst, der code weicht ja schon stark von meinem ab, ich würde aber gerne bei meinem code bleiben, wie kann meine beiden probleme in meinem code lösen, ohne viel zu ändern ?
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 07.02.05 14:31
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332:
| unit UMain;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus;
type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; MainMenu1: TMainMenu; Spiel1: TMenuItem; Neustart1: TMenuItem; N1: TMenuItem; Beenden1: TMenuItem; procedure FormCreate(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image2Click(Sender: TObject); procedure Image3Click(Sender: TObject); procedure Image4Click(Sender: TObject); procedure Image5Click(Sender: TObject); procedure Image6Click(Sender: TObject); procedure Image7Click(Sender: TObject); procedure Image8Click(Sender: TObject); procedure Image9Click(Sender: TObject); procedure Neustart1Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; i, j, k: integer; player: boolean; map: array of array of integer; able: array[1..9] of boolean;
implementation
{$R *.dfm}
function HCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if map[0,0] and map[0,1] and map[0,2] = player then result:= true; if map[1,0] and map[1,1] and map[1,2] = player then result:= true; if map[2,0] and map[2,1] and map[2,2] = player then result:= true; end; end;
function VCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if map[0,0] and map[1,0] and map[2,0] = player then result:= true; if map[0,1] and map[1,1] and map[2,1] = player then result:= true; if map[0,2] and map[1,2] and map[2,2] = player then result:= true; end; end;
function DCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if map[0,0] and map[1,1] and map[2,2] = player then result:= true; if map[0,2] and map[1,1] and map[2,0] = player then result:= true; end; end;
procedure WinCheck(Player: integer); var Win: boolean; begin Win:= false; Win:= HCheck(Player); Win:= VCheck(Player); Win:= DCheck(Player); if Win = true then showmessage('Spieler ' + inttostr(player) + ' hat gewonnen!'); end;
procedure TForm1.FormCreate(Sender: TObject); var PMap : TComponent; begin setlength(map,3,3); SetBounds((Screen.Width - Width) div 2, (Screen.Height - Height) div 2, Width, Height); player:= true; for j:= 0 to 2 do for k:= 0 to 2 do map[j,k]:= 0; for i:= 1 to 9 do begin able[i]:= true; PMap := FindComponent('image'+IntToStr(i)); if PMap <> nil then with Timage(Pmap).Canvas do begin brush.color:= clwhite; rectangle(0,0,Timage(Pmap).width,Timage(Pmap).width); end; end; end;
procedure TForm1.Image1Click(Sender: TObject); begin if able[1] = true then begin if player = true then map[0,0]:= 1 else map[0,0]:= 2; player:= not player; if map[0,0] = 1 then with image1.Canvas do begin brush.Color:= clred; ellipse(0,0,image1.Width,image1.Height); end; if map[0,0] = 2 then with image1.Canvas do begin brush.Color:= clblue; ellipse(0,0,image1.Width,image1.Height); end; able[1]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image2Click(Sender: TObject); begin if able[2] = true then begin if player = true then map[0,1]:= 1 else map[0,1]:= 2; player:= not player; if map[0,1] = 1 then with image2.Canvas do begin brush.Color:= clred; ellipse(0,0,image2.Width,image2.Height); end; if map[0,1] = 2 then with image2.Canvas do begin brush.Color:= clblue; ellipse(0,0,image2.Width,image2.Height); end; able[2]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image3Click(Sender: TObject); begin if able[3] = true then begin if player = true then map[0,2]:= 1 else map[0,2]:= 2; player:= not player; if map[0,2] = 1 then with image3.Canvas do begin brush.Color:= clred; ellipse(0,0,image3.Width,image3.Height); end; if map[0,2] = 2 then with image3.Canvas do begin brush.Color:= clblue; ellipse(0,0,image3.Width,image3.Height); end; able[3]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image4Click(Sender: TObject); begin if able[4] = true then begin if player = true then map[1,0]:= 1 else map[1,0]:= 2; player:= not player; if map[1,0] = 1 then with image4.Canvas do begin brush.Color:= clred; ellipse(0,0,image4.Width,image4.Height); end; if map[1,0] = 2 then with image4.Canvas do begin brush.Color:= clblue; ellipse(0,0,image4.Width,image4.Height); end; able[4]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image5Click(Sender: TObject); begin if able[5] = true then begin if player = true then map[1,1]:= 1 else map[1,1]:= 2; player:= not player; if map[1,1] = 1 then with image5.Canvas do begin brush.Color:= clred; ellipse(0,0,image5.Width,image5.Height); end; if map[1,1] = 2 then with image5.Canvas do begin brush.Color:= clblue; ellipse(0,0,image5.Width,image5.Height); end; able[5]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image6Click(Sender: TObject); begin if able[6] = true then begin if player = true then map[1,2]:= 1 else map[1,2]:= 2; player:= not player; if map[1,2] = 1 then with image6.Canvas do begin brush.Color:= clred; ellipse(0,0,image6.Width,image6.Height); end; if map[1,2] = 2 then with image6.Canvas do begin brush.Color:= clblue; ellipse(0,0,image6.Width,image6.Height); end; able[6]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image7Click(Sender: TObject); begin if able[7] = true then begin if player = true then map[2,0]:= 1 else map[2,0]:= 2; player:= not player; if map[2,0] = 1 then with image7.Canvas do begin brush.Color:= clred; ellipse(0,0,image7.Width,image7.Height); end; if map[2,0] = 2 then with image7.Canvas do begin brush.Color:= clblue; ellipse(0,0,image7.Width,image7.Height); end; able[7]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image8Click(Sender: TObject); begin if able[8] = true then begin if player = true then map[2,1]:= 1 else map[2,1]:= 2; player:= not player; if map[2,1] = 1 then with image8.Canvas do begin brush.Color:= clred; ellipse(0,0,image8.Width,image8.Height); end; if map[2,1] = 2 then with image8.Canvas do begin brush.Color:= clblue; ellipse(0,0,image8.Width,image8.Height); end; able[8]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image9Click(Sender: TObject); begin if able[9] = true then begin if player = true then map[2,2]:= 1 else map[2,2]:= 2; player:= not player; if map[2,2] = 1 then with image9.Canvas do begin brush.Color:= clred; ellipse(0,0,image9.Width,image9.Height); end; if map[2,2] = 2 then with image9.Canvas do begin brush.Color:= clblue; ellipse(0,0,image9.Width,image9.Height); end; able[9]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Beenden1Click(Sender: TObject); begin application.terminate; end;
procedure TForm1.Neustart1Click(Sender: TObject); var PMap : TComponent; begin player:= true; for j:= 0 to 2 do for k:= 0 to 2 do map[j,k]:= 0; for i:= 1 to 9 do begin able[i]:= true; PMap := FindComponent('image'+IntToStr(i)); if PMap <> nil then with Timage(Pmap).Canvas do begin brush.color:= clwhite; rectangle(0,0,Timage(Pmap).width,Timage(Pmap).width); end; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin wincheck(1); end;
end. |
jetzt funzt es !!!
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 07.02.05 15:50
Moin!
| F34r0fTh3D4rk hat folgendes geschrieben: | | jetzt funzt es !!! |
Das glaub´ ich kaum, aber eins nach der Reihe...
| F34r0fTh3D4rk hat folgendes geschrieben: | | ich versteh nicht was du am anfang meintest, das funktioniert doch ??? |
Nein, das funktioniert nur zufällig, nicht beabsichtigt.  Ich vermute mal, du hältst diese Zeile:
Delphi-Quelltext 1:
| if map[0,0] and map[0,1] and map[0,2] = player then result:= true; |
für eine Kurzform von:
Delphi-Quelltext 1:
| if (map[0,0] = player) and (map[0,1] = player) and (map[0,2] = player) then result:= true; |
oder? In deinem speziellen Fall ist das auch so, aber das kann man nicht verallgemeinern, denn in der 2. Zeile werden boolsche Ausdrücke logisch UND-Verknüpft, während in der 1. Zeile ein binäres Undieren der Variablen dem Vergleich vorausgeht und dieser erst das boolsche Ergebnis liefert. Das ist aber nicht allgemein das Gleiche!
| F34r0fTh3D4rk hat folgendes geschrieben: | | nur mein problem ist, dass es erst beim nächsten klick abgefragt wird |
Nein, dein Problem ist, dass die Funktion WinCheck() nicht korrekt ist. Du rufst doch nach jedem Klick diese Funktion auf, aber sie erkennt einfach manche Gewinnreihen nicht, noch nicht bemerkt? Versuch mal damit zu gewinnen (O=rot, X=blau):
Quelltext
Das klappt zwar, aber erst durch die diagonale Reihe, weil du das Ergebnis nicht korrekt berechnest. Rot hat aber schon viel eher durch die horizontale Reihe gewonnen. Hier die Funktion:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure WinCheck(Player: integer); var Win: boolean; begin Win:= false; Win:= HCheck(Player); Win:= VCheck(Player); Win:= DCheck(Player); if Win = true then showmessage('Spieler ' + inttostr(player) + ' hat gewonnen!'); end; |
1. Win:= false und dann Win:=HCheck(Player) ist unsinnig, das FALSE hat ja gar keine Wirkung (das sagt dir doch auch der Compiler, noch nie die Warnung gesehen?).
2. Du überschreibst bei jedem weiteren Check das (möglicherweise) bereits eingetretene Gewinnergebnis!
Korrekt müßte das so lauten:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure WinCheck(Player: integer); var Win: boolean; begin Win:= HCheck(Player) or VCheck(Player) or DCheck(Player); if Win = true then showmessage('Spieler ' + inttostr(player) + ' hat gewonnen!'); end; |
Damit sollte es klappen, allerdings hast du dann immer noch das Problem, dass du nach dem Gewinnen weiterspielen kannst... Und weiter: was ist mit unentschieden?
Tipp: Du kannst den SetBounds() Aufruf im OnCreate der Form sparen, wenn du die Eigenschaft Position der Form auf poDesktopCenter stellst.
Eigentlich finde ich, kann man deinen Code kaum retten, aber ich verstehe auch, wenn du dabei bleiben willst; nur, ohne die eine oder andere grundlegend strukturelle Anpassung wirst du damit nicht weit kommen.  Damit meine ich z.B. die Compiler-Warnung: "[Warnung] Unit1.pas(110): FOR-Schleifenvariable muss eine einfache lokale Variable sein" oder das Problem, dass man nach dem Gewinnen noch weiterspielen kann, es kein Remis gibt... usw.
cu
Narses
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 07.02.05 17:03
ups hab die falsche unti gepostet sry, das muss natürlich so heißen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function Draw: boolean; var x,y,r: integer; begin result:= false; r:= 0; for x:= 0 to 2 do for y:= 0 to 2 do r:= r + map[x,y]; if r >= 13 then result:= true; end;
procedure WinCheck(Player: integer); var Win: boolean; begin Win:= false; if win = false then Win:= HCheck(Player); if win = false then Win:= VCheck(Player); if win = false then Win:= DCheck(Player); if Win = true then showmessage('Spieler ' + inttostr(player) + ' hat gewonnen!'); if Draw = true then showmessage('Unentschieden!'); end; |
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 07.02.05 17:07
oh sry narses hab deinen beitrag grad erst gelesen
Delphi-Quelltext 1:
| Win:= HCheck(Player) or VCheck(Player) or DCheck(Player); |
so DARF es nicht heißen, das hatte ich auch zuerst, was ist denn, wenn sowas passiert:
Quelltext
Das OR ist ein 'muss Oder', also dürfen nicht mehrere bedingungen erfüllt sein, das kann aber passieren!
und das:
| Zitat: |
| Zitat: |
F34r0fTh3D4rk hat folgendes geschrieben:
nur mein problem ist, dass es erst beim nächsten klick abgefragt wird
|
Nein, dein Problem ist, dass die Funktion WinCheck() nicht korrekt ist. Du rufst doch nach jedem Klick diese Funktion auf, aber sie erkennt einfach manche Gewinnreihen nicht, noch nicht bemerkt? Versuch mal damit zu gewinnen (O=rot, X=blau):
|
stimmt auch nicht, dass es erst nächste runde abgefragt wurde, lag daran, dass der spieler auf not spieler gesetzt wurde und dann der falsche Spieler abgefragt wurde, also musste das case of zu einem not case of werden und dann ging es
mit dem zentrieren hattes du ja rechst aber:
| Zitat: |
Eigentlich finde ich, kann man deinen Code kaum retten, aber ich verstehe auch, wenn du dabei bleiben willst; nur, ohne die eine oder andere grundlegend strukturelle Anpassung wirst du damit nicht weit kommen. Damit meine ich z.B. die Compiler-Warnung: "[Warnung] Unit1.pas(110): FOR-Schleifenvariable muss eine einfache lokale Variable sein" oder das Problem, dass man nach dem Gewinnen noch weiterspielen kann, es kein Remis gibt... usw.
|
warum ist der nicht zu retten, es funktioniert alles wie es soll und ich hab keine probleme, villeicht hättest du das ja nicht hingekriegt ohne nochmal von vorne anfangen zu müssen, aber das ist off topic.
nur weil dein code vielleicht "besser" ist, vielleicht eleganter, aber nicht kürzer, ist mein code doch nicht fürn Müll, es gibt schließlich mehr als nur eine Möglichkeit ein Problem zu lösen. Trotzdem danke für deine Mühe 
Zuletzt bearbeitet von F34r0fTh3D4rk am Mo 07.02.05 17:22, insgesamt 2-mal bearbeitet
|
|
suomi85
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 07.02.05 17:14
Wenn du nicht willst, dass sowas
Quelltext
passiert, solltest du aus dem OR einfach ein XOR machen. Jedenfalls wenn ich dein Problem richtig verstehe.
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 07.02.05 17:16
habs ja schon hinbekommen
(im letzten beitrag hab ich noch was hinzugefügt  )
Quelltext 1:
| FOR-Schleifenvariable muss eine einfache lokale Variable sein |
ist doch nicht schlimm wenn man die variable immer nur für das gleiche benutzt, ok lokal ist theoretisch besser, aber in diesem Fall nicht zwingend notwendig
| Zitat: |
Nein, das funktioniert nur zufällig, nicht beabsichtigt. Ich vermute mal, du hältst diese Zeile:
if map[0,0] and map[0,1] and map[0,2] = player then result:= true;
für eine Kurzform von:
if (map[0,0] = player) and (map[0,1] = player) and (map[0,2] = player) then
result:= true;
oder? In deinem speziellen Fall ist das auch so, aber das kann man nicht verallgemeinern, denn in der 2. Zeile werden boolsche Ausdrücke logisch UND-Verknüpft, während in der 1. Zeile ein binäres Undieren der Variablen dem Vergleich vorausgeht und dieser erst das boolsche Ergebnis liefert. Das ist aber nicht allgemein das Gleiche!
|
ok dat mussu mir jetzt nochmal erklären, das 2. liefert ein true wenn das was in der klammer steht war ist und das erste ? wäre das erste das gleiche wie das:
Delphi-Quelltext 1:
| if ((map[0,0] and map[0,1] and map[0,2]) = player) then result:= true; |
aber was passiert denn da ?
hab deine aussage leider net ganz verstanden
//////////////////////////////////////////
ach ja und in diesem code hier:
Quelltext 1:
| //EDIT: So, hab mir den Code mal angesehen; leider ist dein Konzept etwas... naja... egal. Da du dir die Arbeit mit dem Code gemacht hast, will ich dir im Gegenzug diesen Lösungsvorschlag machen: |
hat die string variable (etwas... naja...egal) welchen wert ? 
|
|
Loki
      
Beiträge: 34
Win XP Home
|
Verfasst: Mo 07.02.05 20:23
@F34r0fTh3D4rk: willst du jetzt noch meinen Code haben ? Aber ich habe das ganze mit BitButtons gemacht auf die ich zeichne. Ging mir nicht ums Design sondern um die Programmierung *ggg* Also wenn du den Code trotzdem noch haben willst dann schick ich ihn dir. Muss dann nur noch ein paar Kommentare hinzufügen und ich bin mir nicht sicher ob es morgen dann noch was wird.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 07.02.05 22:38
Moin!
Ich muss zugeben, die Art, in der du hier auftrittst, macht es mir etwas schwer, sachlich mit dir umzugehen. Deine Beharrlichkeit, die von mir genannten Ansätze einfach nicht logisch zu durchdenken, ist schon erstaunlich. Nun denn, bevor es OT wird:
| F34r0fTh3D4rk hat folgendes geschrieben: | | villeicht hättest du das ja nicht hingekriegt ohne nochmal von vorne anfangen zu müssen |
Hm, starker Tobak, mach mal langsam... Also, hier ist DEIN Code von weiter oben zusammengeflickt und funktionsfähig, allerdings ohne eine explizite Ausgabe, dass es unentschieden ausgegangen ist:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus;
type TForm1 = class(TForm) MainMenu1: TMainMenu; Spiel1: TMenuItem; Neustart1: TMenuItem; N1: TMenuItem; Beenden1: TMenuItem; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; procedure FormCreate(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image2Click(Sender: TObject); procedure Image3Click(Sender: TObject); procedure Image4Click(Sender: TObject); procedure Image5Click(Sender: TObject); procedure Image6Click(Sender: TObject); procedure Image7Click(Sender: TObject); procedure Image8Click(Sender: TObject); procedure Image9Click(Sender: TObject); procedure Neustart1Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); private public end;
var Form1: TForm1; i, j, k: integer; player: boolean; map: array of array of integer; able: array[1..9] of boolean;
implementation
{$R *.dfm}
function HCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if map[0,0] and map[0,1] and map[0,2] = player then result:= true; if map[1,0] and map[1,1] and map[1,2] = player then result:= true; if map[2,0] and map[2,1] and map[2,2] = player then result:= true; end; end;
function VCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if map[0,0] and map[1,0] and map[2,0] = player then result:= true; if map[0,1] and map[1,1] and map[2,1] = player then result:= true; if map[0,2] and map[1,2] and map[2,2] = player then result:= true; end; end;
function DCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if map[0,0] and map[1,1] and map[2,2] = player then result:= true; if map[0,2] and map[1,1] and map[2,0] = player then result:= true; end; end;
procedure WinCheck(Player: integer); var Win: boolean; begin Win:= HCheck(Player) or VCheck(Player) or DCheck(Player); if Win = true then begin showmessage('Spieler ' + inttostr(player) + ' hat gewonnen!'); for i := 1 to 9 do able[i] := FALSE; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin setlength(map,3,3); Neustart1Click(Self); end;
procedure TForm1.Image1Click(Sender: TObject); begin if able[1] = true then begin if player = true then map[0,0]:= 1 else map[0,0]:= 2; player:= not player; if map[0,0] = 1 then with image1.Canvas do begin brush.Color:= clred; ellipse(0,0,image1.Width,image1.Height); end; if map[0,0] = 2 then with image1.Canvas do begin brush.Color:= clblue; ellipse(0,0,image1.Width,image1.Height); end; able[1]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image2Click(Sender: TObject); begin if able[2] = true then begin if player = true then map[0,1]:= 1 else map[0,1]:= 2; player:= not player; if map[0,1] = 1 then with image2.Canvas do begin brush.Color:= clred; ellipse(0,0,image2.Width,image2.Height); end; if map[0,1] = 2 then with image2.Canvas do begin brush.Color:= clblue; ellipse(0,0,image2.Width,image2.Height); end; able[2]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image3Click(Sender: TObject); begin if able[3] = true then begin if player = true then map[0,2]:= 1 else map[0,2]:= 2; player:= not player; if map[0,2] = 1 then with image3.Canvas do begin brush.Color:= clred; ellipse(0,0,image3.Width,image3.Height); end; if map[0,2] = 2 then with image3.Canvas do begin brush.Color:= clblue; ellipse(0,0,image3.Width,image3.Height); end; able[3]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image4Click(Sender: TObject); begin if able[4] = true then begin if player = true then map[1,0]:= 1 else map[1,0]:= 2; player:= not player; if map[1,0] = 1 then with image4.Canvas do begin brush.Color:= clred; ellipse(0,0,image4.Width,image4.Height); end; if map[1,0] = 2 then with image4.Canvas do begin brush.Color:= clblue; ellipse(0,0,image4.Width,image4.Height); end; able[4]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image5Click(Sender: TObject); begin if able[5] = true then begin if player = true then map[1,1]:= 1 else map[1,1]:= 2; player:= not player; if map[1,1] = 1 then with image5.Canvas do begin brush.Color:= clred; ellipse(0,0,image5.Width,image5.Height); end; if map[1,1] = 2 then with image5.Canvas do begin brush.Color:= clblue; ellipse(0,0,image5.Width,image5.Height); end; able[5]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image6Click(Sender: TObject); begin if able[6] = true then begin if player = true then map[1,2]:= 1 else map[1,2]:= 2; player:= not player; if map[1,2] = 1 then with image6.Canvas do begin brush.Color:= clred; ellipse(0,0,image6.Width,image6.Height); end; if map[1,2] = 2 then with image6.Canvas do begin brush.Color:= clblue; ellipse(0,0,image6.Width,image6.Height); end; able[6]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image7Click(Sender: TObject); begin if able[7] = true then begin if player = true then map[2,0]:= 1 else map[2,0]:= 2; player:= not player; if map[2,0] = 1 then with image7.Canvas do begin brush.Color:= clred; ellipse(0,0,image7.Width,image7.Height); end; if map[2,0] = 2 then with image7.Canvas do begin brush.Color:= clblue; ellipse(0,0,image7.Width,image7.Height); end; able[7]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image8Click(Sender: TObject); begin if able[8] = true then begin if player = true then map[2,1]:= 1 else map[2,1]:= 2; player:= not player; if map[2,1] = 1 then with image8.Canvas do begin brush.Color:= clred; ellipse(0,0,image8.Width,image8.Height); end; if map[2,1] = 2 then with image8.Canvas do begin brush.Color:= clblue; ellipse(0,0,image8.Width,image8.Height); end; able[8]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image9Click(Sender: TObject); begin if able[9] = true then begin if player = true then map[2,2]:= 1 else map[2,2]:= 2; player:= not player; if map[2,2] = 1 then with image9.Canvas do begin brush.Color:= clred; ellipse(0,0,image9.Width,image9.Height); end; if map[2,2] = 2 then with image9.Canvas do begin brush.Color:= clblue; ellipse(0,0,image9.Width,image9.Height); end; able[9]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Beenden1Click(Sender: TObject); begin application.terminate; end;
procedure TForm1.Neustart1Click(Sender: TObject); var PMap : TComponent; begin player:= true; for j:= 0 to 2 do for k:= 0 to 2 do map[j,k]:= 0; for i:= 1 to 9 do begin able[i]:= true; PMap := FindComponent('image'+IntToStr(i)); if PMap <> nil then with Timage(Pmap).Canvas do begin brush.color:= clwhite; rectangle(0,0,Timage(Pmap).width,Timage(Pmap).width); end; end; end;
end. |
Ich habe die geflickten Stellen hervorgehoben, damit klar ist, was da von mir und was von dir ist. Wenn du den Code mit deinem weiter oben (und hoffentlich noch nicht von dir veränderten) geposteten Code vergleichst, wirst du feststellen, dass meine genannten Änderungen exakt die Probleme beheben.
| F34r0fTh3D4rk hat folgendes geschrieben: | | aber nicht kürzer |
Hm, dein Code oben hat ca. 340 Zeilen, meiner hat ca. 180 Zeilen; interessante Form des Vergleichs, (340 < 180) = TRUE?
Ich bin nicht der Meinung, sondern es ist offensichtlich, dass dein Code erstaunlich ineffizient, demzufolge schwer zu debuggen, ist. Oder warum habe ich für meinen Code ca. 10min gebraucht und du doktorst jetzt schon Tage hier rum? Ich will keine arrogante Nummer auf deine Kosten abziehen, deshalb entschuldige ich mich schon jetzt dafür; was ich damit zeigen möchte, ist, dass eine gut geplante Datenstruktur und ein konsequent durchdachter Ansatz und daraus resultierende Umsetzung den größten Teil des Debugging überflüssig machen. Wenn du etwas mehr Erfahrung beim Programmieren und vor allem in der Informatik gesammelt hast, verstehst du vielleicht, was ich meine.
Jetzt noch zu den offenen Behauptungen:
| F34r0fTh3D4rk hat folgendes geschrieben: | so DARF es nicht heißen, das hatte ich auch zuerst, was ist denn, wenn sowas passiert
Das OR ist ein 'muss Oder', also dürfen nicht mehrere bedingungen erfüllt sein, das kann aber passieren |
Die Aussage ist falsch, denn der von dir zitierte Fall DARF erst gar nicht eintreten; wenn jemand bereits gewonnen hat, gibt es keine doppelten Gewinnbedingungen, da das Spiel zu Ende ist. Aus diesem Grund ist das ODER völlig korrekt eingesetzt: die erste wahre Bedingung beendet das Spiel, egal welche.
| F34r0fTh3D4rk hat folgendes geschrieben: | | stimmt auch nicht, dass es erst nächste runde abgefragt wurde, lag daran, dass der spieler auf not spieler gesetzt wurde und dann der falsche Spieler abgefragt wurde, also musste das case of zu einem not case of werden und dann ging es |
Wenn du mal in DEINEN Code da oben schaust, wirst du feststellen, dass die von dir angesprochene case-Anweisung bereits so ist, wie du sie jetzt beschreibst - offensichtlich hast du in deinen Versuchen, das Problem durch "empirische Informatik" (oder auch "rumbasteln") zu lösen, verfummelt, so dass du beim Probieren einen Fehler eingebaut hast - der Code war zu dem Zeitpunkt, als du ihn gepostet hast ja korrekt.
Ich wiederhole: Der Fehler lag in der nicht korrekten Bildung des Wahrheitswertes. Du kannst das selbst problemlos verifizieren, bau einfach den alten Code an der Stelle ein und schau, was passiert: die Gewinnbedingung wird nicht korrekt berechnet. Deinen alten Code findest du in meinem vorletzten Beitrag, falls du nicht mehr wissen solltest, was du da genau geschrieben hast...
Ein Denkanstoß vielleicht noch: Wenn du einen Ansatz gewählt hättest, der die Gewinnbedingung unabhängig vom aktuellen Spieler prüft, hättest du mit solchen Problemen nix am Hut; bestechende Idee, oder?
| F34r0fTh3D4rk hat folgendes geschrieben: | | ist doch nicht schlimm wenn man die variable immer nur für das gleiche benutzt, ok lokal ist theoretisch besser, aber in diesem Fall nicht zwingend notwendig |
Bitte nicht wieder falsch verstehen, aber das ist typisch für deinen Programmierstil - egal, geht doch - Leider ist aber genau das der Grund, wieso du so lange Debugging-Phasen hast; wenn du etwas mehr Sorgfalt beim coden aufwenden würdest, ließe sich das in besser funktionierendem Code erkennen. Mein Informatiklehrer nannte das immer "defensive Programmierweise", ich muss ihm schon Recht geben. Abgesehen davon, wenn das so "unschlimm" ist, warum nimmt es der Compiler dann zum Anlaß, eine Warnung zu erzeugen... ?
| F34r0fTh3D4rk hat folgendes geschrieben: | | ok dat mussu mir jetzt nochmal erklären |
Ich möchte sicherheitshalber nochmal klarstellen, dass ich GAR NICHTS ERKLÄREN MUSS. Ich mache das, weil es mir (manchmal) Spaß macht, jemandem beim Programmieren lernen zu helfen. Du bist allerdings ein erstaunlich "resistenter" Fall...
Bevor wir das sinnvoll klären können, würde ich gerne wissen, ob dir "binäre Operationen" wie UND, ODER, NICHT etwas sagen (damit meine ich NICHT das and, or, not in IF-Abfragen, also die boolschen Operatoren). Wenn du damit nichts anfangen kannst, ist zum einen klar, warum du meine Aussagen nicht verstehst, zum anderen solltest du dann in dieser Richtung etwas "Forschung" betreiben. Alternativ kann ich auch (kurz) etwas dazu sagen, wie du willst.
Vielleicht hast du ja auch (mittlerweile?) keinen Bock, überhaupt Vorschläge von mir zu lesen; kein Thema, sag es, ignorier meine Beiträge und wir lassen das einfach.
cu
Narses
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 08.02.05 15:15
du mich nicht verstehen, da wir sprechen unterschiedliches niveau!
| Zitat: |
Hm, dein Code oben hat ca. 340 Zeilen, meiner hat ca. 180 Zeilen; interessante Form des Vergleichs, (340 < 180) = TRUE?
|
ich kann ja bei meinem code auch mal die anderen 8 images weglassen, dann ist meiner kürzer
| Zitat: |
Jetzt noch zu den offenen Behauptungen:
| Zitat: |
so DARF es nicht heißen, das hatte ich auch zuerst, was ist denn, wenn sowas passiert
Das OR ist ein 'muss Oder', also dürfen nicht mehrere bedingungen erfüllt sein, das kann aber passieren
|
Die Aussage ist falsch, denn der von dir zitierte Fall DARF erst gar nicht eintreten; wenn jemand bereits gewonnen hat, gibt es keine doppelten Gewinnbedingungen, da das Spiel zu Ende ist. Aus diesem Grund ist das ODER völlig korrekt eingesetzt: die erste wahre Bedingung beendet das Spiel, egal welche.
|
doch der Fall kann und darf eintreten, guckst du hier:
das spielfeld sieht so aus:
Quelltext
dann ist Spieler1 nochmal dran und macht das hier:
Quelltext
somit wurde die gewinnbedinung zweimal erfüllt!
| Zitat: |
| Zitat: |
stimmt auch nicht, dass es erst nächste runde abgefragt wurde, lag daran, dass der spieler auf not spieler gesetzt wurde und dann der falsche Spieler abgefragt wurde, also musste das case of zu einem not case of werden und dann ging es
|
Wenn du mal in DEINEN Code da oben schaust, wirst du feststellen, dass die von dir angesprochene case-Anweisung bereits so ist, wie du sie jetzt beschreibst - offensichtlich hast du in deinen Versuchen, das Problem durch "empirische Informatik" (oder auch "rumbasteln") zu lösen, verfummelt, so dass du beim Probieren einen Fehler eingebaut hast - der Code war zu dem Zeitpunkt, als du ihn gepostet hast ja korrekt.
|
du hast mir aber darauf geantwortet bevor ich den fehler behoben habe.
Gib schon zu, du hast einen Fehler erkannt, der garnet da war, bzw hast du die eigentliche ursache des fehlers net erkannt, Player wird doch noch auf not Player gesetzt bevor die case abfrage kommt, also ist diese genau verkehrt herum!
| Zitat: |
Ein Denkanstoß vielleicht noch: Wenn du einen Ansatz gewählt hättest, der die Gewinnbedingung unabhängig vom aktuellen Spieler prüft, hättest du mit solchen Problemen nix am Hut; bestechende Idee, oder?
|
muss ja nicht sein wenns auch sparender geht, lieber die procedure 1 mal korrekt laufen lassen, als einmal zuviel ohne sinn, dass dabei was rauskommt
| Zitat: |
Bitte nicht wieder falsch verstehen, aber das ist typisch für deinen Programmierstil - egal, geht doch - Leider ist aber genau das der Grund, wieso du so lange Debugging-Phasen hast; wenn du etwas mehr Sorgfalt beim coden aufwenden würdest, ließe sich das in besser funktionierendem Code erkennen. Mein Informatiklehrer nannte das immer "defensive Programmierweise", ich muss ihm schon Recht geben. Abgesehen davon, wenn das so "unschlimm" ist, warum nimmt es der Compiler dann zum Anlaß, eine Warnung zu erzeugen... ?
|
ok ich gebe dir recht, aber dass ich die variablen global gemacht habe, war nur dazu da, um die funktionalität zu prüfen, ich könnte die variable bnatürlich auch bei jeder neuen funktion lokal machen, aber wenn sie dann doch nicht funktioniert und ich nochmal von vorne anfange ist das naja zuviel schreibkram, aber danke, dass du mich drauf aufmerksam gemacht hast, hab das debug window nämlich net immer aktiv und dann sehe ich sowas meistens net  , daran werde ich arbeiten
| Zitat: |
Alternativ kann ich auch (kurz) etwas dazu sagen, wie du willst.
|
das wäre nett, danke
| Zitat: |
Vielleicht hast du ja auch (mittlerweile?) keinen Bock, überhaupt Vorschläge von mir zu lesen; kein Thema, sag es, ignorier meine Beiträge und wir lassen das einfach.
|
Konstruktive vorschläge kann ich durchaus gut leiden, aber wenn etwas nicht zum ziel führt, sondern einfach nur um den heißen brei geredet wird, bringt das nichts.
Deine Vorschläge sind zt gut und ich werde mir das auch zu herzen nehmen
MFG
F34r0fTh3D4rk
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323:
| unit UMain;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus;
type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; MainMenu1: TMainMenu; Spiel1: TMenuItem; Neustart1: TMenuItem; N1: TMenuItem; Beenden1: TMenuItem; procedure FormCreate(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image2Click(Sender: TObject); procedure Image3Click(Sender: TObject); procedure Image4Click(Sender: TObject); procedure Image5Click(Sender: TObject); procedure Image6Click(Sender: TObject); procedure Image7Click(Sender: TObject); procedure Image8Click(Sender: TObject); procedure Image9Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Neustart1Click(Sender: TObject); private public end;
var Form1: TForm1; player: boolean; map: array of array of integer; able: array[1..9] of boolean; implementation
{$R *.dfm}
function HCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if (map[0,0] = player) and (map[0,1] = player) and (map[0,2] = player) then result:= true; if (map[1,0] = player) and (map[1,1] = player) and (map[1,2] = player) then result:= true; if (map[2,0] = player) and (map[2,1] = player) and (map[2,2] = player) then result:= true; end; end;
function VCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if (map[0,0] = player) and (map[1,0] = player) and (map[2,0] = player) then result:= true; if (map[0,1] = player) and (map[1,1] = player) and (map[2,1] = player) then result:= true; if (map[0,2] = player) and (map[1,2] = player) and (map[2,2] = player) then result:= true; end; end;
function DCheck(Player: integer): boolean; begin result:= false; if player > 0 then begin if (map[0,0] = player) and (map[1,1] = player) and (map[2,2] = player) then result:= true; if (map[0,2] = player) and (map[1,1] = player) and (map[2,0] = player) then result:= true; end; end;
function Draw: boolean; var x,y,r: integer; begin result:= false; r:= 0; for x:= 0 to 2 do for y:= 0 to 2 do r:= r + map[x,y]; if r >= 13 then result:= true; end;
procedure WinCheck(Player: integer); var Win: boolean; begin Win:= false; if win = false then Win:= HCheck(Player); if win = false then Win:= VCheck(Player); if win = false then Win:= DCheck(Player); if Win = true then showmessage('Spieler ' + inttostr(player) + ' hat gewonnen!'); if (win = false) and (Draw = true) then showmessage('Unentschieden!'); end;
procedure TForm1.FormCreate(Sender: TObject); begin setlength(map,3,3); Neustart1Click(self); end;
procedure TForm1.Image1Click(Sender: TObject); begin if able[1] = true then begin if player = true then map[0,0]:= 1 else map[0,0]:= 2; player:= not player; if map[0,0] = 1 then with image1.Canvas do begin brush.Color:= clred; ellipse(0,0,image1.Width,image1.Height); end; if map[0,0] = 2 then with image1.Canvas do begin brush.Color:= clblue; ellipse(0,0,image1.Width,image1.Height); end; able[1]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image2Click(Sender: TObject); begin if able[2] = true then begin if player = true then map[0,1]:= 1 else map[0,1]:= 2; player:= not player; if map[0,1] = 1 then with image2.Canvas do begin brush.Color:= clred; ellipse(0,0,image2.Width,image2.Height); end; if map[0,1] = 2 then with image2.Canvas do begin brush.Color:= clblue; ellipse(0,0,image2.Width,image2.Height); end; able[2]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image3Click(Sender: TObject); begin if able[3] = true then begin if player = true then map[0,2]:= 1 else map[0,2]:= 2; player:= not player; if map[0,2] = 1 then with image3.Canvas do begin brush.Color:= clred; ellipse(0,0,image3.Width,image3.Height); end; if map[0,2] = 2 then with image3.Canvas do begin brush.Color:= clblue; ellipse(0,0,image3.Width,image3.Height); end; able[3]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image4Click(Sender: TObject); begin if able[4] = true then begin if player = true then map[1,0]:= 1 else map[1,0]:= 2; player:= not player; if map[1,0] = 1 then with image4.Canvas do begin brush.Color:= clred; ellipse(0,0,image4.Width,image4.Height); end; if map[1,0] = 2 then with image4.Canvas do begin brush.Color:= clblue; ellipse(0,0,image4.Width,image4.Height); end; able[4]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image5Click(Sender: TObject); begin if able[5] = true then begin if player = true then map[1,1]:= 1 else map[1,1]:= 2; player:= not player; if map[1,1] = 1 then with image5.Canvas do begin brush.Color:= clred; ellipse(0,0,image5.Width,image5.Height); end; if map[1,1] = 2 then with image5.Canvas do begin brush.Color:= clblue; ellipse(0,0,image5.Width,image5.Height); end; able[5]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image6Click(Sender: TObject); begin if able[6] = true then begin if player = true then map[1,2]:= 1 else map[1,2]:= 2; player:= not player; if map[1,2] = 1 then with image6.Canvas do begin brush.Color:= clred; ellipse(0,0,image6.Width,image6.Height); end; if map[1,2] = 2 then with image6.Canvas do begin brush.Color:= clblue; ellipse(0,0,image6.Width,image6.Height); end; able[6]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image7Click(Sender: TObject); begin if able[7] = true then begin if player = true then map[2,0]:= 1 else map[2,0]:= 2; player:= not player; if map[2,0] = 1 then with image7.Canvas do begin brush.Color:= clred; ellipse(0,0,image7.Width,image7.Height); end; if map[2,0] = 2 then with image7.Canvas do begin brush.Color:= clblue; ellipse(0,0,image7.Width,image7.Height); end; able[7]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image8Click(Sender: TObject); begin if able[8] = true then begin if player = true then map[2,1]:= 1 else map[2,1]:= 2; player:= not player; if map[2,1] = 1 then with image8.Canvas do begin brush.Color:= clred; ellipse(0,0,image8.Width,image8.Height); end; if map[2,1] = 2 then with image8.Canvas do begin brush.Color:= clblue; ellipse(0,0,image8.Width,image8.Height); end; able[8]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Image9Click(Sender: TObject); begin if able[9] = true then begin if player = true then map[2,2]:= 1 else map[2,2]:= 2; player:= not player; if map[2,2] = 1 then with image9.Canvas do begin brush.Color:= clred; ellipse(0,0,image9.Width,image9.Height); end; if map[2,2] = 2 then with image9.Canvas do begin brush.Color:= clblue; ellipse(0,0,image9.Width,image9.Height); end; able[9]:= false; end; case not player of true: WinCheck(1); false: WinCheck(2); end; end;
procedure TForm1.Beenden1Click(Sender: TObject); begin application.terminate; end;
procedure TForm1.Neustart1Click(Sender: TObject); var PMap : TComponent; i, j, k: integer; begin player:= true; for j:= 0 to 2 do for k:= 0 to 2 do map[j,k]:= 0; for i:= 1 to 9 do begin able[i]:= true; PMap := FindComponent('image'+IntToStr(i)); if PMap <> nil then with Timage(Pmap).Canvas do begin brush.color:= clwhite; rectangle(0,0,Timage(Pmap).width,Timage(Pmap).width); end; end; end;
end. |
Moderiert von raziel: Beiträge zusammengefasst
|
|
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 09.02.05 10:45
Ich hab mir jetzt nicht alles durchgelesen, sondern alles immer ein bisschen überflogen, aber du sagtest doch, es sei wie 4 Gewinnt, also wie kann in dieser Situation der Spieler mit den "X"-en an der Reihe sein?
Quelltext
wo hat dann zwischendurch Spieler "O" gesetzt?
|
|
F34r0fTh3D4rk 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 09.02.05 11:23
ja spieler X fängt an, es sind 9 felder, neun ist ungerade, dh
Reihenfolge:
Quelltext 1: 2:
| 1 2 3 4 5 6 7 8 9 X O X O X O X O X |
also kann es durch aus passieren !!!
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Mi 09.02.05 11:30
Nein, kann es nicht:
Quelltext 1: 2: 3: 4:
| 1: 2: 3: 4: 5: 6: 7: X X X OX OX OX Problem! X OX OX OX OX OOX |
_________________ JSXGraph
Zuletzt bearbeitet von raziel am Mi 09.02.05 11:31, insgesamt 1-mal bearbeitet
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 09.02.05 11:30
nein es kann nicht passwieren, bei 4 gewinnt wird immer unten aufgefüllt, bei deienr aussage fängt der mit X an
_ _ _
_ _ _
_ _ X
_ _ _
_ _ _
_ O X
_ _ _
_ _ X
_ 0 X
(wenn O jetzt nicht oben rechts hinmacht ist der eh dumm ;>)
_ _ _
_ O X
_ O X
(wer gehen mal davon aus das wird das erreich wollen was du uns gezeigt hast
_ X _
_ O X
_ O X
_ X _
_ 0 X
0 0 X
(so und nu wirds schwer mit dem doppeltem win da X dran ist
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 09.02.05 11:32
ach dreck  kann man net wirgenwie anzeigen lassen ob gerade jemand was im thread postet dann kommen die gleichen lösungen nicht öfter vor
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 09.02.05 11:36
Sagt mal, muss das eigentlich sein, dass Ihr hier immer wieder den gesamten Quelltext mit über 300 Zeilen postet? Es reichen doch bestimmt auch die relevanten Teile, oder? 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 09.02.05 11:53
Hast du trotzdem schön erklärt, uall@ogc
Wollte das nicht so ausführlich machen, ich dachte das sei klar 
|
|
Loki
      
Beiträge: 34
Win XP Home
|
Verfasst: Mi 09.02.05 15:59
Also so wie ich das kenne,wenn er es wirklich wie 4 Gewinnt machen will nur mit 3 dann ist es so richtig wie ihr das geschriben habt. Wenn er aber sowas wie TicTacToe schrieben will dann geht es so wie er es beschrieben hat. Bis jetzt war ich dem Irrtum erlegen das er sowas wie TicTacToe machen will *grins* und dann wird es auch hinfällig wenn er wirklich 3 Gewinnt machen will das ich meinen Code poste weil es nun mal TicTacToe ist. (auch wenn ich mir nicht sicher bin ob er ihn überhaupt noch haben wollte)
MFG
Loki
|
|
|