AGB  ·  Datenschutz  ·  Impressum  







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

Sudoku: Probleme beim Löschen

Ein Thema von Salazriel · begonnen am 1. Mär 2010 · letzter Beitrag vom 2. Mär 2010
Antwort Antwort
Salazriel

Registriert seit: 13. Feb 2010
33 Beiträge
 
#1

Re: Sudoku: Probleme beim Löschen

  Alt 2. Mär 2010, 09:38
Ehrlich gesagt war das auch mein erster Ansatz

Delphi-Quellcode:
procedure TForm4.StringGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var Spalte,Zeile,Zahl,xAdd,yAdd,x,y:integer;
    Sudoku:string;
begin
If ((Key=vk_delete) or (Key=vk_Back)) //wenn Backspace oder Entfernen gedrückt wurde
      and (StringGrid1.Cells[StringGrid1.col,StringGrid1.row]<>' ')
then
  begin
  StringGrid1.Cells[StringGrid1.col,StringGrid1.row]:=' '; //dann lösche den Zellinhalt
  For Zeile:=0 to 8 do
    For Spalte:=0 to 8 do
      FeldMenge[Spalte,Zeile]:=[1,2,3,4,5,6,7,8,9]; //FeldMengen neu füllen
  For Zeile:=0 to 8 do
    For Spalte:=0 to 8 do
      If StringGrid1.Cells[Spalte,Zeile]<>' '
      then
        begin
        Zahl:=strtoint(StringGrid1.Cells[Spalte,Zeile]);
        RestMengeNeuZuOrdnen(Zahl,Spalte,Zeile); //FeldMengen reduzieren
        end;
  end;
end;
Das Problem: es funktioniert genauso nicht -.-

Aber ich habe imzwischen eine Lösung des Problems gefunden: Zum Speichern einer Sudoku-Datei wandle ich das Sudoku in einen String um und zum Laden wandle ich den String in das Sudoku um

Delphi-Quellcode:
function TForm4.SudokuInListeSpeichern:String;
var Spalte,Zeile:integer;
    Datei:String;
begin
For Zeile:=0 to 8 do
  For Spalte:=0 to 8 do
    Datei:=Datei+StringGrid1.cells[Spalte,Zeile];
Result:=Datei;
end;

procedure TForm4.SudokuAusListeLaden(Datei:string);
var Spalte,Zeile,i:integer;
begin
FormCreate(Form4);
For i:=1 to 81 do //die gespeicherte Datei besteht aus 81 Zeichen
  begin
  Spalte:=(i-1) mod 9;
  Zeile:=(i-1) div 9; // i-1 da Zellen/Spalten von 0..8
  StringGrid1.Cells[Spalte,Zeile]:=Datei[i];
  If Datei[i] in ['1'..'9']
  then
    begin
    FeldMenge[Spalte,Zeile]:=[];
    RestMengeNeuZuordnen(strtoint(Datei[i]),Spalte,Zeile);
    end;
  end;
end;
Und das funktioniert seltsamerweise, obwohl der Unterschied eigentlich nur im Löschen und Neuschreiben aller Zahlen liegt

Aber gestern Nacht kam mir ein wahrer Geistesblitz, als ich mit was völlig anderem beschäftigt war

Delphi-Quellcode:
procedure TForm4.StringGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var Spalte,Zeile,Zahl,xAdd,yAdd,x,y:integer;
    Sudoku:string;
begin
If ((Key=vk_delete) or (Key=vk_Back)) //wenn Backspace oder Entfernen gedrückt wurde
      and (StringGrid1.Cells[StringGrid1.col,StringGrid1.row]<>' ')
then
  begin
  Sudoku:=SudokuInListeSpeichern;
  Sudoku[StringGrid1.Row*9+StringGrid1.Col+1]:=' ';
  SudokuAusListeLaden(Sudoku);
end;
Das ist wahrscheinlich nicht die schnellste Methode, aber es funktioniert schonmal
Obwohl ich mich wirklich frage, warum die ersten 2 Ansätze fehlerhaft sind...
  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 19:48 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