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
» Demande pour Jack concernant PanExpress
par Jack Aujourd'hui à 7:48

» Calculatrice
par papydall Hier à 22:54

» EPP_V01 éditeur pour Panoramic
par Minibug Mer 19 Sep 2018 - 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Mer 19 Sep 2018 - 21:02

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Mer 19 Sep 2018 - 15:58

» Planétarium virtuel.
par Pedro Alvarez Mer 19 Sep 2018 - 9:28

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

» La théorie du chaos
par jean_debord Mar 11 Sep 2018 - 9:30

» Orbites de l’ensemble de Mandelbrot
par Jean Claude Lun 10 Sep 2018 - 21:08

» Version instantanée V 0.9.29i2 du 4/09/2018
par silverman Mer 5 Sep 2018 - 10:15

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 Les Gloutons

Aller en bas 
AuteurMessage
Jean Claude

avatar

Nombre de messages : 5643
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Les Gloutons   Lun 25 Avr 2016 - 22:18

Je viens de déposer sur mon webdav Les Gloutons.zip.
Lancez l'exécutable Jeu.exe. Vous avez aussi le fichier jeu.bas pour bidouiller le code (en particulier donner plus de force au glouton rouge).

Ce jeu se joue avec les flèches du pavé numérique 1,2,3,4,6,7,8,9 et/ou les flèches de direction.
C'est une version fonctionnelle.

Le jeu:
il y a un glouton rouge piloté par l'ordinateur (bien entendu, il est très désordonné).
Pour vous c'est le glouton vert que vous pilotez avec les flèches du pavé numérique 1,2,3,4,6,7,8,9 et/ou les flèches de direction.
C'est chacun son tour, le glouton rouge commence la partie.
Vous avez 50 pastilles de nourriture de 1 à 5 "calories", éparpillées sur la piste.

Le but du jeu: est d'en manger le plus possible pour rester en forme.
Chaque déplacement épuise votre glouton, il faut donc manger pour reprendre de la vitalité.
Si votre glouton est trop fatigué, il fait une sieste, vous devez attendre qu'il ai repris des forces, mais pendant ce temps là le glouton rouge mange des pastilles.
Votre glouton reprend des forces à chaque tour.
ces 3 règles s'appliquent aussi au glouton rouge.

La fin de partie arrive quand toutes les pastilles sont mangées. Il vous reste à contempler votre score.

Amusez-vous bien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Les Gloutons   Mar 26 Avr 2016 - 0:14

Bonne idée, mais désolé, je n'ai pas accroché au jeu.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5643
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Les Gloutons   Mar 26 Avr 2016 - 9:27

@Jicehel,
C'est normal que tu n'accroche pas au jeu, car il est plutôt destiné à un public très jeune (de 4 à 10 ans).

@tous
La version que j'ai faite n'est qu'un essai. Le but étant, pour moi, de créer le moteur.
Il me reste à changer tout le design pour l'adapter au public concerné.
Changer le thème du jeu (cela pourrait être une chasse au œufs de Pâque par exemple)
Changer le décor, un magasin, un marché, une prairie....
Changer les pastilles par des fruits, légumes, pots de confiture, tablettes de chocolat,....
Changer l'affichage des "scores"....
Bref de le rendre attrayant à des enfants.
Ce qui est le plus difficile, dans l'affaire, c'est de trouver des images libres de droit qui soient en correspondances avec le thème. Les fabriquer moi-même, j'ai bien essayé, mais je suis pas doué.Very Happy  

Chacun peut le faire en changeant les images du dossier, pratiquement sans changer le code.

Je suis entrain d'apporter quelques améliorations et de corriger des erreurs de copier/coller.
Par exemple: je me suis aperçu que le glouton rouge touchait 2 fois la dotation à chaque tour.
Je vais également augmenter la difficulté par pallier, car cette version est trop facile (quoique pour des enfants, c'est plus plaisants).
Y mettre un peu de son, etc...

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 8083
Age : 47
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 26 Avr 2016 - 14:29

L' idée est originale, j' aime bien même si j' ai du mal à me déplacer comme je veux.
cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5643
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Les Gloutons   Mar 26 Avr 2016 - 17:29

@Ygeronimi,
Pour les déplacements, j'ai oublié de préciser que l'appui sur une touche indique la direction à prendre au glouton vert. Il ne sert à rien de maintenir la touche enfoncée, c'est le programme qui détermine la longueur du déplacement.
Avec l'habitude, on trouve assez vite comment choisir une prise plutôt qu'une autre pour prévoir le coup suivant.

Je viens de faire des niveaux de jeu, bon ce n'est pas encore terrible, mais ça m'a permis d'entrevoir une autre manière de jouer. Je vais y réfléchir.

Voici la version avec les niveaux (les images restent les mêmes, donc pas besoin de recharger sur le webdav)
Un conseil: si vous souhaitez en faire un exécutable, faites-le avec la V09-26 de Panoramic, qui ne bug pas avec TERMINATE.

Code:
' Jeu Les Gloutons Fatigués
Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord%
' Variables
dim a$,col$,fintour$
dim n%,cible%,Num_Sprite%,Num_Caz%,Nb_Caz%,vie%,x%,y%,v%,niveau%,NBniveau%
dim vit%,vit2%,pas%,ForceRouge%,ForceVert%,tour%,DotationParTour%
dim DeltaX,Xa,Xd,Nd,DeltaY,Ya,Yd,Nbd
Nb_Caz%=50 :' définition du nombre de cases ("pions-nourritures")
dim px%(Nb_Caz%),py%(Nb_Caz%)
dim el$(3)
' les règlages
vie%=50 : vit%=10 : vit2%=100
dim SanteRouge%,SanteVert% : SanteRouge%=vie% : SanteVert%=vie%
pas%=5:' vitesse de déplacement vert
Nbd=50 :' nombre de déplacement vert par tour
ForceRouge%=10 : ForceVert%=12 : DotationParTour%=5
NBniveau%=10 : niveau%=1

hide 0
width 0,880+bord%+bord% : height 0,700+bandeau%+bord%
top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
caption 0,"Bien manger c'est survivre !"+string$(10," ")+"Echap pour quitter avant la fin"
dim Dlist_Tri1%,Dlist_Tri2%,Dlist_Tri3%,Dlist_Tri% : Dlist_Tri1%=1 : Dlist_Tri2%=2 : Dlist_Tri3%=3 : Dlist_Tri%=4
dlist 1 : dlist 2 : dlist 3 : dlist 4
picture 5 : full_space 5 : color 5,0,0,0
alpha 6 : top 6,20 : left 6,710 : color 6,0,0,0 : font_color 6,255,0,0
          font_bold 6 : font_size 6,14 : caption 6,"Force Rouge "+str$(SanteRouge%)
alpha 7 : top 7,650 : left 7,710 : color 7,0,0,0 : font_color 7,0,255,100
          font_bold 7 : font_size 7,14 : caption 7,"Force Vert "+str$(SanteVert%)
alpha 8 : top 8,350 : left 8,710 : color 8,0,0,0 : font_color 8,255,255,10
          font_bold 8 : font_size 8,14 : caption 8,"Nourriture "+str$(Nb_Caz%)
alpha 9 : top 9,300 : left 9,710 : color 9,0,0,0 : font_color 9,150,200,255
          font_bold 9 : font_size 9,14 : caption 9,"Niveau "+str$(niveau%)



Scene2d 100 : width 100,700 : height 100,height(0)-(bandeau%+bord%)
file_load 100,"fond.bmp"

DefZoneInterdite()

' création des sprite
for n%=1 to 10
    sprite 110+n% : sprite_file_load 110+n%,"grain1.bmp" : sprite_position 110+n%,-40,-40
next n%
for n%=1 to 10
    sprite 120+n% : sprite_file_load 120+n%,"grain2.bmp" : sprite_position 120+n%,-40,-40
next n%
for n%=1 to 10
    sprite 130+n% : sprite_file_load 130+n%,"grain3.bmp" : sprite_position 130+n%,-40,-40
next n%
for n%=1 to 10
    sprite 140+n% : sprite_file_load 140+n%,"grain4.bmp" : sprite_position 140+n%,-40,-40
next n%
for n%=1 to 10
    sprite 150+n% : sprite_file_load 150+n%,"grain5.bmp" : sprite_position 150+n%,-40,-40
next n%
' Les pièces à jouer
dim rouge% : rouge%=101 : sprite 101 : sprite_file_load 101,"rouge35.bmp" : sprite_position 101,520,75
dim vert% : vert%=102 : sprite 102 : sprite_file_load 102,"vert35.bmp" : sprite_position 102,2,664
Emplacements() : Plateau(): ' positionne les pions dans les emplacements de manière aléatoire
' démarrage
label MoveVert,fin
show 0
message "Pour jouer votre glouton de couleur verte, utilisez les flèches de direction et les touches 1,3,7,9 du pavé numérique."
pause 1000 : fintour$="" : TourRouge()
END

rem ============================================================================
SUB FinDePartie()
    message "il n'y a plus rien à manger, partie terminé"
  IF niveau%<NBniveau% and SanteVert%>SanteRouge%
     message "Comme vous avez gagné cette manche vous pouvez passer au niveau supérieur"
    if message_confirmation_yes_no("Voulez-vous passer au niveau supérieur (Les forces restent inchangées)")=1
       niveau%=niveau%+1 : Niveau(niveau%)
    else
       terminate
    end_if
  ELSE
    terminate
  END_IF
END_SUB

SUB Niveau(niv%)
    if niv%>NBniveau% then message " Pas de niveau supérieur " : terminate
    caption 9,"Niveau "+str$(niveau%)
    if niv%=2
       vie%=50 : vit%=10 : vit2%=100
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=49 :' nombre de déplacement vert par tour
       ForceRouge%=11 : ForceVert%=11 : DotationParTour%=5
    end_if
    if niv%=3
       vie%=40 : vit%=5 : vit2%=50
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=48 :' nombre de déplacement vert par tour
       ForceRouge%=12 : ForceVert%=10 : DotationParTour%=5
    end_if
    if niv%=4
       vie%=50 : vit%=5 : vit2%=50
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=47 :' nombre de déplacement vert par tour
       ForceRouge%=13 : ForceVert%=10 : DotationParTour%=4
    end_if
    if niv%=5
       vie%=50 : vit%=5 : vit2%=50
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=46 :' nombre de déplacement vert par tour
       ForceRouge%=14 : ForceVert%=9 : DotationParTour%=3
    end_if
    if niv%=6
       vie%=50 : vit%=1 : vit2%=25
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=45:' nombre de déplacement vert par tour
       ForceRouge%=15 : ForceVert%=9 : DotationParTour%=2
    end_if
    if niv%=7
       vie%=50 : vit%=1 : vit2%=10
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=44 :' nombre de déplacement vert par tour
       ForceRouge%=16 : ForceVert%=8 : DotationParTour%=1
    end_if
    if niv%=8
       vie%=50 : vit%=1 : vit2%=10
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=43 :' nombre de déplacement vert par tour
       ForceRouge%=15 : ForceVert%=8 : DotationParTour%=1
    end_if
    if niv%=9
       vie%=50 : vit%=1 : vit2%=10
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=8 :' nombre de déplacement vert par tour
       ForceRouge%=14 : ForceVert%=7 : DotationParTour%=1
    end_if
    if niv%=10
       vie%=50 : vit%=1 : vit2%=10
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=50 :' nombre de déplacement vert par tour
       ForceRouge%=20 : ForceVert%=12 : DotationParTour%=1
    end_if
    col$="" : Nb_Caz%=50 : Plateau()
    caption 6,"Force Rouge "+str$(SanteRouge%)
    caption 7,"Force Vert "+str$(SanteVert%)
    caption 8,"Nourriture "+str$(Nb_Caz%)
    pause 1000 : fintour$="" : TourRouge()
END_SUB

SUB TourRouge()
  OFF_KEY_DOWN 0
  tour%=tour%+1 : SanteRouge%=SanteRouge%+DotationParTour%
  caption 6,"Force Rouge "+str$(SanteRouge%)
  fintour$="" : MoveRouge()
  caption 6,"Force Rouge "+str$(SanteRouge%)
  Suite()
END_SUB

SUB Suite()
  fintour$="": tour%=tour%+1 : SanteVert%=SanteVert%+DotationParTour%
  caption 7,"Force Vert "+str$(SanteVert%)
  if SanteVert%<1
     TourRouge()
  else
     TourVert()
  end_if
END_SUB

SUB TourVert()
    IF SanteVert%>0
       sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
       sprite_file_load vert%,"vert35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
    ELSE
       sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
       sprite_file_load vert%,"vertR35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
    END_IF
    ON_KEY_DOWN 0,MoveVert
END_SUB

MoveVert:
   if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(8) : ' 8 haut
   if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then move(2)  : ' 2 Bas
   if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then move(4) : ' 4 gauche
   if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then move(6) : ' 6 droite
   if KEY_DOWN_CODE = 97 then move(1)                        : ' 1 Bas-gauche
   if KEY_DOWN_CODE = 99 then move(3)                        : ' 3 Bas-droite
   if KEY_DOWN_CODE = 103 then move(7)                       : ' 7 haut-gauche
   if KEY_DOWN_CODE = 105 then move(9)                       : ' 9 haut-droite
   if KEY_DOWN_CODE = 27 then gosub fin                      : ' Echap
   ' redonner le tour au rouge
'  OFF_KEY_DOWN 0
   TourRouge()
RETURN

fin:
   OFF_KEY_DOWN 0 : message "à bientôt!" : end
RETURN

SUB move(dir%)
    if count(Dlist_Tri3%)<1 then FinDePartie()
    OFF_KEY_DOWN 0
    if SanteVert%<1 then caption 7,"Force Vert "+str$(SanteVert%) : exit_sub :' message "Votre Glouton a besoin de repos (force="+str$(SanteVert%)+")"
    col$="" : Xd=sprite_x_position(vert%) : Yd=sprite_y_position(vert%)
       for n%=1 to Nbd
           SanteVert%=SanteVert%-1
           x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%): ' sauve dernière position
           if dir%=1 then sprite_position vert%,x%-1,y%+pas% :' bas-gauche
           if dir%=2 then sprite_position vert%,x%,y%+pas% :' bas
           if dir%=3 then sprite_position vert%,x%+pas%,y%+pas% :' bas-droite
           if dir%=4 then sprite_position vert%,x%-pas%,y% :' gauche
           if dir%=6 then sprite_position vert%,x%+pas%,y% :' droite
           if dir%=7 then sprite_position vert%,x%-pas%,y%-pas% :' haut-gauche
           if dir%=8 then sprite_position vert%,x%,y%-pas% :' haut
           if dir%=9 then sprite_position vert%,x%+pas%,y%-2 :' haut-droite
           VerifSiSpriteEnZoneInterdite(vert%) :' message ok$
           if ok$="N"
              SanteVert%=SanteVert%-1
              sprite_hide vert% : sprite_file_load vert%,"vert.bmp" : sprite_position vert%,x%,y% : pause vit2%*2
              sprite_file_load vert%,"vert35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
              pause vit2% : sprite_position vert%,x%,y%
              caption 7,"Force Vert "+str$(SanteVert%)
              exit_sub
           else
             ' vérifier si collision pour chaque case du dlist3
             if count(Dlist_Tri3%)<1
                FinDePartie()
             end_if
             for cible%=1 to count(Dlist_Tri3%)
                 Clear_Variables_EL(3) : a$=item_read$(Dlist_Tri3%,cible%) : EXPLODE("|",a$) : Incremente_Variables_EL(Dlist_tri%)
                 Num_Caz%=val(el$(1)) : Num_Sprite%=val(el$(2)) : v%=val(el$(3))
                 x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
                 Xa=px%(Num_Caz%) : Ya=py%(Num_Caz%)
                 if x%>(Xa-25) and x%<(Xa+25) and y%>(Ya-25) and y%<(Ya+25)
                    col$="O"
                    sprite_position vert%,Xa+10,Ya+10 : pause vit% : MangePion()
                    item_delete Dlist_Tri3%,cible% : Nb_Caz%=Nb_Caz%-1 : SanteVert%=SanteVert%+(v%*ForceVert%)
                    caption 8,"Nourriture "+str$(Nb_Caz%) : pause vit%
                    exit_for
                 end_if
             next cible%
             if col$="O" then exit_for
           end_if
           caption 7,"Force Vert "+str$(SanteVert%)
        next n%
        IF SanteVert%>0
           sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
           sprite_file_load vert%,"vert35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
        ELSE
           sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
           sprite_file_load vert%,"vertR35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
        END_IF
  caption 7,"Force Vert "+str$(SanteVert%)
END_SUB

SUB MangePion()
   sprite_position Num_Sprite%,Xa+2,Ya+1 : pause vit2%
   sprite_position Num_Sprite%,Xa+4,Ya+2 : pause vit2%
   sprite_position Num_Sprite%,Xa+6,Ya+3 : pause vit2%
   sprite_position Num_Sprite%,Xa+8,Ya+4 : pause vit2%
   sprite_position Num_Sprite%,Xa+10,Ya+5 : pause vit2%
   sprite_position Num_Sprite%,Xa+12,Ya+6 : pause vit2%
   sprite_position Num_Sprite%,Xa+14,Ya+6 : pause vit2%
   sprite_position Num_Sprite%,Xa+16,Ya+6 : pause vit2%
   sprite_position Num_Sprite%,-40,-40
END_SUB

SUB MoveRouge()
'   le glouton rouge part chercher de la nourriture si sa santé est >1
    IF SanteRouge%>=0
       x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%)
       sprite_file_load rouge%,"rouge35.bmp" : sprite_position rouge%,x%,y%
     ' prendre une cible du Dlist_Tri3%
       if count(Dlist_Tri3%)<1
          FinDePartie()
       else
          if count(Dlist_Tri3%)>1
             if tour%=1
                 cible%=4
             else
                 cible%=0 : while cible%=0 : cible%=rnd(count(Dlist_Tri3%)) : end_while
             end_if
          else
             cible%=1
          end_if
       end_if
       Clear_Variables_EL(3) : a$=item_read$(Dlist_Tri3%,cible%) : EXPLODE("|",a$) : Incremente_Variables_EL(Dlist_tri%)
       Num_Caz%=val(el$(1)) : Num_Sprite%=val(el$(2)) : v%=val(el$(3))
     ' déplacement
       Nd=50:' nombre de déplacement autorisés
       Xd=sprite_x_position(rouge%) : Yd=sprite_y_position(rouge%) :' position actuelle du glouton rouge
       Xa=px%(Num_Caz%) : Ya=py%(Num_Caz%) : ' position ciblée
       for n%=1 to Nd
           SanteRouge%=SanteRouge%-1
           DeltaX = (Xa - Xd)/Nd : DeltaY = (Ya - Yd)/ Nd
           x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%): ' sauve dernière position
           sprite_position rouge%,Xd+int(n%*DeltaX),Yd+int(n% * DeltaY) : pause vit%
           VerifSiSpriteEnZoneInterdite(rouge%) :' message ok$
           if ok$="N"
              SanteRouge%=SanteRouge%-1
              pause int(vit2%/2) : sprite_position rouge%,x%,y% : exit_for
           else
              sprite_position rouge%,Xd+int(n%*DeltaX),Yd+int(n% * DeltaY)
              ' vérifier si cible atteinte en comparant x%,y% avec Xa,Ya (collision)
                x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%): ' sauve dernière position
               ' message str$(y%)+"/"+str$(ya)
                if x%>(Xa-17) and x%<(Xa+17) and y%>(Ya-17) and y%<(Ya+17)
                   sprite_position rouge%,Xa+15,Ya+5 : pause vit% : MangePion()
                   item_delete Dlist_Tri3%,cible% : Nb_Caz%=Nb_Caz%-1 : SanteRouge%=SanteRouge%+(v%*ForceRouge%)
                   caption 8,"Nourriture "+str$(Nb_Caz%) : pause int(vit2%/4)
                   exit_for
                end_if
           end_if
           caption 6,"Force Rouge "+str$(SanteRouge%)
           pause vit%
       next n%
      ' si le pion n'a pas bougé
        if x%=Xd and y%=Yd
           sprite_hide rouge% : sprite_file_load rouge%,"rouge.bmp" : sprite_position rouge%,x%,y% : pause vit2%*2
           sprite_file_load rouge%,"rouge35.bmp" : sprite_position rouge%,x%,y% : sprite_show rouge%
        end_if
    ELSE
      sprite_hide rouge% : x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%)
      sprite_file_load rouge%,"rougeR35.bmp" : sprite_position rouge%,x%,y% : sprite_show rouge%
    END_IF
    if SanteRouge%<0
       sprite_hide rouge% : x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%)
       sprite_file_load rouge%,"rougeR35.bmp" : sprite_position rouge%,x%,y% : sprite_show rouge%
    end_if
    if count(Dlist_Tri3%)<1 then FinDePartie()
    fintour$="O"
END_SUB

SUB Plateau()
    Liste_Aleatoire(111,160)
    clear Dlist_Tri3%
  for Num_Caz%=1 to Nb_Caz%
      Num_Sprite%=item_read$(Dlist_Tri2%,Num_Caz%) : sprite_position Num_Sprite%,px%(Num_Caz%),py%(Num_Caz%)
      if Num_Sprite%>110 and Num_Sprite%<121 then v%=1
      if Num_Sprite%>120 and Num_Sprite%<131 then v%=2
      if Num_Sprite%>130 and Num_Sprite%<141 then v%=3
      if Num_Sprite%>140 and Num_Sprite%<151 then v%=4
      if Num_Sprite%>150 then v%=5
      a$=str$(Num_Caz%)+"|"+str$(Num_Sprite%)+"|"+str$(v%) : item_add Dlist_Tri3%,a$
  next Num_Caz%
END_SUB

SUB Liste_Aleatoire(ch1%,ch2%)
    ' Bignono, modifier JC
    clear Dlist_Tri1% : clear Dlist_Tri2%
    dim_local i%
    for i% = ch1% to ch2% : item_add Dlist_Tri1%,str$(i%) : next i%
    while count(Dlist_Tri1%)>0
       i% = int(rnd(count(Dlist_Tri1%)))+1
       item_add Dlist_Tri2%,item_read$(Dlist_Tri1%,i%) : item_delete Dlist_Tri1%,i%
    end_while
END_SUB

SUB DefZoneInterdite()
  ' définition des zones interdites
    dim ok$,y1m%,y2m%,x1m%,x2m%,y1c%,y2c%,x1c%,x2c%
  ' zone maison
    y1m%=0 : y2m%=75 : x1m%=435 : x2m%=650
  ' zone champs fleurs
   y1c%=88 : y2c%=152 : x1c%=435 : x2c%=650
END_SUB

SUB Emplacements()
  ' emplacement des pions
    px%(1)=590 : py%(1)=180 : px%(2)=360 : py%(2)=250 : px%(3)=60 : py%(3)=160 : px%(4)=120 : py%(4)=100
    px%(5)=530 : py%(5)=280 : px%(6)=230 : py%(6)=200 : px%(7)=450 : py%(7)=350 : px%(8)=500 : py%(8)=500
    px%(9)=620 : py%(9)=644 : px%(10)=26 : py%(10)=356 : px%(11)=116 : py%(11)=178 : px%(12)=175 : py%(12)=378
    px%(13)=8 : py%(13)=600 : px%(14)=180 : py%(14)=180 : px%(15)=278 : py%(15)=288 : px%(16)=210 : py%(16)=315
    px%(17)=40 : py%(17)=400 : px%(18)=580 : py%(18)=484 : px%(19)=603 : py%(19)=533 : px%(20)=650 : py%(20)=650
    px%(21)=610 : py%(21)=455 : px%(22)=360 : py%(22)=168 : px%(23)=50 : py%(23)=580 : px%(24)=620 : py%(24)=600
    px%(25)=230 : py%(25)=652 : px%(26)=475 : py%(26)=375 : px%(27)=580 : py%(27)=580 : px%(28)=80 : py%(28)=644
    px%(29)=126 : py%(29)=456 : px%(30)=316 : py%(30)=178 : px%(31)=405 : py%(31)=378 : px%(32)=8 : py%(32)=60
    px%(33)=230 : py%(33)=380 : px%(34)=410 : py%(34)=0 : px%(35)=438 : py%(35)=438 : px%(36)=410 : py%(36)=515
    px%(37)=30 : py%(37)=470 : px%(38)=590 : py%(38)=354 : px%(39)=623 : py%(39)=503 : px%(40)=200 : py%(40)=50
    px%(41)=15 : py%(41)=15 : px%(42)=100 : py%(42)=260 : px%(43)=630 : py%(43)=280 : px%(44)=490 : py%(44)=200
    px%(45)=388 : py%(45)=320 : px%(46)=410 : py%(46)=565 : px%(47)=150 : py%(47)=540
    px%(48)=390 : py%(48)=75 : px%(49)=323 : py%(49)=403 : px%(50)=203 : py%(50)=423
END_SUB

SUB VerifSiSpriteEnZoneInterdite(NumSprite%)
    if sprite_x_position(NumSprite%)<2 or sprite_x_position(NumSprite%)>662
       ok$="N" : exit_sub
    end_if
    if sprite_y_position(NumSprite%)<0 or sprite_y_position(NumSprite%)>664
       ok$="N" : exit_sub
    end_if
    if sprite_x_position(NumSprite%)>x1m% and sprite_x_position(NumSprite%)<x2m% and sprite_y_position(NumSprite%)>y1m% and sprite_y_position(NumSprite%)<y2m%
       ok$="N" : exit_sub
    end_if
    if sprite_x_position(NumSprite%)>x1c% and sprite_x_position(NumSprite%)<x2c% and sprite_y_position(NumSprite%)>y1c% and sprite_y_position(NumSprite%)<y2c%
       ok$="N": exit_sub
    end_if
    ok$="OK"
END_SUB

SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
       message "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
       terminate
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 then DIM bandeau%
    IF VARIABLE("bord%")=0 then DIM bord%
    ' Calcul de bandeau% et bord%
    dim_local w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    picture 1 : full_space 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    delete 1
END_SUB

' -----------------------------
SUB EXPLODE(delimiter$,chaine$):' Nardo modifié JC
' Cette SUB décompose une chaine et inscrit chaque élément dans Dlist_tri%
' complètée par la SUB Incremente_Variables_EL(z%)
 clear Dlist_tri%
  WHILE INSTR(chaine$,delimiter$)<>0
     ITEM_ADD Dlist_tri%,LEFT$(chaine$,INSTR(chaine$,delimiter$)-1)
     chaine$=RIGHT$(chaine$,LEN(chaine$)-INSTR(chaine$,delimiter$))
  END_WHILE
 ITEM_ADD Dlist_tri%,chaine$
END_SUB
' -----
Sub Incremente_Variables_EL(z%)
' cette SUB récupère les variables du Dlist_tri% pour les intégrer dans la variable el$(?) à la bonne position
  dim_local ii%
 for ii%=1 to count(z%)
  if count(z%)=0 then return
  el$(ii%)=item_read$(z%,ii%)
 next ii%
End_Sub
' ---------------------------
Sub Clear_Variables_EL(nb_V%)
' remise à zéro ("") des variables el$(?)
 dim_local ii%
 for ii%=1 to nb_V%:el$(ii%)="":next ii%
End_Sub


A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Les Gloutons   Mar 26 Avr 2016 - 19:39

Effectivement, mis dans le contexte, ça prend tout son sens. Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5643
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Les Gloutons   Mar 26 Avr 2016 - 21:07

Voici une autre version:
Le principale changement (qui fera plaisir à Ygeronimi) est que le déplacement du glouton se fait par appui continu sur la touche. On change de tour quand le nombre de déplacements est atteint.
Ce qui a pour avantage de pouvoir changer de direction pendant le tour.

Les niveaux ont été adaptés en fonction.

Code:
' Jeu Les Gloutons Fatigués
Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord%
' Variables
dim a$,col$,fintour$
dim n%,cible%,Num_Sprite%,Num_Caz%,Nb_Caz%,vie%,x%,y%,v%,niveau%,NBniveau%,passage%
dim vit%,vit2%,pas%,ForceRouge%,ForceVert%,tour%,DotationParTour%
dim DeltaX,Xa,Xd,Nd,DeltaY,Ya,Yd,Nbd
Nb_Caz%=50 :' définition du nombre de cases ("pions-nourritures")
dim px%(Nb_Caz%),py%(Nb_Caz%)
dim el$(3)
' les règlages
vie%=50 : vit%=10 : vit2%=100
dim SanteRouge%,SanteVert% : SanteRouge%=vie% : SanteVert%=vie%
pas%=7:' vitesse de déplacement vert
Nbd=30 :' nombre de déplacement vert par tour
ForceRouge%=10 : ForceVert%=12 : DotationParTour%=5
NBniveau%=10 : niveau%=1

hide 0
width 0,880+bord%+bord% : height 0,700+bandeau%+bord%
top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
caption 0,"Bien manger c'est survivre !"+string$(10," ")+"Echap pour quitter avant la fin"
dim Dlist_Tri1%,Dlist_Tri2%,Dlist_Tri3%,Dlist_Tri% : Dlist_Tri1%=1 : Dlist_Tri2%=2 : Dlist_Tri3%=3 : Dlist_Tri%=4
dlist 1 : dlist 2 : dlist 3 : dlist 4
picture 5 : full_space 5 : color 5,0,0,0
alpha 6 : top 6,20 : left 6,710 : color 6,0,0,0 : font_color 6,255,0,0
          font_bold 6 : font_size 6,14 : caption 6,"Force Rouge "+str$(SanteRouge%)
alpha 7 : top 7,650 : left 7,710 : color 7,0,0,0 : font_color 7,0,255,100
          font_bold 7 : font_size 7,14 : caption 7,"Force Vert "+str$(SanteVert%)
alpha 8 : top 8,350 : left 8,710 : color 8,0,0,0 : font_color 8,255,255,10
          font_bold 8 : font_size 8,14 : caption 8,"Nourriture "+str$(Nb_Caz%)
alpha 9 : top 9,300 : left 9,710 : color 9,0,0,0 : font_color 9,150,200,255
          font_bold 9 : font_size 9,14 : caption 9,"Niveau "+str$(niveau%)



Scene2d 100 : width 100,700 : height 100,height(0)-(bandeau%+bord%)
file_load 100,"fond.bmp"

DefZoneInterdite()

' création des sprite
for n%=1 to 10
    sprite 110+n% : sprite_file_load 110+n%,"grain1.bmp" : sprite_position 110+n%,-40,-40
next n%
for n%=1 to 10
    sprite 120+n% : sprite_file_load 120+n%,"grain2.bmp" : sprite_position 120+n%,-40,-40
next n%
for n%=1 to 10
    sprite 130+n% : sprite_file_load 130+n%,"grain3.bmp" : sprite_position 130+n%,-40,-40
next n%
for n%=1 to 10
    sprite 140+n% : sprite_file_load 140+n%,"grain4.bmp" : sprite_position 140+n%,-40,-40
next n%
for n%=1 to 10
    sprite 150+n% : sprite_file_load 150+n%,"grain5.bmp" : sprite_position 150+n%,-40,-40
next n%
' Les pièces à jouer
dim rouge% : rouge%=101 : sprite 101 : sprite_file_load 101,"rouge35.bmp" : sprite_position 101,520,75
dim vert% : vert%=102 : sprite 102 : sprite_file_load 102,"vert35.bmp" : sprite_position 102,2,664
Emplacements() : Plateau(): ' positionne les pions dans les emplacements de manière aléatoire
' démarrage
label MoveVert,fin
show 0
message "Pour jouer votre glouton de couleur verte, utilisez les flèches de direction et les touches 1,3,7,9 du pavé numérique."
pause 1000 : fintour$="" : TourRouge()
END

rem ============================================================================
SUB FinDePartie()
    message "il n'y a plus rien à manger, partie terminé"
  IF niveau%<NBniveau% and SanteVert%>SanteRouge%
     message "Comme vous avez gagné cette manche vous pouvez passer au niveau supérieur"
    if message_confirmation_yes_no("Voulez-vous passer au niveau supérieur (Les forces restent inchangées)")=1
       niveau%=niveau%+1 : Niveau(niveau%)
    else
       terminate
    end_if
  ELSE
    terminate
  END_IF
END_SUB

SUB Niveau(niv%)
    if niv%>NBniveau% then message " Pas de niveau supérieur " : terminate
    caption 9,"Niveau "+str$(niveau%)
    if niv%=2
       vie%=50 : vit%=10 : vit2%=100
'       SanteRouge%=vie% : SanteVert%=vie%
       Nbd=49 :' nombre de déplacement vert par tour
       ForceRouge%=10 : ForceVert%=10 : DotationParTour%=5
    end_if
    if niv%=3
       vie%=40 : vit%=5 : vit2%=50
'       SanteRouge%=vie% : SanteVert%=vie%
       pas%=3:' vitesse de déplacement vert
       Nbd=29 :' nombre de déplacement vert par tour
       ForceRouge%=11 : ForceVert%=10 : DotationParTour%=5
    end_if
    if niv%=4
       vie%=50 : vit%=5 : vit2%=50
'       SanteRouge%=vie% : SanteVert%=vie%
       Nbd=28 :' nombre de déplacement vert par tour
       ForceRouge%=11 : ForceVert%=10 : DotationParTour%=5
    end_if
    if niv%=5
       vie%=50 : vit%=5 : vit2%=50
'       SanteRouge%=vie% : SanteVert%=vie%
       Nbd=27 :' nombre de déplacement vert par tour
       ForceRouge%=12 : ForceVert%=9 : DotationParTour%=5
    end_if
    if niv%=6
       vie%=50 : vit%=1 : vit2%=25
'       SanteRouge%=vie% : SanteVert%=vie%
       Nbd=26:' nombre de déplacement vert par tour
       ForceRouge%=12 : ForceVert%=9 : DotationParTour%=5
    end_if
    if niv%=7
       vie%=50 : vit%=1 : vit2%=10
'       SanteRouge%=vie% : SanteVert%=vie%
       Nbd=25 :' nombre de déplacement vert par tour
       ForceRouge%=13 : ForceVert%=8 : DotationParTour%=5
    end_if
    if niv%=8
       vie%=50 : vit%=1 : vit2%=10
'       SanteRouge%=vie% : SanteVert%=vie%
       Nbd=24 :' nombre de déplacement vert par tour
       ForceRouge%=13 : ForceVert%=8 : DotationParTour%=5
    end_if
    if niv%=9
       vie%=50 : vit%=1 : vit2%=10
       Nbd=23 :' nombre de déplacement vert par tour
       ForceRouge%=14 : ForceVert%=7 : DotationParTour%=5
    end_if
    if niv%=10
       vie%=50 : vit%=1 : vit2%=10
       Nbd=30 :' nombre de déplacement vert par tour
       ForceRouge%=14 : ForceVert%=10 : DotationParTour%=5
    end_if
    col$="" : Nb_Caz%=50 : Plateau()
    caption 6,"Force Rouge "+str$(SanteRouge%)
    caption 7,"Force Vert "+str$(SanteVert%)
    caption 8,"Nourriture "+str$(Nb_Caz%)
    pause 1000 : fintour$="" : TourRouge()
END_SUB

SUB TourRouge()
  OFF_KEY_DOWN 0
  tour%=tour%+1 : SanteRouge%=SanteRouge%+DotationParTour%
  caption 6,"Force Rouge "+str$(SanteRouge%)
  fintour$="" : MoveRouge()
  caption 6,"Force Rouge "+str$(SanteRouge%)
  Suite()
END_SUB

SUB Suite()
  fintour$="": tour%=tour%+1 : SanteVert%=SanteVert%+DotationParTour%
  caption 7,"Force Vert "+str$(SanteVert%)
  if SanteVert%<1
     TourRouge()
  else
     passage%=0 : TourVert()
  end_if
END_SUB

SUB TourVert()
    IF SanteVert%>0
       sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
       sprite_file_load vert%,"vert35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
    ELSE
       sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
       sprite_file_load vert%,"vertR35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
    END_IF
    ON_KEY_DOWN 0,MoveVert
END_SUB

MoveVert:
   if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(8) : ' 8 haut
   if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then move(2)  : ' 2 Bas
   if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then move(4) : ' 4 gauche
   if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then move(6) : ' 6 droite
   if KEY_DOWN_CODE = 97 then move(1)                        : ' 1 Bas-gauche
   if KEY_DOWN_CODE = 99 then move(3)                        : ' 3 Bas-droite
   if KEY_DOWN_CODE = 103 then move(7)                       : ' 7 haut-gauche
   if KEY_DOWN_CODE = 105 then move(9)                       : ' 9 haut-droite
   if KEY_DOWN_CODE = 27 then gosub fin                      : ' Echap
   if col$="O" then col$="" : TourRouge()
   if SanteVert%<1 then SanteVert%=SanteVert%-1 : TourRouge()
   if passage%>=Nbd
      TourRouge()
   else
      TourVert()
   end_if
RETURN

fin:
   OFF_KEY_DOWN 0 : message "à bientôt!" : end
RETURN

SUB move(dir%)
    passage%=passage%+1
    if count(Dlist_Tri3%)<1 then FinDePartie()
    OFF_KEY_DOWN 0
    if SanteVert%<1 then caption 7,"Force Vert "+str$(SanteVert%) : exit_sub
    col$="" : Xd=sprite_x_position(vert%) : Yd=sprite_y_position(vert%)
           SanteVert%=SanteVert%-1
           x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%): ' sauve dernière position
           if dir%=1 then sprite_position vert%,x%-1,y%+pas% :' bas-gauche
           if dir%=2 then sprite_position vert%,x%,y%+pas% :' bas
           if dir%=3 then sprite_position vert%,x%+pas%,y%+pas% :' bas-droite
           if dir%=4 then sprite_position vert%,x%-pas%,y% :' gauche
           if dir%=6 then sprite_position vert%,x%+pas%,y% :' droite
           if dir%=7 then sprite_position vert%,x%-pas%,y%-pas% :' haut-gauche
           if dir%=8 then sprite_position vert%,x%,y%-pas% :' haut
           if dir%=9 then sprite_position vert%,x%+pas%,y%-pas% :' haut-droite
           VerifSiSpriteEnZoneInterdite(vert%) :' message ok$
           if ok$="N"
              ' SanteVert%=SanteVert%-1
              sprite_hide vert% : sprite_file_load vert%,"vert.bmp" : sprite_position vert%,x%,y% : pause vit2%*2
              sprite_file_load vert%,"vert35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
              pause vit2% : sprite_position vert%,x%,y%
              caption 7,"Force Vert "+str$(SanteVert%)
              exit_sub
           else
             ' vérifier si collision pour chaque case du dlist3
             if count(Dlist_Tri3%)<1
                FinDePartie()
             end_if
             for cible%=1 to count(Dlist_Tri3%)
                 Clear_Variables_EL(3) : a$=item_read$(Dlist_Tri3%,cible%) : EXPLODE("|",a$) : Incremente_Variables_EL(Dlist_tri%)
                 Num_Caz%=val(el$(1)) : Num_Sprite%=val(el$(2)) : v%=val(el$(3))
                 x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
                 Xa=px%(Num_Caz%) : Ya=py%(Num_Caz%)
                 if x%>(Xa-25) and x%<(Xa+25) and y%>(Ya-25) and y%<(Ya+25)
                    col$="O"
                    sprite_position vert%,Xa+10,Ya+10 : MangePion()
                    item_delete Dlist_Tri3%,cible% : Nb_Caz%=Nb_Caz%-1 : SanteVert%=SanteVert%+(v%*ForceVert%)
                    caption 7,"Force Vert "+str$(SanteVert%) : caption 8,"Nourriture "+str$(Nb_Caz%) :' pause vit%
                    exit_for
                 end_if
             next cible%
             if col$="O" then caption 7,"Force Vert "+str$(SanteVert%) : exit_sub
           end_if
           caption 7,"Force Vert "+str$(SanteVert%)
        IF SanteVert%>0
           sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
           sprite_file_load vert%,"vert35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
        ELSE
           sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
           sprite_file_load vert%,"vertR35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
        END_IF
  caption 7,"Force Vert "+str$(SanteVert%)
END_SUB

SUB MangePion()
   sprite_position Num_Sprite%,Xa+2,Ya+1 : pause vit2%
   sprite_position Num_Sprite%,Xa+4,Ya+2 : pause vit2%
   sprite_position Num_Sprite%,Xa+6,Ya+3 : pause vit2%
   sprite_position Num_Sprite%,Xa+8,Ya+4 : pause vit2%
   sprite_position Num_Sprite%,Xa+10,Ya+5 : pause vit2%
   sprite_position Num_Sprite%,Xa+12,Ya+6 : pause vit2%
   sprite_position Num_Sprite%,Xa+14,Ya+6 : pause vit2%
   sprite_position Num_Sprite%,Xa+16,Ya+6 : pause vit2%
   sprite_position Num_Sprite%,-40,-40
END_SUB

SUB MoveRouge()
'   le glouton rouge part chercher de la nourriture si sa santé est >1
    IF SanteRouge%>=0
       x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%)
       sprite_file_load rouge%,"rouge35.bmp" : sprite_position rouge%,x%,y%
     ' prendre une cible du Dlist_Tri3%
       if count(Dlist_Tri3%)<1
          FinDePartie()
       else
          if count(Dlist_Tri3%)>1
             if tour%=1
                 cible%=4
             else
                 cible%=0 : while cible%=0 : cible%=rnd(count(Dlist_Tri3%)) : end_while
             end_if
          else
             cible%=1
          end_if
       end_if
       Clear_Variables_EL(3) : a$=item_read$(Dlist_Tri3%,cible%) : EXPLODE("|",a$) : Incremente_Variables_EL(Dlist_tri%)
       Num_Caz%=val(el$(1)) : Num_Sprite%=val(el$(2)) : v%=val(el$(3))
     ' déplacement
       Nd=50:' nombre de déplacement autorisés
       Xd=sprite_x_position(rouge%) : Yd=sprite_y_position(rouge%) :' position actuelle du glouton rouge
       Xa=px%(Num_Caz%) : Ya=py%(Num_Caz%) : ' position ciblée
       for n%=1 to Nd
           SanteRouge%=SanteRouge%-1
           DeltaX = (Xa - Xd)/Nd : DeltaY = (Ya - Yd)/ Nd
           x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%): ' sauve dernière position
           sprite_position rouge%,Xd+int(n%*DeltaX),Yd+int(n% * DeltaY) : pause vit%
           VerifSiSpriteEnZoneInterdite(rouge%) :' message ok$
           if ok$="N"
              SanteRouge%=SanteRouge%-1
              pause int(vit2%/2) : sprite_position rouge%,x%,y% : exit_for
           else
              sprite_position rouge%,Xd+int(n%*DeltaX),Yd+int(n% * DeltaY)
              ' vérifier si cible atteinte en comparant x%,y% avec Xa,Ya (collision)
                x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%): ' sauve dernière position
               ' message str$(y%)+"/"+str$(ya)
                if x%>(Xa-17) and x%<(Xa+17) and y%>(Ya-17) and y%<(Ya+17)
                   sprite_position rouge%,Xa+15,Ya+5 : pause vit% : MangePion()
                   item_delete Dlist_Tri3%,cible% : Nb_Caz%=Nb_Caz%-1 : SanteRouge%=SanteRouge%+(v%*ForceRouge%)
                   caption 8,"Nourriture "+str$(Nb_Caz%) : pause int(vit2%/4)
                   exit_for
                end_if
           end_if
           caption 6,"Force Rouge "+str$(SanteRouge%)
           pause vit%
       next n%
      ' si le pion n'a pas bougé
        if x%=Xd and y%=Yd
           sprite_hide rouge% : sprite_file_load rouge%,"rouge.bmp" : sprite_position rouge%,x%,y% : pause vit2%*2
           sprite_file_load rouge%,"rouge35.bmp" : sprite_position rouge%,x%,y% : sprite_show rouge%
        end_if
    ELSE
      sprite_hide rouge% : x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%)
      sprite_file_load rouge%,"rougeR35.bmp" : sprite_position rouge%,x%,y% : sprite_show rouge%
      fintour$="O" : exit_sub
    END_IF
    if SanteRouge%<0
       sprite_hide rouge% : x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%)
       sprite_file_load rouge%,"rougeR35.bmp" : sprite_position rouge%,x%,y% : sprite_show rouge%
       fintour$="O" : exit_sub
    end_if
    if count(Dlist_Tri3%)<1 then FinDePartie()
    fintour$="O"
END_SUB

SUB Plateau()
    Liste_Aleatoire(111,160)
    clear Dlist_Tri3%
  for Num_Caz%=1 to Nb_Caz%
      Num_Sprite%=item_read$(Dlist_Tri2%,Num_Caz%) : sprite_position Num_Sprite%,px%(Num_Caz%),py%(Num_Caz%)
      if Num_Sprite%>110 and Num_Sprite%<121 then v%=1
      if Num_Sprite%>120 and Num_Sprite%<131 then v%=2
      if Num_Sprite%>130 and Num_Sprite%<141 then v%=3
      if Num_Sprite%>140 and Num_Sprite%<151 then v%=4
      if Num_Sprite%>150 then v%=5
      a$=str$(Num_Caz%)+"|"+str$(Num_Sprite%)+"|"+str$(v%) : item_add Dlist_Tri3%,a$
  next Num_Caz%
END_SUB

SUB Liste_Aleatoire(ch1%,ch2%)
    ' Bignono, modifier JC
    clear Dlist_Tri1% : clear Dlist_Tri2%
    dim_local i%
    for i% = ch1% to ch2% : item_add Dlist_Tri1%,str$(i%) : next i%
    while count(Dlist_Tri1%)>0
       i% = int(rnd(count(Dlist_Tri1%)))+1
       item_add Dlist_Tri2%,item_read$(Dlist_Tri1%,i%) : item_delete Dlist_Tri1%,i%
    end_while
END_SUB

SUB DefZoneInterdite()
  ' définition des zones interdites
    dim ok$,y1m%,y2m%,x1m%,x2m%,y1c%,y2c%,x1c%,x2c%
  ' zone maison
    y1m%=0 : y2m%=75 : x1m%=435 : x2m%=650
  ' zone champs fleurs
   y1c%=88 : y2c%=152 : x1c%=435 : x2c%=650
END_SUB

SUB Emplacements()
  ' emplacement des pions
    px%(1)=590 : py%(1)=180 : px%(2)=360 : py%(2)=250 : px%(3)=60 : py%(3)=160 : px%(4)=120 : py%(4)=100
    px%(5)=530 : py%(5)=280 : px%(6)=230 : py%(6)=200 : px%(7)=450 : py%(7)=350 : px%(8)=500 : py%(8)=500
    px%(9)=620 : py%(9)=644 : px%(10)=26 : py%(10)=356 : px%(11)=116 : py%(11)=178 : px%(12)=175 : py%(12)=378
    px%(13)=8 : py%(13)=600 : px%(14)=180 : py%(14)=180 : px%(15)=278 : py%(15)=288 : px%(16)=210 : py%(16)=315
    px%(17)=40 : py%(17)=400 : px%(18)=580 : py%(18)=484 : px%(19)=603 : py%(19)=533 : px%(20)=650 : py%(20)=650
    px%(21)=610 : py%(21)=455 : px%(22)=360 : py%(22)=168 : px%(23)=50 : py%(23)=580 : px%(24)=620 : py%(24)=600
    px%(25)=230 : py%(25)=652 : px%(26)=475 : py%(26)=375 : px%(27)=580 : py%(27)=580 : px%(28)=80 : py%(28)=644
    px%(29)=126 : py%(29)=456 : px%(30)=316 : py%(30)=178 : px%(31)=405 : py%(31)=378 : px%(32)=8 : py%(32)=60
    px%(33)=230 : py%(33)=380 : px%(34)=410 : py%(34)=0 : px%(35)=438 : py%(35)=438 : px%(36)=410 : py%(36)=515
    px%(37)=30 : py%(37)=470 : px%(38)=590 : py%(38)=354 : px%(39)=623 : py%(39)=503 : px%(40)=200 : py%(40)=50
    px%(41)=15 : py%(41)=15 : px%(42)=100 : py%(42)=260 : px%(43)=630 : py%(43)=280 : px%(44)=490 : py%(44)=200
    px%(45)=388 : py%(45)=320 : px%(46)=410 : py%(46)=565 : px%(47)=150 : py%(47)=540
    px%(48)=390 : py%(48)=75 : px%(49)=323 : py%(49)=403 : px%(50)=203 : py%(50)=423
END_SUB

SUB VerifSiSpriteEnZoneInterdite(NumSprite%)
    if sprite_x_position(NumSprite%)<2 or sprite_x_position(NumSprite%)>662
       ok$="N" : exit_sub
    end_if
    if sprite_y_position(NumSprite%)<0 or sprite_y_position(NumSprite%)>664
       ok$="N" : exit_sub
    end_if
    if sprite_x_position(NumSprite%)>x1m% and sprite_x_position(NumSprite%)<x2m% and sprite_y_position(NumSprite%)>y1m% and sprite_y_position(NumSprite%)<y2m%
       ok$="N" : exit_sub
    end_if
    if sprite_x_position(NumSprite%)>x1c% and sprite_x_position(NumSprite%)<x2c% and sprite_y_position(NumSprite%)>y1c% and sprite_y_position(NumSprite%)<y2c%
       ok$="N": exit_sub
    end_if
    ok$="OK"
END_SUB

SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
       message "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
       terminate
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 then DIM bandeau%
    IF VARIABLE("bord%")=0 then DIM bord%
    ' Calcul de bandeau% et bord%
    dim_local w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    picture 1 : full_space 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    delete 1
END_SUB

' -----------------------------
SUB EXPLODE(delimiter$,chaine$):' Nardo modifié JC
' Cette SUB décompose une chaine et inscrit chaque élément dans Dlist_tri%
' complètée par la SUB Incremente_Variables_EL(z%)
 clear Dlist_tri%
  WHILE INSTR(chaine$,delimiter$)<>0
     ITEM_ADD Dlist_tri%,LEFT$(chaine$,INSTR(chaine$,delimiter$)-1)
     chaine$=RIGHT$(chaine$,LEN(chaine$)-INSTR(chaine$,delimiter$))
  END_WHILE
 ITEM_ADD Dlist_tri%,chaine$
END_SUB
' -----
Sub Incremente_Variables_EL(z%)
' cette SUB récupère les variables du Dlist_tri% pour les intégrer dans la variable el$(?) à la bonne position
  dim_local ii%
 for ii%=1 to count(z%)
  if count(z%)=0 then return
  el$(ii%)=item_read$(z%,ii%)
 next ii%
End_Sub
' ---------------------------
Sub Clear_Variables_EL(nb_V%)
' remise à zéro ("") des variables el$(?)
 dim_local ii%
 for ii%=1 to nb_V%:el$(ii%)="":next ii%
End_Sub


A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5643
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Les Gloutons   Mer 27 Avr 2016 - 21:20

Je viens de remplacer Glouton.zip sur mon Webdev.

lancez Glouton2, les explications apparaissent dès le début.
Cette version à 10 niveaux est un peu plus difficile et fonctionne sans bug si vous l'ouvrez avec Panoramic V09-26, sinon il reste le problème Terminate à la fin.

Pour ceux qui ont déjà les images voici le code:  
Code:
' Jeu Les Gloutons Fatigués
Retourne_Dimension_Bandeau_Et_Bord() :' retourne bandeau%,bord%
' Variables
Application_title "Les Gloutons Affamés"
dim a$,col$,fintour$
dim n%,cible%,Num_Sprite%,Num_Caz%,Nb_Caz%,vie%,x%,y%,v%,niveau%,NBniveau%,passage%
dim vit%,vit2%,pas%,ForceRouge%,ForceVert%,tour%,DotationParTour%,ColorGlouton%
dim DeltaX,Xa,Xd,Nd,DeltaY,Ya,Yd,Nbd
Nb_Caz%=50 :' définition du nombre de cases ("pions-nourritures")
dim px%(Nb_Caz%),py%(Nb_Caz%)
dim el$(3)
' les règlages
vie%=50 : vit%=10 : vit2%=100
dim SanteRouge%,SanteVert% : SanteRouge%=vie% : SanteVert%=vie%
pas%=7:' vitesse de déplacement vert
Nbd=30 :' nombre de déplacement vert par tour
ForceRouge%=12 : ForceVert%=9 : DotationParTour%=5
NBniveau%=10 : niveau%=1

hide 0
width 0,890+bord%+bord% : height 0,700+bandeau%+bord%
top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
caption 0,"Bien manger c'est survivre !"+string$(10," ")+left$(time$,5)
dim Dlist_Tri1%,Dlist_Tri2%,Dlist_Tri3%,Dlist_Tri% : Dlist_Tri1%=1 : Dlist_Tri2%=2 : Dlist_Tri3%=3 : Dlist_Tri%=4
dlist 1 : dlist 2 : dlist 3 : dlist 4
picture 5 : full_space 5 : color 5,0,0,0
alpha 6 : top 6,20 : left 6,710 : color 6,0,0,0 : font_color 6,255,0,0
          font_bold 6 : font_size 6,14 : caption 6,"Force Rouge "+str$(SanteRouge%)
alpha 7 : top 7,650 : left 7,710 : color 7,0,0,0 : font_color 7,0,255,100
          font_bold 7 : font_size 7,14 : caption 7,"Force Vert "+str$(SanteVert%)
alpha 8 : top 8,350 : left 8,710 : color 8,0,0,0 : font_color 8,255,255,10
          font_bold 8 : font_size 8,14 : caption 8,"Nourriture "+str$(Nb_Caz%)
alpha 9 : top 9,300 : left 9,710 : color 9,0,0,0 : font_color 9,150,200,255
          font_bold 9 : font_size 9,14 : caption 9,"Niveau "+str$(niveau%)



Scene2d 100 : width 100,700 : height 100,height(0)-(bandeau%+bord%)
file_load 100,"fond.bmp"

DefZoneInterdite()

' création des sprite
for n%=1 to 10
    sprite 110+n% : sprite_file_load 110+n%,"grain1.bmp" : sprite_position 110+n%,-40,-40
next n%
for n%=1 to 10
    sprite 120+n% : sprite_file_load 120+n%,"grain2.bmp" : sprite_position 120+n%,-40,-40
next n%
for n%=1 to 10
    sprite 130+n% : sprite_file_load 130+n%,"grain3.bmp" : sprite_position 130+n%,-40,-40
next n%
for n%=1 to 10
    sprite 140+n% : sprite_file_load 140+n%,"grain4.bmp" : sprite_position 140+n%,-40,-40
next n%
for n%=1 to 10
    sprite 150+n% : sprite_file_load 150+n%,"grain5.bmp" : sprite_position 150+n%,-40,-40
next n%
' Les pièces à jouer
dim rouge% : rouge%=101 : sprite 101 : sprite_file_load 101,"rouge35.bmp" : sprite_position 101,520,75
dim vert% : vert%=102 : sprite 102 : sprite_file_load 102,"vert35.bmp" : sprite_position 102,2,664
Emplacements() : Plateau(): ' positionne les pions dans les emplacements de manière aléatoire
' démarrage
label MoveVert,fin
show 0
a$="                                                                                      Les Gloutons Affamés"+chr$(13)+chr$(13)
a$=a$+"Pour jouer votre glouton de couleur verte, utilisez les flèches de direction et/ou les touches 1,2,3,4,6,7,8,9 du pavé numérique."+chr$(13)+chr$(13)
a$=a$+"La partie se joue en dimanche, ou plutot en dix manches, à condition que vous soyez vainqueur à chaque manche."+chr$(13)
a$=a$+"À chaque nouvelle manche les gloutons gardent leurs positions et leurs forces."+chr$(13)+chr$(13)
a$=a$+"Le principe du jeu: Les gloutons doivent manger les pastilles pour garder la forme, mais ils dépensent des calories à chaque déplacement..."+chr$(13)+chr$(13)
a$=a$+"Quant un glouton mange une pastille: plus cette pastille est calorique (de 1 à 5) et plus le glouton reprend des forces."+chr$(13)
a$=a$+"Le glouton rouge (piloté par l'ordinateur) rejoue s'il mange une pastille rouge (5 ''calories'') et gagne un bonus de 50 ''calories'', mais pas le votre."+chr$(13)
a$=a$+"Si votre glouton (le vert) mange une pastille rouge pendant que le glouton vert dort, vous allez déclencher sa colère..."+chr$(13)
a$=a$+"Quand les forces des gloutons sont inférieures à zéro, il font la sieste pour récupérer, pendant autant de tour que nécessaire."+chr$(13)+chr$(13)
a$=a$+"Attention: plus on avance dans la partie, plus le glouton rouge est fort car les pastilles lui font de plus en plus d'effet."

message a$
pause 1000 : fintour$="" : ColorGlouton%=rouge% : TourRouge()
END

rem ============================================================================
SUB FinDePartie()
    caption 0,"Bien manger c'est survivre !"+string$(10," ")+time$
'    message "il n'y a plus rien à manger! "
    IF niveau%>=10
       if SanteVert%>SanteRouge% then message "Bravo vous avez gagné !" : terminate
       if SanteVert%=SanteRouge% then message "Match Nul !" : terminate
       if SanteVert%<SanteRouge% then message "Perdu !" : terminate
    END_IF
    IF niveau%<NBniveau% and SanteVert%>SanteRouge%
'       message "Comme vous avez gagné cette manche vous pouvez passer au niveau supérieur"
      if message_confirmation_yes_no("Voulez-vous passer au niveau supérieur (Les forces et positions restent inchangées)")=1
         niveau%=niveau%+1 : Niveau(niveau%)
      else
         terminate
      end_if
    ELSE
      terminate
    END_IF
END_SUB

SUB Niveau(niv%)
    if niv%>NBniveau% then message " Pas de niveau supérieur " : terminate
    caption 9,"Niveau "+str$(niveau%)
    if niv%=2
       vie%=50 : vit%=10 : vit2%=100
       Nbd=25 : ForceRouge%=14 : ForceVert%=8 : DotationParTour%=5
    end_if
    if niv%=3
       vie%=40 : vit%=5 : vit2%=50
       Nbd=25 : ForceRouge%=20 : ForceVert%=7 : DotationParTour%=5
    end_if
    if niv%=4
       vie%=50 : vit%=5 : vit2%=50
       Nbd=27 : ForceRouge%=17 : ForceVert%=6 : DotationParTour%=5
    end_if
    if niv%=5
       vie%=50 : vit%=5 : vit2%=50
       Nbd=25 : ForceRouge%=18 : ForceVert%=5 : DotationParTour%=5
    end_if
    if niv%=6
       vie%=50 : vit%=1 : vit2%=25
       Nbd=25 : ForceRouge%=18 : ForceVert%=5 : DotationParTour%=5
    end_if
    if niv%=7
       vie%=50 : vit%=1 : vit2%=10
       Nbd=24 : ForceRouge%=18 : ForceVert%=6 : DotationParTour%=5
    end_if
    if niv%=8
       vie%=50 : vit%=1 : vit2%=10
       Nbd=23 : ForceRouge%=18 : ForceVert%=7 : DotationParTour%=5
    end_if
    if niv%=9
       vie%=50 : vit%=1 : vit2%=10
       Nbd=22 : ForceRouge%=18 : ForceVert%=9 : DotationParTour%=5
    end_if
    if niv%=10
       vie%=50 : vit%=1 : vit2%=10
       Nbd=30 : ForceRouge%=10 : ForceVert%=10 : DotationParTour%=5
    end_if
    col$="" : Nb_Caz%=50 : Plateau()
    caption 6,"Force Rouge "+str$(SanteRouge%)
    caption 7,"Force Vert "+str$(SanteVert%)
    caption 8,"Nourriture "+str$(Nb_Caz%)
    pause 1000 : fintour$="" : TourRouge()
END_SUB

SUB TourRouge()
  caption 0,"Bien manger c'est survivre !"+string$(10," ")+left$(time$,5)
  OFF_KEY_DOWN 0
  if count(Dlist_Tri3%)<1 then FinDePartie()
  tour%=tour%+1 : SanteRouge%=SanteRouge%+DotationParTour%
  caption 6,"Force Rouge "+str$(SanteRouge%)
  fintour$="" : ColorGlouton%=rouge% : MoveRouge()
  while v%=5 and ColorGlouton%=rouge%
     sprite_file_load rouge%,"rouge.bmp" : sprite_position rouge%,x%,y% : pause vit2%*2
     sprite_file_load rouge%,"rouge35.bmp" : sprite_position rouge%,x%,y% : pause vit2%*2
     SanteRouge%=SanteRouge%+50
     sprite_file_load rouge%,"rouge.bmp" : sprite_position rouge%,x%,y% : pause vit2%*2
     sprite_file_load rouge%,"rouge35.bmp" : sprite_position rouge%,x%,y%
     fintour$="" : ColorGlouton%=rouge% : MoveRouge()
  end_while
  caption 6,"Force Rouge "+str$(SanteRouge%)
  Suite()
END_SUB

SUB Suite()
  ColorGlouton%=vert% : fintour$="": tour%=tour%+1 : SanteVert%=SanteVert%+DotationParTour%
  caption 7,"Force Vert "+str$(SanteVert%)
  if SanteVert%<1
     TourRouge()
  else
     passage%=0 : TourVert()
  end_if
END_SUB

SUB TourVert()
    caption 0,"Bien manger c'est survivre !"+string$(10," ")+left$(time$,5)
    if count(Dlist_Tri3%)<1 then FinDePartie()
    ColorGlouton%=vert%
    IF SanteVert%>0
       sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
       sprite_file_load vert%,"vert35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
    ELSE
       sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
       sprite_file_load vert%,"vertR35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
    END_IF
    ON_KEY_DOWN 0,MoveVert
END_SUB

MoveVert:
   if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(8) : ' 8 haut
   if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then move(2)  : ' 2 Bas
   if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then move(4) : ' 4 gauche
   if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then move(6) : ' 6 droite
   if KEY_DOWN_CODE = 97 then move(1)                        : ' 1 Bas-gauche
   if KEY_DOWN_CODE = 99 then move(3)                        : ' 3 Bas-droite
   if KEY_DOWN_CODE = 103 then move(7)                       : ' 7 haut-gauche
   if KEY_DOWN_CODE = 105 then move(9)                       : ' 9 haut-droite
   if KEY_DOWN_CODE = 27 then gosub fin                      : ' Echap
   if col$="O" then col$="" : TourRouge()
   if SanteVert%<1 then SanteVert%=SanteVert%-1 : TourRouge()
   if passage%>=Nbd
      TourRouge()
   else
      TourVert()
   end_if
RETURN

fin:
   OFF_KEY_DOWN 0 : message "à bientôt!" : end
RETURN

SUB move(dir%)
    passage%=passage%+1
    if count(Dlist_Tri3%)<1 then FinDePartie()
    OFF_KEY_DOWN 0
    if SanteVert%<1 then caption 7,"Force Vert "+str$(SanteVert%) : exit_sub
    col$="" : Xd=sprite_x_position(vert%) : Yd=sprite_y_position(vert%)
           SanteVert%=SanteVert%-1
           x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%): ' sauve dernière position
           if dir%=1 then sprite_position vert%,x%-pas%,y%+pas% :' bas-gauche
           if dir%=2 then sprite_position vert%,x%,y%+pas% :' bas
           if dir%=3 then sprite_position vert%,x%+pas%,y%+pas% :' bas-droite
           if dir%=4 then sprite_position vert%,x%-pas%,y% :' gauche
           if dir%=6 then sprite_position vert%,x%+pas%,y% :' droite
           if dir%=7 then sprite_position vert%,x%-pas%,y%-pas% :' haut-gauche
           if dir%=8 then sprite_position vert%,x%,y%-pas% :' haut
           if dir%=9 then sprite_position vert%,x%+pas%,y%-pas% :' haut-droite
           VerifSiSpriteEnZoneInterdite(vert%) :' message ok$
           sprite_show vert%
           if ok$="N"
              ' SanteVert%=SanteVert%-1
              sprite_hide vert% : sprite_file_load vert%,"vert.bmp" : sprite_position vert%,x%,y% : pause vit2%*2
              sprite_file_load vert%,"vert35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
              pause vit2% : sprite_position vert%,x%,y%
              caption 7,"Force Vert "+str$(SanteVert%)
              exit_sub
           else
             ' vérifier si collision pour chaque case du dlist3
             if count(Dlist_Tri3%)<1
                FinDePartie()
             end_if
             for cible%=1 to count(Dlist_Tri3%)
                 Clear_Variables_EL(3) : a$=item_read$(Dlist_Tri3%,cible%) : EXPLODE("|",a$) : Incremente_Variables_EL(Dlist_tri%)
                 Num_Caz%=val(el$(1)) : Num_Sprite%=val(el$(2)) : v%=val(el$(3))
                 x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
                 Xa=px%(Num_Caz%) : Ya=py%(Num_Caz%)
                 if x%>(Xa-25) and x%<(Xa+25) and y%>(Ya-25) and y%<(Ya+25)
                    col$="O"
                    sprite_position vert%,Xa+10,Ya+10 : MangePion()
                    item_delete Dlist_Tri3%,cible% : Nb_Caz%=Nb_Caz%-1 : SanteVert%=SanteVert%+(v%*ForceVert%)
                    caption 7,"Force Vert "+str$(SanteVert%) : caption 8,"Nourriture "+str$(Nb_Caz%) :' pause vit%
                    exit_for
                 end_if
             next cible%
             if col$="O" then caption 7,"Force Vert "+str$(SanteVert%) : exit_sub
           end_if
           caption 7,"Force Vert "+str$(SanteVert%)
        IF SanteVert%>0
           sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
           sprite_file_load vert%,"vert35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
        ELSE
           sprite_hide vert% : x%=sprite_x_position(vert%) : y%=sprite_y_position(vert%)
           sprite_file_load vert%,"vertR35.bmp" : sprite_position vert%,x%,y% : sprite_show vert%
        END_IF
  caption 7,"Force Vert "+str$(SanteVert%)
END_SUB

SUB MangePion()
   sprite_position Num_Sprite%,Xa+2,Ya+1 : pause vit2%
   sprite_position Num_Sprite%,Xa+4,Ya+2 : pause vit2%
   sprite_position Num_Sprite%,Xa+6,Ya+3 : pause vit2%
   sprite_position Num_Sprite%,Xa+8,Ya+4 : pause vit2%
   sprite_position Num_Sprite%,Xa+10,Ya+5 : pause vit2%
   sprite_position Num_Sprite%,Xa+12,Ya+6 : pause vit2%
   sprite_position Num_Sprite%,Xa+14,Ya+6 : pause vit2%
   sprite_position Num_Sprite%,Xa+16,Ya+6 : pause vit2%
   sprite_position Num_Sprite%,-40,-40
END_SUB

SUB MoveRouge()
'   le glouton rouge part chercher de la nourriture si sa santé est >1
    IF SanteRouge%>=0
       x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%)
       sprite_file_load rouge%,"rouge35.bmp" : sprite_position rouge%,x%,y%
     ' prendre une cible du Dlist_Tri3%
       if count(Dlist_Tri3%)<1
          FinDePartie()
       else
          if count(Dlist_Tri3%)>1
             if tour%=1
                 cible%=4
             else
                 cible%=0 : while cible%=0 : cible%=rnd(count(Dlist_Tri3%)) : end_while
             end_if
          else
             cible%=1
          end_if
       end_if
       Clear_Variables_EL(3) : a$=item_read$(Dlist_Tri3%,cible%) : EXPLODE("|",a$) : Incremente_Variables_EL(Dlist_tri%)
       Num_Caz%=val(el$(1)) : Num_Sprite%=val(el$(2)) : v%=val(el$(3))
     ' déplacement
       Nd=50:' nombre de déplacement autorisés
       Xd=sprite_x_position(rouge%) : Yd=sprite_y_position(rouge%) :' position actuelle du glouton rouge
       Xa=px%(Num_Caz%) : Ya=py%(Num_Caz%) : ' position ciblée
       for n%=1 to Nd
           SanteRouge%=SanteRouge%-1
           DeltaX = (Xa - Xd)/Nd : DeltaY = (Ya - Yd)/ Nd
           x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%): ' sauve dernière position
           sprite_position rouge%,Xd+int(n%*DeltaX),Yd+int(n% * DeltaY) : pause vit%
           VerifSiSpriteEnZoneInterdite(rouge%) :' message ok$
           if ok$="N"
              SanteRouge%=SanteRouge%-1
              pause int(vit2%/2) : sprite_position rouge%,x%,y% : exit_for
           else
              sprite_position rouge%,Xd+int(n%*DeltaX),Yd+int(n% * DeltaY)
              ' vérifier si cible atteinte en comparant x%,y% avec Xa,Ya (collision)
                x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%): ' sauve dernière position
               ' message str$(y%)+"/"+str$(ya)
                if x%>(Xa-17) and x%<(Xa+17) and y%>(Ya-17) and y%<(Ya+17)
                   sprite_position rouge%,Xa+15,Ya+5 : pause vit% : MangePion()
                   item_delete Dlist_Tri3%,cible% : Nb_Caz%=Nb_Caz%-1 : SanteRouge%=SanteRouge%+(v%*ForceRouge%)
                   caption 8,"Nourriture "+str$(Nb_Caz%) : pause int(vit2%/4)
                   exit_for
                end_if
           end_if
           caption 6,"Force Rouge "+str$(SanteRouge%)
           pause vit%
       next n%
      ' si le pion n'a pas bougé
        if x%=Xd and y%=Yd
           sprite_hide rouge% : sprite_file_load rouge%,"rouge.bmp" : sprite_position rouge%,x%,y% : pause vit2%*2
           sprite_file_load rouge%,"rouge35.bmp" : sprite_position rouge%,x%,y% : sprite_show rouge%
        end_if
    ELSE
      sprite_hide rouge% : x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%)
      sprite_file_load rouge%,"rougeR35.bmp" : sprite_position rouge%,x%,y% : sprite_show rouge%
      fintour$="O" : exit_sub
    END_IF
    if SanteRouge%<0
       sprite_hide rouge% : x%=sprite_x_position(rouge%) : y%=sprite_y_position(rouge%)
       sprite_file_load rouge%,"rougeR35.bmp" : sprite_position rouge%,x%,y% : sprite_show rouge%
       fintour$="O" : exit_sub
    end_if
    if count(Dlist_Tri3%)<1 then FinDePartie()
    fintour$="O"
END_SUB

SUB Plateau()
    Liste_Aleatoire(111,160)
    clear Dlist_Tri3%
  for Num_Caz%=1 to Nb_Caz%
      Num_Sprite%=item_read$(Dlist_Tri2%,Num_Caz%) : sprite_position Num_Sprite%,px%(Num_Caz%),py%(Num_Caz%)
      if Num_Sprite%>110 and Num_Sprite%<121 then v%=1
      if Num_Sprite%>120 and Num_Sprite%<131 then v%=2
      if Num_Sprite%>130 and Num_Sprite%<141 then v%=3
      if Num_Sprite%>140 and Num_Sprite%<151 then v%=4
      if Num_Sprite%>150 then v%=5
      a$=str$(Num_Caz%)+"|"+str$(Num_Sprite%)+"|"+str$(v%) : item_add Dlist_Tri3%,a$
  next Num_Caz%
END_SUB

SUB Liste_Aleatoire(ch1%,ch2%)
    ' Bignono, modifier JC
    clear Dlist_Tri1% : clear Dlist_Tri2%
    dim_local i%
    for i% = ch1% to ch2% : item_add Dlist_Tri1%,str$(i%) : next i%
    while count(Dlist_Tri1%)>0
       i% = int(rnd(count(Dlist_Tri1%)))+1
       item_add Dlist_Tri2%,item_read$(Dlist_Tri1%,i%) : item_delete Dlist_Tri1%,i%
    end_while
END_SUB

SUB DefZoneInterdite()
  ' définition des zones interdites
    dim ok$,y1m%,y2m%,x1m%,x2m%,y1c%,y2c%,x1c%,x2c%
  ' zone maison
    y1m%=0 : y2m%=75 : x1m%=435 : x2m%=650
  ' zone champs fleurs
   y1c%=88 : y2c%=152 : x1c%=435 : x2c%=650
END_SUB

SUB Emplacements()
  ' emplacement des pions
    px%(1)=590 : py%(1)=180 : px%(2)=360 : py%(2)=250 : px%(3)=60 : py%(3)=160 : px%(4)=120 : py%(4)=100
    px%(5)=530 : py%(5)=280 : px%(6)=230 : py%(6)=200 : px%(7)=450 : py%(7)=350 : px%(8)=500 : py%(8)=500
    px%(9)=620 : py%(9)=644 : px%(10)=26 : py%(10)=356 : px%(11)=116 : py%(11)=178 : px%(12)=175 : py%(12)=378
    px%(13)=8 : py%(13)=600 : px%(14)=180 : py%(14)=180 : px%(15)=278 : py%(15)=288 : px%(16)=210 : py%(16)=315
    px%(17)=40 : py%(17)=400 : px%(18)=580 : py%(18)=484 : px%(19)=603 : py%(19)=533 : px%(20)=650 : py%(20)=650
    px%(21)=610 : py%(21)=455 : px%(22)=360 : py%(22)=168 : px%(23)=50 : py%(23)=580 : px%(24)=620 : py%(24)=600
    px%(25)=230 : py%(25)=652 : px%(26)=475 : py%(26)=375 : px%(27)=580 : py%(27)=580 : px%(28)=80 : py%(28)=644
    px%(29)=126 : py%(29)=456 : px%(30)=316 : py%(30)=178 : px%(31)=405 : py%(31)=378 : px%(32)=8 : py%(32)=60
    px%(33)=230 : py%(33)=380 : px%(34)=410 : py%(34)=0 : px%(35)=438 : py%(35)=438 : px%(36)=410 : py%(36)=515
    px%(37)=30 : py%(37)=470 : px%(38)=590 : py%(38)=354 : px%(39)=623 : py%(39)=503 : px%(40)=200 : py%(40)=50
    px%(41)=15 : py%(41)=15 : px%(42)=100 : py%(42)=260 : px%(43)=630 : py%(43)=280 : px%(44)=490 : py%(44)=200
    px%(45)=388 : py%(45)=320 : px%(46)=410 : py%(46)=565 : px%(47)=150 : py%(47)=540
    px%(48)=390 : py%(48)=75 : px%(49)=323 : py%(49)=403 : px%(50)=203 : py%(50)=423
END_SUB

SUB VerifSiSpriteEnZoneInterdite(NumSprite%)
    if sprite_x_position(NumSprite%)<2 or sprite_x_position(NumSprite%)>662
       ok$="N" : exit_sub
    end_if
    if sprite_y_position(NumSprite%)<0 or sprite_y_position(NumSprite%)>664
       ok$="N" : exit_sub
    end_if
    if sprite_x_position(NumSprite%)>x1m% and sprite_x_position(NumSprite%)<x2m% and sprite_y_position(NumSprite%)>y1m% and sprite_y_position(NumSprite%)<y2m%
       ok$="N" : exit_sub
    end_if
    if sprite_x_position(NumSprite%)>x1c% and sprite_x_position(NumSprite%)<x2c% and sprite_y_position(NumSprite%)>y1c% and sprite_y_position(NumSprite%)<y2c%
       ok$="N": exit_sub
    end_if
    ok$="OK"
END_SUB

SUB Retourne_Dimension_Bandeau_Et_Bord()
    ' controle de la position de la procédure dans le programme
    IF NUMBER_OBJECTS>0
       message "La SUB 'Retourne_Dimension_Bandeau_Et_Bord' doit être placée avant la création du premier objet !"
       terminate
    END_IF
    ' création des VARIABLES GLOBALES
    IF VARIABLE("bandeau%")=0 then DIM bandeau%
    IF VARIABLE("bord%")=0 then DIM bord%
    ' Calcul de bandeau% et bord%
    dim_local w0%,h0%,w1%,h1%,w2%,h2%
    w0%=WIDTH(0) : h0%=HEIGHT(0)
    picture 1 : full_space 1 : w1%=WIDTH(1) : h1%=HEIGHT(1)
    w2%=w0%-w1% : h2%=h0%-h1% : bandeau%=h2%-(w2%/2) : bord%=w2%/2
    ' Suppression du Picture devenu inutile
    delete 1
END_SUB

' -----------------------------
SUB EXPLODE(delimiter$,chaine$):' Nardo modifié JC
' Cette SUB décompose une chaine et inscrit chaque élément dans Dlist_tri%
' complètée par la SUB Incremente_Variables_EL(z%)
 clear Dlist_tri%
  WHILE INSTR(chaine$,delimiter$)<>0
     ITEM_ADD Dlist_tri%,LEFT$(chaine$,INSTR(chaine$,delimiter$)-1)
     chaine$=RIGHT$(chaine$,LEN(chaine$)-INSTR(chaine$,delimiter$))
  END_WHILE
 ITEM_ADD Dlist_tri%,chaine$
END_SUB
' -----
Sub Incremente_Variables_EL(z%)
' cette SUB récupère les variables du Dlist_tri% pour les intégrer dans la variable el$(?) à la bonne position
  dim_local ii%
 for ii%=1 to count(z%)
  if count(z%)=0 then return
  el$(ii%)=item_read$(z%,ii%)
 next ii%
End_Sub
' ---------------------------
Sub Clear_Variables_EL(nb_V%)
' remise à zéro ("") des variables el$(?)
 dim_local ii%
 for ii%=1 to nb_V%:el$(ii%)="":next ii%
End_Sub

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Les Gloutons   

Revenir en haut Aller en bas
 
Les Gloutons
Revenir en haut 
Page 1 sur 1

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: