FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Mah-Jong américain
par Jean Claude Hier à 19:37

» StratégoV8 et V9
par Jean Claude Hier à 13:18

» Problème avec Deepl
par Klaus Hier à 0:34

» Déformation d'image en trapèze
par Klaus Dim 14 Jan 2018 - 16:22

» Quelques nouvelles ...
par Jean Claude Ven 12 Jan 2018 - 22:40

» Renommer les instructions ITEM_... ?
par Jicehel Ven 12 Jan 2018 - 18:56

» Ludothèque Panoramic
par jjn4 Ven 12 Jan 2018 - 18:11

» sous-programmes et fonctions
par Jack Ven 12 Jan 2018 - 17:51

» KGF_dll - nouvelles versions
par Minibug Ven 12 Jan 2018 - 0:21

» Mah-Jong français
par Jean Claude Jeu 11 Jan 2018 - 22:15

» HVIEWER
par Klaus Mer 10 Jan 2018 - 2:06

» panoramic 0.9.28
par gigi75 Ven 5 Jan 2018 - 14:06

» Un jeu qui va vous énerver!
par Jean Claude Jeu 4 Jan 2018 - 22:05

» Bonne fêtes de fin d'année ! Meilleurs Vœux 2018 !
par Jicehel Jeu 4 Jan 2018 - 17:28

» Mah-Jong international
par jjn4 Jeu 4 Jan 2018 - 16:55

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Janvier 2018
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
293031    
CalendrierCalendrier

Partagez | 
 

 un p'tit sudoku a resoudre

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2
AuteurMessage
Jicehel

avatar

Nombre de messages : 5871
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 17:33

Silverman a raison aussi si tu veux une valeur entre 0 et 1, soit tu fais int(rnd(2)) soit tu fais rnd(1) et tu le mets dans un entier puisque dans ce cas, il ne prend pas la partie entière mais fais l'approximation de la valeur entière donc entre 0 et 0.5 => 0 et 0.5 à 0.99999999999999 => 1
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 2478
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 19:06

Voila une variante du programme que je viens d'étudier.

Il s'agit de stocker les valeurs dans les 2 X 9 chaines de caractéres : grille$(9) , grillev$(9)
la première (grille$(9))contient les lignes de 1 a 9 et la secondes (grille$(9)) contient les colonnes de 1 a 9

Je pense que ça peut simplifier grandement le programme.
Il suffit juste maintenant de tester sur quelle colonne ou ligne on se trouve.

Code:
DIM a% , b% , x% , y% , n% , c% , px% , py% , ng% , nh% , nv% , pos%
DIM num% , grille$(9) , grillev$(9) , grilleh$(9) , chiffre%(9)

LABEL choix , selection

HIDE 0 : LEFT 0,520 : TOP 0,235 : WIDTH 0,600 : HEIGHT 0,463 : FONT_NAME 0,"arial"
FONT_NAME 0,"arial.ttf" : FONT_SIZE 0,20 : COLOR 0,100,100,100 : CAPTION 0,"SUDOKU"

num%=1 : n%=1
FOR a%=1 to 3
  FOR b%=1 to 3
      FOR y%=1 to 3
        FOR x%=1 to 3
            PANEL num% : LEFT num%,a%*133+x%*43-160 : TOP num%,b%*133+y%*43-160 : WIDTH num%,43 : HEIGHT num%,43 : COLOR num%,255,255,255 : ON_CLICK num%,selection
            c%=RND(9) : IF c%<>0 AND INSTR(grille$(n%),STR$(c%))<>0 THEN c%=0
            px%=a%*3-3+x% : IF c%<>0 AND INSTR(grillev$(px%),STR$(c%))<>0 : c%=0 : END_IF : py%=b%*3-3+y% : IF c%<>0 AND INSTR(grilleh$(py%),STR$(c%))<>0 : c%=0 : END_IF
            grillev$(px%)=grillev$(px%)+STR$(c%) : grilleh$(py%)=grilleh$(py%)+STR$(c%) : grille$(n%)=grille$(n%)+STR$(c%)
            IF c%<>0 THEN CAPTION num%,STR$(c%) : chiffre%(c%)=chiffre%(c%)+1 : INACTIVE num% : COLOR num%,240,240,240
            num%=num%+1
        NEXT x%
      NEXT y%
      n%=n%+1
  NEXT b%
NEXT a%

num%=99
ALPHA num% : LEFT num%,420 : TOP num%,15 : WIDTH num%,120 : HEIGHT num%,30 : FONT_SIZE num%,12
FONT_COLOR num%,255,255,255 : CAPTION num%,"Nombre d'apparitions" : num%=num%+1

FOR a%=2 to 10
  PANEL num% : LEFT num%,420 : TOP num%,a%*30-23 : WIDTH num%,150 : HEIGHT num%,30 : FONT_SIZE num%,12
  CAPTION num%,"Chiffre "+STR$(a%-1)+"  :  "+STR$(chiffre%(a%-1))+" fois" : ON_CLICK num%,choix
  num%=num%+1
NEXT a%
num%=1 :  COLOR 100,255,255,0

PANEL 110 : LEFT 110,420 : TOP 110,350 : WIDTH 110,150 : HEIGHT 110,30 : FONT_SIZE 110,12 : CAPTION 110,"Rejouer" : ' ON_CLICK 110,nouveau
PANEL 111 : LEFT 111,420 : TOP 111,380 : WIDTH 111,150 : HEIGHT 111,30 : FONT_SIZE 111,12 : CAPTION 111,"Quitter" : ' ON_CLICK 111,quitter
SHOW 0

END

choix:
  FOR n%=100 to 108 : COLOR n%,240,240,240 : NEXT n%
  num%=number_click-99 :  COLOR num%+99,255,255,0
RETURN

selection:
  n%=NUMBER_CLICK : ng%=INT((n%+8)/9) : nh%=INT((n%+2)/3) : WHILE nh%>9 : nh%=nh%-9 : END_WHILE : nv%=n%
  IF nv%<28 : WHILE nv%>3 : nv%=nv%-3 : END_WHILE : END_IF : IF nv%>27 AND nv%<55 : WHILE nv%>6 : nv%=nv%-3 : END_WHILE : END_IF : IF nv%>54 : WHILE nv%>9 : nv%=nv%-3 : END_WHILE : END_IF
  pos%=MOD((n%+8),9)+1
  ' CAPTION 0,"Grille : "+grille$(ng%)+ " / Grilleh : "+grilleh$(nh%)+" / Grillev : "+Grillev$(nv%)+" / Position : "+STR$(pos%)
 
  IF INSTR(grille$(ng%),STR$(num%))=0 AND INSTR(grilleh$(nh%),STR$(num%))=0 AND INSTR(Grillev$(nv%),STR$(num%))=0
      IF CAPTION$(n%)<>""
        chiffre%(VAL(CAPTION$(n%)))=chiffre%(VAL(CAPTION$(n%)))-1
        CAPTION VAL(CAPTION$(n%))+99,"Chiffre "+STR$(VAL(CAPTION$(n%)))+"  :  "+STR$(chiffre%(VAL(CAPTION$(n%))))+" fois"
        chiffre%(num%)=chiffre%(num%)+1
        CAPTION n%,STR$(num%) : CAPTION num%+99,"Chiffre "+STR$(num%)+"  :  "+STR$(chiffre%(num%))+" fois"
      ELSE
        chiffre%(num%)=chiffre%(num%)+1
        CAPTION n%,num% : CAPTION num%+99,"Chiffre "+STR$(num%)+"  :  "+STR$(chiffre%(num%))+" fois"
      END_IF
  ELSE
      MESSAGE " C'EST PAS POSSIBLE"
  END_IF

RETURN

PS : Perso je suis partie avec des PANELs et non un GRID.
Mais avec le GRID c'est encore plus facile...


Dernière édition par Minibug le Mar 20 Oct 2015 - 22:53, édité 6 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
pascal10000

avatar

Nombre de messages : 666
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 19:13

silverman

pour ta réponse elle me parai plus logique je comprend
mieux le pourquoi que zéro est pris en compte a chaque
fois si j'ai bien compris si rnd prend 0.9999999999 il sera tjr
zéro c'est ça?

papydall
décidément ce sacré "GOTO" vous ne l'aimé pas! quel est
cette animal qui la inventé? "il va falloir  faire une réforme"
pour ce code. comme c'est la mode en ce moment de tout réformer
même les français veulent réformer le gouv et il n'y arrive pas!!! bon passons
et ben moi je le garde mon goto lol lol lol il me plait

pour les autres conseil je vais essayer de les utilisé, je n'ai pas
l'habitude de m'en servir  je vais voir ça
ok pour le programmer a ta façon

minibug

pour ton histoire d'effacement dès le départ j'ai trouvé une parade
sans rajouter de variable
juste après le label annule: tu ou (vous) ajoute if num$="" then return
et cela ma semblé être plus simple et la bizarrerie a disparue
je vais pas poster le code complet pour une ligne
et merci encore


Dernière édition par pascal10000 le Mar 20 Oct 2015 - 19:30, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
pascal10000

avatar

Nombre de messages : 666
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 19:23

on c croisé minibug
ok pour t'es variables mais j'utilise des matrice
du genre grille$(9,9) et là tu utilise
(x,x,x,x,x,x,x,x,x
x,x,x,x,x,x,x,x,x
x,x,x,x,x,x,x,x,x
x,x,x,x,x,x,x,x,x
x,x,x,x,x,x,x,x,x
x,x,x,x,x,x,x,x,x
x,x,x,x,x,x,x,x,x
x,x,x,x,x,x,x,x,x
x,x,x,x,x,x,x,x,x)

c'est pas plus simple non?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10411
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 19:39

Juste un petit mot pour approfondir cette histoire de rnd().

La fonction rnd(N) retourne une valeur flottante entre 0 (inclus) et N (exlus). Comme dit Papydall, c'est une intervalle sémi-ouverte notée [0,N[. Et comme la valeur retournée est une valeur flottante, chaque appel à la fonction rnd retourne une parmi une infinité de valeurs, mais JAMAIS la valeur N !

Donc, si ty veux obtenir, de façon aléatoire, une des deux valeurs 0 et 1, il faut faire ceci:
Code:
v% = int(rnd(2))
Explication:
rnd(2) retourne des valeurs V avec 0 <= V < 2. Donc, les valeurs 0<=V0<1 et 1<=V1<2 ont exactement la même probabilité de sortir. Et de ce fait, il suffit de prendre la partie entière de ce résultat, ce qu conduit à la formule ci-dessus.

Une autre application:
Si, pour un jeu, tu veux lancer un dé et obtenir, de façon aléatoire, les nombres entiers entre 1 et 6. La formule serait alors:
Code:
v% = 1 + int(rnd(6))
Explication:
Tout comme dans le premier cas, int(rnd(N)) retourne un entier entre 0 (compris) et N (non compris)/ Dans notre cas, le résultat sera donc on nombre de 0, 1, 2, 3, 4 ou 5. Et pour passer aux valeurs d'un dé, il suffit d'additionner systémtiquement 1.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2478
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 19:44

Heu Klaus... j'ai un doute ! drunken

Regardes mon code ci_dessus et tu verra que c%=RND(9) permet bien de retourner le nombre 9.

Je pense qu'il doit y avoir un arrondi qui s’effectue sur la variable mais ce n'est qu'une hypothèse !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Minibug

avatar

Nombre de messages : 2478
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 20:08

Il y avez quelques erreurs dans mon code. je viens de corriger.

L'intérêt Pascal, c'est qu'avec mes variables grille$, grillesv$, et grilleh$, il te suffit de connaitre la position de ta case et tout est très simple pour le test :
Un simple IF INSTR$(grille$(n),"6")<>0 pour savoir si 6 est deja dans la grille et pareil avec grillev$() et grilleh$()

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

Nombre de messages : 10411
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 20:36

@Minibug:
Citation :
Regardes mon code ci_dessus et tu verra que c%=RND(9) permet bien de retourner le nombre 9.
Je pense qu'il doit y avoir un arrondi qui s’effectue sur la variable mais ce n'est qu'une hypothèse !
Oui, l'affectation à une variable entière d'une valeur flottante effectue bien un arrondi. Et c'est bien le problème, car tu fausses les probalilités pour les deux valeurs extrèmes de l'intervalel. En effet, si tu regardes rnd(6), tu sais que tu peux avoir:
0.0000000
0.0000001
...
0.4999999
arrondi = 0
0.5000000
0.5000001
...
0.9999999
1.0000000
1.0000001
...
1.4999999
arrondi à 1
1.5000000
1.5000001
...
1.9999999
2.0000000
2.0000001
...
2.4999999
arrondi à 2
2.5000000
etc, jusqu'à:
...
4.9999999
5.0000000
5.0000001
...
5.4999999
5.5000000
5.5000001
...
5.9999999
6.0000000
arrondi à 6

Donc, tu vois que le résultat pour les nombres 0 et 6 (les deux extrèmes) ne couvrent que la moitié de l'intervalle que celui pour les autres nombres ! Et donc, ces deux valeurs ont moitié moins de chances de sortir que les valeurs du milieu. C'est pourquoi il faut utiliser int(rnd(N)). Ainsi, la limite N est effectivement exlue, et chaque valeur retournée a exactement la même probabilité (couvre le même intervalle numérique). Ceci justifie mes deux formules ci-dessus.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

Nombre de messages : 5623
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 20:39

Minibug a écrit:
Heu Klaus... j'ai un doute !
Regardes mon code ci_dessus et tu verra que c%=RND(9) permet bien de retourner le nombre 9.

Ce n’est pas parce que rnd(9) retourne 9 : JAMAIS.
Mais ça peut donner une valeur V > 8.5
Or c% est une variable de type entier tandis que V est du type flottant.
C% fait un arrondi vers le haut et donne donc 9.
Ce 9 est le résultat de l’arrondi et non de RND(9)
C’est simple, mais c’est comme ça
RND(n) donne un nombre du type flottant (décimal si vous voulez) compris entre 0 (inclus) et n (exclu).
C’est simple, mais c’est comme ça.

Klaus a parfaitement raison.

Klaus : on s'est croisé
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Minibug

avatar

Nombre de messages : 2478
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 21:20

On est donc d'accord !

lol! lol!

Je viens de mettre a jour le code.
Il retourne désormais les 3 variables en fonction de la position cliquée
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
papydall

avatar

Nombre de messages : 5623
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: un p'tit sudoku a resoudre   Mar 20 Oct 2015 - 21:31

Pascal10000 a écrit:
décidément ce sacré "GOTO" vous ne l'aimé pas!
… et ben moi je le garde mon goto lol lol lol il me plait

C’est bon, garde-le.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
pascal10000

avatar

Nombre de messages : 666
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: un p'tit sudoku a resoudre   Mer 21 Oct 2015 - 9:26

bjr a tous

j'ai bien suivi le débat et j'ai bien compris que
rnd cherchera un une valeur entre 0 a -1 et contrairement
a ma TI elle; elle prendra un interval de 0 a 1 inclu donc elle ne réagis
pas comme un ordi et j'ai fait pas mal de programmation avec et
avec cette formule int(rand(1))=x elle prend en compte 0 ou 1 et
jamais 0
bon je reprend pour mon jeu minibug avec la commande qu'il
faut rajouter a tu retrouver d'autre bug?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10411
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: un p'tit sudoku a resoudre   Mer 21 Oct 2015 - 10:24

Il faut lire ce que nous écrivons ! Tu dis
Citation :
rnd cherchera un une valeur entre 0 a -1
Eh bien non ! Le résultat sera entre 0 (inclus) et +1 (exclu), donc
0 <= rnd(1) < 1

et il s'en suit que int(rnd(1)) est toujours égal à 0 !

Si tu veux avoir aléatoirement 0 ou 1, il faut écrire
Code:
v% = int(rnd(2))
Regarde mes explications dans mon post précédent !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5871
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: un p'tit sudoku a resoudre   Mer 21 Oct 2015 - 11:10

ou
Code:
v%=rnd(1)
mais la probabilité n'est alors pas totalement correctement égale, la meilleure solution étant en effet
Code:
v%=int(rnd(2))
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
pascal10000

avatar

Nombre de messages : 666
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: un p'tit sudoku a resoudre   Mer 21 Oct 2015 - 11:45

klaus je me suis mal
exprimé
c'est 0 et 0.999999999999999999999999 <1
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
pascal10000

avatar

Nombre de messages : 666
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: un p'tit sudoku a resoudre   Mer 21 Oct 2015 - 13:55

version revisité tout en gardant le même
contexte de programation

Code:
dim key,jeux$,num$
dim a1$,a2$,a3$,a4$,a5$,a6$,a7$,a8$,a9$,x,y,z%,posx%,posy%
dim num1%,num2%,num3%,num4%,num5%,num6%,num7%,num8%,num9%,num%
dim suite$(1,9),gride1$,gride2$,gride3$,gride4$,gride5$,gride6$,gride7$,gride8$,gride9$
dim  RGB% ,B%,R%,G%,FRGB%,res%,font$

label tri,trie,choix,
label choix1,choix2,choix3,choix4,choix5,choix6,choix7,choix8,jeu

num%=0
num$=""
num1%=0: num2%=0: num3%=0: num4%=0: num5%=0: num6%=0: num7%=0: num8%=0: num9%=0

font$="arial.ttf"
num$=""
left 0,520
top 0,235
width 0,590
height 0,510
caption 0,"Sudoku"
font_name 0,"arial"
font_size 0,10

grid 1
left 1,10
top 1,10
width 1,428
height 1,428
grid_row 1,10: grid_column 1,10
grid_column_width 1,(465/10): grid_one_column_width 1,1,0.01
grid_row_height 1,(465/10): grid_one_row_height 1,1,0.01
font_color 1,255,0,0
font_size 1,20
on_click 1,jeu
' ooooooooooooooooooooooooooooooooooooooooooooooo
' instalation des séparation pour la grille
for x=1 to 2
scene2d 11+x
top 11+x,top(1):height 11+x,height(1)-1
width 11+x,3: left 11+x,left(1)+(141*x)+1
next x
for x=1 to 2
scene2d 15+x
left 15+x,left(1): width 15+x,width(1)-1
height 15+x,3: top 15+x,top(1)+(141*x)+1
next x
' ooooooooooooooooooooooooooooooooooooooooooooooo

button 2          :alpha 22
left 2,460        :left 22,500
top 2,20          :top 22,20
width 2,31        :width 22,10
caption 2,"1"      :caption 22,"0"
on_click 2,choix

button 3          :alpha 23
left 3,460        :left 23,500
top 3,60          :top 23,60
width 3,30        :width 23,10
caption 3,"2"      :caption 23,"0"
on_click 3,choix1

button 4          :alpha 24
left 4,460        :left 24,500
top 4,100          :top 24,103
width 4,30        :width 24,10
caption 4,"3"      :caption 24,"0"
on_click 4,choix2

button 5          :alpha 25
left 5,460        :left 25,500
top 5,140          :top 25,143
width 5,30        :width 25,10
caption 5,"4"      :caption 25,"0"
on_click 5,choix3

button 6          :alpha 26
left 6,460        :left 26,500
top 6,180          :top 26,183
width 6,30        :width 26,10
caption 6,"5"      :caption 26,"0"
on_click 6,choix4

button 7          :alpha 27
left 7,460        :left 27,500
top 7,220          :top 27,223
width 7,30        :width 27,10
caption 7,"6"      :caption 27,"0"
on_click 7,choix5

button 8          :alpha 28
left 8,460        :left 28,500
top 8,260          :top 28,263
width 8,30        :width 28,10
caption 8,"7"      :caption 28,"0"
on_click 8,choix6

button 9          :alpha 29
left 9,460        :left 29,500
top 9,300          :top 29,303
width 9,30        :width 29,10
caption 9,"8"      :caption 29,"0"
on_click 9,choix7

button 10          :alpha 30
left 10,460        :left 30,500
top 10,340        :top 30,343
width 10,30        :width 30,10
caption 10,"9"    :caption 30,"0"
on_click 10,choix8

button 31
left 31,460
top 31,380
caption 31,"Annuler"
label Annuler : on_click 31,Annuler

label nouveau,quitter,Recomencer
main_menu 41
sub_menu 42:parent 42,41:caption 42,"jeu"
sub_menu 43:parent 43,42:caption 43,"Nouveau"
on_click 43,nouveau
sub_menu 44:parent 44,42:caption 44,"Recomencer"
on_click 44,Recomencer

sub_menu 46:parent 46,42:caption 46,"Quitter"
on_click 46,quitter

dll_on "KGF.dll"
  res% = dll_call6("GridFunction",object_internal(1),5,1,0,0,0)

end

' triage des chiffres
tri:
for x=1 to 9
trie:
y=int(rnd(9))+1
if suite$(1,y)=""
suite$(1,y)=str$(x)
else
goto trie
end_if
next x
 a1$=suite$(1,1)
 a2$=suite$(1,2)
 a3$=suite$(1,3)
 a4$=suite$(1,4)
 a5$=suite$(1,5)
 a6$=suite$(1,6)
 a7$=suite$(1,7)
 a8$=suite$(1,8)
 a9$=suite$(1,9)
' ooooooooooooooooooooooooooooooo
jeux() :' initialisation de la grille
return

' jeu en lui même
choix:
 num$=caption$(2)
return
choix1:
 num$=caption$(3)
return
choix2:
 num$=caption$(4)
return
choix3:
 num$=caption$(5)
return
choix4:
 num$=caption$(6)
return
choix5:
 num$=caption$(7)
return
choix6:
 num$=caption$(8)
return
choix7:
 num$=caption$(9)
return
choix8:
 num$=caption$(10)
return

jeu:
posx%=grid_x_to_column(1,mouse_x_position(1))
posy%=grid_y_to_row(1,mouse_y_position(1))

' section des recherche des doublons par ligne, colones et section 3X3
if clicked(1)=1
 if grid_read$(1,posy%,posx%)<>"" then return
 if num$="" then return
' doubon dans la ligne
 for x=2 to 10
  if grid_read$(1,posy%,x)="  "+num$
  message "DOUBLON "+num$+"  C"+str$(posy%)+"  L"+str$(x)
  return
  end_if
 next x
' Doublon dans la colone
 for y=2 to 10
  if grid_read$(1,y,posx%)="  "+num$
  message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(posx%)
  return
  end_if
 next y
' Doublon dans les section 3X3
 if posx%>1 and posx%<5
 if posy%>1 and posy%<5
    for x=2 to 4
    for y=2 to 4
      if grid_read$(1,y,x)="  "+num$
        message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(x)
        return
      end_if
    next y
    next x
 end_if
 end_if

 if posx%>4 and posx%<8
 if posy%>1 and posy%<5
    for x=5 to 7
    for y=2 to 4
      if grid_read$(1,y,x)="  "+num$
        message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(x)
        return
      end_if
    next y
    next x
 end_if
 end_if

 if posx%>7 and posx%<11
 if posy%>1 and posy%<5
    for x=8 to 10
    for y=2 to 4
      if grid_read$(1,y,x)="  "+num$
        message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(x)
        return
      end_if
    next y
    next x
 end_if
 end_if

 if posx%>1 and posx%<5
 if posy%>4 and posy%<8
    for x=2 to 4
    for y=5 to 7
      if grid_read$(1,y,x)="  "+num$
        message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(x)
        return
      end_if
    next y
    next x
 end_if
 end_if

 if posx%>4 and posx%<8
 if posy%>4 and posy%<8
    for x=5 to 7
    for y=5 to 7
      if grid_read$(1,y,x)="  "+num$
        message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(x)
        return
      end_if
    next y
    next x
 end_if
 end_if

 if posx%>7 and posx%<11
 if posy%>4 and posy%<8
    for x=8 to 10
    for y=5 to 7
      if grid_read$(1,y,x)="  "+num$
        message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(x)
        return
      end_if
    next y
    next x
 end_if
 end_if

 if posx%>1 and posx%<5
 if posy%>7 and posy%<11
    for x=2 to 4
    for y=8 to 10
      if grid_read$(1,y,x)="  "+num$
        message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(x)
        return
      end_if
    next y
    next x
 end_if
 end_if

 if posx%>4 and posx%<8
 if posy%>7 and posy%<11
    for x=5 to 7
    for y=8 to 10
      if grid_read$(1,y,x)="  "+num$
        message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(x)
        return
      end_if
    next y
    next x
 end_if
 end_if

 if posx%>7 and posx%<11
 if posy%>7 and posy%<11
    for x=8 to 10
    for y=8 to 10
      if grid_read$(1,y,x)="  "+num$
        message "DOUBLON "+num$+"  C"+str$(y)+"  L"+str$(x)
        return
      end_if
    next y
    next x
 end_if
 end_if

end_if
test()
grid_write 1,posy%,posx%,num$

 ' mise a jour des compteur
if num$="1" then num1%=num1%+1 : caption 22,str$(num1%)
if num$="2" then num2%=num2%+1 : caption 23,str$(num2%)
if num$="3" then num3%=num3%+1 : caption 24,str$(num3%)
if num$="4" then num4%=num4%+1 : caption 25,str$(num4%)
if num$="5" then num5%=num5%+1 : caption 26,str$(num5%)
if num$="6" then num6%=num6%+1 : caption 27,str$(num6%)
if num$="7" then num7%=num7%+1 : caption 28,str$(num7%)
if num$="8" then num8%=num8%+1 : caption 29,str$(num8%)
if num$="9" then num9%=num9%+1 : caption 30,str$(num9%)

' neutralise si une des séries est complétées
if caption$(22)="9"
inactive 2
inactive 22
num%=num%+1
end_if
if caption$(23)="9"
inactive 3
inactive 23
num%=num%+1
end_if
if caption$(24)="9"
inactive 4
inactive 24
num%=num%+1
end_if
if caption$(25)="9"
inactive 5
inactive 25
num%=num%+1
end_if
if caption$(26)="9"
inactive 6
inactive 26
num%=num%+1
end_if
if caption$(27)="9"
inactive 7
inactive 27
num%=num%+1
end_if
if caption$(28)="9"
inactive 8
inactive 28
num%=num%+1
end_if
if caption$(29)="9"
inactive 9
inactive 29
num%=num%+1
end_if
if caption$(30)="9"
inactive 10
inactive 30
num%=num%+1
end_if
if num%=9 then message "Grille résolu bravo"+chr$(10)+"Vous avez gagné"
num%=0
return

Recomencer:
if file_exists("grid.ini")=0 then return
grid_load 1,"grid.ini"
for x=2 to 10
 active x
 active x+20
next x
return

quitter:
if file_exists("grid.ini")=1 then file_delete "grid.ini"
res% = dll_call1("KillProcessByHandle",handle(0))
dll_off
return

Annuler:
if num$="" then return
if grid_read$(1,posy%,posx%)="1"
 num1%=num1%-1 : caption 22,str$(num1%)
 if num1%<9 then active 2
 if num1%<9 then active 22
end_if
if grid_read$(1,posy%,posx%)="2"
 num2%=num2%-1 : caption 23,str$(num2%)
 if num2%<9 then active 3
 if num2%<9 then active 23
end_if
if grid_read$(1,posy%,posx%)="3"
 num3%=num3%-1 : caption 24,str$(num3%)
 if num3%<9 then active 4
 if num3%<9 then active 24
end_if
if grid_read$(1,posy%,posx%)="4"
 num4%=num4%-1 : caption 25,str$(num4%)
 if num4%<9 then active 5
 if num4%<9 then active 25
end_if
if grid_read$(1,posy%,posx%)="5"
 num5%=num5%-1 : caption 26,str$(num5%)
 if num5%<9 then active 6
 if num5%<9 then active 26
end_if
if grid_read$(1,posy%,posx%)="6"
 num6%=num6%-1 : caption 27,str$(num6%)
 if num6%<9 then active 7
 if num6%<9 then active 27
end_if
if grid_read$(1,posy%,posx%)="7"
 num7%=num7%-1 : caption 28,str$(num7%)
 if num7%<9 then active 8
 if num7%<9 then active 28
end_if
if grid_read$(1,posy%,posx%)="8"
 num8%=num8%-1 : caption 29,str$(num8%)
 if num8%<9 then active 9
 if num8%<9 then active 29
end_if
if grid_read$(1,posy%,posx%)="9"
 num9%=num9%-1 : caption 30,str$(num9%)
 if num9%<9 then active 10
 if num9%<9 then active 30
end_if
  grid_write 1,posy%,posx%,""

return

nouveau:
' obligé de faire cette commande pour éffacer la grille
' avec grid_clear N,R,C ça plante!
  res% = dll_call6("GridFunction",object_internal(1),5,1,0,0,0)
for x=2 to 10
for y=2 to 10
  grid_write 1,x,y,""
next y
next x
wait 1000
for x=2 to 10
 active x
 active x+20
next x
free suite$(1,9)
dim suite$(1,9)
gosub tri
return

' ooooooooooooooooooooooooooooooooooooooooooooo

' initialisation de la grille
sub jeux()
gride1$ =a1$+a2$+a3$+a4$+a5$+a6$+a7$+a8$+a9$
gride2$ =a7$+a6$+a9$+a3$+a8$+a1$+a2$+a5$+a4$
gride3$ =a4$+a5$+a8$+a9$+a7$+a2$+a3$+a1$+a6$
gride4$ =a9$+a3$+a4$+a5$+a1$+a7$+a6$+a2$+a8$
gride5$ =a2$+a1$+a6$+a8$+a9$+a3$+a4$+a7$+a5$
gride6$ =a8$+a7$+a5$+a6$+a2$+a4$+a1$+a9$+a3$
gride7$ =a6$+a9$+a7$+a1$+a4$+a5$+a8$+a3$+a2$
gride8$ =a3$+a8$+a1$+a2$+a6$+a9$+a5$+a4$+a7$
gride9$ =a5$+a4$+a2$+a7$+a3$+a8$+a9$+a6$+a1$

for x=1 to 9
z%=int(rnd(1))
grid_write 1,2,x+1,"  "+mid$(gride1$,x,1)
z%=int(rnd(2)):if z%=0 then grid_write 1,2,x+1,""

grid_write 1,3,x+1,"  "+mid$(gride2$,x,1)
z%=int(rnd(2)):if z%=0 then grid_write 1,3,x+1,""

grid_write 1,4,x+1,"  "+mid$(gride3$,x,1)
z%=int(rnd(2)):if z%=0 then grid_write 1,4,x+1,""

grid_write 1,5,x+1,"  "+mid$(gride4$,x,1)
z%=int(rnd(2)):if z%=0 then grid_write 1,5,x+1,""

grid_write 1,6,x+1,"  "+mid$(gride5$,x,1)
z%=int(rnd(1)):if z%=0 then grid_write 1,6,x+1,""

grid_write 1,7,x+1,"  "+mid$(gride6$,x,1)
z%=int(rnd(2)):if z%=0 then grid_write 1,7,x+1,""

grid_write 1,8,x+1,"  "+mid$(gride7$,x,1)
z%=int(rnd(2)):if z%=0 then grid_write 1,8,x+1,""

grid_write 1,9,x+1,"  "+mid$(gride8$,x,1)
z%=int(rnd(2)):if z%=0 then grid_write 1,9,x+1,""

grid_write 1,10,x+1,"  "+mid$(gride9$,x,1)
z%=int(rnd(2)):if z%=0 then grid_write 1,10,x+1,""
next x
comptage()
grid_save 1,10,10,"Grid.ini"
end_sub

sub comptage()
for x=2 to 10
for y=2 to 10
if grid_read$(1,y,x)="  1" then num1%=num1%+1 : caption 22,str$(num1%)
if grid_read$(1,y,x)="  2" then num2%=num2%+1 : caption 23,str$(num2%)
if grid_read$(1,y,x)="  3" then num3%=num3%+1 : caption 24,str$(num3%)
if grid_read$(1,y,x)="  4" then num4%=num4%+1 : caption 25,str$(num4%)
if grid_read$(1,y,x)="  5" then num5%=num5%+1 : caption 26,str$(num5%)
if grid_read$(1,y,x)="  6" then num6%=num6%+1 : caption 27,str$(num6%)
if grid_read$(1,y,x)="  7" then num7%=num7%+1 : caption 28,str$(num7%)
if grid_read$(1,y,x)="  8" then num8%=num8%+1 : caption 29,str$(num8%)
if grid_read$(1,y,x)="  9" then num9%=num9%+1 : caption 30,str$(num9%)
next y
next x
end_sub

sub test()
  ' Atribut du texte
  res% = dll_call6("GridFunction",object_internal(1),9,1,20,adr(font$),0)
  ' changer la couleur d'une cellule
  RGB(0,0,0)  : ' écriture noir
  FRGB% = RGB%
  RGB(255,255,255)  : ' fond blanc
  res% = dll_call6("GridFunction",object_internal(1),2,posx%-1,posy%-1,RGB%,FRGB%)
end_sub

sub RGB(R%,G%,B%) : ' produire une valeur RGB valide
 RGB% = (B%*256+R%)*256+G%
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 2478
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: un p'tit sudoku a resoudre   Mer 21 Oct 2015 - 14:48

Je suis gratifié d'un FILE ACCESS DENIED dès le départ !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
pascal10000

avatar

Nombre de messages : 666
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: un p'tit sudoku a resoudre   Mer 21 Oct 2015 - 15:45

Comment ça il fonctionne bien chez moi!!!!!!!!!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10411
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: un p'tit sudoku a resoudre   Mer 21 Oct 2015 - 16:03

Chez moi, tel quel, ça démarre et un peut placer des numéros. Je ne suis pas allé plus loin. Pas de plantage au démarrage. As-tu vérifié le chemin de KGF.dll ligne 129 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: un p'tit sudoku a resoudre   

Revenir en haut Aller en bas
 
un p'tit sudoku a resoudre
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» [PROJET] sudoku
» SUDOKU solution
» Problème de poules
» suis je infecter??
» [Résolu] Lenteur d'ouverture des sites et pages

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les jeux faits avec Panoramic-
Sauter vers: