un petit jeu que j'ai cree- il faut effacer la moitie, mais

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

un petit jeu que j'ai cree- il faut effacer la moitie, mais

Message par Parole De JOJO »

Code : Tout sélectionner

#White=$FFFFFF:#Black=$000000:#Red=$0000FF:#Yellow=$00FFFF:#Bordo=$9F0560:#Gris=$384053:#pink=$745DDA:#Blu=$FCE303:#Gren=$6EFF91

#pourtour=#Black
#interieur=#Blu
#numero=#Black
#case_proposee=#Bordo
#case_remplie=#Pink
#tableau=#Black
#essai_1ere_case=#Bordo

Global etape=1,x=1,y=1,cas=31,nextcase,choix,num=1,pa,fin
Global Dim Lis.l(197):For k=1 To 28:lis(k)=-1:lis(k+168)=-1:Next
For k=1 To 13:For l=0 To 3:lis(k*14+l-1)=-1:Next:Next
Global Dim opt.l(9):opt(1)=12:opt(2)=27:opt(3)=29:opt(4)=16:opt(5)=-12:opt(6)=-27:opt(7)=-29:opt(8)=-16
Procedure.d Rnd(x,y):ProcedureReturn Int(x*Pow(10,y))/Pow(10,y):EndProcedure
Procedure Mod(x,y):a.d=rnd(x-Int(x/y)*y,5):If a<0:a+y:EndIf:ProcedureReturn a:EndProcedure
Procedure GetXY(a):x=Int((a-1)/14):y=a-14*x:x+1:x-2:y-2:EndProcedure
Procedure Next_Case(p):For choix=1 To 8:nextcase=cas+opt(mod(choix+p-2,8)+1)
If lis(nextcase)=0:Break:EndIf:Next
If choix=9:fin=1:Else:GetXY(nextcase):FillArea(20*x-9,20*y-9,-1,#case_proposee):pa=mod(choix+p-1,8):EndIf
EndProcedure
Procedure Draw_Num(num):DrawText(20*x-8,20*y-7,Str(num),#numero,#case_remplie)
FillArea(20*x-9, 20*y-9, -1, #case_remplie):SetWindowTitle(0,"SUS 100 !!! sus="+Str(num))
EndProcedure
Procedure Fin():MessageRequester("SUS 100","Died at "+Str(num)+Chr(10)+"Programmed by ramam2000@gmail.com"):End:EndProcedure
    
  If OpenWindow(0,0,0,220,220,"SUS 100 !!!",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    If CreateImage(0,220,220) And StartDrawing(ImageOutput(0))
    CreateGadgetList(WindowID(0)):Box(0,0,220,220,#interieur)
    For k=1 To 11:LineXY(10,20*k-10,210,20*k-10,#tableau):LineXY(20*k-10,10,20*k-10,210,#tableau):Next
    FillArea(1,1,-1,#pourtour):GetXY(cas):FillArea(20*x-9,20*y-9,-1,#essai_1ere_case)
    StopDrawing():ImageGadget(0,0,0,200,200,ImageID(0)):EndIf
  AddKeyboardShortcut(0,#PB_Shortcut_Space,1):AddKeyboardShortcut(0,#PB_Shortcut_Return,2)
  AddKeyboardShortcut(0,#PB_Shortcut_Left,3):AddKeyboardShortcut(0,#PB_Shortcut_Up,4)
  AddKeyboardShortcut(0,#PB_Shortcut_Right,5):AddKeyboardShortcut(0,#PB_Shortcut_Down,6)
  AddKeyboardShortcut(0,#PB_Shortcut_Escape,7)

  Repeat:Event=WaitWindowEvent()

    If event=#PB_Event_Menu:touche=EventMenu():If touche=7:fin():EndIf
      If etape=1
        If touche<7 And touche>0
          If touche=4:cas-1:ElseIf touche=3:cas-14:ElseIf touche=6:cas+1:ElseIf touche=5:cas+14:EndIf
          If cas<28:cas+14:ElseIf cas>168:cas-14:EndIf
          If mod(cas,14)=2:cas+1:ElseIf mod(cas,14)=13:cas-1:EndIf
          StartDrawing(ImageOutput(0)):FillArea(20*x-9,20*y-9,-1,#interieur) 
          GetXY(cas):FillArea(20*x-9,20*y-9,-1,#essai_1ere_case) 
          StopDrawing():ImageGadget(0,0,0,200,200,ImageID(0)):EndIf
        If touche=2:etape=2
          StartDrawing(ImageOutput(0)):FillArea(20*x-9,20*y-9,-1,#interieur) 
          GetXY(cas):Draw_Num(1):Next_Case(1):lis(cas)=1
          StopDrawing():ImageGadget(0, 0, 0, 200, 200, ImageID(0)):EndIf
      ElseIf etape=2
        If touche=1
        StartDrawing(ImageOutput(0)):FillArea(20*x-9,20*y-9,-1,#interieur) 
        Next_Case(pa+1):StopDrawing():ImageGadget(0,0,0,200,200,ImageID(0))
        ElseIf touche=2
        cas=nextcase:lis(cas)=num:num+1:StartDrawing(ImageOutput(0))
        FillArea(20*x-9, 20*y-9, -1, #interieur):Draw_Num(num)
        Next_Case(1):StopDrawing():ImageGadget(0, 0, 0, 200, 200, ImageID(0)):If fin=1:fin():EndIf
        EndIf
      EndIf
    EndIf
  Until Event = #PB_Event_CloseWindow:EndIf
il y a plein de code en trop mais je ne sais pas quoi enlever
j'aimerai entendre votre avis

merci
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par SPH »

Parole De JOJO a écrit :il y a plein de code en trop mais je ne sais pas quoi enlever
j'aimerai entendre votre avis

merci
Erreur ligne 16.

Quand tu dis "il y a plein de code en trop", je dis, en effet ! Programmer, ce n'est pas entasser des bouts de code comme ca...
A la base, tu voulais faire quoi ?????

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par flaith »

Ça ressemble à un démineur, non ? :mrgreen:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par Ar-S »

@SPH => renomme tous les "Mod(" en "Modif("

@JOJO
ça fonctionne chez moi après renommage (une commande externe du même non existe)
Par contre un petit conseils, pour plus de lisibilité, évite d'étouffer le code avec des fonction:fonction:fonction,
la place en ligne que tu y gagnes, nous on la perd en visibilité, et c'est jamais bien agréable à lire (on a purepunch pour ça ;))
Donc si tu partage du code, essaye de l'aérer voir de le commenter.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par Parole De JOJO »

c'est vrai, je n'ais pas ete clair
a la base je voulais creer un programme en 2D, il faut choisir une case avec les fleches, presser entrer, et ensuite arriver le plus proche possible de 100, en faisantdes bons comme le cheval dans le jeu d'echec. la touche espace sert a passer a la prochaine case, et la touche entrer sert a selectionner la case requise
le probleme est que pour chaque changement dans l'image je dois faire startdraw, stopdraw, et ImageGadget
et c'eat pas tres joli
comment supprimer cela

merci en tout cas

c'est koi, purepunch?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par Ar-S »

Voir ici

Code : Tout sélectionner

http://www.purebasic.fr/french/viewtopic.php?f=6&t=10746
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par Warkering »

Je suis au Cégep donc je n'ai pas PureBasic sous la main pour tester mais il est vrai que ton code est plutôt barbare! :roll:
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par SPH »

On dirait le deplacement d'un cavalier sur un plateau de jeu d'echec. A part ca, je n'ai rien capté a la regle du jeu...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par Parole De JOJO »

bon apparement je n'ai pas ete tres clair
le jeu est de remplir le plus de cases possibles
il faut remplir avec metode sinon on se bloque tres vite
effectivement, les bons sont ceux du cavaliers dans le jeu d'echec
ce que je veux en fait c'est rendre le code plus rapide parcequ'il est assez lent a cause du drawimage a chaque fois

merci
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par SPH »

Parole De JOJO a écrit :bon apparement je n'ai pas ete tres clair
le jeu est de remplir le plus de cases possibles
il faut remplir avec metode sinon on se bloque tres vite
Nan mais en fait, on peux choisir la case de depart mais apres, on ne controle plus rien ! Alors je ne sais pas si c'est voulu...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par Parole De JOJO »

si, on change de case avec espace et on selectione avec enter
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par SPH »

Parole De JOJO a écrit :si, on change de case avec espace et on selectione avec enter
Ha oui ok :mrgreen:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par Backup »

quoiqu'il en soit ton code est rapide !

mais ne demande pas qu'on t'aide a optimiser ce code
alors que tu le présente tout condensé avec des ":"
faut pas exagerer non plus !

je me demande ce qui t'a empêché d'utiliser les Macro en plus !! :lol:

serieux , présente ton code de façon normal , sans utilisation des lignes a rallonges , sans utiliser
les ":" ce sera deja plus clair !



pour ma part, ce que j'en ai vu , ce serai plutôt ta gestion des touches , qui me font
un peu peur ! :)
il y a trop de "if-endif" , a remplacer par des select-case , bien plus lisible
de plus tu as utilisé les raccourcis, il y a moyen de mieux faire (voir les Tutos du site ..)


autre chose , ceci :

Code : Tout sélectionner

Procedure Fin():MessageRequester("SUS 100","Died at "+Str(num)+Chr(10)+"Programmed by ramam2000@gmail.com"):End:EndProcedure
soit de façon clair et civilisé ; ceci :

Code : Tout sélectionner

Procedure Fin()
    MessageRequester("SUS 100","Died at "+Str(num)+Chr(10)+"Programmed by ramam2000@gmail.com")
    End
EndProcedure
tu entre dans la procedure , (donc l'adresse de retour est implicitement empilé)
seulement arrivé au "End" , le programme quit !
que ce passe t'il au niveau de la pile ??

ça doit laisser un sacré bazars !! :lol:

le Endprocedure est en principe là pour dépiller l'adresse de retour de la procédure

sortir d'une procédure par un "End" ou un "Goto"
est une chose a Bannir ... ! :wink:

pense y dans tes futurs créations ...

autre chose :

Code : Tout sélectionner

CreateGadgetList(WindowID(0))
ne sert plus a rien ! :)

il y a surement d'autre trucs , mais avec un listing aussi mal présenté , je ne cherche meme pas :lol:
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par Parole De JOJO »

tu as raison
je vais l'arrenger et le representer
je n'ais pas compris ce qu'est la pile

en tout cas merci
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: un petit jeu que j'ai cree- il faut effacer la moitie, m

Message par Backup »

la pile c'est un espace mémoire ou s'entasse les instructions, ou les adresses memoire

en assembleur , la pile est tres importante a gerer !

en purebasic on a moins l'impression qu'elle est là, mais ton code Purebasic va etre transformé en assembleur puis linké (la compilation)

ton programme purebasic gere la pile sans que tu le sache !
il faut avoir utilisé un débugger (comme ollydbg par ex) pour comprendre comment se passe
l'appel a une procédure

au moment de l'appel de la procédure l'adresse du pointeur de programme est placé sur la pile
pour que le programme sache ou il faut revenir apres l'appel de la procédure ..

la procedure est exécuté , puis a la fin (procedurereturn) l'adresse de retour est retiré de la pile
pour actualiser le pointeur de programme , et effectuer un saut vers l'instruction qui suit l'appel
de façon a continuer le prg ...

lorsque tu fait exécuter un "End" ou un goto , alors que l'adresse de retour se trouve toujours sur la pile , tu peux générer des problèmes grave de mémoire, car l'adresse n'as pas ete dépilé par la fin de la procédure !

alors je pose la question, que deviens cette adresse présente dans la pile ??

je pense que c'est simplement une valeur qui va trainer là , et qui risque de mettre le basarre ...


faudrait qu'un pro de l'assembleur confirme ... ;) (Denis, tonton , etc ...)
Répondre