![]() |
Problem beim überprüfen der Sudokuregeln im StringGrid
Also erstmal hallo an alle :hi:
Wie der Titel schon sagt schreibe ich ein Sudoku Spiel :D Bis jetzt klappt alles ... mein Plan ... Einen Editor für Customrätzel und die Rätzel des standart Spieles... Das Spielfeld habe ich mit einem String Grid gemacht... okkaaay man kann es speichern öffnen notizen titel ersteller und Co. machen klappt alles... jetzt soll der Editor natürlich auch nachprüfen ob dieses Rätzel auch den Regeln endspricht ... HIIEEEER IST DAS PROBLEM... ich finde einfach nicht herraus wie man die gerade angewählte Reihe und Spalte herrausfindet und gleichzeitig noch überprüft ob diese Zahl schon in der Zeil bzw. Spalte ist. und das gleiche ist auch für das 3x3 Feld ... WIE ... WIE NUR ... ich zerbreche mir schon seit Stunden den Kopf und nix kommt herraus... ich habe hier im Forum schon gefuden wie ich doppelte überprüfen kann aber iiirgendwie will das ganze nicht ... tja ich hoffe dass mir hier geholfen wird =( ich würde das Problem gerne beheben und das Spiel zuende bringen ... danke schonmal im vorraus ich bin über jede Antwort froh! :coder2: |
Re: Problem beim überprüfen der Sudokuregeln im StringGrid
hast du schon nen ansatz? was funktioniert nicht? gar keine idee?
|
Re: Problem beim überprüfen der Sudokuregeln im StringGrid
Liste der Anhänge anzeigen (Anzahl: 1)
aaaah doch nen nasatz habe ich wie gesag das Programm geht ... nur kann es bis jetzt nicht das Rätzel überprüfen ob es richtig ist also kann man 9 x ne 4 in die Spalte machen ohne dass er sagt dass es falsch ist ;D ach ja danke für die schnelle antwort und ich hänge einfach mal die Datei an :D
|
Re: Problem beim überprüfen der Sudokuregeln im StringGrid
ja ok ich seh mal was ich machen kann
|
Re: Problem beim überprüfen der Sudokuregeln im StringGrid
OH vielen dank :D danke danke danke :corky: :corky:
|
Re: Problem beim überprüfen der Sudokuregeln im StringGrid
Nun, ich würde mir ein statisches Array zur Hilfe nehmen mit 9 Booleans:
Delphi-Quellcode:
Hier kannst du nun für eine Zeile/Spalte/Block die Zahlen auf true setzen, die gefunden wurden. Und wenn bereits ein Element true ist, dann ist es falsch. Natürlich müssen dann vor jeder Zeile/Spalte/Block alle Elemente wieder auf false gesetzt werden.
var
CheckArray: Array[1..9] of Boolean; |
Re: Problem beim überprüfen der Sudokuregeln im StringGrid
Liste der Anhänge anzeigen (Anzahl: 1)
vielleicht hilft dir die ja weiter... ungetestet und im editor erstellt
|
Re: Problem beim überprüfen der Sudokuregeln im StringGrid
Sooo :D ich habe mich wieder mal lange an meinen Builder gesetzt und habe dank der .pas von dajuhsa (DANKE :hello: ) endlich einen weg gefunden wie ich den wert ermitteln kann uuuuund in der Spalte suchen kann :D KLAR is es nicht gerade die schönste art aber naja immerhin :D nur irgentwie hat der mist einen bug ... er findet alle fehler in der Spalte und in der Reihe aber wenn z.B noch nichts eingetragen wurde und man irgendeine Zahl in die erste Reihe bzw. Spalte einträgt sagt er mir es gäbe einen Fehler! nur warum kA... (also keinen prozessfehler sondern die Fehlermeldung von mir ;D)
Delphi-Quellcode:
und wieder ma danke im Vorraus :D
procedure TForm1.Sudokuregeln(Sudoku: TStringGrid);
VAR selBottom, selRight, Check: integer; Zahl, CheckZahl : string; Row, Col: Array [0..3] of integer; begin // Row zurücksetzen Row[0] := 0; Row[1] := 0; Row[2] := 0; Row[3] := 0; // Col zurücksetzen Col[0] := 0; Col[1] := 0; Col[2] := 0; Col[3] := 0; // Zahl suchen selBottom := Sudoku.Selection.Bottom; selRight := Sudoku.Selection.Right; Zahl := Sudoku.Cells[selRight, selBottom]; IF Zahl = '' then exit else begin // Reihe eingrenzen IF selRight = 0 then begin Row[0] := 1; Row[1] := (Sudoku.RowCount - 1); end else begin Row[0] := 0; Row[1] := (selRight - 1); Row[2] := (selRight + 1); Row[3] := (Sudoku.RowCount - 1); end; // Reihe überprüfen for Check := Row[0] to Row[1] do begin CheckZahl := Sudoku.Cells[Check, selBottom]; IF CheckZahl = Zahl then MessageDlg('Es ist ein Fehler im Kasten {' + inttostr(Check + 1) + ',' + inttostr(selBottom + 1) + '} aufgetreten!', mtError, [mbOK], 0); end; for Check := Row[2] to Row[3] do begin CheckZahl := Sudoku.Cells[Check, selBottom]; IF CheckZahl = Zahl then MessageDlg('Es is ein Fehler im Kasten {' + inttostr(Check + 1) + ',' + inttostr(selBottom + 1) + '} aufgetreten!', mtError, [mbOK], 0); end; // Spalte eingrenzen IF selBottom = 0 then begin Col[0] := 1; Col[1] := (Sudoku.ColCount - 1); end else begin Col[0] := 0; Col[1] := (selBottom - 1); Col[2] := (selBottom + 1); Col[3] := (Sudoku.ColCount - 1) end; // Spalte überprüfen for Check := Col[0] to Col[1] do begin CheckZahl := Sudoku.Cells[selRight, Check]; IF CheckZahl = Zahl then MessageDlg('Es is ein Fehler im Kasten {' + inttostr(selRight + 1) + ',' + inttostr(Check + 1) + '} aufgetreten!', mtError, [mbOK], 0); end; for Check := Col[2] to Col[3] do begin CheckZahl := Sudoku.Cells[selRight, Check]; IF CheckZahl = Zahl then MessageDlg('Es is ein Fehler im Kasten {' + inttostr(selRight + 1) + ',' + inttostr(Check + 1) + '} aufgetreten!', mtError, [mbOK], 0); end; end; end; |
Re: Problem beim überprüfen der Sudokuregeln im StringGrid
meine pas hat ansatzweise was gebracht?! :firejump: :dancer: :hello: :party: freu, freu.
|
Re: Problem beim überprüfen der Sudokuregeln im StringGrid
Liste der Anhänge anzeigen (Anzahl: 1)
SOO ich habe ein schlaflose Nacht hinter mir :D ja wirklich XD und ich ahbs endlich geschafft!! die Regeln könnnen nun überprüft werden :D jedoch ;D wieder ein problem :freak: :freak: ich wollte die Spalte und die Reihe rot einfärben in der der Fehler ist ... ich ahbe es naja wie soll ich sagen ... geschafft und auch nicht :roll: :cry: also Er färbt sie nicht DIREKT ein sondern muss man die Kästchen nach und nach anklicken bevor sie rot werden ... hier sit der Code XD
Delphi-Quellcode:
tjo vllt hilft die jetzige .exe auch noch ... ;D
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); begin with (Sender as TStringGrid) do begin If error = 10 then exit else if ARow = error then Canvas.Brush.Color := $000000F0 else Canvas.Brush.Color := $00FFFFFF; Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]); end; end; //und so wird er aktiviert procedure TForm1.Blockmessage(Row, Col: integer); begin CASE Form3.ComboBox1.ItemIndex OF 0: begin Messagedlg('Es ist ein Fehler in der Reihe: ' + inttostr(Row + 1) + ' und in der Spalte: ' + inttostr(col + 1) + ' aufgetreten!', mtError, [mbOK], 0); error := Row; StringGrid1DrawCell(StringGrid1, Row, Col, Rect(Row, Col, Row, Col), [gdfixed]); end; 1: Messagedlg('There is an error in the row: ' + inttostr(Row + 1) + ' and in the column: ' + inttostr(col + 1) + '!', mtError, [mbOK], 0); 2: Messagedlg('Il ya une erreur dans l' + #39 + 'aligne: ' + inttostr(Row + 1) + ' et dans la colonne: ' + inttostr(col + 1) + '!', mtError, [mbOK], 0); end; end; Und zu guter letzt BEVOR ich aufhöre (zumindestens für jetzt :D) euch das Ohr blutig zu reden wollte ich noch sagen dass ich am ende eine Komponente mit den Regeln und den msit schreibe für die die das gleiche problem haben ;D;D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 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