Sudoku

Soyez le premier à donner votre avis sur cette source.

Vue 6 247 fois - Téléchargée 4 789 fois

Description

il génère et affiche les grilles, il ùéùorise les scores et fait un classement suivant le niveau choisi, il peut également mémorisé une grille pour pouvoir la recharger ensuite.
il y a même un cheat code: cliquer sur : moyen - expert - simple - difficile - débutant
ce qui permet de compléter la grille complétement. (pratique pour testé la validité des grille)

NEW!!!!! : il y a maintenant un resolveur intégré mais il faut l'aider un peu !!!!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

belthebut
Messages postés
7
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
20 septembre 2006

hey!!! H60

Il y avait un bug ke G remodifier....
il faut juste initialiser nCount := 1 au lieu de := 0
tu vera la sa marchera mais je V rebalancer mon source....
Je croyai l'avoir déjà fait...
H60
Messages postés
46
Date d'inscription
dimanche 20 décembre 2009
Statut
Membre
Dernière intervention
5 février 2012
1
Salut
je viens de compiler et lancer ton programme. Première grille pour débutant pour voir je tombe sur une boucle infinie. Je n'ai pas eu le temps de regarder ton code.
belthebut
Messages postés
7
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
20 septembre 2006

=> tigris
ton code peut-être optimisé...

un truc tt simple:

function testval(cordx : integer ; cordy : integer ; nbr : integer) : integer;
var
i, j : integer;
begin
Result := 1;
// Test sur la ligne et la colonne
for i := 1 to 9 do begin
if (grille[i, cordy] = nbr) // Test sur la ligne
or (grille[cordx, i] = nbr) then begin // Test sur la colonne
Result := 2;
Exit;
end;
end;
// Test dans le pavé de 3x3 cases
for i := ((cordx-1) div 3*3)+1 to ((cordx-1) div 3*3)+3 do
for j :=((cordy-1) div 3*3)+1 to ((cordy-1) div 3*3)+3 do
begin
if (grille[i, j] = nbr) then
begin
Result := 2;
Exit;
end;
end;
end;

le begin de la première boucle FOR peut être suprimé... C rien de bien grave mais C juste pour le signaler

et merci encore...
belthebut
Messages postés
7
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
20 septembre 2006

merci tigris je V y réfléchir mais hier soir sa ma pris jusqu'à 1 h du mat G commencé un faire (dans la même interface) un resolveur de grille.... une fois fini et expliké je la remettrai sur CS...

j'avai pensé à ta méthode mais je voulai pas me prendre la tête avec des boucle alors G fait fait en sorte ke sa test tt d'un coup...

Comme je te l'avai dit je sui pas un pro, j'essaye juste de bricolé un peu... Mais merci quand C fort interressant...

@ biantot pour la mise à jour de mon log... lol
;-)

666
tigris1
Messages postés
57
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
15 janvier 2009

Hello belthebut!

Félicitations! le code est beaucoup plus léger et un grand merci pour les commentaires. Je vais me pencher sur la création de la grille car j'ai fait un bout de programme qui résoud les grilles. Je commence par tester s'il existe une solution unique. Si ce n'est pas le cas, j'utilise la méthode BruteForce qui appelle mes routines pour tester une solution unique, si pas de possibilité, je reviens sur mes pas, j'essaie une autre valeur, etc...

Cela fonctionne bien mais j'ai l'intation de faire un programme complet et il faut que je me penche sur la création avec des niveaux de difficulté, plus d'autres idées, mais ce sera pour un peu plus tard.

Je sais, je vais passé pour un pénible, mais je te propose une nouvelle simplification pour la fonction testval et mon code se trouve ci-dessous:

function testval(cordx : integer ; cordy : integer ; nbr : integer) : integer;
var
i, j : integer;
begin
Result := 1;
// Test sur la ligne et la colonne
for i := 1 to 9 do begin
if (grille[i, cordy] = nbr) // Test sur la ligne
or (grille[cordx, i] = nbr) then begin // Test sur la colonne
Result := 2;
Exit;
end;
end;
// Test dans le pavé de 3x3 cases
for i := ((cordx-1) div 3*3)+1 to ((cordx-1) div 3*3)+3 do begin
for j :=((cordy-1) div 3*3)+1 to ((cordy-1) div 3*3)+3 do begin
if (grille[i, j] = nbr) then begin
Result := 2;
Exit;
end;
end;
end;
end;

Il est aussi possible de retourner un boolean mais il te faudra modifier Button2Click

Amicalement tigris1

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.