AGB  ·  Datenschutz  ·  Impressum  







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

Array Werte vergleichen

Ein Thema von Marcel2906 · begonnen am 15. Nov 2011 · letzter Beitrag vom 15. Nov 2011
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Array Werte vergleichen

  Alt 15. Nov 2011, 16:20
Dein Konzept ist da etwas schwerfällig

Beim SuDoKu hat man ja 9x9 Felder.
Diese Felder bilden wiederum logische Einheiten über die Spalten, die Reihen und jeweils 3x3 Blöcke.
- Jede Spalte hat 9 Felder
- Jede Reihe hat 9 Felder
- Jeder Block hat 9 Felder
Code:
B | 0 1 2 3 4 5 6 7 8 | S | 0 1 2 3 4 5 6 7 8 | R | 0 1 2 3 4 5 6 7 8
--+------------------ | --+------------------ | --+------------------
0 | 0 0 0 1 1 1 2 2 2 | 0 | 0 1 2 3 4 5 6 7 8 | 0 | 0 0 0 0 0 0 0 0 0
1 | 0 0 0 1 1 1 2 2 2 | 1 | 0 1 2 3 4 5 6 7 8 | 1 | 1 1 1 1 1 1 1 1 1
2 | 0 0 0 1 1 1 2 2 2 | 2 | 0 1 2 3 4 5 6 7 8 | 2 | 2 2 2 2 2 2 2 2 2
3 | 3 3 3 4 4 4 5 5 5 | 3 | 0 1 2 3 4 5 6 7 8 | 3 | 3 3 3 3 3 3 3 3 3
4 | 3 3 3 4 4 4 5 5 5 | 4 | 0 1 2 3 4 5 6 7 8 | 4 | 4 4 4 4 4 4 4 4 4
5 | 3 3 3 4 4 4 5 5 5 | 5 | 0 1 2 3 4 5 6 7 8 | 5 | 5 5 5 5 5 5 5 5 5
6 | 6 6 6 7 7 7 8 8 8 | 6 | 0 1 2 3 4 5 6 7 8 | 6 | 6 6 6 6 6 6 6 6 6
7 | 6 6 6 7 7 7 8 8 8 | 7 | 0 1 2 3 4 5 6 7 8 | 7 | 7 7 7 7 7 7 7 7 7
8 | 6 6 6 7 7 7 8 8 8 | 8 | 0 1 2 3 4 5 6 7 8 | 8 | 8 8 8 8 8 8 8 8 8
Erstelle dir eine Klasse (z.B. TSuDoKuBlock), die 9 Spielfelder aufnehmen kann und auch eine Methode (CanHaveNumber( x : integer ) : Boolean), die in diesen 9 Spielfeldern prüft, ob eine Zahl x dort gesetzt werden darf.
Delphi-Quellcode:
function TSuDoKuBlock.CanHaveNumber( x : integer ) : Boolean;
begin
  Result := True;
  // Alle Felder im Block prüfen, ob diese Zahl schon vorkommt
  for FeldIndex := 0 to 8 do
    Result := Result and ( fFields[ FeldIndex ].Number <> x );
end;
Ein Spielfeld kann in max. 3 Blöcken gleichzeitig sein.
Erstelle dir eine Klasse (z.B. TSuDoKuFeld), das 3 Blöcke aufnehmen kann.
Diese Klasse bekommt jetzt auch eine Methode (CanHaveNumber(x : Integer) : Boolean) und die macht nichts anderes als
Delphi-Quellcode:
function TSuDoKuFeld.CanHaveNumber( x : integer ) : Boolean;
begin
  // Alle 3 Blöcke müssen diese Zahl zulassen
  Result := fBlocks[0].CanHaveNumber( x ) and fBlocks[1].CanHaveNumber( x ) and fBlocks[2].CanHaveNumber( x );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
 


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 13:52 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