begin process at 2012 02 12 06:01:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > SUDOKU (LE JEU JAPONAIS)

SUDOKU (LE JEU JAPONAIS)


 Information sur la source

Note :
9,4 / 10 - par 5 personnes
9,40 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :sudoku, jeu, regex, generer, picwin Niveau :Initié Date de création :01/01/2006 Date de mise à jour :07/05/2007 23:18:17 Vu / téléchargé :12 314 / 388

Auteur : RCA ArKanis

Ecrire un message privé
Site perso
Commentaire sur cette source (26)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce code a été fait à deux (ouais, on trouvait ça plus marrant de diviser la tâche en deux et vu que Wims a du mal à faire des while (;)) :D)
Donc, Wims et moi sommes tous deux créateurs de ce splendide code mélant habillement regex, picwin, variables binaires, keydown, etc ...
Ce code utilisait précédemment un site d'où il téléchargeait la grille à compléter. Désormais (depuis la version 3.0), le code génère lui-même sa grille. Vous pouvez donc y jouer même hors-line, c'est une grande nouveauté !

Le but de ce code est en vérité d'en poster un avant CoolMan002, et d'être les premiers à le faire sur ircfr en 2006 (joke :p).
Attention, ce n'est pas pour autant que ce code est nul !
Bon, trêve de bavardage, voici comment il fonctionne :
/sudoku [1-4], 1 pour facile, 2 pour normal, 3 pour difficile, 4 pour expert.
La difficulté intervient sur le nombre de chiffres masqués (sur 81 au total)
Facile : de 42 à 45 masqués, Normal : de 46 à 48, Difficile : 49 à 51, Expert : 52 à 54

Pour remplir une case, vous cliquez dessus (vous aurez alors un carré rouge), puis vous tapez sur votre pavé numérique le nombre en question.

Plusieurs options sont disponibles, dont celle qui vérifiera et vous donnera le nombre de fautes, celle qui corrigera entièrement votre jeu (auquel vous ne pourrez plus jouer), et une dernière qui vous indique simplement si votre coup est possible ou pas (du genre si vous avez mis deux fois le même chiffre dans la colonne) qui permet d'éviter les erreurs d'inattention.

Une aide est incluse (via le menu de la picwin)
Bon jeu :)

Source

  • ;******************************
  • ;Sudoku codé par Wims & ArKanis
  • ; Créé le 01/01/06
  • ; Version 3.0
  • ;******************************
  • alias sudoku {
  • if (!$1) { pre | return }
  • if ($window(@sud)) { var %x = $window(@sud).x, %y = $window(@sud).y | window -c @sud }
  • if ($hget(Sudoku)) hfree Sudoku
  • if ($hget(SudokuTemp)) hfree SudokuTemp
  • var %t = $iif($1 isnum 1-,$1,1)
  • hadd -m SudokuTemp Difficulte $iif(%t isnum 1-4,%t,1)
  • if ((%x) && (%y)) window -dp +bx @sud %x %y 280 298
  • else window -Cdp +bx @sud -1 -1 280 298
  • .timersudoctime off | drawrect -fr @sud 16777215 1 0 0 300 300
  • drawline -r @sud 0 1 1 232 500 232 | drawline -r @sud 0 1 1 50 500 50
  • drawline -r @sud 0 1 1 80 500 80 | drawline -r @sud 0 1 244 20 244 500
  • drawline -r @sud 0 1 32 20 32 500 | drawline -r @sud 0 1 62 20 62 500
  • drawline -r @sud 0 2 275 20 275 500 | drawline -r @sud 0 1 1 141 500 141
  • drawline -r @sud 0 1 1 171 500 171 | drawline -r @sud 0 2 2 293 500 293
  • drawline -r @sud 0 1 123 20 123 500 | drawline -r @sud 0 1 153 20 153 500
  • drawline -r @sud 0 1 214 20 214 500 | drawline -r @sud 255 2 93 21 93 291
  • drawline -r @sud 0 1 1 262 500 262 | drawline -r @sud 255 2 2 202 273 202
  • drawline -r @sud 255 2 184 21 184 291 | drawline -r @sud 255 2 2 111 273 111
  • drawrect -r @sud 0 2 1 19 291 291 | var %t = $hget(SudokuTemp,Difficulte)
  • drawtext -r @sud 255 verdana 10 2 2 [Sudoku] [Level] : $replace(%t,4,Expert,3,Difficile,2,Moyen,1,Facile)
  • sudogen
  • }
  • alias -l dtime {
  • if (!$window(@sud)) { .timersudoctime off | return }
  • drawrect -nf @sud 0 1 175 2 180 10
  • hadd -m sudokutemp ctimep $calc($ctime - $$hget(SudokuTemp,Ctime))
  • drawtext -nr @sud $rgb($color(7)) verdana 10 175 2 $duration($calc($ctime - $$hget(SudokuTemp,Ctime)))
  • drawdot @sud
  • }
  • alias -l depsud {
  • window @sud $calc($mouse.dx - $1) $calc($mouse.dy - $2) 280 298
  • if ($mouse.key & 1) .timerdepsud 0 0 depsud $1-
  • }
  • ON *:KEYDOWN:@sud:*:{
  • if ($keychar isin 0P) { pausesud | return }
  • elseif ($hget(sudokutemp,coord) != $null) && (nonfixe isin $hget(sudoku,$hget(sudokutemp,coord))) && ($hget(sudoku,$hget(sudokutemp,coord))) && ($keychar isin +-) {
  • var %h = $hget(sudokutemp,$hget(sudokutemp,coord)) ,%r = $iif(!%h,1,$replace(%h,sur,2,incertain,3))
  • $iif($keychar == +,inc,dec) %r | if (%r == $iif($keychar == +,4,0)) var %r = $iif($keychar == +,1,3)
  • modifétat $replace(%r,1,0,2,sur,3,incertain)
  • return
  • }
  • var %c = $hget(SudokuTemp,coord) $iif($istok(37.38,$keyval,46),-,+) $iif($istok(37.39,$keyval,46),10,1) ,%a = $iif($len(%c) == 1,$+(0,%c),%c)
  • if ($keychar isnum 1-9) sudonum $$hget(SudokuTemp,Case) $keychar
  • elseif ($istok(8-46,$keyval,45)) sudonum $$hget(SudokuTemp,Case)
  • elseif ($keyval == 13) && ($hget(SudokuTemp,coord) != $null) readyd $hget(SudokuTemp,coord)
  • elseif ($istok(37.38.39.40,$keyval,46)) && ($left(%a,1) isnum 0-8) && ($right(%a,1) isnum 0-8) {
  • var %old = $hget(sudokutemp,coord)
  • hadd -m SudokuTemp Coord %a
  • if ($hget(SudokuTemp,case) != %old) coorf %old 16777215
  • if ($hget(SudokuTemp,case) == %a) return
  • coorf %a $iif(nonfixe isin $hget(Sudoku,%a) || $hget(Sudoku,%a) == $null,65280,37632)
  • }
  • }
  • menu @sud {
  • dclick : depsud $calc($mouse.dx - $window(@sud).x)) $calc($mouse.dy - $window(@sud).y)
  • mouse : dessc $mouse.x $mouse.y
  • sclick : readyd $mouse.x $mouse.y
  • uclick : .timerdepsud off
  • $iif(((nonfixe isin $hget(Sudoku,$checkpos($mouse.x,$mouse.y))) && ($checkpos($mouse.x,$mouse.y) != $null)),$mo($ifmatch))
  • .$iif($hget(SudokuTemp,$hget(SudokuTemp,Pos)) == sur,$style(1)) Case sûre:modifétat sur
  • .$iif($hget(SudokuTemp,$hget(SudokuTemp,Pos)) == incertain,$style(1)) Case incertaine:modifétat incertain
  • .$iif(!$hget(SudokuTemp,$hget(SudokuTemp,Pos)),$style(1)) Case normale:modifétat 0
  • Changer la difficulté
  • .$iif(((!$hget(SudokuTemp,Difficulte)) || ($hget(SudokuTemp,Difficulte) == 1)),$style(1)) Facile:sudoku 1
  • .$iif($hget(SudokuTemp,Difficulte) == 2,$style(1)) Moyen:sudoku 2
  • .$iif($hget(SudokuTemp,Difficulte) == 3,$style(1)) Difficile:sudoku 3
  • .$iif($hget(SudokuTemp,Difficulte) == 4,$style(1)) Expert:sudoku 4
  • $iif($hget(SudokuTemp,Aide),$style(1)) Faciliter le remplissage de la grille:hadd -m SudokuTemp Aide $iif($hget(SudokuTemp,Aide),0,1)
  • Nouvelle grille:{
  • if ((($hget(sudoku)) && ($?!="Etes-vous sûr(e) de vouloir commencer $crlf $+ une nouvelle grille et ainsi quitter cette partie ?")) || (!$hget(sudoku))) {
  • sudogen | .timersudoctime off | drawrect -f @sud 0 1 160 2 100 10
  • if ($hget(SudokuTemp,Soluce)) hdel SudokuTemp Soluce
  • }
  • }
  • $iif($hget(SudokuTemp,Soluce) || !$hget(sudoku),$style(2)) Donner la solution:if ($?!="Etes-vous sûr(e) de vouloir avoir la solution ?") sudocorrect
  • -
  • Menu principal { window -c @sud | .hfree -w Sudoku* | .timersudoctime off | sudoku }
  • Meilleurs scores:msud
  • Règles du jeu:sudaide
  • Comment jouer ?:htp?
  • -
  • Fermer:window -c @sud | hfree -w Sudoku* | .timersudoctime off
  • -
  • Unload
  • .Supprimer:{
  • if (!$?!="Voulez-vous vraiment supprimer le jeu ? Non pour annuler") {
  • window -c @sud | window -c @menu | window -c @aidesud | window -c @tuto | window -c @msud
  • hfree -w Sud*
  • .timersudoctime off
  • .remove $shortfn($script)
  • .remove $shortfn($$findfile($scriptdir,SudoTuto.jpg,1))
  • noop $findfile($scriptdir,sudosco?.sud,0,.remove $shortfn($1-))
  • noop $input(Le sudoku a bien été supprimé et déchargé)
  • .unload -rs $qt($script)
  • }
  • }
  • .Unload:{
  • if (!$?!="Confirmer le déchargement ? Non pour annuler") return
  • window -c @sud | window -c @menu | window -c @aidesud | window -c @tuto | window -c @msud
  • hfree -w Sudoku* | .timersudoctime off | noop $input(Le sudoku a bien été déchargé)
  • .unload -rs $shortfn($script)
  • }
  • }
  • alias -l sudogen {
  • if (!$window(@sud)) return
  • if ($hget(Sudoku)) hfree $ifmatch
  • var %ligne = 0
  • while %ligne <= 8 {
  • var %colonne = 0
  • while %colonne <= 8 {
  • coorf $+(%colonne,%ligne) eff
  • inc %colonne
  • }
  • inc %ligne
  • }
  • if ($hget(Sudoku,0).item) coorf 00 $iif(nonfixe isin $hget(sudoku,00) || $hget(sudoku,00) == $null,65280,37632)
  • hadd -m SudokuTemp Ctime $ctime
  • hadd -m SudokuTemp coord 00
  • if ($isalias(dtime)) {
  • .timersudoctime 0 1 dtime
  • dtime
  • }
  • var %ticks = $ticks, %r = $r(100,120), %s = 0, %l, %t = 1, %a = 123456789, %sol = $+(%a,;,$seq(0,X,2,9))
  • while (%t < 9) var %a = $+($right(%a,-1),$left(%a,1)), %sol = $puttok(%sol,%a,$calc($iif($calc($calc(%t *3) % 8),$v1,8) +1),59), %t = %t + 1
  • while (%s <= %r) var %n = $r(8,16), %l = $instok(%l,%n,-1,32), %s = %s + %n
  • var %i = 1, %m = $numtok(%l,32)
  • while (%i <= %m) {
  • var %t = 1, %n = $gettok(%l,%i,32)
  • while (%t <= %n) var %sol = $echange.sud(%sol), %t = %t + 1
  • if ($r(0,10) <= 6) var %sol = $permut.sud(%sol)
  • var %sol = $transp.sud(%sol), %i = %i + 1
  • }
  • var %t = 1, %sol = $remove(%sol,;), %l = $hget(SudokuTemp,Difficulte)
  • hadd -m SudokuTemp Cheat %sol
  • if (%l == 2) var %n = $r(46,48)
  • elseif (%l == 3) var %n = $r(49,51)
  • elseif (%l == 4) var %n = $r(52,54)
  • else var %n = $r(42,45)
  • if (%n > 81) return
  • while (%t <= %n) {
  • var %r = $r(1,81), %s = $+(^,$chr(40),.,$chr(123),$calc(%r - 1),$chr(125),$chr(41))
  • if ($mid(%sol,%r,1)) var %sol = $regsubex(%sol,$+(%s,(.)),\t0), %t = %t + 1
  • }
  • var %t = 0
  • while (%t <= 80) {
  • var %c = $int($calc(%t / 9) % 9), %l = $calc(%t % 9)
  • if ($mid(%sol,$calc(%t +1),1)) s.a $+(%l,%c) $ifmatch
  • inc %t
  • }
  • }
  • alias -l s.a {
  • hadd -m Sudoku $$1-2
  • coorf $1 0 $$2
  • }
  • alias -l seq {
  • ;texte subtext from(num) to(num)
  • ;ex $seq(varX,X,1,10) = var1;var2;var3;var4;var5;var6;var7;var8;var9;var10
  • if (($3 !isnum) || ($4 !isnum) || (; isin $2) || ($2 == $null)) return
  • return $left($regsubex($str($+($1,;),$calc($4 - $3 +1)),$+(/,$2,/g),$calc($3 + \n)),-1)
  • }
  • alias -l transp.sud {
  • var %t = 1, %sol
  • while (%t <= 9) {
  • var %i = 0
  • while (%i < 9) var %sol = $+(%sol,$mid($1,$calc(%t + %i * 10),1)), %i = %i + 1
  • var %sol = $+(%sol,;)
  • inc %t
  • }
  • return $left(%sol,-1)
  • }
  • alias -l echange.sud {
  • var %t = 1, %r = $r(0,2), %m = $calc(%r *3+1), %n = $calc(%r *3+3), %r = $r(%m,%n), %r2 = %r
  • while (%r == %r2) var %r2 = $r(%m,%n)
  • return $puttok($puttok($1,$gettok($1,%r2,59),%r,59),$gettok($1,%r,59),%r2,59)
  • }
  • alias -l permut.sud {
  • var %r = $r(1,9), %r2 = %r
  • while (%r == %r2) var %r2 = $r(1,9)
  • return $replacex($1,%r,%r2,%r2,%r)
  • }
  • alias -l sudonum {
  • if (!$regex($1,^[0-8]{2}$)) return
  • var %old = $hget(SudokuTemp,Coord)
  • if (!$regex($2,^[1-9]{1}$)) {
  • if ($regex($hget(Sudoku,$1),nonfixe)) {
  • hdel Sudoku $1
  • coorf $1 eff
  • if ($hget(SudokuTemp,Case)) hdel SudokuTemp Case
  • coorf $hget(sudokutemp,coord) 64512
  • }
  • return
  • }
  • var %ligne = $right($1,1), %colonne = $left($1,1), %case = $1
  • if ($hget(SudokuTemp,Aide)) {
  • var %t = 0
  • while %t <= 8 {
  • if (%t != %ligne) {
  • if ($gettok($hget(Sudoku,$+(%colonne,%t)),1,32) == $2) {
  • tokenize 32 $colign($+(%colonne,%t))
  • var %t = $input(La case de la $1 colonne sur la $3 ligne qui est sur la même colonne porte le même numéro !,o)
  • return
  • }
  • }
  • if (%t != %colonne) {
  • if ($gettok($hget(Sudoku,$+(%t,%ligne)),1,32) == $2) {
  • tokenize 32 $colign($+(%t,%ligne))
  • var %t = $input(La case de la $1 colonne sur la $3 ligne qui est sur la même ligne porte le même numéro !,o)
  • return
  • }
  • }
  • inc %t
  • }
  • var %debligne = %ligne, %debcolonne = %colonne
  • while ($round($calc(%debligne /3),0) != $calc(%debligne / 3)) dec %debligne
  • while ($round($calc(%debcolonne /3),0) != $calc(%debcolonne / 3)) dec %debcolonne
  • var %c.ligne = 0
  • while (%c.ligne <= 2) {
  • var %c.colonne = 0, %t.ligne = $calc(%c.ligne + %debligne)
  • while (%c.colonne <= 2) {
  • var %t.colonne = %c.colonne + %debcolonne
  • if ((%case != $+(%t.colonne,%t.ligne)) && ($gettok($hget(Sudoku,$+(%t.colonne,%t.ligne)),1,32) == $2)) {
  • tokenize 32 $colign($+(%t.colonne,%t.ligne))
  • var %t = $input(La case de la $1 colonne sur la $3 ligne qui est dans le même carré porte le même numéro !,o)
  • return
  • }
  • inc %c.colonne
  • }
  • inc %c.ligne
  • }
  • }
  • if ($hget(SudokuTemp,%case)) hdel SudokuTemp $hget(SudokuTemp,Case)
  • hadd -m Sudoku $1-2 nonfixe
  • coorf $1 15767584 $2
  • if (%old) coorf $ifmatch 16777215
  • hadd -m SudokuTemp Coord $1
  • .timer -m 1 50 coorf $1 64512
  • if ($hget(SudokuTemp,Case)) hdel SudokuTemp Case
  • }
  • alias -l sudocheck {
  • if (!$hget(Sudoku)) return
  • if ($hget(SudokuTemp,Soluce)) return
  • var %ligne = 0, %fautes = 0
  • while (%ligne <= 8) {
  • var %colonne = 0
  • while (%colonne <= 8) {
  • var %case = $+(%colonne,%ligne)
  • if ($regex($hget(Sudoku,%case),nonfixe)) {
  • var %correc = $sudosoluce(%case)
  • if ($gettok($hget(Sudoku,%case),1,32) != %correc) inc %fautes
  • }
  • inc %colonne
  • }
  • inc %ligne
  • }
  • if (%fautes) {
  • var %t = $input(Il y a %fautes $+(faute,$iif(%fautes >= 2,s)))
  • if ($hget(sudokutemp,case) != $null || $hget(sudokutemp,coord) != $null) { coorf $v1 16777215 | hdel sudokutemp coord | hdel sudokutemp case }
  • halt
  • }
  • else {
  • .timersudoctime off
  • var %h = $+(sudsco,$iif($hget(sudokutemp,difficulte),$replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert),facile)) ,%t = $hget(sudokutemp,ctimep)
  • hadd -m %h $+(%t,/,<<<¿>>>) 1
  • mstri $iif($hget(sudokutemp,difficulte),$replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert),facile)
  • if ($hfind(%h,$+(%t,/,<<<¿>>>))) {
  • :back
  • var %n = $input(Bravo !! Tu as fait un nouveau record de $+($duration(%t),$chr(44)) inscris ton pseudo ou clique sur Cancel pour ne pas ajouter le record :,et,Nouveau record !)
  • if (!%n) goto lu
  • elseif ($len(%n) > 10) goto back
  • hadd -m %h $+(%t,/,%n) 1
  • :lu
  • if ($input(Voulez-vous passer au niveau supérieur,y)) { var %ga? on | goto sup }
  • else { hadd -m SudokuTemp Soluce 1 | .timersudoctime off | hfree -w sudoku* }
  • }
  • elseif ($?!="Bien joué ! Vous avez fini ce sudoku en $+($duration(%t),.) Voulez-vous passer au niveau supérieur ?") { var %ga? on | goto sup }
  • else { .timersudoctime off | hfree -sw sudoku* | coorf $hget(sudokutemp,coord) 16777215 }
  • :sup
  • hdel -m %h $+(%t,/,<<<¿>>>)
  • if (!$isdir(Sudoku)) mkdir Sudoku
  • hsave %h sudoku\ $+ %h $+ .sud
  • mstri $iif($hget(sudokutemp,difficulte),$replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert),facile)
  • if (!%ga?) return
  • var %o = $calc($hget(SudokuTemp,Difficulte) +1)
  • if (%o == 5) var %o = 4
  • elseif (%o !isnum 2-4) var %o = 2
  • sudoku %o
  • }
  • }
  • alias mstri {
  • var %h = $+(sudsco,$1) ,%a 1 ,%b = $hget(%h,0).item ,%c = 1
  • while (%a <= %b) { var %stock = %stock $replace($hget(%h,%a).item,$chr(47),$chr(46)) | inc %a }
  • var %sort = $sorttok(%stock,32,n)
  • if ($window(@msud)) {
  • drawrect -fn @msud 15 0 2 45 80 90
  • drawrect -fn @msud 15 0 90 45 150 90
  • }
  • if ($hget(%h)) hfree %h
  • while (%c <= $iif($numtok(%stock,32) > 6,6,$ifmatch)) {
  • if ($window(@msud)) {
  • drawcn @msud verdana 12 1 $calc(47 + (%c - 1) * 14) $token($token(%sort,%c,32),2,46)
  • .drawcn @msud verdana 12 1 $calc(47 + (%c - 1) * 14) $duration($token($token(%sort,%c,32),1,46))
  • }
  • hadd -m %h $+($token($token(%sort,%c,32),1,46),/,$token($token(%sort,%c,32),2,46))
  • inc %c
  • }
  • if ($window(@msud)) drawdot @msud
  • }
  • alias -l sudosoluce {
  • if (!$hget(SudokuTemp,Cheat)) return
  • if (!$regex($1,^[0-8]{2}$)) return
  • return $mid($hget(SudokuTemp,Cheat),$calc($right($1,1) * 9 + $left($1,1) +1),1)
  • }
  • alias -l sudocorrect {
  • hadd -m SudokuTemp Soluce 1
  • var %fautes = 0, %ligne = 0, %justes = 0, %vides = 0
  • while (%ligne <= 8) {
  • var %colonne = 0
  • while (%colonne <= 8) {
  • var %case = $+(%colonne,%ligne), %correct = $sudosoluce(%case), %r = $hget(Sudoku,%case)
  • if (nonfixe isin %r) {
  • if ($gettok(%r,1,32) != %correct) { inc %fautes | coorf %case 14687456 %correct | dcroix %case line }
  • else { coorf %case 15767584 %correct | inc %justes | dcroix %case rect }
  • }
  • if (!%r) { inc %vides | coorf %case 255 %correct }
  • hadd -m Sudoku %case %correct
  • inc %colonne
  • }
  • inc %ligne
  • }
  • var %t = $input(Il y avait %fautes $+(faute,$iif(%fautes >= 2,s),$chr(44)) %justes $+(juste,$iif(%justes >= 2,s),$chr(44)) %vides $+(vide,$iif(%vides >= 2,s)),o)
  • .timersudoctime off
  • hfree -w sudoku*
  • }
  • alias -l mo {
  • var %c = $left($1,1), %l = $right($1,1), %t = $int($calc(%c / 3 +1))
  • if (%l isnum 3-5) inc %t 3
  • elseif (%l isnum 6-8) inc %t 6
  • return Carré %t - Case $calc(%c % 3+(%l % 3)*3+1)
  • }
  • alias -l coorf {
  • if (!$window(@sud)) return
  • if (!$regex($1,^[0-8]{2}$)) return
  • var %x $token(3.33.63.94.124.154.185.215.245,$calc($left($1,1) + 1),46)
  • var %y $token(21.51.81.112.142.172.203.233.263,$calc($right($1,1) + 1),46)
  • if ($2 == eff) { drawrect -f @sud 0 1 %x %y 29 29 | return }
  • if (!$3) { drawrect -r @sud $2 1 %x %y 29 29 }
  • else {
  • drawrect -f @sud 0 1 %x %y 29 29
  • drawtext -r @sud $2 verdana 20 $calc(%x + 8) $calc(%y + 1) $3
  • if ($hget(SudokuTemp,%case)) hdel SudokuTemp %case
  • if ($hget(SudokuTemp,Case) != $null) && ($4 != flag) {
  • .timer -m 1 0 coorf $hget(sudokutemp,case) 16777214
  • hdel sudokutemp case
  • }
  • if ($hget(Sudoku,0).item == 81) sudocheck
  • }
  • }
  • alias modifétat {
  • var %case = $hget(SudokuTemp,coord)
  • coorf %case $replacex($1,sur,56320,incertain,8355711,0,15767584) $iif($hget(Sudoku,%case),$ifmatch,0) flag
  • hadd -m SudokuTemp %case $iif(!$1,0,$1)
  • if ($hget(sudokutemp,coord) != $null) coorf $ifmatch 16777215
  • hadd -m sudokutemp coord %case
  • .timer -m 1 50 coorf %case 645122
  • }
  • alias -l dessc {
  • if ($hget(sudokutemp,pause)) return
  • if ($1 isnum 3-275 && $2 isnum 21-293 && $hget(sudoku)) {
  • var %a = $checkpos($1,$2)
  • if ($hget(SudokuTemp,Coord) == %a) return
  • if ((($hget(SudokuTemp,Case) != $hget(SudokuTemp,Coord)) || ($hget(SudokuTemp,Case) == %a)) && ($hget(SudokuTemp,Coord) != $null)) {
  • coorf $ifmatch 16777215
  • hdel SudokuTemp Coord
  • }
  • if ($hget(SudokuTemp,Case) == %a) return
  • if (nonfixe isin $hget(Sudoku,%a)) || ($hget(sudoku,%a) == $null) { coorf %a 65280 | hadd -m SudokuTemp Coord %a }
  • else { coorf %a 37632 | hadd -m SudokuTemp Coord %a }
  • }
  • elseif ($hget(SudokuTemp,Case) != $hget(SudokuTemp,Coord)) {
  • if ($hget(SudokuTemp,Coord)) { coorf $ifmatch 16777215 | hdel SudokuTemp Coord }
  • }
  • }
  • alias -l readyd {
  • if (%limite) return
  • set -u1 %limite 1
  • if ($hget(sudokutemp,pause)) return
  • var %a = $iif(!$2,$1,$checkpos($1,$2))
  • if (((nonfixe !isin $hget(Sudoku,%a)) && ($hget(Sudoku,%a))) || ($hget(SudokuTemp,Case) == %a)) || (!$hget(sudoku)) return
  • if ($hget(SudokuTemp,Case) != $null) coorf $ifmatch 16777215
  • if ($hget(sudokutemp,coord) != $null) coorf $ifmatch 16777215
  • hadd -m SudokuTemp Case %a
  • coorf %a 255
  • }
  • alias -l checkpos {
  • var %colonne = 0, %ligne = 0, %dx = $calc($1 -4), %dy = $calc($2 - 21)
  • if ((%dx < 0) || (%dy < 0)) return
  • while %dx !isnum 0-30 { var %dx = $calc(%dx - 30) | inc %colonne }
  • while %dy !isnum 0-30 { var %dy = $calc(%dy - 30) | inc %ligne }
  • hadd -m SudokuTemp Pos $+(%colonne,%ligne)
  • if ($regex($hget(SudokuTemp,Pos),^[0-8]{2}$)) return $hget(SudokuTemp,Pos)
  • }
  • on *:close:@sud:hfree -w Sudoku* | .timersudoctime off
  • menu @aidesud {
  • sclick : window -c @aidesud
  • }
  • alias -l sudaide {
  • if ($window(@aidesud)) window -c @aidesud
  • window -Cdp +bx @aidesud -1 -1 293 140
  • drawrect -f @aidesud 0 1 0 0 300 300
  • drawtext @aidesud 4 verdana 20 70 2 Aide du Sudoku
  • drawtext @aidesud 1 verdana 15 15 30 Le but est de remplir chaque case
  • drawtext @aidesud 1 verdana 15 17 50 par un chiffre de 1 à 9. Attention :
  • drawtext @aidesud 1 verdana 15 18 70 chaque carré de 9 cases, chaque
  • drawtext @aidesud 1 verdana 15 15 90 ligne et chaque colonne ne doivent
  • drawtext @aidesud 1 verdana 15 6 110 comporter deux fois le même chiffre
  • }
  • alias -l colign {
  • if (!$window(@sud)) return
  • if (!$1) return
  • var %a = $left($1,1) ,%b = $right($1,1)
  • return $calc(%a + 1) $+ $iif(!%a,ère,ème) colonne $calc(%b + 1) $+ $iif(!%b,ère,ème) ligne
  • }
  • alias -l dcroix {
  • if (!$window(@sud)) return
  • if (!$2) return
  • var %x $token(3.33.63.94.124.154.185.215.245,$calc($left($1,1) + 1),46)
  • var %y $token(21.51.81.112.142.172.203.233.263,$calc($right($1,1) + 1),46)
  • draw $+ $2 $iif($2 == rect,-er,-r) @sud $iif($2 == rect,15767584,14687456) 1 %x %y $iif($2 == rect,29,$calc(%x + 29)) $iif($2 == rect,29,$calc(%y + 29))
  • if ($2 == rect) return
  • drawline -r @sud 14687456 1 %x $calc(%y + 29) $calc(%x + 29) %y
  • }
  • alias pausesud {
  • if ($sock(sudo)) return
  • if ($hget(sudokutemp,pause)) {
  • hadd -m sudokutemp ctime $calc($ctime - $hget(sudokutemp,ctimep))
  • drawcopy @sudbf 0 0 300 300 @sud 2 19 | window -c @sudbf
  • hdel sudokutemp pause | .timersudoctime 0 1 $!iif($isalias(dtime),dtime,.timersudoctime off)
  • }
  • else {
  • hadd -m sudokutemp pause 1 | .timersudoctime off
  • window -hp @sudbf 500 500 500 500 | drawcopy @sud 2 19 300 300 @sudbf 0 0
  • var %a 21 ,%b 291 | while (%a <= %b) { drawline @sud 15 1 3 %a 274 %a | inc %a }
  • drawtext @sud 4 verdana 50 60 120 PAUSE
  • }
  • }
  • alias msud {
  • if ($window(@msud)) window -c @msud
  • window -Cdp +bx @msud -1 -1 247 140
  • drawrect -n @msud 1 0 0 0 60 20
  • drawrect -fn @msud 15 0 1 1 58 18
  • drawtext -n @msud 3 verdana 14 11 1 Facile
  • drawrect -n @msud 1 0 61 0 60 20
  • drawtext -n @msud 7 verdana 14 68 1 Moyen
  • drawrect -n @msud 1 0 122 0 60 20
  • drawtext -n @msud 4 verdana 14 128 1 Difficile
  • drawrect -n @msud 1 0 183 0 60 20
  • drawtext -n @msud 6 verdana 14 189 1 Expert
  • drawrect -fn @msud 15 0 1 21 247 140
  • drawtext -n @msud 1 verdana 14 25 22 Nicks
  • drawtext -n @msud 1 verdana 14 135 22 Temps
  • drawline -n @msud 1 1 1 42 246 42
  • drawline -n @msud 1 1 85 42 85 200
  • hadd -m sudokutemp msud 1
  • mstri facile
  • drawdot @msud
  • }
  • alias drawcn if ($window($$1)) drawtext -n $$1 $$4 $$2 $$3 $int($calc(($iif($show,85,162) - $width($strip($$6-),$2,$3)) /2 $iif(!$show,+85))) $$5 $6-
  • menu @msud {
  • mouse : msud.m $mouse.x $mouse.y
  • sclick : window -c @msud
  • }
  • alias msud.m {
  • if ($inrect($1,$2,1,1,247,20)) {
  • var %ic $int($calc($1 / 61 + 1)) | drawrect -fn @msud 15 0 $replacex(%ic,2,62,3,123,4,184) 1 58 18
  • drawtext -n @msud $replacex(%ic,1,3,2,7,3,4,4,6) verdana 14 $replacex(%ic,1,11,2,68,3,128,4,189) 1 $replacex(%ic,1,Facile,2,Moyen,3,Difficile,4,Expert)
  • if ($hget(sudokutemp,msud) != %ic && $v1) {
  • drawrect -fn @msud 0 0 $replacex($ifmatch,2,62,3,123,4,184) 1 58 18
  • drawtext -n @msud $replacex($ifmatch,1,3,2,7,3,4,4,6) verdana 14 $replacex($ifmatch,1,11,2,68,3,128,4,189) 1 $replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert)
  • }
  • hadd -m sudokutemp msud %ic | drawdot @msud | mstri $replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert)
  • }
  • }
  • alias pre {
  • if ($window(@sud)) window -a @sud
  • elseif ($window(@menu)) window -a @menu
  • else {
  • msud.hfree
  • window -Cdp +bx @menu -1 -1 150 283
  • drawrect -fn @menu 15 0 1 1 150 280
  • sudo.button 1 9 10 130 20 Facile
  • sudo.button 2 9 40 130 20 Moyen
  • sudo.button 3 9 70 130 20 Difficile
  • sudo.button 4 9 100 130 20 Expert
  • sudo.button 5 9 130 130 20 Meilleurs scores
  • sudo.button 6 9 160 130 20 Comment jouer
  • sudo.button 7 9 190 130 20 Règles du jeu
  • sudo.button 8 9 220 130 20 Fermer
  • sudo.button 9 9 250 130 20 Unload
  • drawdot @menu
  • }
  • }
  • on *:close:@menu:msud.hfree
  • alias -l msud.hfree {
  • if ($hget(SudoButtons)) hfree $ifmatch
  • if ($hget(SudoBF)) hfree $ifmatch
  • }
  • alias -l sudo.button {
  • if (!$window(@menu)) return
  • var %g = 1, %r = ^[0-9]+ [0-9]+ [0-9]+$
  • if (!$regex($1-3,%r)) return
  • if ($isid) {
  • var %x = $2, %y = $3, %t = $hget(SudoButtons,0).item
  • while %t {
  • tokenize 32 $hget(SudoButtons,%t).data
  • if ($inroundrect(%x,%y,$2,$3,$4,$5,20,20)) break
  • dec %t
  • }
  • if (!%t) var %g = 0
  • else hadd -m SudoBF $1 $1-5
  • }
  • if (%g) {
  • if (!$regex($3-5,%r)) return
  • hadd -m SudoButtons $1 $1-
  • drawrect -dfnr @menu $iif($isid,11203252,16777215) 1 $2-5
  • drawrect -dnr @menu $iif($isid,0,7372687) 1 $2-5
  • if ($6-) drawtext -rn @menu $replacex($1,1,37632,2,32764,3,255,4,10223772,5,1,6,1,7,1,8,1)) Verdana 12 $calc($2 + ($4 - $width($6-,Verdana,12))/2) $calc($3 + 3) $6-
  • return $1
  • }
  • }
  • menu @menu {
  • mouse:sudomouse $mouse.x $mouse.y
  • sclick:sudoclick $mouse.x $mouse.y
  • }
  • alias -l sudoclick {
  • var %id = $gettok($sudo.button(1,$1,$2),1,32)
  • if (%id isnum 1-4) { sudoku %id | window -c @msud | window -c @menu | window -c @aidesud | window -c @tuto }
  • elseif (%id == 8) { window -c @menu | msud.hfree }
  • elseif (%id == 5) msud
  • elseif (%id == 6) htp?
  • elseif (%id == 7) sudaide
  • elseif (%id == 9) {
  • var %c
  • if ($?!="Voulez-vous supprimer le jeu ? Non pour annuler") {
  • hfree -w sud*
  • var %c = 1
  • .remove $qt($script)
  • .remove $qt($$findfile($scriptdir,SudoTuto.jpg,1))
  • noop $findfile($scriptdir,sudosco?.sud,0,.remove $shortfn($1-))
  • noop $input(Le Sudoku a bien été déchargé et supprimé)
  • }
  • if ((%c) || ($input(Voulez-vous décharger ce jeu ?,y))) {
  • .timersudoctime off
  • hfree -w sudoku*
  • window -c @sud | window -c @menu | window -c @msud | window -c @aidesud | window -c @tuto
  • if (!%c) noop $input(Le sudoku a bien été déchargé)
  • .unload -rs $qt($script)
  • }
  • }
  • if ($window(@menu)) drawdot @menu
  • }
  • alias -l sudomouse {
  • var %id = $gettok($sudo.button(1,$1,$2),1,32), %t = 1
  • if ($hget(SudoBF,0).item) {
  • while $hget(SudoBF,%t).item {
  • var %o = $ifmatch
  • if ($gettok(%o,1,32) != %id) {
  • var %h = $hget(SudoBF,%o)
  • hdel SudoBF %o
  • sudo.button %h $gettok($hget(SudoButtons,$gettok(%h,1,32)),6-,32)
  • }
  • else inc %t
  • }
  • }
  • drawdot @menu
  • }
  • alias htp? {
  • window -aBCdhp +dL @tuto 0 0 882 600
  • var %f = $findfile($scriptdir,SudoTuto.jpg,1)
  • if (%f) drawpic @tuto 0 0 $shortfn(%f)
  • else drawtext -or @tuto 0 Tahoma 20 264 290 Il manque le fichier SudoTuto.jpg !
  • }
  • menu @tuto {
  • sclick:window -c @tuto
  • }
  • on *:start: { var %n = hmake $!left($nopath($1-),-4) 100 $(|) hload $!left($nopath($1-),-4) $!qt($1-) | noop $findfile(sudoku\,*.sud,0,%n) }
  • ;End Of File
;******************************
;Sudoku codé par Wims & ArKanis
; Créé le 01/01/06
; Version 3.0
;******************************

alias sudoku {
  if (!$1) { pre | return }
  if ($window(@sud)) { var %x = $window(@sud).x, %y = $window(@sud).y | window -c @sud }
  if ($hget(Sudoku)) hfree Sudoku
  if ($hget(SudokuTemp)) hfree SudokuTemp
  var %t = $iif($1 isnum 1-,$1,1)
  hadd -m SudokuTemp Difficulte $iif(%t isnum 1-4,%t,1)
  if ((%x) && (%y)) window -dp +bx @sud %x %y 280 298
  else window -Cdp +bx @sud -1 -1 280 298
  .timersudoctime off | drawrect -fr @sud 16777215 1 0 0 300 300
  drawline -r @sud 0 1 1 232 500 232 | drawline -r @sud 0 1 1 50 500 50
  drawline -r @sud 0 1 1 80 500 80 | drawline -r @sud 0 1 244 20 244 500
  drawline -r @sud 0 1 32 20 32 500 | drawline -r @sud 0 1 62 20 62 500
  drawline -r @sud 0 2 275 20 275 500 | drawline -r @sud 0 1 1 141 500 141
  drawline -r @sud 0 1 1 171 500 171 | drawline -r @sud 0 2 2 293 500 293
  drawline -r @sud 0 1 123 20 123 500 | drawline -r @sud 0 1 153 20 153 500
  drawline -r @sud 0 1 214 20 214 500 | drawline -r @sud 255 2 93 21 93 291
  drawline -r @sud 0 1 1 262 500 262 | drawline -r @sud 255 2 2 202 273 202
  drawline -r @sud 255 2 184 21 184 291 | drawline -r @sud 255 2 2 111 273 111
  drawrect -r @sud 0 2 1 19 291 291 | var %t = $hget(SudokuTemp,Difficulte)
  drawtext -r @sud 255 verdana 10 2 2 [Sudoku] [Level] : $replace(%t,4,Expert,3,Difficile,2,Moyen,1,Facile)
  sudogen
}

alias -l dtime {
  if (!$window(@sud)) { .timersudoctime off | return }
  drawrect -nf @sud 0 1 175 2 180 10
  hadd -m sudokutemp ctimep $calc($ctime - $$hget(SudokuTemp,Ctime))
  drawtext -nr @sud $rgb($color(7)) verdana 10 175 2 $duration($calc($ctime - $$hget(SudokuTemp,Ctime)))
  drawdot @sud
}

alias -l depsud {
  window @sud $calc($mouse.dx - $1) $calc($mouse.dy - $2) 280 298
  if ($mouse.key & 1) .timerdepsud 0 0 depsud $1-
}

ON *:KEYDOWN:@sud:*:{
  if ($keychar isin 0P) { pausesud | return }
  elseif ($hget(sudokutemp,coord) != $null) && (nonfixe isin $hget(sudoku,$hget(sudokutemp,coord))) && ($hget(sudoku,$hget(sudokutemp,coord))) && ($keychar isin +-) {
    var %h = $hget(sudokutemp,$hget(sudokutemp,coord)) ,%r = $iif(!%h,1,$replace(%h,sur,2,incertain,3))
    $iif($keychar == +,inc,dec) %r | if (%r == $iif($keychar == +,4,0)) var %r = $iif($keychar == +,1,3)
    modifétat $replace(%r,1,0,2,sur,3,incertain)
    return
  }
  var %c = $hget(SudokuTemp,coord) $iif($istok(37.38,$keyval,46),-,+) $iif($istok(37.39,$keyval,46),10,1) ,%a = $iif($len(%c) == 1,$+(0,%c),%c)
  if ($keychar isnum 1-9) sudonum $$hget(SudokuTemp,Case) $keychar
  elseif ($istok(8-46,$keyval,45)) sudonum $$hget(SudokuTemp,Case)
  elseif ($keyval == 13) && ($hget(SudokuTemp,coord) != $null) readyd $hget(SudokuTemp,coord)
  elseif ($istok(37.38.39.40,$keyval,46)) && ($left(%a,1) isnum 0-8) && ($right(%a,1) isnum 0-8) {
    var %old = $hget(sudokutemp,coord)
    hadd -m SudokuTemp Coord %a
    if ($hget(SudokuTemp,case) != %old) coorf %old 16777215
    if ($hget(SudokuTemp,case) == %a) return
    coorf %a $iif(nonfixe isin $hget(Sudoku,%a) || $hget(Sudoku,%a) == $null,65280,37632) 
  }
}

menu @sud {
  dclick : depsud $calc($mouse.dx - $window(@sud).x)) $calc($mouse.dy - $window(@sud).y)
  mouse : dessc $mouse.x $mouse.y
  sclick : readyd $mouse.x $mouse.y
  uclick : .timerdepsud off
  $iif(((nonfixe isin $hget(Sudoku,$checkpos($mouse.x,$mouse.y))) && ($checkpos($mouse.x,$mouse.y) != $null)),$mo($ifmatch))  
  .$iif($hget(SudokuTemp,$hget(SudokuTemp,Pos)) == sur,$style(1)) Case sûre:modifétat sur
  .$iif($hget(SudokuTemp,$hget(SudokuTemp,Pos)) == incertain,$style(1)) Case incertaine:modifétat incertain
  .$iif(!$hget(SudokuTemp,$hget(SudokuTemp,Pos)),$style(1)) Case normale:modifétat 0
  Changer la difficulté
  .$iif(((!$hget(SudokuTemp,Difficulte)) || ($hget(SudokuTemp,Difficulte) == 1)),$style(1)) Facile:sudoku 1
  .$iif($hget(SudokuTemp,Difficulte) == 2,$style(1)) Moyen:sudoku 2
  .$iif($hget(SudokuTemp,Difficulte) == 3,$style(1)) Difficile:sudoku 3
  .$iif($hget(SudokuTemp,Difficulte) == 4,$style(1)) Expert:sudoku 4
  $iif($hget(SudokuTemp,Aide),$style(1)) Faciliter le remplissage de la grille:hadd -m SudokuTemp Aide $iif($hget(SudokuTemp,Aide),0,1)
  Nouvelle grille:{
    if ((($hget(sudoku)) && ($?!="Etes-vous sûr(e) de vouloir commencer $crlf $+ une nouvelle grille et ainsi quitter cette partie ?")) || (!$hget(sudoku))) {
      sudogen | .timersudoctime off | drawrect -f @sud 0 1 160 2 100 10
      if ($hget(SudokuTemp,Soluce)) hdel SudokuTemp Soluce
    }
  }
  $iif($hget(SudokuTemp,Soluce) || !$hget(sudoku),$style(2)) Donner la solution:if ($?!="Etes-vous sûr(e) de vouloir avoir la solution ?") sudocorrect
  -
  Menu principal { window -c @sud | .hfree -w Sudoku* | .timersudoctime off | sudoku }
  Meilleurs scores:msud
  Règles du jeu:sudaide
  Comment jouer ?:htp?
  -
  Fermer:window -c @sud | hfree -w Sudoku* | .timersudoctime off
  -
  Unload
  .Supprimer:{
    if (!$?!="Voulez-vous vraiment supprimer le jeu ? Non pour annuler") {
      window -c @sud | window -c @menu | window -c @aidesud | window -c @tuto | window -c @msud
      hfree -w Sud*
      .timersudoctime off
      .remove $shortfn($script)
      .remove $shortfn($$findfile($scriptdir,SudoTuto.jpg,1))
      noop $findfile($scriptdir,sudosco?.sud,0,.remove $shortfn($1-))
      noop $input(Le sudoku a bien été supprimé et déchargé)
      .unload -rs $qt($script)
    }
  }
  .Unload:{
    if (!$?!="Confirmer le déchargement ? Non pour annuler") return
    window -c @sud | window -c @menu | window -c @aidesud | window -c @tuto | window -c @msud
    hfree -w Sudoku* | .timersudoctime off | noop $input(Le sudoku a bien été déchargé)
    .unload -rs $shortfn($script)
  }
}

alias -l sudogen {
  if (!$window(@sud)) return
  if ($hget(Sudoku)) hfree $ifmatch
  var %ligne = 0
  while %ligne <= 8 {
    var %colonne = 0
    while %colonne <= 8 {
      coorf $+(%colonne,%ligne) eff
      inc %colonne
    }
    inc %ligne
  }
  if ($hget(Sudoku,0).item) coorf 00 $iif(nonfixe isin $hget(sudoku,00) || $hget(sudoku,00) == $null,65280,37632)
  hadd -m SudokuTemp Ctime $ctime
  hadd -m SudokuTemp coord 00
  if ($isalias(dtime)) {
    .timersudoctime 0 1 dtime
    dtime
  }
  var %ticks = $ticks, %r = $r(100,120), %s = 0, %l, %t = 1, %a = 123456789, %sol = $+(%a,;,$seq(0,X,2,9))
  while (%t < 9) var %a = $+($right(%a,-1),$left(%a,1)), %sol = $puttok(%sol,%a,$calc($iif($calc($calc(%t *3) % 8),$v1,8) +1),59), %t = %t + 1
  while (%s <= %r) var %n = $r(8,16), %l = $instok(%l,%n,-1,32), %s = %s + %n
  var %i = 1, %m = $numtok(%l,32)
  while (%i <= %m) {
    var %t = 1, %n = $gettok(%l,%i,32)
    while (%t <= %n) var %sol = $echange.sud(%sol), %t = %t + 1
    if ($r(0,10) <= 6) var %sol = $permut.sud(%sol)
    var %sol = $transp.sud(%sol), %i = %i + 1
  }
  var %t = 1, %sol = $remove(%sol,;), %l = $hget(SudokuTemp,Difficulte)
  hadd -m SudokuTemp Cheat %sol
  if (%l == 2) var %n = $r(46,48)
  elseif (%l == 3) var %n = $r(49,51)
  elseif (%l == 4) var %n = $r(52,54)
  else var %n = $r(42,45)
  if (%n > 81) return
  while (%t <= %n) {
    var %r = $r(1,81), %s = $+(^,$chr(40),.,$chr(123),$calc(%r - 1),$chr(125),$chr(41))
    if ($mid(%sol,%r,1)) var %sol = $regsubex(%sol,$+(%s,(.)),\t0), %t = %t + 1
  }
  var %t = 0
  while (%t <= 80) {
    var %c = $int($calc(%t / 9) % 9), %l = $calc(%t % 9)
    if ($mid(%sol,$calc(%t +1),1)) s.a $+(%l,%c) $ifmatch
    inc %t
  }
}

alias -l s.a {
  hadd -m Sudoku $$1-2
  coorf $1 0 $$2
}
alias -l seq {
  ;texte subtext from(num) to(num)
  ;ex $seq(varX,X,1,10) = var1;var2;var3;var4;var5;var6;var7;var8;var9;var10
  if (($3 !isnum) || ($4 !isnum) || (; isin $2) || ($2 == $null)) return
  return $left($regsubex($str($+($1,;),$calc($4 - $3 +1)),$+(/,$2,/g),$calc($3 + \n)),-1)
}
alias -l transp.sud {
  var %t = 1, %sol
  while (%t <= 9) {
    var %i = 0
    while (%i < 9) var %sol = $+(%sol,$mid($1,$calc(%t + %i * 10),1)), %i = %i + 1
    var %sol = $+(%sol,;)
    inc %t
  }
  return $left(%sol,-1)
}
alias -l echange.sud {
  var %t = 1, %r = $r(0,2), %m = $calc(%r *3+1), %n = $calc(%r *3+3), %r = $r(%m,%n), %r2 = %r
  while (%r == %r2) var %r2 = $r(%m,%n)
  return $puttok($puttok($1,$gettok($1,%r2,59),%r,59),$gettok($1,%r,59),%r2,59)
}
alias -l permut.sud {
  var %r = $r(1,9), %r2 = %r
  while (%r == %r2) var %r2 = $r(1,9)
  return $replacex($1,%r,%r2,%r2,%r)
}

alias -l sudonum {
  if (!$regex($1,^[0-8]{2}$)) return
  var %old = $hget(SudokuTemp,Coord)
  if (!$regex($2,^[1-9]{1}$)) {
    if ($regex($hget(Sudoku,$1),nonfixe)) {
      hdel Sudoku $1
      coorf $1 eff
      if ($hget(SudokuTemp,Case)) hdel SudokuTemp Case
      coorf $hget(sudokutemp,coord) 64512
    }
    return
  }
  var %ligne = $right($1,1), %colonne = $left($1,1), %case = $1
  if ($hget(SudokuTemp,Aide)) {
    var %t = 0
    while %t <= 8 {
      if (%t != %ligne) {
        if ($gettok($hget(Sudoku,$+(%colonne,%t)),1,32) == $2) {
          tokenize 32 $colign($+(%colonne,%t))
          var %t = $input(La case de la $1 colonne sur la $3 ligne qui est sur la même colonne porte le même numéro !,o)
          return
        }
      }
      if (%t != %colonne) {
        if ($gettok($hget(Sudoku,$+(%t,%ligne)),1,32) == $2) {
          tokenize 32 $colign($+(%t,%ligne))
          var %t = $input(La case de la $1 colonne sur la $3 ligne qui est sur la même ligne porte le même numéro !,o)
          return
        }
      }
      inc %t
    }
    var %debligne = %ligne, %debcolonne = %colonne
    while ($round($calc(%debligne /3),0) != $calc(%debligne / 3)) dec %debligne
    while ($round($calc(%debcolonne /3),0) != $calc(%debcolonne / 3)) dec %debcolonne
    var %c.ligne = 0
    while (%c.ligne <= 2) {
      var %c.colonne = 0, %t.ligne = $calc(%c.ligne + %debligne)
      while (%c.colonne <= 2) {
        var %t.colonne = %c.colonne + %debcolonne
        if ((%case != $+(%t.colonne,%t.ligne)) && ($gettok($hget(Sudoku,$+(%t.colonne,%t.ligne)),1,32) == $2)) {
          tokenize 32 $colign($+(%t.colonne,%t.ligne))
          var %t = $input(La case de la $1 colonne sur la $3 ligne qui est dans le même carré porte le même numéro !,o)
          return
        }
        inc %c.colonne
      }
      inc %c.ligne
    }
  }
  if ($hget(SudokuTemp,%case)) hdel SudokuTemp $hget(SudokuTemp,Case) 
  hadd -m Sudoku $1-2 nonfixe
  coorf $1 15767584 $2
  if (%old) coorf $ifmatch 16777215
  hadd -m SudokuTemp Coord $1
  .timer -m 1 50 coorf $1 64512
  if ($hget(SudokuTemp,Case)) hdel SudokuTemp Case
}

alias -l sudocheck {
  if (!$hget(Sudoku)) return
  if ($hget(SudokuTemp,Soluce)) return
  var %ligne = 0, %fautes = 0
  while (%ligne <= 8) {
    var %colonne = 0
    while (%colonne <= 8) {
      var %case = $+(%colonne,%ligne)
      if ($regex($hget(Sudoku,%case),nonfixe)) {
        var %correc = $sudosoluce(%case)
        if ($gettok($hget(Sudoku,%case),1,32) != %correc) inc %fautes
      }
      inc %colonne
    }
    inc %ligne
  }
  if (%fautes) {
    var %t = $input(Il y a %fautes $+(faute,$iif(%fautes >= 2,s)))
    if ($hget(sudokutemp,case) != $null || $hget(sudokutemp,coord) != $null) { coorf $v1 16777215 | hdel sudokutemp coord | hdel sudokutemp case }
    halt
  }
  else {
    .timersudoctime off
    var %h = $+(sudsco,$iif($hget(sudokutemp,difficulte),$replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert),facile)) ,%t = $hget(sudokutemp,ctimep)
    hadd -m %h $+(%t,/,<<<¿>>>) 1
    mstri $iif($hget(sudokutemp,difficulte),$replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert),facile)
    if ($hfind(%h,$+(%t,/,<<<¿>>>))) {
      :back
      var %n = $input(Bravo !! Tu as fait un nouveau record de $+($duration(%t),$chr(44)) inscris ton pseudo ou clique sur Cancel pour ne pas ajouter le record :,et,Nouveau record !)	
      if (!%n) goto lu
      elseif ($len(%n) > 10) goto back 
      hadd -m %h $+(%t,/,%n) 1
      :lu
      if ($input(Voulez-vous passer au niveau supérieur,y)) { var %ga? on | goto sup }
      else { hadd -m SudokuTemp Soluce 1 | .timersudoctime off | hfree -w sudoku* }
    }
    elseif ($?!="Bien joué ! Vous avez fini ce sudoku en $+($duration(%t),.) Voulez-vous passer au niveau supérieur ?") { var %ga? on | goto sup }
    else { .timersudoctime off | hfree -sw sudoku* | coorf $hget(sudokutemp,coord) 16777215 }
    :sup 
    hdel -m %h $+(%t,/,<<<¿>>>)
    if (!$isdir(Sudoku)) mkdir Sudoku
    hsave %h sudoku\ $+ %h $+ .sud
    mstri $iif($hget(sudokutemp,difficulte),$replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert),facile)
    if (!%ga?) return 
    var %o = $calc($hget(SudokuTemp,Difficulte) +1) 
    if (%o == 5) var %o = 4
    elseif (%o !isnum 2-4) var %o = 2
    sudoku %o
  }
}

alias mstri {
  var %h = $+(sudsco,$1) ,%a 1 ,%b = $hget(%h,0).item ,%c = 1
  while (%a <= %b) { var %stock = %stock $replace($hget(%h,%a).item,$chr(47),$chr(46)) | inc %a }
  var %sort = $sorttok(%stock,32,n)
  if ($window(@msud)) {
    drawrect -fn @msud 15 0 2 45 80 90
    drawrect -fn @msud 15 0 90 45 150 90
  }
  if ($hget(%h)) hfree %h
  while (%c <= $iif($numtok(%stock,32) > 6,6,$ifmatch)) {
    if ($window(@msud)) {
      drawcn @msud verdana 12 1 $calc(47 + (%c - 1) * 14) $token($token(%sort,%c,32),2,46) 
      .drawcn @msud verdana 12 1 $calc(47 + (%c - 1) * 14) $duration($token($token(%sort,%c,32),1,46))
    }
    hadd -m %h $+($token($token(%sort,%c,32),1,46),/,$token($token(%sort,%c,32),2,46))
    inc %c
  }
  if ($window(@msud)) drawdot @msud
}

alias -l sudosoluce {
  if (!$hget(SudokuTemp,Cheat)) return
  if (!$regex($1,^[0-8]{2}$)) return
  return $mid($hget(SudokuTemp,Cheat),$calc($right($1,1) * 9 + $left($1,1) +1),1)
}
alias -l sudocorrect {
  hadd -m SudokuTemp Soluce 1
  var %fautes = 0, %ligne = 0, %justes = 0, %vides = 0
  while (%ligne <= 8) {
    var %colonne = 0
    while (%colonne <= 8) {
      var %case = $+(%colonne,%ligne), %correct = $sudosoluce(%case), %r = $hget(Sudoku,%case)
      if (nonfixe isin %r) {
        if ($gettok(%r,1,32) != %correct) { inc %fautes | coorf %case 14687456 %correct | dcroix %case line }
        else { coorf %case 15767584 %correct | inc %justes | dcroix %case rect }
      }
      if (!%r) { inc %vides | coorf %case 255 %correct }
      hadd -m Sudoku %case %correct
      inc %colonne
    }
    inc %ligne
  }
  var %t = $input(Il y avait %fautes $+(faute,$iif(%fautes >= 2,s),$chr(44)) %justes $+(juste,$iif(%justes >= 2,s),$chr(44)) %vides $+(vide,$iif(%vides >= 2,s)),o)
  .timersudoctime off
  hfree -w sudoku*
}

alias -l mo {
  var %c = $left($1,1), %l = $right($1,1), %t = $int($calc(%c / 3 +1))
  if (%l isnum 3-5) inc %t 3
  elseif (%l isnum 6-8) inc %t 6
  return Carré %t - Case $calc(%c % 3+(%l % 3)*3+1)
}

alias -l coorf {
  if (!$window(@sud)) return
  if (!$regex($1,^[0-8]{2}$)) return
  var %x $token(3.33.63.94.124.154.185.215.245,$calc($left($1,1) + 1),46)
  var %y $token(21.51.81.112.142.172.203.233.263,$calc($right($1,1) + 1),46)
  if ($2 == eff) { drawrect -f @sud 0 1 %x %y 29 29 | return }
  if (!$3) { drawrect -r @sud $2 1 %x %y 29 29 }
  else {
    drawrect -f @sud 0 1 %x %y 29 29
    drawtext -r @sud $2 verdana 20 $calc(%x + 8) $calc(%y + 1) $3
    if ($hget(SudokuTemp,%case)) hdel SudokuTemp %case
    if ($hget(SudokuTemp,Case) != $null) && ($4 != flag) {
      .timer -m 1 0 coorf $hget(sudokutemp,case) 16777214 
      hdel sudokutemp case
    }
    if ($hget(Sudoku,0).item == 81) sudocheck
  }
}
alias modifétat {
  var %case = $hget(SudokuTemp,coord)
  coorf %case $replacex($1,sur,56320,incertain,8355711,0,15767584) $iif($hget(Sudoku,%case),$ifmatch,0) flag
  hadd -m SudokuTemp %case $iif(!$1,0,$1)
  if ($hget(sudokutemp,coord) != $null) coorf $ifmatch 16777215 
  hadd -m sudokutemp coord %case
  .timer -m 1 50 coorf %case 645122
}


alias -l dessc {
  if ($hget(sudokutemp,pause)) return
  if ($1 isnum 3-275 && $2 isnum 21-293 && $hget(sudoku)) { 
    var %a = $checkpos($1,$2)
    if ($hget(SudokuTemp,Coord) == %a) return
    if ((($hget(SudokuTemp,Case) != $hget(SudokuTemp,Coord)) || ($hget(SudokuTemp,Case) == %a)) && ($hget(SudokuTemp,Coord) != $null)) {
      coorf $ifmatch 16777215
      hdel SudokuTemp Coord    
    }
    if ($hget(SudokuTemp,Case) == %a) return
    if (nonfixe isin $hget(Sudoku,%a)) || ($hget(sudoku,%a) == $null) { coorf %a 65280 | hadd -m SudokuTemp Coord %a }
    else { coorf %a 37632 | hadd -m SudokuTemp Coord %a }
  }
  elseif ($hget(SudokuTemp,Case) != $hget(SudokuTemp,Coord)) {
    if ($hget(SudokuTemp,Coord)) { coorf $ifmatch 16777215 | hdel SudokuTemp Coord }
  }
}

alias -l readyd {
  if (%limite) return
  set -u1 %limite 1
  if ($hget(sudokutemp,pause)) return 
  var %a = $iif(!$2,$1,$checkpos($1,$2))
  if (((nonfixe !isin $hget(Sudoku,%a)) && ($hget(Sudoku,%a))) || ($hget(SudokuTemp,Case) == %a)) || (!$hget(sudoku)) return
  if ($hget(SudokuTemp,Case) != $null) coorf $ifmatch 16777215
  if ($hget(sudokutemp,coord) != $null) coorf $ifmatch 16777215
  hadd -m SudokuTemp Case %a
  coorf %a 255
}

alias -l checkpos {
  var %colonne = 0, %ligne = 0, %dx = $calc($1 -4), %dy = $calc($2 - 21)
  if ((%dx < 0) || (%dy < 0)) return
  while %dx !isnum 0-30 { var %dx = $calc(%dx - 30) | inc %colonne }
  while %dy !isnum 0-30 { var %dy = $calc(%dy - 30) | inc %ligne }
  hadd -m SudokuTemp Pos $+(%colonne,%ligne)
  if ($regex($hget(SudokuTemp,Pos),^[0-8]{2}$)) return $hget(SudokuTemp,Pos)
}
on *:close:@sud:hfree -w Sudoku* | .timersudoctime off
menu @aidesud {
  sclick : window -c @aidesud
}

alias -l sudaide {
  if ($window(@aidesud)) window -c @aidesud
  window -Cdp +bx @aidesud -1 -1 293 140
  drawrect -f @aidesud 0 1 0 0 300 300
  drawtext @aidesud 4 verdana 20 70 2 Aide du Sudoku
  drawtext @aidesud 1 verdana 15 15 30 Le but est de remplir chaque case
  drawtext @aidesud 1 verdana 15 17 50 par un chiffre de 1 à 9. Attention :
  drawtext @aidesud 1 verdana 15 18 70 chaque carré de 9 cases, chaque
  drawtext @aidesud 1 verdana 15 15 90 ligne et chaque colonne ne doivent
  drawtext @aidesud 1 verdana 15 6 110 comporter deux fois le même chiffre
}

alias -l colign {
  if (!$window(@sud)) return
  if (!$1) return
  var %a = $left($1,1) ,%b = $right($1,1)
  return $calc(%a + 1) $+ $iif(!%a,ère,ème) colonne $calc(%b + 1) $+ $iif(!%b,ère,ème) ligne
} 

alias -l dcroix {
  if (!$window(@sud)) return
  if (!$2) return
  var %x $token(3.33.63.94.124.154.185.215.245,$calc($left($1,1) + 1),46)
  var %y $token(21.51.81.112.142.172.203.233.263,$calc($right($1,1) + 1),46)
  draw $+ $2 $iif($2 == rect,-er,-r) @sud $iif($2 == rect,15767584,14687456) 1 %x %y $iif($2 == rect,29,$calc(%x + 29)) $iif($2 == rect,29,$calc(%y + 29))
  if ($2 == rect) return
  drawline -r @sud 14687456 1 %x $calc(%y + 29) $calc(%x + 29) %y
}

alias pausesud {
  if ($sock(sudo)) return
  if ($hget(sudokutemp,pause)) {
    hadd -m sudokutemp ctime $calc($ctime - $hget(sudokutemp,ctimep)) 
    drawcopy @sudbf 0 0 300 300 @sud 2 19 | window -c @sudbf
    hdel sudokutemp pause | .timersudoctime 0 1 $!iif($isalias(dtime),dtime,.timersudoctime off)
  }
  else {
    hadd -m sudokutemp pause 1 | .timersudoctime off
    window -hp @sudbf 500 500 500 500 | drawcopy @sud 2 19 300 300 @sudbf 0 0
    var %a 21 ,%b 291 | while (%a <= %b) { drawline @sud 15 1 3 %a 274 %a | inc %a }
    drawtext @sud 4 verdana 50 60 120 PAUSE
  }
}

alias msud {
  if ($window(@msud)) window -c @msud
  window -Cdp +bx @msud -1 -1 247 140
  drawrect -n @msud 1 0 0 0 60 20
  drawrect -fn @msud 15 0 1 1 58 18
  drawtext -n @msud 3 verdana 14 11 1 Facile 
  drawrect -n @msud 1 0 61 0 60 20
  drawtext -n @msud 7 verdana 14 68 1 Moyen 
  drawrect -n @msud 1 0 122 0 60 20
  drawtext -n @msud 4 verdana 14 128 1 Difficile 
  drawrect -n @msud 1 0 183 0 60 20
  drawtext -n @msud 6 verdana 14 189 1 Expert
  drawrect -fn @msud 15 0 1 21 247 140
  drawtext -n @msud 1 verdana 14 25 22 Nicks
  drawtext -n @msud 1 verdana 14 135 22 Temps
  drawline -n @msud 1 1 1 42 246 42
  drawline -n @msud 1 1 85 42 85 200
  hadd -m sudokutemp msud 1
  mstri facile
  drawdot @msud
}

alias drawcn if ($window($$1)) drawtext -n $$1 $$4 $$2 $$3 $int($calc(($iif($show,85,162) - $width($strip($$6-),$2,$3)) /2 $iif(!$show,+85))) $$5 $6- 

menu @msud {
  mouse : msud.m $mouse.x $mouse.y
  sclick : window -c @msud 
}
alias msud.m {
  if ($inrect($1,$2,1,1,247,20)) {
    var %ic $int($calc($1 / 61 + 1)) | drawrect -fn @msud 15 0 $replacex(%ic,2,62,3,123,4,184) 1 58 18
    drawtext -n @msud $replacex(%ic,1,3,2,7,3,4,4,6) verdana 14 $replacex(%ic,1,11,2,68,3,128,4,189) 1 $replacex(%ic,1,Facile,2,Moyen,3,Difficile,4,Expert) 
    if ($hget(sudokutemp,msud) != %ic && $v1) {
      drawrect -fn @msud 0 0 $replacex($ifmatch,2,62,3,123,4,184) 1 58 18 
      drawtext -n @msud $replacex($ifmatch,1,3,2,7,3,4,4,6) verdana 14 $replacex($ifmatch,1,11,2,68,3,128,4,189) 1 $replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert) 
    }
    hadd -m sudokutemp msud %ic | drawdot @msud | mstri $replacex($ifmatch,1,Facile,2,Moyen,3,Difficile,4,Expert) 
  }
}

alias pre {
  if ($window(@sud)) window -a @sud
  elseif ($window(@menu)) window -a @menu
  else {
    msud.hfree
    window -Cdp +bx @menu -1 -1 150 283
    drawrect -fn @menu 15 0 1 1 150 280
    sudo.button 1 9 10 130 20 Facile
    sudo.button 2 9 40 130 20 Moyen
    sudo.button 3 9 70 130 20 Difficile
    sudo.button 4 9 100 130 20 Expert
    sudo.button 5 9 130 130 20 Meilleurs scores
    sudo.button 6 9 160 130 20 Comment jouer
    sudo.button 7 9 190 130 20 Règles du jeu
    sudo.button 8 9 220 130 20 Fermer
    sudo.button 9 9 250 130 20 Unload
    drawdot @menu
  }
}
on *:close:@menu:msud.hfree
alias -l msud.hfree {
  if ($hget(SudoButtons)) hfree $ifmatch
  if ($hget(SudoBF)) hfree $ifmatch
}
alias -l sudo.button {
  if (!$window(@menu)) return
  var %g = 1, %r = ^[0-9]+ [0-9]+ [0-9]+$
  if (!$regex($1-3,%r)) return
  if ($isid) {
    var %x = $2, %y = $3, %t = $hget(SudoButtons,0).item
    while %t {
      tokenize 32 $hget(SudoButtons,%t).data
      if ($inroundrect(%x,%y,$2,$3,$4,$5,20,20)) break
      dec %t
    }
    if (!%t) var %g = 0
    else hadd -m SudoBF $1 $1-5
  }
  if (%g) {
    if (!$regex($3-5,%r)) return
    hadd -m SudoButtons $1 $1-
    drawrect -dfnr @menu $iif($isid,11203252,16777215) 1 $2-5
    drawrect -dnr @menu $iif($isid,0,7372687) 1 $2-5
    if ($6-) drawtext -rn @menu $replacex($1,1,37632,2,32764,3,255,4,10223772,5,1,6,1,7,1,8,1)) Verdana 12 $calc($2 + ($4 - $width($6-,Verdana,12))/2) $calc($3 + 3) $6-  
    return $1
  }
}
menu @menu {
  mouse:sudomouse $mouse.x $mouse.y
  sclick:sudoclick $mouse.x $mouse.y
}

alias -l sudoclick {
  var %id = $gettok($sudo.button(1,$1,$2),1,32)
  if (%id isnum 1-4) { sudoku %id | window -c @msud | window -c @menu | window -c @aidesud | window -c @tuto }
  elseif (%id == 8) { window -c @menu | msud.hfree }
  elseif (%id == 5) msud
  elseif (%id == 6) htp?
  elseif (%id == 7) sudaide
  elseif (%id == 9) {
    var %c
    if ($?!="Voulez-vous supprimer le jeu ? Non pour annuler") {
      hfree -w sud*
      var %c = 1
      .remove $qt($script)
      .remove $qt($$findfile($scriptdir,SudoTuto.jpg,1))
      noop $findfile($scriptdir,sudosco?.sud,0,.remove $shortfn($1-))
      noop $input(Le Sudoku a bien été déchargé et supprimé)
    }
    if ((%c) || ($input(Voulez-vous décharger ce jeu ?,y))) { 
      .timersudoctime off
      hfree -w sudoku*
      window -c @sud | window -c @menu | window -c @msud | window -c @aidesud | window -c @tuto
      if (!%c) noop $input(Le sudoku a bien été déchargé)
      .unload -rs $qt($script)
    }
  }
  if ($window(@menu)) drawdot @menu
}

alias -l sudomouse {
  var %id = $gettok($sudo.button(1,$1,$2),1,32), %t = 1
  if ($hget(SudoBF,0).item) {
    while $hget(SudoBF,%t).item {
      var %o = $ifmatch
      if ($gettok(%o,1,32) != %id) {
        var %h = $hget(SudoBF,%o)
        hdel SudoBF %o
        sudo.button %h $gettok($hget(SudoButtons,$gettok(%h,1,32)),6-,32)
      }
      else inc %t
    }
  }
  drawdot @menu
}

alias htp? { 
  window -aBCdhp +dL @tuto 0 0 882 600 
  var %f = $findfile($scriptdir,SudoTuto.jpg,1)
  if (%f) drawpic @tuto 0 0 $shortfn(%f)
  else drawtext -or @tuto 0 Tahoma 20 264 290 Il manque le fichier SudoTuto.jpg !
}

menu @tuto {
  sclick:window -c @tuto
}

on *:start: { var %n = hmake $!left($nopath($1-),-4) 100 $(|) hload $!left($nopath($1-),-4) $!qt($1-) | noop $findfile(sudoku\,*.sud,0,%n) }
;End Of File

 Conclusion

Aucun bug connu :)
Merci à Wims :p (l'idée est de lui)

Il se peut qu'il y ait plusieurs solutions étant donné que la suppression de chiffres se fait aléatoirement et que le code ne vérifie pas qu'il n'existe qu'une et une seule solution. Il en existe, c'est suffisant :)
Pour qu'il n'y en ait qu'une, il faudrait coder un solveur de sudoku, et ça, c'est pas de l'ordre du jour ...

Ce qui est prévu, c'est de faire un mode multi-joueurs. Alors suivez de près !
(C'est Wims qui devrait s'y coller cette  fois, pour changer quoi :p :p)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 janvier 2006 05:15:30 :
background rajouté dans l'aide pour ceux qui ont un fond noir (n'est-ce pas CoolMan002) + divers
01 janvier 2006 13:07:41 :
niveau supérieur et hdel
02 janvier 2006 01:18:43 :
Ajout de plusieurs options dans le menu (dont la possibilité de marquer de plusieurs couleurs les chiffres, afin de voir rapidement si on a mis un chiffre dans le doute ou un autre dont on est sûr) - Possibilité de déplacer : double clic, en restant appuyé sur le 2e clic - Durée de la partie dans le titre - Bugs
13 janvier 2006 23:10:43 :
Ajout du .zip contenant le tutorial fait par Wims - Bug sur les flags d'une case corrigé
21 janvier 2006 01:13:06 :
Mise à jour du sockread à cause (grrrr) du changement au niveau du site
16 février 2006 23:46:46 :
ajout du code (disponible sur la page) dans le .zip
17 février 2006 13:04:41 :
Mise à jour du sockread (le site avait encore changé ...) - Zip & code du site mis à jour
26 mars 2006 18:57:51 :
correction pour que le code fonctionne sous mIRC 6.17 (au niveau du menu)
04 juin 2006 21:14:37 :
Comme on me l'a fait remarquer, le jeu est d'origine japonaise (et non pas chinoise), bien que ça reste à voir :p J'ai juste changé le titre
16 août 2006 12:47:23 :
un carré vert restait bloqué en haut à gauche (première case) => != $null
02 novembre 2006 03:50:52 :
Passage à la version 2.1 -- Ajout d'un menu interactif - Possibilité de jouer au clavier - Ajout d'une pause (P ou 0 du P.Num) - Possibilité de changer "case sûre, incertaine, normale" avec +/- du P.Num - Ajout d'un tutoriel (image), prenez le .zip pour ça - Ajout d'un système de scores - Modifications dûes au site (regex) - Correction de bugs
04 novembre 2006 23:39:12 :
Petit rectificatif sur la désinstallation via le menu
02 mai 2007 17:38:36 :
V2.2 : Le site avait (encore) changé. Amélioration de la partie ON SOCKREAD (avec binvars)
02 mai 2007 20:20:01 :
Petite correction pour tenir compte des lignes coupées (c'est dû au fait que toutes les données tiennent en une ligne, qui sont découpées avec le /sockread)
07 mai 2007 23:18:18 :
Version 3.0 : - La grille se génère indépendamment du site (par une méthode mathématique de permutations, transposées et échanges de ligne.) => POSSIBILITE DE JOUER HORS-LIGNE - Corrections de quelques bugs d'affichage, amélioration et optimisations diverses

 Sources du même auteur

Source avec Zip EPGUIDES : SORTIES DES SÉRIES
Source avec Zip Source avec une capture BELOTE (MULTIJOUEURS) EN PICWIN
Source avec Zip EDITB - ALIASES FAVORIS DANS L'EDITBOX (SUGGESTION, COMPLETI...
Source avec Zip Source avec une capture METEO, DEPARTEMENTS ET ENSOLEILLEMENT MONDIAL
Source avec Zip OUTILS LINGUISTIQUE (DICTIONNAIRE, TRADUCTEUR, SYNONYMES, SI...

 Sources de la même categorie

Source avec Zip CRÉER DU MONDE SUR VOTRE SERVEUR IRC par Averell
AVOIR UNE LISTE D'UTILISATEUR EN COULEURS SELON LEURS SEXE P... par WorldDMT
COMMANDES FANTAISIES ( OP DEOP , VOICE DEVOICE ) ORIGINALES par Orona
Source avec Zip Source avec une capture CORRECTEUR par Orona
Source avec Zip Source avec une capture [DLL] DESSINER COMME LES PICWINS SUR UNE DIALOGBOX (BONUS: J... par uaip

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LAZER (JEU EN PICWIN) par Zova
Source avec Zip Source avec une capture PACMAN ONLINE - 4 JOUEURS par wims
Source avec Zip Source avec une capture BELOTE (MULTIJOUEURS) EN PICWIN par RCA ArKanis
SOLVEUR DE SUDOKU par MaX_62
Source avec Zip Source avec une capture JEU DE MORPION par Panthouffle

Commentaires et avis

Commentaire de wims le 01/01/2006 05:39:57

Ya un bug dans l'alias Dessc , il manque un hdel =( ; Voici l'alias corrigé :
alias -l dessc {
   if ($1 isnum 3-275 && $2 isnum 21-293) {
     var %a = $checkpos($1,$2)
     if ($hget(SudokuTemp,Coord) == %a) return
     if ((($hget(SudokuTemp,Case) != $hget(SudokuTemp,Coord)) || ($hget(SudokuTemp,Case) == %a)) && ($hget(SudokuTemp,Coord))) { hdel Sudokutemp coord | coorf $ifmatch 16777215 }
     if ($hget(SudokuTemp,Case) == %a) {
       hdel SudokuTemp Coord
       return
     }
     if ((nonfixe !isin $hget(Sudoku,%a)) && ($hget(Sudoku,%a))) return
     coorf %a 65280
     hadd -m SudokuTemp Coord %a
   }
   else {
     if ($hget(SudokuTemp,Coord)) {
       coorf $ifmatch 16777215
       hdel SudokuTemp Coord
     }
   }
}

La mise a jour du bug sera faites par Arkanis demain =)

Commentaire de wims le 01/01/2006 06:20:51

Un autre bug décelé lorsqu'on finis correctement un sudoku , il nous demande si on veux choisir le level superieur , et si on met oui , il ne change pas ( j'ai testé que en facile pour l'instant) , le bug sera egalement corrigé dans la prochaine update =)

Commentaire de wims le 01/01/2006 06:41:06

J'ai corriger ce dernier bug, il vous suffit de remplacer une ligne qui commence par if (%t) au alentour de la ligne 189 ( j'ai pas le code du site ) par :
    if (%t) sudoku $iif($hget(SudokuTemp,Difficulte) >= 4,4,$calc($hget(Sudokutemp,Difficulte) + 1))
et la ligne 5 par   hadd -m SudokuTemp Difficulte $1

Commentaire de MegaSmax le 01/01/2006 11:24:48

"background rajouté dans l'aide pour ceux qui ont un fond noir"
Heuu comment on met le background ? Je suis en fond noir et j'ai dus passer en blanc pour pouvoir jouer :/
Sinon excellent travail sur le Sudoku :)

Commentaire de RCA ArKanis le 01/01/2006 13:10:36

et la ligne 5 par   hadd -m SudokuTemp Difficulte $1
là je dis non, sinon /sudoku 5 marcherait ^^
    if (%t) {
      var %o = $calc($hget(SudokuTemp,Difficulte) +1)
      if (%o == 5) var %o = 4
      elseif (%o !isnum 2-4) var %o = 2
      sudoku %o
    }

j'ai mis à jour :)

MegaSMax j'ai rajouté un drawrect sur la window de jeu (on l'avait fait pour l'aide)

Commentaire de KiNdErMaXi le 01/01/2006 17:15:47

gg
il manque plus qu'un générateur de grille ;o) (sans aller piocher sur un site quoi :o))

Commentaire de hisoka2501 le 15/01/2006 18:50:53

j"imagine que en rentran une grille a nous qu'on a chopé dans le télépoche il ne peu pas nous le corriger, je me trompe ?

ca serais pas mal ca :D

bon taff mais: quand je fais /sudoku x (1 2 3 ou 4) la grille apparait mais rien dedans :/

Commentaire de RCA ArKanis le 15/01/2006 19:25:14

nop il peut pas désolé :p
il ne fait que collecter la grille et la solution du site, qui est offline pour le moment (d'où la grille vide)

En fait ils ont changé l'url, et la méthode d'affichage de la grille. Au lieu de tout afficher sur une ligne, ils l'ont fait en plusieurs lignes, je vais corriger ça le week-end prochain si j'y pense (j'suis interne :x)

Commentaire de hisoka2501 le 16/01/2006 19:38:34

il n'empeche que ca reste du tres bon boulot niveau code
meme si "while %t <= 8 {" sans () ma interpellé :)

le tout est tres bien codé, bien optimisé et tres clair
bravo :)

Commentaire de fjxokt le 16/01/2006 22:43:44

bon j'ai déja donné mon avis sur ce code (bien codé, original, marche impec, beau etc...)
la note: 8,5/10
à mon tour maintenant... ;-)

Commentaire de RCA ArKanis le 20/01/2006 18:42:45

ça marche très bien sans parenthèses :p
merci pour ces commentaires, j'vais essayer de corriger les sockets ce WE :x

Commentaire de RCA ArKanis le 21/01/2006 01:13:41

Voila, j'ai mis à jour le sockread, en esperant que ça dure lgtps cette fois ... :)

Commentaire de sandra75 le 15/02/2006 17:46:33

slt,

le fichier n'existe plus ? je n'ai pas le script dans le zip grrr

Commentaire de RCA ArKanis le 16/02/2006 23:41:01

dans le .zip il n'y a que le tutorial, et c'est normal, vu qu'il y a la source sur le site
bon ok j'essaye de rajouter le code dans le .zip ...

Commentaire de sandra75 le 17/02/2006 18:08:12

super ! Merci je vais tester ;-)

Commentaire de Temp_Area le 25/06/2006 00:49:40

Alors :/

Je n'ai pas trouvé comment on mettai les chiffre sur la grille xD

Commentaire de RCA ArKanis le 25/06/2006 11:47:01

tu cliques sur ta case, puis tu rentres le nombre sur le pavé numérique :)

Commentaire de Arkayus le 11/12/2006 23:56:02

Salut Arkanis , c'est Giova

Dsl d'etre le seul, mais chez moi y marche pas, y s'entete a me dire : noop UNKNOW COMMAND

  Voilà ;^)

Commentaire de RCA ArKanis le 12/12/2006 10:35:43

ton problème est dû à ta version de mIRC.
Il faut au minimum la version 6.17 pour que le code fonctionne.

Mets à jour ton mIRC en allant sur www.mirc.com

Commentaire de Arkayus le 12/12/2006 22:28:30

Oki merci, j'dois avoir la 21 quelque part, je vais cherché.
Bonne soiré a toi Arkanis

Commentaire de RCA ArKanis le 07/05/2007 23:23:58

Petit UP pour prévenir que désormais le Sudoku peut se jouer Hors-Ligne à grâce à la génération de grille (comme le suggerait KinderMaxi :D)
Téléchargez le avant de partir en vacances, ça peut dépanner :)

Commentaire de MJ92 le 06/01/2008 12:06:37

Salut Arkanis et Wims,
J'ai Dl votre code (j'avais l'ancienne version), je l'ai donc remplacé par celle-ci et il me décèle un bug à la ligne 546 :  
     if ($inroundrect(%x,%y,$2,$3,$4,$5,20,20)) break

Voici la raison : * Identifiant incorrect: $inroundrect (ligne 546, Sudoku.mrc).

Commentaire de RCA ArKanis le 07/01/2008 12:42:16

mets à jour ta version de mIRC
il me semble que cet identifieur est disponible à partir de la version 6.17

prends la dernière sortie, de toute façon :)

Commentaire de MJ92 le 07/01/2008 12:49:56

Et bien, j'ai la version 6.17 et c'est étonnant, car en effet, cet indentifieur fonctionne bien pour à partir de ma version 6.17.
Bizarre...

Commentaire de RCA ArKanis le 07/01/2008 21:23:59

essaye la dernière version de mIRC, ça devrait fonctionner
je me rappelle pas de toutes les fonctions, quand elles ont été implémentées ...

Commentaire de MJ92 le 09/01/2008 10:36:14

Tu as raison, avec la 6.31 àa marche super, mais c'est vrai que $inroundrect doit fonctionner sous la 6.17...
Merci bien

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

jeu pour bot ? maillon faible ? [ par MeF ] voilou j'ai déjà eu l'occasion de jouer sur irc au maillon faible.Yavait des sons qui accompagnaient le jeu, c'étaient bien sympathique, avec de nombr Recherche, qu'en pensez-vous ? [ par ScreaM ] Voici une p'tite idée que je viens d'avoir. Le but serait de reproduire le jeu du maillon faible mais sur un canal irc qui pourrait s'appeller #maillo Dégradé [ par Bloock ] Bon voila, je vais faire un lecteur mp3 en picwin, et j'aimerai savoir comment on fait [/b]un dégradé dans une fenêtre Picwin[/b]! Merci d'avance <img bizar vous avez dit bizar !!!! [ par duckkiller ] ce code pour google ne marche pas...est ce que qq1 peut me dire pourkoi et le modifier pourkoi po?on *:TEXT:!google *:#: google $cid $chan $nick $2-al Aide Socket & picwin [ par _VeSpArO_ ] Salut tout le monde je voulai savoir comment stocker un fichier txt d'un site dans un fichier .txt ou autre dans mon mirc.CAD: telecharger par exemple affichage de serveur de jeu pour bot/bot dans la barre de tache [ par GVDS ] Bonjour, j'ai bien cherché et je n'ai pas trouvé, j'aimerais avoir la commande qui me permet de donner les infos de mon serveur ( nombres de joueurs, Comment mettre un top10 à mon jeu ... [ par Panther007 ] Bon voila j'aimerais mettre un top10 à mon jeu ... Je vous expliquer Brèvement ce qui en est .. Le jeu c'est comment un mot qui est donner en majuscul Picwin je pense lol jsuis meme pas sur du nom :s [ par Panther007 ] Salut :) Bon je vous dit en quoi j'aimerais me faire aider , j'aimerais me fabriquer un jeu de Ping pong mais avant il faut que je sache comment utili jeu [ par KiNdErMaXi ] je voudrai faire un ptit jeu en picwin, j'ai des tutos pr la parties graphique mais pour la configuration je sais pas comment fairesi vous pouviez m'a Dialog + Picwin [ par DiGhan ] Bonjour,Voilà , j'ai plusieurs dialog, dans lequel je voudrais inclure des picwin.J'aimerais savoir comment faire pour bouger le dialog quand la title


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,368 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales