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 | 
 

 Vorace - une autre adaptation depuis l'Hector

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

avatar

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

MessageSujet: Vorace - une autre adaptation depuis l'Hector   Ven 9 Mar 2012 - 4:05

Bon, j'ai plus modifié là, mais ça reprend l'esprit du Vorace de l'Hector, mais bon, j'ai mis un peu plus de Panoramic dans la façon de gérer d'autant qu'initialement sur Hector, je joueur contrôlait le personnage au joystick et que dans le prog, on contrôle au clavier.

Amusez-vous bien (je n'ai pas implémenté le temps dans cette version initiale, on verra plus tard si besoin ...)

Code:
' Vorace version converti en Panoramic par Jean-Charles
' Version original en Basic pour l'Hector ecrit par Eddy DUTERTRE

Label Charge_Niveau, Boucle, Relance, Fin, Touche, Collision, Change_dir
Label Test_dirM, relance2

Dim L,N, A$  : '  Compteur et variables diverses temporaires
Dim M        : '  Competeur de pastilles
Dim Nb_Cases_ligne, Nb_Lignes : Nb_Cases_ligne = 32 : Nb_Lignes = 20
Dim X,Y      : '  Coordonnées du joueur
Dim X1,Y1,D1 : '  Ancienne position du joueur pour effacer
Dim Xm,Ym,Vm : '  Coordonnées du monstre et vitesse de deplacement (+Vm est ganrd moins il va vite)
Dim S        : '  Direction du monstre
Dim Depl    : '  Deplace monstre si Depl = 1
Dim Etat(Nb_Lignes,Nb_Cases_ligne)
Dim Temps, Score, touche_enfoncee, Pause
Dim LF$, Message$ : LF$=CHR$(10)

Height 0, (Nb_Lignes+13)*10 : Width 0, (Nb_Cases_ligne + 4)*10 : Caption 0, "** Vorace **    Version Panoramic par Jean-Charles"
font_size 0, 7 :  font_name 0, "Wingdings" : color 0,255,255,255
Picture 1

 DATA 11111111111111111111111111111111  : ' L1
 DATA 10100000010000011000000100000001  : ' L2
 DATA 10101111010111110010101110111111  : ' L3
 DATA 10001000000100010010100010100001
 DATA 11110000000111000110001010100101
 DATA 10000111010101111100001010110101
 DATA 10111100010000110001111010100101
 DATA 10000101111110000111100010101101
 DATA 11110100010011111101001010101001
 DATA 10000111010110010001011010101011
 DATA 10111100010000000001001000000011
 DATA 10000101111111110111111111011111
 DATA 11110100011000110000000001010001
 DATA 10000111000010000111111111010001
 DATA 10111111111111111111011111010001
 DATA 10000000000000000000000000010001
 DATA 10100000010000011000000100000001
 DATA 10101111010111110010101110111111
 DATA 10001000000100000010100010000001
 DATA 11111111111111111111111111111111  : ' L20

Timer 10: Timer_interval 10,80 : Timer_off 10 : On_Timer 10, Boucle
Gosub Charge_Niveau
Score = 0

Relance2:
X  = 2  : Y = 2    : D1=0  : ' Position intiale du joueur
Xm = 12  : Ym = 16  : VM=4  : ' Position initiale du Vorace
Depl = 0 : S=1 : N=0

on_key_down 0,touche
timer_on 10
End

Relance:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+9)*10 : Width 1, (Nb_Cases_ligne+2)*10
 For L = 1 TO Nb_Lignes
  For N = 1 TO Nb_Cases_ligne
    If Etat(L,N)<>2
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*10,(L+0.5)*10,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
  Print
 Next L
Show 1
goto relance2
return


Change_dir:
  WHILE DEPL = 0
    S= INT(RND(4))+1
    Gosub Test_dirM
  END_WHILE
return

Test_dirM:
    IF S=1 and XM < Nb_Cases_ligne-2
      IF Etat(YM,XM+1)<2 Then XM=XM+1:DEPL=1
    END_IF
    IF S=2 and YM < Nb_lignes-2
      IF Etat(YM+1,XM)<2 Then YM=YM+1:DEPL=1
    END_IF
    IF S=3 and XM > 2
      IF Etat(YM,XM-1)<2 Then XM=XM-1:DEPL=1
    END_IF
    IF S=4 and YM > 2
      IF Etat(YM-1,XM)<2 Then YM=YM-1:DEPL=1
    END_IF
Return

Boucle:
  If pause = 1 then return
  timer_off 10
  2D_Fill_color 255,255,255 : 2D_Pen_Color 255,255,255
  If D1= 1
      2D_Rectangle X1*10,Y1*10,(X1+1)*10, (Y1+1)*10
      D1 = 0
  End_If
  print_locate X*10,Y*10 : Print chr$(74)  : ' Affiche le joueur
  N = N+1
  If N = VM
    N=0
    2D_Rectangle XM*10,YM*10,(XM+1)*10, (YM+1)*10
    IF Etat (YM,XM) = 1
      2D_Pen_Color 0,200,200
      2D_Fill_Color 0,200,200
      2D_Circle (XM+0.5)*10,(YM+0.5)*10,3
    END_IF
    L = RND(10)
    If L > 6
      gosub Change_dir
    Else
      gosub Test_dirM
      if depl=0 Then gosub Change_dir
    End_If
  End_If
  If Depl = 1 Then print_locate Xm*10,Ym*10 : Print chr$(123): Depl=0 : ' Affiche le monstre
  If X=XM and Y=YM then gosub Collision
  If M = 0 Then Message "Niveau vidé, appuyez pour en faire un autre...": goto relance
  timer_on 10
Return

Touche:
touche_enfoncee = key_down_code
If touche_enfoncee = 37
' Gauche
  If X > 2
    If Etat(Y,X-1)<2 Then X1=X : Y1=Y : D1=1 : X=X-1
  End_If
End_If

If touche_enfoncee = 39
' Droite
  If X < (Nb_Cases_ligne-1)
    If Etat(Y,X+1)<2 Then X1=X : Y1=Y : D1=1 : X=X+1
  End_If
End_If

If touche_enfoncee = 38
' Haut
  If Y > 2
    If Etat(Y-1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y-1
  End_If
End_If

If touche_enfoncee = 40
' Bas
  If Y < (Nb_lignes-1)
    If Etat(Y+1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y+1
  End_If
End_If

If touche_enfoncee = 88 or touche_enfoncee = 27 Then goto FIN

If touche_enfoncee =  80
 If Pause = 0 then Pause = 1 :else: Pause = 0
End_if

If X=XM and Y=YM then gosub Collision

If Etat(Y,X) = 1 Then Score=Score +10 : Etat(Y,X) = 0 : M=M-1 : Caption 13, "Score : " + RIGHT$("00000"+STR$(Score),5)

Return

Collision:
  Goto fin
Return

Charge_Niveau:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+9)*10 : Width 1, (Nb_Cases_ligne+2)*10
 For L = 1 TO Nb_Lignes
  Read A$
  For N = 1 TO Nb_Cases_ligne
    If Mid$(A$,N,1)="1"
        2D_Pen_Color 200,200,0 : 2D_Fill_Color 200,200,0
        2D_Rectangle N*10+1,L*10+1,(N+1)*10-1, (L+1)*10-1
        Etat(L,N)=2
    Else
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*10,(L+0.5)*10,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
  Print
 Next L
 2D_Fill_color 255,255,255 : 2D_Pen_Color 255,0,0 : 2D_Rectangle 10, (Nb_Lignes+2)*10, (Nb_Cases_ligne+2)*10- 10, (Nb_Lignes+8)*10
 Alpha 11 : Left 11,210 : Top 11, (Nb_Lignes+3)*10 : font_name 11, "Courier" : Caption 11, "Temps : 00000"
 Alpha 12 : Left 12,20  : Top 12, (Nb_Lignes+5.5)*10 : font_name 12, "Courier" : Height 12, 18: Font_size 12,13 : Font_color 12,200,200,0
 Caption 12, "- VORACE -  (Version Panoramique)"
 Alpha 13 : Left 13,20  : Top 13, (Nb_Lignes+3)*10 : font_name 13, "Courier" : Caption 13, "Score : 00000"
Show 1
Return

Fin:
 timer_off 10
 Message$ =  "*********************" +LF$+ "*  Partie terminée  *" +LF$+ "*********************"
 Message$ = Message$ +LF$ + LF$ + "Score: "+ STR$ (Score)
 Message$ = Message$ +LF$ + LF$ + "Rejouer ?"
 if Message_confirmation_yes_no (Message$) = 1 then Score = 0 : goto Relance
terminate
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
lodchjo

avatar

Nombre de messages : 162
Age : 46
Localisation : Anvers
Date d'inscription : 26/12/2011

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Ven 9 Mar 2012 - 10:55

Très bien, Jicehel, joli adaptation!! Marche très bien, je ai fini le niveau 1 sans problème. tongue
Juste une petite remarque: quand on appuie plus longtemps sur une flêche (p.ex. flêche droite) pour le faire avancer dans un couloir un peu plus longue, le petit Vorace ne prends plus toutes les pastilles et il faut revenir en arrière pour les pastilles 'oubliés'. Wink
Bonne journée!
Lode
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lode.weebly.com
Jicehel

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Ven 9 Mar 2012 - 11:56

Exacte lodcho, il va falloir que je mette un petit flag pour m'assurer que le déplacement à bien été complétement traité (bloquer le déplacement jusqu'à ce que la boucle du timer ait été au moins traité une fois, je fais ça ce soir, ça devrait prendre 1 mn Smile )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1108
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 10 Mar 2012 - 1:04

Bonsoir à toi Jicehel Very Happy
C'est sympa de voir revivre les vieux code Hector! Un seul inconvénient, C'est un peu petit la fenêtre et même avec mes lunettes, je vois mal. Et puis comme disait Lode, le "vorace" ne mange pas toutes les pastilles quand on reste appuyé sur une flèche de déplacement. Sinon, c'est parfait comme adaptation, rien à dire!
A + Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 10 Mar 2012 - 1:21

Bon ben dans ce cas, une version qui mange toutes les pastille et à la taille reglable ... on s'éloigne de l'original, mais bon, on garde l'esprit je pense Smile

Code:
' Vorace version converti en Panoramic par Jean-Charles
' Version original en Basic pour l'Hector ecrit par Eddy DUTERTRE

Label Charge_Niveau, Boucle, Relance, Fin, Touche, Collision, Change_dir
Label Test_dirM, relance2

Dim L,N, A$  : '  Compteur et variables diverses temporaires
Dim M        : '  Competeur de pastilles
Dim Nb_Cases_ligne, Nb_Lignes : Nb_Cases_ligne = 32 : Nb_Lignes = 20
Dim X,Y      : '  Coordonnées du joueur
Dim X1,Y1,D1 : '  Ancienne position du joueur pour effacer
Dim Xm,Ym,Vm : '  Coordonnées du monstre et vitesse de deplacement (+Vm est ganrd moins il va vite)
Dim S        : '  Direction du monstre
Dim Depl    : '  Deplace monstre si Depl = 1
Dim Etat(Nb_Lignes,Nb_Cases_ligne), traite
Dim Temps, Score, touche_enfoncee, Pause
Dim LF$, Message$ : LF$=CHR$(10)
Dim taille_case : taille_case=22  : ' à régler entre 10 et 22

Height 0, (Nb_Lignes+13)*taille_case : Width 0, (Nb_Cases_ligne + 4)*taille_case : Caption 0, "** Vorace **    Version Panoramic par Jean-Charles"
font_size 0, taille_case - 0.3*taille_case :  font_name 0, "Wingdings" : color 0,255,255,255
Picture 1

 DATA 11111111111111111111111111111111  : ' L1
 DATA 10100000010000011000000100000001  : ' L2
 DATA 10101111010111110010101110111111  : ' L3
 DATA 10001000000100010010100010100001
 DATA 11110000000111000110001010100101
 DATA 10000111010101111100001010110101
 DATA 10111100010000110001111010100101
 DATA 10000101111110000111100010101101
 DATA 11110100010011111101001010101001
 DATA 10000111010110010001011010101011
 DATA 10111100010000000001001000000011
 DATA 10000101111111110111111111011111
 DATA 11110100011000110000000001010001
 DATA 10000111000010000111111111010001
 DATA 10111111111111111111011111010001
 DATA 10000000000000000000000000010001
 DATA 10100000010000011000000100000001
 DATA 10101111010111110010101110111111
 DATA 10001000000100000010100010000001
 DATA 11111111111111111111111111111111  : ' L20

Timer 10: Timer_interval 10,40 : Timer_off 10 : On_Timer 10, Boucle
Gosub Charge_Niveau
Score = 0

Relance2:
X  = 2  : Y = 2    : D1=0  : ' Position intiale du joueur
Xm = 12  : Ym = 16  : VM=4  : ' Position initiale du Vorace
Depl = 0 : S=1 : N=0 : traite = 0

on_key_down 0,touche
timer_on 10
End

Relance:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+9)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  For N = 1 TO Nb_Cases_ligne
    If Etat(L,N)<>2
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
  Print
 Next L
Show 1
goto relance2
return


Change_dir:
  FOR DEPL = 1000 TO 1 STEP -1
    S= INT(RND(4))+1
    IF S=1 and XM < Nb_Cases_ligne-2
      IF Etat(YM,XM+1)<2 Then XM=XM+1:DEPL=1
    END_IF
    IF S=2 and YM < Nb_lignes-2
      IF Etat(YM+1,XM)<2 Then YM=YM+1:DEPL=1
    END_IF
    IF S=3 and XM > 2
      IF Etat(YM,XM-1)<2 Then XM=XM-1:DEPL=1
    END_IF
    IF S=4 and YM > 2
      IF Etat(YM-1,XM)<2 Then YM=YM-1:DEPL=1
    END_IF
  NEXT DEPL
return

Test_dirM:
    IF S=1 and XM < Nb_Cases_ligne-2
      IF Etat(YM,XM+1)<2 Then XM=XM+1:DEPL=1
    END_IF
    IF S=2 and YM < Nb_lignes-2
      IF Etat(YM+1,XM)<2 Then YM=YM+1:DEPL=1
    END_IF
    IF S=3 and XM > 2
      IF Etat(YM,XM-1)<2 Then XM=XM-1:DEPL=1
    END_IF
    IF S=4 and YM > 2
      IF Etat(YM-1,XM)<2 Then YM=YM-1:DEPL=1
    END_IF
Return

Boucle:
  If pause = 1 then return
  timer_off 10
  2D_Fill_color 255,255,255 : 2D_Pen_Color 255,255,255
  If D1= 1
      2D_Rectangle X1*taille_case,Y1*taille_case,(X1+1)*taille_case, (Y1+1)*taille_case
      D1 = 0
  End_If
  print_locate X*taille_case,Y*taille_case : Print chr$(74)  : ' Affiche le joueur
  N = N+1
  If N = VM
    N=0
    2D_Rectangle XM*taille_case,YM*taille_case,(XM+1)*taille_case, (YM+1)*taille_case
    IF Etat (YM,XM) = 1
      2D_Pen_Color 0,200,200
      2D_Fill_Color 0,200,200
      2D_Circle (XM+0.5)*taille_case,(YM+0.5)*taille_case,3
    END_IF
    L = RND(10)
    If L > 6
      gosub Change_dir
    Else
      gosub Test_dirM
      if depl=0 Then gosub Change_dir
    End_If
  End_If
  Print_locate Xm*taille_case,Ym*taille_case : Print chr$(123): Depl=0 : ' Affiche le monstre
  If X=XM and Y=YM then gosub Collision
  If M = 0 Then Message "Niveau vidé, appuyez pour en faire un autre...": goto relance
  traite = 0
  timer_on 10
Return

Touche:
if traite = 0
traite = 1
touche_enfoncee = key_down_code
If touche_enfoncee = 37
' Gauche
  If X > 2
    If Etat(Y,X-1)<2 Then X1=X : Y1=Y : D1=1 : X=X-1
  End_If
End_If

If touche_enfoncee = 39
' Droite
  If X < (Nb_Cases_ligne-1)
    If Etat(Y,X+1)<2 Then X1=X : Y1=Y : D1=1 : X=X+1
  End_If
End_If

If touche_enfoncee = 38
' Haut
  If Y > 2
    If Etat(Y-1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y-1
  End_If
End_If

If touche_enfoncee = 40
' Bas
  If Y < (Nb_lignes-1)
    If Etat(Y+1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y+1
  End_If
End_If

If touche_enfoncee = 88 or touche_enfoncee = 27 Then goto FIN

If touche_enfoncee =  80
 If Pause = 0 then Pause = 1 :else: Pause = 0
End_if

If X=XM and Y=YM then gosub Collision

If Etat(Y,X) = 1 Then Score=Score +10 : Etat(Y,X) = 0 : M=M-1 : Caption 13, "Score : " + RIGHT$("00000"+STR$(Score),5)
end_if
Return

Collision:
  Goto fin
Return

Charge_Niveau:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+8)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  Read A$
  For N = 1 TO Nb_Cases_ligne
    If Mid$(A$,N,1)="1"
        2D_Pen_Color 200,200,0 : 2D_Fill_Color 200,200,0
        2D_Rectangle N*taille_case+1,L*taille_case+1,(N+1)*taille_case-1, (L+1)*taille_case-1
        Etat(L,N)=2
    Else
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
  Print
 Next L
 2D_Fill_color 255,255,255 : 2D_Pen_Color 255,0,0
 2D_Rectangle taille_case, (Nb_Lignes+2)*taille_case, (Nb_Cases_ligne+2)*taille_case- taille_case, (Nb_Lignes+8)*taille_case
 Alpha 11 : Left 11,21*taille_case : Top 11, (Nb_Lignes+3)*taille_case : font_name 11, "Courier"
 Caption 11, "Temps : 00000"
 Alpha 12 : Left 12, 6*(taille_case - 7) : Top 12, (Nb_Lignes+5.5)*taille_case : font_bold 12
 font_name 12, "Courier" : Height 12, taille_case+3: Font_size 12,taille_case : Font_color 12,200,200,0
 Caption 12, "- VORACE -  (Version Panoramique)"
 Alpha 13 : Left 13,3*taille_case  : Top 13, (Nb_Lignes+3)*taille_case : font_name 13, "Courier"
 Caption 13, "Score : 00000"
Show 1
Return

Fin:
 timer_off 10
 Message$ =  "*********************" +LF$+ "*  Partie terminée  *" +LF$+ "*********************"
 Message$ = Message$ +LF$ + LF$ + "Score: "+ STR$ (Score)
 Message$ = Message$ +LF$ + LF$ + "Rejouer ?"
 if Message_confirmation_yes_no (Message$) = 1 then Score = 0 : goto Relance
terminate
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1108
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 10 Mar 2012 - 1:36

Ah! C'est bien mieux comme ça, sauf que ça clignote un peu par moment, et que je me suis fait bouffé par le monstre! Exclamation drunken
Bon t'as plus qu'à faire une adaptation 3d, tu sais comme mon labyrinthe!
Tu fais les murs, et pour les pastilles, tu mets des sphères oranges! lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 10 Mar 2012 - 1:44

ok, bignono, je le mets dans ma todo list Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
lodchjo

avatar

Nombre de messages : 162
Age : 46
Localisation : Anvers
Date d'inscription : 26/12/2011

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 10 Mar 2012 - 10:50

Bien fait, Jicehel. DOmmage qu'en plus grand, ça clignote encore plus. J'espère que Jack trouvera une solution pour ceci, en général!! Bien sur, il n'y aura pas cette problème en 3D, comme propose bignono. ce serait peut-être sympa en 3D aussi, (est-ce qu'on est exigeant? Razz ) que le caméra bouge un peu pendant le jeu, p.ex. pour suivre Vorace ou mais c'est juste une idée. (ça fait moderne je crois)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lode.weebly.com
JL35



Nombre de messages : 6069
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 10 Mar 2012 - 13:39

C'est pô juste, je me suis fait bouffer moi aussi Rolling Eyes
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Vorace   Sam 10 Mar 2012 - 14:10

Salut Jicehel!
C'est beau et bien. Je m'en suis rassasié.
Bien vorace qui mal y pense!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 10 Mar 2012 - 14:48

C'est plus dur, tant mieux et puis d'abord, je vais rajouter deux autres monstres histoire de rendre les choses plus corsée et par ce que je n'ai pas envie de mettre en place le temps en réfléchissant. (En plus dans l'original, il y a le compteur aussi mais pas de gestion du temps. Donc, je suis dans l'esprit, de toute façon, il y a les sources de la version proche de l'original, je fais ce que je veux maintenant pour le tuning Smile !!
Bon pour le clignotement, c'est lié à l'utilisation du print, du coup j'essaye un autre principe pour simuler le print original (dans la version Hector) (usage de l'alpha)
Du coup le clignotement lié au print disparait, par contre, pour le clignotement de la fenêtre, je ne sais pas comment l'empécher
(PS: Pour JL35, aujourd'hui la fonction 'rechercher' fonctionne dans l'éditeur ...)
Allez, la version avec 3 monstres:
Code:
' Vorace version converti en Panoramic par Jean-Charles
' Version original en Basic pour l'Hector ecrit par Eddy DUTERTRE

Label Charge_Niveau, Boucle, Relance, Fin, Touche, Collision, Change_dir
Label Test_dirM, relance2

Dim L,N,A,I,A$  : '  Compteur et variables diverses temporaires
Dim M          : '  Competeur de pastilles
Dim Nb_Cases_ligne, Nb_Lignes : Nb_Cases_ligne = 32 : Nb_Lignes = 20
Dim X,Y        : '  Coordonnées du joueur
Dim X1,Y1,D1    : '  Ancienne position du joueur pour effacer
Dim N_Monstres  : N_Monstres = 3 : ' Le nombre de monstres actifs (max 3)
Dim Xm(3),Ym(3),Vm : '  Coordonnées du monstre et vitesse de deplacement (+Vm est ganrd moins il va vite)
Dim S          : '  Direction du monstre
Dim Depl        : '  Deplace monstre si Depl = 1
Dim Etat(Nb_Lignes,Nb_Cases_ligne), traite
Dim Temps, Score, touche_enfoncee, Pause
Dim LF$, Message$ : LF$=CHR$(10)
Dim taille_case : taille_case=22  : ' à régler entre 10 et 22

Height 0, (Nb_Lignes+13)*taille_case : Width 0, (Nb_Cases_ligne + 4)*taille_case : color 0,255,255,255
Picture 1
For I = 0 to N_Monstres
  Alpha 20 + I : Height 20 + I, taille_case : Width 20+ I, taille_case : Font_size 20+I, taille_case - 0.3*taille_case
  font_name 20 + I, "Wingdings"
Next I

 DATA 11111111111111111111111111111111  : ' L1
 DATA 10100000010000011000000100000001  : ' L2
 DATA 10101111010111110010101110111111  : ' L3
 DATA 10001000000100010010100010100001
 DATA 11110000000111000110001010100101
 DATA 10000111010101111100001010110101
 DATA 10111100010000110001111010100101
 DATA 10000101111110000111100010101101
 DATA 11110100010011111101001010101001
 DATA 10000111010110010001011010101011
 DATA 10111100010000000001001000000011
 DATA 10000101111111110111111111011111
 DATA 11110100011000110000000001010001
 DATA 10000111000010000111111111010001
 DATA 10111111111111111111011111010001
 DATA 10000000000000000000000000010001
 DATA 10100000010000011000000100000001
 DATA 10101111010111110010101110111111
 DATA 10001000000100000010100010000001
 DATA 11111111111111111111111111111111  : ' L20

Timer 10: Timer_interval 10,40 : Timer_off 10 : On_Timer 10, Boucle
Gosub Charge_Niveau
Score = 0

Relance2:
X  = 2 : Y = 2:D1=0 : VM=4 : ' Position intiale du joueur
Xm(1) = 12  : Ym(1) = 16  : ' Positions initiales des Voraces
Xm(2) = 22  : Ym(2) = 4    :  Xm(3) = 7  : Ym(3) = 13
Depl = 0 : S=1 : N=0 : traite = 0

If VM < N_Monstres Then VM = N_Monstres

on_key_down 0,touche
timer_on 10
End

Relance:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+9)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  For N = 1 TO Nb_Cases_ligne
    If Etat(L,N)<>2
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
Show 1
goto relance2
return


Change_dir:
  FOR DEPL = 1000 TO 1 STEP -1
    S= INT(RND(4))+1
    Gosub Test_dirM
  NEXT DEPL
return

Test_dirM:
    IF S=1 and XM(A) < Nb_Cases_ligne-2
      IF Etat(YM(A),XM(A)+1)<2 Then XM(A)=XM(A)+1:DEPL=1
    END_IF
    IF S=2 and YM(A) < Nb_lignes-2
      IF Etat(YM(A)+1,XM(A))<2 Then YM(A)=YM(A)+1:DEPL=1
    END_IF
    IF S=3 and XM(A) > 2
      IF Etat(YM(A),XM(A)-1)<2 Then XM(A)=XM(A)-1:DEPL=1
    END_IF
    IF S=4 and YM(A) > 2
      IF Etat(YM(A)-1,XM(A))<2 Then YM(A)=YM(A)-1:DEPL=1
    END_IF
Return

Boucle:
  If pause = 1 then return
  timer_off 10
  2D_Fill_color 255,255,255 : 2D_Pen_Color 255,255,255
  If D1= 1
      2D_Rectangle X1*taille_case,Y1*taille_case,(X1+1)*taille_case, (Y1+1)*taille_case
      D1 = 0
  End_If
  Top 20,Y*taille_case : Left 20,X*taille_case : CAPTION 20,chr$(74)  : ' Affiche le joueur
  N = N+1 :  A = N
  IF A <= N_Monstres
    2D_Rectangle XM(A)*taille_case,YM(A)*taille_case,(XM(A)+1)*taille_case, (YM(A)+1)*taille_case
    IF Etat (YM(A),XM(A)) = 1
      2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
      2D_Circle (XM(A)+0.5)*taille_case,(YM(A)+0.5)*taille_case,3
    END_IF
    L = RND(10)
    If L > 6
      gosub Change_dir
    Else
      gosub Test_dirM
      if depl=0 Then gosub Change_dir
    End_If
      Top 20+A,Ym(A)*taille_case : Left 20+A,Xm(A)*taille_case
      CAPTION 20+A,chr$(123) :  Depl=0 : ' Affiche le monstre
  End_If
 
  IF N= VM THEN N=0
 
  For I=1 To N_Monstres :  If X=XM(I) and Y=YM(I) then gosub Collision : Next I
  If M = 0 Then Message "Niveau vidé, appuyez pour en faire un autre...": goto relance
  traite = 0
  timer_on 10
Return

Touche:
if traite = 0
traite = 1
touche_enfoncee = key_down_code
If touche_enfoncee = 37
' Gauche
  If X > 2
    If Etat(Y,X-1)<2 Then X1=X : Y1=Y : D1=1 : X=X-1
  End_If
End_If

If touche_enfoncee = 39
' Droite
  If X < (Nb_Cases_ligne-1)
    If Etat(Y,X+1)<2 Then X1=X : Y1=Y : D1=1 : X=X+1
  End_If
End_If

If touche_enfoncee = 38
' Haut
  If Y > 2
    If Etat(Y-1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y-1
  End_If
End_If

If touche_enfoncee = 40
' Bas
  If Y < (Nb_lignes-1)
    If Etat(Y+1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y+1
  End_If
End_If

If touche_enfoncee = 88 or touche_enfoncee = 27 Then goto FIN

If touche_enfoncee =  80
 If Pause = 0 then Pause = 1 :else: Pause = 0
End_if

For I = 1 TO N_Monstres
  If X=XM(I) and Y=YM(I) then gosub Collision
Next I

If Etat(Y,X) = 1 Then Score=Score +10 : Etat(Y,X) = 0 : M=M-1 : Caption 13, "Score : " + RIGHT$("00000"+STR$(Score),5)
end_if
Return

Collision:
  Goto fin
Return

Charge_Niveau:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+8)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  Read A$
  For N = 1 TO Nb_Cases_ligne
    If Mid$(A$,N,1)="1"
        2D_Pen_Color 200,200,0 : 2D_Fill_Color 200,200,0
        2D_Rectangle N*taille_case+1,L*taille_case+1,(N+1)*taille_case-1, (L+1)*taille_case-1
        Etat(L,N)=2
    Else
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
 2D_Fill_color 255,255,255 : 2D_Pen_Color 255,0,0
 2D_Rectangle taille_case, (Nb_Lignes+2)*taille_case, (Nb_Cases_ligne+2)*taille_case- taille_case, (Nb_Lignes+8)*taille_case
 Alpha 11 : Left 11,21*taille_case : Top 11, (Nb_Lignes+3)*taille_case : font_name 11, "Courier"
 Caption 11, "Temps : 00000"
 Alpha 12 : Left 12, 6*(taille_case - 7) : Top 12, (Nb_Lignes+5.5)*taille_case : font_bold 12
 font_name 12, "Courier" : Height 12, taille_case+3: Font_size 12,taille_case : Font_color 12,200,200,0
 Caption 12, "- VORACE -  (Version Panoramique)"
 Alpha 13 : Left 13,3*taille_case  : Top 13, (Nb_Lignes+3)*taille_case : font_name 13, "Courier"
 Caption 13, "Score : 00000"
Show 1
Return

Fin:
 timer_off 10
 Message$ =  "*********************" +LF$+ "*  Partie terminée  *" +LF$+ "*********************"
 Message$ = Message$ +LF$ + LF$ + "Score: "+ STR$ (Score)
 Message$ = Message$ +LF$ + LF$ + "Rejouer ?"
 if Message_confirmation_yes_no (Message$) = 1 then Score = 0 : goto Relance
terminate
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6069
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 10 Mar 2012 - 17:16

C'est super, avec Panoramic on va arriver à faire presque aussi bien qu'avec les ordinateurs d'il y a 30 ans, encore un effort ! Very Happy

@Jicehel moi le 'Rechercher' ne marche pas aujourdhui, mais ça a remarché depuis, je n'y comprends rien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 10 Mar 2012 - 17:24

Mais non, on fait mieux, c'est du revival. On essaye de garder l'esprit initial, mais c'est plus beau qu'à l'origine. Là maintenant que techniquement j'ai utilisé les caractères pour le perso et les monstres, je pense qu'on peut en faire une version avec sprites pour que ce soit encore plus joli, mais bon c'est du détail ça...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Dim 11 Mar 2012 - 0:00

Ouais, ben moi j'chuis pas content: y a trop de bouffeur... Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Jeu 15 Mar 2012 - 0:27

Je veux bien un coup de main pour optimise l'affichage si quelqu'un sait comment je peux empêcher le clignotement.
Bon, je vous donne le lien sur la planche pour le source ci dessous (format png à transformer en BMP pour le source donné, mais le partage transforme les BMP en PNG automatiquement):



et le code (remplace les caractères par les images). Il doit y avoir des astuces sur l'affichage et sans doute que je m'y prends mal, alors je prends les conseils ou "corrections"
Code:
' Vorace version converti en Panoramic par Jean-Charles
' Version original en Basic pour l'Hector ecrit par Eddy DUTERTRE

Label Charge_Niveau, Boucle, Relance, Fin, Touche, Collision, Change_dir
Label Test_dirM, relance2

Dim L,N,A,I,A$  : '  Compteur et variables diverses temporaires
Dim M          : '  Competeur de pastilles
Dim Nb_Cases_ligne, Nb_Lignes : Nb_Cases_ligne = 32 : Nb_Lignes = 20
Dim X,Y        : '  Coordonnées du joueur
Dim X1,Y1,D1    : '  Ancienne position du joueur pour effacer
Dim N_Monstres  : N_Monstres = 3 : ' Le nombre de monstres actifs (max 3)
Dim Xm(3),Ym(3),Vm : '  Coordonnées du monstre et vitesse de deplacement (+Vm est ganrd moins il va vite)
Dim S          : '  Direction du monstre
Dim Depl        : '  Deplace monstre si Depl = 1
Dim Etat(Nb_Lignes,Nb_Cases_ligne), traite
Dim Temps, Score, touche_enfoncee, Pause
Dim LF$, Message$ : LF$=CHR$(10)
Dim taille_case : taille_case=22  : ' à régler entre 10 et 22

Height 0, (Nb_Lignes+13)*taille_case : Width 0, (Nb_Cases_ligne + 4)*taille_case : color 0,255,255,255
Picture 1 : Picture 2 : Hide 2: TOP 2, -2000: Height 2,160 : Width 2,80 : File_load 2,"Sprites_Vorace.bmp"

For I = 0 to N_Monstres
  Picture 20 + I : Hide 20 + I: Height 20 + I, 20 : Width 20+ I, 20
  Image 3+I: Top 3+I, -2000                            a
Next I

 DATA 11111111111111111111111111111111  : ' L1
 DATA 10100000010000011000000100000001  : ' L2
 DATA 10101111010111110010101110111111  : ' L3
 DATA 10001000000100010010100010100001
 DATA 11110000000111000110001010100101
 DATA 10000111010101111100001010110101
 DATA 10111100010000110001111010100101
 DATA 10000101111110000111100010101101
 DATA 11110100010011111101001010101001
 DATA 10000111010110010001011010101011
 DATA 10111100010000000001001000000011
 DATA 10000101111111110111111111011111
 DATA 11110100011000110000000001010001
 DATA 10000111000010000111111111010001
 DATA 10111111111111111111011111010001
 DATA 10000000000000000000000000010001
 DATA 10100000010000011000000100000001
 DATA 10101111010111110010101110111111
 DATA 10001000000100000010100010000001
 DATA 11111111111111111111111111111111  : ' L20

Timer 10: Timer_interval 10,200 : Timer_off 10 : On_Timer 10, Boucle
Gosub Charge_Niveau
Score = 0

Relance2:

X1=0: Y1=0 : X = 2: Y=2: D1=0 : VM=3  : ' Position intiale du joueur
Xm(1) = 12 : Ym(1)= 6  :                ' Positions initiales des Voraces
Xm(2) = 22 : Ym(2)= 4  :  Xm(3) = 7  : Ym(3) = 13
Depl = 0 : S=1 : N=0 : traite = 0
2D_Target_is 2 : 2D_IMAGE_COPY 3,0,0,20,20 : 2D_Target_is 20 : 2D_Image_Paste 3,0,0
2D_Target_is 1 : Top 20,Y*taille_case : Left 20,X*taille_case :  SHOW 20

If VM < N_Monstres Then VM = N_Monstres

on_key_down 0,touche
timer_on 10
End

Relance:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+9)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  For N = 1 TO Nb_Cases_ligne
    If Etat(L,N)<>2
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
Show 1
goto relance2
return


Change_dir:
  FOR DEPL = 1000 TO 1 STEP -1
    S= INT(RND(4))+1
    Gosub Test_dirM
  NEXT DEPL
return

Test_dirM:

    2D_Target_is 2
    IF S=1 and XM(A) < Nb_Cases_ligne-2
      IF Etat(YM(A),XM(A)+1)<2 Then XM(A)=XM(A)+1: 2D_IMAGE_COPY 3+A,21,19*A+1,40,19*(A+1)+1:DEPL=1
    END_IF
    IF S=2 and YM(A) < Nb_lignes-2
      IF Etat(YM(A)+1,XM(A))<2 Then YM(A)=YM(A)+1: 2D_IMAGE_COPY 3+A,41,19*A+1,60,19*(A+1)+1:DEPL=1
    END_IF
    IF S=3 and XM(A) > 2
      IF Etat(YM(A),XM(A)-1)<2 Then XM(A)=XM(A)-1: 2D_IMAGE_COPY 3+A, 1,19*A+1,20,19*(A+1)+1:DEPL=1
    END_IF
    IF S=4 and YM(A) > 2
      IF Etat(YM(A)-1,XM(A))<2 Then YM(A)=YM(A)-1: 2D_IMAGE_COPY 3+A,61,19*A+1,80,19*(A+1)+1:DEPL=1
    END_IF
    2D_Target_is 20+A
    2D_Image_Paste 3+A,0,0
    2D_Target_is 1
   
Return

Boucle:
  If pause = 1 then return
  timer_off 10
  2D_Fill_color 255,255,255 : 2D_Pen_Color 255,255,255
  If D1= 1
      2D_Rectangle X1*taille_case,Y1*taille_case,(X1+1)*taille_case, (Y1+1)*taille_case
      D1 = 0
  End_If
  Top 20,Y*taille_case : Left 20,X*taille_case : ' Affiche le joueur
  N = N+1 :  A = N
  IF A <= N_Monstres
    2D_Rectangle XM(A)*taille_case,YM(A)*taille_case,(XM(A)+1)*taille_case, (YM(A)+1)*taille_case
    IF Etat (YM(A),XM(A)) = 1
      2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
      2D_Circle (XM(A)+0.5)*taille_case,(YM(A)+0.5)*taille_case,3
    END_IF
    L = RND(10)
    If L > 6
      gosub Change_dir
    Else
      gosub Test_dirM
      if depl=0 Then gosub Change_dir
    End_If
      Top 20+A,Ym(A)*taille_case : Left 20+A,Xm(A)*taille_case
      Depl=0 : Show 20+A : ' Affiche le monstre
  End_If
 
  IF N= VM THEN N=0
 
  For I=1 To N_Monstres :  If X=XM(I) and Y=YM(I) then gosub Collision : Next I
  If M = 0 Then Message "Niveau vidé, appuyez pour en faire un autre...": goto relance
  traite = 0
  timer_on 10
Return

Touche:
if traite = 0
traite = 1
touche_enfoncee = key_down_code
2D_Target_is 2
If touche_enfoncee = 37
' Gauche
  If X > 2
    If Etat(Y,X-1)<2 Then X1=X : Y1=Y : D1=1 : X=X-1 : 2D_IMAGE_COPY 3,0,0,20,20
  End_If
End_If

If touche_enfoncee = 39
' Droite
  If X < (Nb_Cases_ligne-1)
    If Etat(Y,X+1)<2 Then X1=X : Y1=Y : D1=1 : X=X+1: 2D_IMAGE_COPY 3,20,0,40,20
  End_If
End_If

If touche_enfoncee = 38
' Haut
  If Y > 2
    If Etat(Y-1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y-1: 2D_IMAGE_COPY 3,60,0,80,20
  End_If
End_If

If touche_enfoncee = 40
' Bas
  If Y < (Nb_lignes-1)
    If Etat(Y+1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y+1: 2D_IMAGE_COPY 3,40,0,60,20
  End_If
End_If

2D_Target_is 20
2D_Image_Paste 3,0,0
2D_Target_is 1

If touche_enfoncee = 88 or touche_enfoncee = 27 Then goto FIN

If touche_enfoncee =  80
 If Pause = 0 then Pause = 1 :else: Pause = 0
End_if

For I = 1 TO N_Monstres
  If X=XM(I) and Y=YM(I) then gosub Collision
Next I

If Etat(Y,X) = 1 Then Score=Score +10 : Etat(Y,X) = 0 : M=M-1 : Caption 13, "Score : " + RIGHT$("00000"+STR$(Score),5)
end_if
Return

Collision:
  Goto fin
Return

Charge_Niveau:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+8)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  Read A$
  For N = 1 TO Nb_Cases_ligne
    If Mid$(A$,N,1)="1"
        2D_Pen_Color 200,200,0 : 2D_Fill_Color 200,200,0
        2D_Rectangle N*taille_case+1,L*taille_case+1,(N+1)*taille_case-1, (L+1)*taille_case-1
        Etat(L,N)=2
    Else
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
 2D_Fill_color 255,255,255 : 2D_Pen_Color 255,0,0
 2D_Rectangle taille_case, (Nb_Lignes+2)*taille_case, (Nb_Cases_ligne+2)*taille_case- taille_case, (Nb_Lignes+8)*taille_case
 Alpha 11 : Left 11,21*taille_case : Top 11, (Nb_Lignes+3)*taille_case : font_name 11, "Courier"
 Caption 11, "Temps : 00000"
 Alpha 12 : Left 12, 6*(taille_case - 7) : Top 12, (Nb_Lignes+5.5)*taille_case : font_bold 12
 font_name 12, "Courier" : Height 12, taille_case+3: Font_size 12,taille_case : Font_color 12,200,200,0
 Caption 12, "- VORACE -  (Version Panoramique)"
 Alpha 13 : Left 13,3*taille_case  : Top 13, (Nb_Lignes+3)*taille_case : font_name 13, "Courier"
 Caption 13, "Score : 00000"
Show 1
Return

Fin:
 timer_off 10
 Message$ =  "*********************" +LF$+ "*  Partie terminée  *" +LF$+ "*********************"
 Message$ = Message$ +LF$ + LF$ + "Score: "+ STR$ (Score)
 Message$ = Message$ +LF$ + LF$ + "Rejouer ?"
 if Message_confirmation_yes_no (Message$) = 1 then Score = 0 : goto Relance
terminate
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Ven 16 Mar 2012 - 9:19

Klaus, comme tu as récupéré ta connexion, tu pourras peut-être m'aider....
Peux-tu regarder mon programme pour voir si tu vois une solution pour annuler le scintillement ? Est-ce moi qui m'y prends mal.

PS: Si tu veux l'adapter à ton squelette, pour voir si ton squelette s'adapte aux jeux, libre à toi, mais bon ça c'est un autre sujet.
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: Vorace - une autre adaptation depuis l'Hector   Ven 16 Mar 2012 - 14:07

J'ai pris le source et je vais regarder cela.
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: Vorace - une autre adaptation depuis l'Hector   Ven 16 Mar 2012 - 16:36

Merci Klaus
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: Vorace - une autre adaptation depuis l'Hector   Ven 16 Mar 2012 - 18:47

J'ai analysé ton programme. J'ai pu supprimer le scintillement lors des déplacements des monstres. Tu as choisi la bonne solution de les placer dans des picture séparés et de déplacer le picture. Mais tu n'as pas employé cette technique pour le joueur ! J'ai identifié la section de code responsable du scintillement. J'ai marqué les parties concernées par un commentaire ": ' Klaus". Tu touveras aisément par partie que j'ai désactivée pour le déplacement des monstres (par un IF 1=2 ... END_IF) et la partie marquée pour le déplacement du joueur, avec mes commentaires.
Code:
' Vorace version converti en Panoramic par Jean-Charles
' Version original en Basic pour l'Hector ecrit par Eddy DUTERTRE

Label Charge_Niveau, Boucle, Relance, Fin, Touche, Collision, Change_dir
Label Test_dirM, relance2

Dim L,N,A,I,A$  : '  Compteur et variables diverses temporaires
Dim M          : '  Competeur de pastilles
Dim Nb_Cases_ligne, Nb_Lignes : Nb_Cases_ligne = 32 : Nb_Lignes = 20
Dim X,Y        : '  Coordonnées du joueur
Dim X1,Y1,D1    : '  Ancienne position du joueur pour effacer
Dim N_Monstres  : N_Monstres = 3 : ' Le nombre de monstres actifs (max 3)
Dim Xm(3),Ym(3),Vm : '  Coordonnées du monstre et vitesse de deplacement (+Vm est ganrd moins il va vite)
Dim S          : '  Direction du monstre
Dim Depl        : '  Deplace monstre si Depl = 1
Dim Etat(Nb_Lignes,Nb_Cases_ligne), traite
Dim Temps, Score, touche_enfoncee, Pause
Dim LF$, Message$ : LF$=CHR$(10)
Dim taille_case : taille_case=22  : ' à régler entre 10 et 22

Height 0, (Nb_Lignes+13)*taille_case : Width 0, (Nb_Cases_ligne + 4)*taille_case : color 0,255,255,255
Picture 1 : Picture 2 : Hide 2: TOP 2, -2000: Height 2,160 : Width 2,80 : File_load 2,"C:\temp\Sprites_Vorace.bmp"

For I = 0 to N_Monstres
  Picture 20 + I : Hide 20 + I: Height 20 + I, 20 : Width 20+ I, 20
  Image 3+I: Top 3+I, -2000
Next I

 DATA 11111111111111111111111111111111  : ' L1
 DATA 10100000010000011000000100000001  : ' L2
 DATA 10101111010111110010101110111111  : ' L3
 DATA 10001000000100010010100010100001
 DATA 11110000000111000110001010100101
 DATA 10000111010101111100001010110101
 DATA 10111100010000110001111010100101
 DATA 10000101111110000111100010101101
 DATA 11110100010011111101001010101001
 DATA 10000111010110010001011010101011
 DATA 10111100010000000001001000000011
 DATA 10000101111111110111111111011111
 DATA 11110100011000110000000001010001
 DATA 10000111000010000111111111010001
 DATA 10111111111111111111011111010001
 DATA 10000000000000000000000000010001
 DATA 10100000010000011000000100000001
 DATA 10101111010111110010101110111111
 DATA 10001000000100000010100010000001
 DATA 11111111111111111111111111111111  : ' L20

Timer 10: Timer_interval 10,200 : Timer_off 10 : On_Timer 10, Boucle
Gosub Charge_Niveau
Score = 0

Relance2:

X1=0: Y1=0 : X = 2: Y=2: D1=0 : VM=3  : ' Position intiale du joueur
Xm(1) = 12 : Ym(1)= 6  :                ' Positions initiales des Voraces
Xm(2) = 22 : Ym(2)= 4  :  Xm(3) = 7  : Ym(3) = 13
Depl = 0 : S=1 : N=0 : traite = 0
2D_Target_is 2 : 2D_IMAGE_COPY 3,0,0,20,20 : 2D_Target_is 20 : 2D_Image_Paste 3,0,0
2D_Target_is 1 : Top 20,Y*taille_case : Left 20,X*taille_case :  SHOW 20

If VM < N_Monstres Then VM = N_Monstres

on_key_down 0,touche
timer_on 10
End

Relance:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+9)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  For N = 1 TO Nb_Cases_ligne
    If Etat(L,N)<>2
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
Show 1
goto relance2
return


Change_dir:
  FOR DEPL = 1000 TO 1 STEP -1
    S= INT(RND(4))+1
    Gosub Test_dirM
  NEXT DEPL
return

Test_dirM:

    2D_Target_is 2
    IF S=1 and XM(A) < Nb_Cases_ligne-2
      IF Etat(YM(A),XM(A)+1)<2 Then XM(A)=XM(A)+1: 2D_IMAGE_COPY 3+A,21,19*A+1,40,19*(A+1)+1:DEPL=1
    END_IF
    IF S=2 and YM(A) < Nb_lignes-2
      IF Etat(YM(A)+1,XM(A))<2 Then YM(A)=YM(A)+1: 2D_IMAGE_COPY 3+A,41,19*A+1,60,19*(A+1)+1:DEPL=1
    END_IF
    IF S=3 and XM(A) > 2
      IF Etat(YM(A),XM(A)-1)<2 Then XM(A)=XM(A)-1: 2D_IMAGE_COPY 3+A, 1,19*A+1,20,19*(A+1)+1:DEPL=1
    END_IF
    IF S=4 and YM(A) > 2
      IF Etat(YM(A)-1,XM(A))<2 Then YM(A)=YM(A)-1: 2D_IMAGE_COPY 3+A,61,19*A+1,80,19*(A+1)+1:DEPL=1
    END_IF
    2D_Target_is 20+A
    2D_Image_Paste 3+A,0,0
    2D_Target_is 1

Return

Boucle:
  If pause = 1 then return
  timer_off 10
  2D_Fill_color 255,255,255 : 2D_Pen_Color 255,255,255
  If D1= 1
      2D_Rectangle X1*taille_case,Y1*taille_case,(X1+1)*taille_case, (Y1+1)*taille_case
      D1 = 0
  End_If
  Top 20,Y*taille_case : Left 20,X*taille_case : ' Affiche le joueur
  N = N+1 :  A = N
  IF A <= N_Monstres
if 1=2 : ' Klaus
' cette partie provoque le scintillement lors du déplacement des monstres.
' à l'évidence, cette partie peut être enlevée sans conséquence sur le programme
    2D_Rectangle XM(A)*taille_case,YM(A)*taille_case,(XM(A)+1)*taille_case, (YM(A)+1)*taille_case
    IF Etat (YM(A),XM(A)) = 1
      2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
      2D_Circle (XM(A)+0.5)*taille_case,(YM(A)+0.5)*taille_case,3
    END_IF
end_if : ' Klaus
    L = RND(10)
    If L > 6
      gosub Change_dir
    Else
      gosub Test_dirM
      if depl=0 Then gosub Change_dir
    End_If
      Top 20+A,Ym(A)*taille_case : Left 20+A,Xm(A)*taille_case
      Depl=0 : Show 20+A : ' Affiche le monstre
  End_If

  IF N= VM THEN N=0

  For I=1 To N_Monstres :  If X=XM(I) and Y=YM(I) then gosub Collision : Next I
  If M = 0 Then Message "Niveau vidé, appuyez pour en faire un autre...": goto relance
  traite = 0
  timer_on 10
Return

Touche:
if traite = 0
traite = 1
touche_enfoncee = key_down_code
2D_Target_is 2
If touche_enfoncee = 37
' Gauche
  If X > 2
    If Etat(Y,X-1)<2 Then X1=X : Y1=Y : D1=1 : X=X-1 : 2D_IMAGE_COPY 3,0,0,20,20
  End_If
End_If

If touche_enfoncee = 39
' Droite
  If X < (Nb_Cases_ligne-1)
    If Etat(Y,X+1)<2 Then X1=X : Y1=Y : D1=1 : X=X+1: 2D_IMAGE_COPY 3,20,0,40,20
  End_If
End_If

If touche_enfoncee = 38
' Haut
  If Y > 2
    If Etat(Y-1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y-1: 2D_IMAGE_COPY 3,60,0,80,20
  End_If
End_If

If touche_enfoncee = 40
' Bas
  If Y < (Nb_lignes-1)
    If Etat(Y+1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y+1: 2D_IMAGE_COPY 3,40,0,60,20
  End_If
End_If

' if 1=2 : ' Klaus
' cette partie provoque le le scintillement en déplaçant le joueur par les flèches
' mon conseil: placer le joueur dans un picture séparé (comme les monstres)
' et de déplacer ce picture - il n'y aura plus de scintillement !
2D_Target_is 20
2D_Image_Paste 3,0,0
2D_Target_is 1
' end_if : ' Klaus

If touche_enfoncee = 88 or touche_enfoncee = 27 Then goto FIN

If touche_enfoncee =  80
 If Pause = 0 then Pause = 1 :else: Pause = 0
End_if

For I = 1 TO N_Monstres
  If X=XM(I) and Y=YM(I) then gosub Collision
Next I

If Etat(Y,X) = 1 Then Score=Score +10 : Etat(Y,X) = 0 : M=M-1 : Caption 13, "Score : " + RIGHT$("00000"+STR$(Score),5)
end_if
Return

Collision:
  Goto fin
Return

Charge_Niveau:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+8)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  Read A$
  For N = 1 TO Nb_Cases_ligne
    If Mid$(A$,N,1)="1"
        2D_Pen_Color 200,200,0 : 2D_Fill_Color 200,200,0
        2D_Rectangle N*taille_case+1,L*taille_case+1,(N+1)*taille_case-1, (L+1)*taille_case-1
        Etat(L,N)=2
    Else
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
 2D_Fill_color 255,255,255 : 2D_Pen_Color 255,0,0
 2D_Rectangle taille_case, (Nb_Lignes+2)*taille_case, (Nb_Cases_ligne+2)*taille_case- taille_case, (Nb_Lignes+8)*taille_case
 Alpha 11 : Left 11,21*taille_case : Top 11, (Nb_Lignes+3)*taille_case : font_name 11, "Courier"
 Caption 11, "Temps : 00000"
 Alpha 12 : Left 12, 6*(taille_case - 7) : Top 12, (Nb_Lignes+5.5)*taille_case : font_bold 12
 font_name 12, "Courier" : Height 12, taille_case+3: Font_size 12,taille_case : Font_color 12,200,200,0
 Caption 12, "- VORACE -  (Version Panoramique)"
 Alpha 13 : Left 13,3*taille_case  : Top 13, (Nb_Lignes+3)*taille_case : font_name 13, "Courier"
 Caption 13, "Score : 00000"
Show 1
Return

Fin:
 timer_off 10
 Message$ =  "*********************" +LF$+ "*  Partie terminée  *" +LF$+ "*********************"
 Message$ = Message$ +LF$ + LF$ + "Score: "+ STR$ (Score)
 Message$ = Message$ +LF$ + LF$ + "Rejouer ?"
 if Message_confirmation_yes_no (Message$) = 1 then Score = 0 : goto Relance
terminate
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: Vorace - une autre adaptation depuis l'Hector   Ven 16 Mar 2012 - 19:30

Génial Klaus, je teste ça en rentrant chez moi, en effet, maintenant que je n'utilise plus le print, cette partie n'est plus nécessaire Wink
Bien vu, je savais que je pouvais compter sur toi. Merci pour ton analyse et le temps que tu y as passé.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Ven 16 Mar 2012 - 22:19

Le code "corrigé" donne ça:
Ca scintille toujours un peu mais là, je crois que ça ne vient plus du code
Code:
' Vorace version converti en Panoramic par Jean-Charles
' Version original en Basic pour l'Hector ecrit par Eddy DUTERTRE

Label Charge_Niveau, Boucle, Relance, Fin, Touche, Collision, Change_dir
Label Test_dirM, relance2

Dim L,N,A,I,A$  : '  Compteur et variables diverses temporaires
Dim M          : '  Competeur de pastilles
Dim Nb_Cases_ligne, Nb_Lignes : Nb_Cases_ligne = 32 : Nb_Lignes = 20
Dim X,Y        : '  Coordonnées du joueur
Dim X1,Y1,D1    : '  Ancienne position du joueur pour effacer
Dim N_Monstres  : N_Monstres = 3 : ' Le nombre de monstres actifs (max 3)
Dim Xm(3),Ym(3),Vm : '  Coordonnées du monstre et vitesse de deplacement (+Vm est ganrd moins il va vite)
Dim S          : '  Direction du monstre
Dim Depl        : '  Deplace monstre si Depl = 1
Dim Etat(Nb_Lignes,Nb_Cases_ligne), traite
Dim Temps, Score, touche_enfoncee, Pause, Blanc%
Dim LF$, Message$ : LF$=CHR$(10)
Dim taille_case : taille_case=22  : ' à régler entre 10 et 22

Height 0, (Nb_Lignes+13)*taille_case : Width 0, (Nb_Cases_ligne + 4)*taille_case : color 0,255,255,255
Picture 1 : Picture 2 : Hide 2: TOP 2, -2000: Height 2,160 : Width 2,80 : File_load 2,"Sprites_Vorace.bmp"

For I = 0 to N_Monstres+1
  Picture 20 + I : Height 20 + I, 20 : Width 20+ I, 20
  Image 3+I: Top 3+I, -2000 : Hide 3+I
Next I
Blanc% = 4+N_Monstres

 DATA 11111111111111111111111111111111  : ' L1
 DATA 10100000010000011000000100000001  : ' L2
 DATA 10101111010111110010101110111111  : ' L3
 DATA 10001000000100010010100010100001
 DATA 11110000000111000110001010100101
 DATA 10000111010101111100001010110101
 DATA 10111100010000110001111010100101
 DATA 10000101111110000111100010101101
 DATA 11110100010011111101001010101001
 DATA 10000111010110010001011010101011
 DATA 10111100010000000001001000000011
 DATA 10000101111111110111111111011111
 DATA 11110100011000110000000001010001
 DATA 10000111000010000111111111010001
 DATA 10111111111111111111011111010001
 DATA 10000000000000000000000000010001
 DATA 10100000010000011000000100000001
 DATA 10101111010111110010101110111111
 DATA 10001000000100000010100010000001
 DATA 11111111111111111111111111111111  : ' L20

Timer 10: Timer_interval 10,80 : Timer_off 10 : On_Timer 10, Boucle
Gosub Charge_Niveau
Score = 0

Relance2:

X1=0: Y1=0 : X = 2: Y=2: D1=0 : VM=3  : ' Position intiale du joueur
Xm(1) = 12 : Ym(1)= 6  :                ' Positions initiales des Voraces
Xm(2) = 22 : Ym(2)= 4  :  Xm(3) = 7  : Ym(3) = 13
Depl = 0 : S=1 : N=0 : traite = 0
2D_Target_is 2 : 2D_IMAGE_COPY 3,0,0,20,20 : 2D_Target_is 20 : 2D_Image_Paste 3,0,0
2D_Target_is 1 : Top 20,Y*taille_case : Left 20,X*taille_case :  SHOW 20
2D_IMAGE_COPY Blanc%,0,0,19,19

If VM < N_Monstres Then VM = N_Monstres

on_key_down 0,touche
timer_on 10
End

Relance:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+9)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  For N = 1 TO Nb_Cases_ligne
    If Etat(L,N)<>2
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
Show 1
2D_Pen_Color 255,255,255 : 2D_Fill_Color 255,255,255
goto relance2
return


Change_dir:
  FOR DEPL = 1000 TO 1 STEP -1
    S= INT(RND(4))+1
    Gosub Test_dirM
  NEXT DEPL
return

Test_dirM:

    2D_Target_is 2
    IF S=1 and XM(A) < Nb_Cases_ligne-2
      IF Etat(YM(A),XM(A)+1)<2 Then XM(A)=XM(A)+1: 2D_IMAGE_COPY 3+A,21,19*A+1,40,19*(A+1)+1:DEPL=1
    END_IF
    IF S=2 and YM(A) < Nb_lignes-2
      IF Etat(YM(A)+1,XM(A))<2 Then YM(A)=YM(A)+1: 2D_IMAGE_COPY 3+A,41,19*A+1,60,19*(A+1)+1:DEPL=1
    END_IF
    IF S=3 and XM(A) > 2
      IF Etat(YM(A),XM(A)-1)<2 Then XM(A)=XM(A)-1: 2D_IMAGE_COPY 3+A, 1,19*A+1,20,19*(A+1)+1:DEPL=1
    END_IF
    IF S=4 and YM(A) > 2
      IF Etat(YM(A)-1,XM(A))<2 Then YM(A)=YM(A)-1: 2D_IMAGE_COPY 3+A,61,19*A+1,80,19*(A+1)+1:DEPL=1
    END_IF
    2D_Target_is 20+A
    2D_Image_Paste 3+A,0,0
    2D_Target_is 1
Return

Boucle:
  If pause = 1 then return
  timer_off 10
  If D1= 1
      D1=0
      2D_image_paste Blanc%,X1*taille_case,Y1*taille_case
      Top 20,Y*taille_case : Left 20,X*taille_case : ' Affiche le joueur
  End_If

  N = N+1 :  A = N
  IF A <= N_Monstres
    L = RND(10)
    If L > 6
      gosub Change_dir
    Else
      gosub Test_dirM
      if depl=0 Then gosub Change_dir
    End_If
    Top 20+A,Ym(A)*taille_case : Left 20+A,Xm(A)*taille_case : Depl=0 : ' Affiche le monstre
  End_If
 
  IF N= VM THEN N=0
 
  For I=1 To N_Monstres :  If X=XM(I) and Y=YM(I) then gosub Collision : Next I
  If M = 0 Then Message "Niveau vidé, appuyez pour en faire un autre...": goto relance
  traite = 0
  timer_on 10
Return

Touche:
if traite = 0
traite = 1
touche_enfoncee = key_down_code
2D_Target_is 2
If touche_enfoncee = 37
' Gauche
  If X > 2
    If Etat(Y,X-1)<2 Then X1=X : Y1=Y : D1=1 : X=X-1 : 2D_IMAGE_COPY 3,0,0,20,20
  End_If
End_If

If touche_enfoncee = 39
' Droite
  If X < (Nb_Cases_ligne-1)
    If Etat(Y,X+1)<2 Then X1=X : Y1=Y : D1=1 : X=X+1: 2D_IMAGE_COPY 3,20,0,40,20
  End_If
End_If

If touche_enfoncee = 38
' Haut
  If Y > 2
    If Etat(Y-1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y-1: 2D_IMAGE_COPY 3,60,0,80,20
  End_If
End_If

If touche_enfoncee = 40
' Bas
  If Y < (Nb_lignes-1)
    If Etat(Y+1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y+1: 2D_IMAGE_COPY 3,40,0,60,20
  End_If
End_If

2D_Target_is 20
2D_Image_Paste 3,0,0
2D_Target_is 1

If touche_enfoncee = 88 or touche_enfoncee = 27 Then goto FIN

If touche_enfoncee =  80
 If Pause = 0 then Pause = 1 :else: Pause = 0
End_if

For I = 1 TO N_Monstres
  If X=XM(I) and Y=YM(I) then gosub Collision
Next I

If Etat(Y,X) = 1 Then Score=Score +10 : Etat(Y,X) = 0 : M=M-1 : Caption 13, "Score : " + RIGHT$("00000"+STR$(Score),5)
end_if
Return

Collision:
  Goto fin
Return

Charge_Niveau:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+8)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  Read A$
  For N = 1 TO Nb_Cases_ligne
    If Mid$(A$,N,1)="1"
        2D_Pen_Color 200,200,0 : 2D_Fill_Color 200,200,0
        2D_Rectangle N*taille_case+1,L*taille_case+1,(N+1)*taille_case-1, (L+1)*taille_case-1
        Etat(L,N)=2
    Else
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
 2D_Fill_color 255,255,255 : 2D_Pen_Color 255,0,0
 2D_Rectangle taille_case, (Nb_Lignes+2)*taille_case, (Nb_Cases_ligne+2)*taille_case- taille_case, (Nb_Lignes+8)*taille_case
 Alpha 11 : Left 11,21*taille_case : Top 11, (Nb_Lignes+3)*taille_case : font_name 11, "Courier"
 Caption 11, "Temps : 00000"
 Alpha 12 : Left 12, 6*(taille_case - 7) : Top 12, (Nb_Lignes+5.5)*taille_case : font_bold 12
 font_name 12, "Courier" : Height 12, taille_case+3: Font_size 12,taille_case : Font_color 12,200,200,0
 Caption 12, "- VORACE -  (Version Panoramique)"
 Alpha 13 : Left 13,3*taille_case  : Top 13, (Nb_Lignes+3)*taille_case : font_name 13, "Courier"
 Caption 13, "Score : 00000"
Show 1
2D_Pen_Color 255,255,255 : 2D_Fill_Color 255,255,255
Return

Fin:
 timer_off 10
 Message$ =  "*********************" +LF$+ "*  Partie terminée  *" +LF$+ "*********************"
 Message$ = Message$ +LF$ + LF$ + "Score: "+ STR$ (Score)
 Message$ = Message$ +LF$ + LF$ + "Rejouer ?"
 if Message_confirmation_yes_no (Message$) = 1 then Score = 0 : goto Relance
terminate
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: Vorace - une autre adaptation depuis l'Hector   Ven 16 Mar 2012 - 22:45

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

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 17 Mar 2012 - 3:30

J'ai adapté un peu: j'ai créé 4 picture de 1 à 54 contenant les images du joueur regardant dans les 4 directions, et j'affiche l'un ou l'autre de ces picture en fonction de la flèche frappée.

Mais il reste un scintillement, et c'est l'effacement de la pastille qui le provoque. Tu utlilises 2d_image_paste (c'est ce que j'aurais fait aussi). Or, le picture 1 (ton terrain de jeu) est raffraichi en entier après cette opération, et c'est le scintillement.

J'ai essayé deux méthodes alternatives: dessiner directement un rectangle blanc, et même dessiner une pastille blanche pour vider la case. Dans tous ces cas, le scintillement persiste, pour les mêmes raisons. L'introduction d'un DISPLAY ne change rien, ni même entourer la commande en cause par HIDE 1...SHOW 1 ou INACTIVE 1...ACTIVE 1. Je n'arrive pas à éviter le raffraichissement du picture 1.

Voici ce que j'ai fait:
Code:
' Vorace version converti en Panoramic par Jean-Charles
' Version original en Basic pour l'Hector ecrit par Eddy DUTERTRE

Label Charge_Niveau, Boucle, Relance, Fin, Touche, Collision, Change_dir
Label Test_dirM, relance2

Dim L,N,A,I,A$  : '  Compteur et variables diverses temporaires
Dim M          : '  Competeur de pastilles
Dim Nb_Cases_ligne, Nb_Lignes : Nb_Cases_ligne = 32 : Nb_Lignes = 20
Dim X,Y        : '  Coordonnées du joueur
Dim X1,Y1,D1    : '  Ancienne position du joueur pour effacer
Dim N_Monstres  : N_Monstres = 3 : ' Le nombre de monstres actifs (max 3)
Dim Xm(3),Ym(3),Vm : '  Coordonnées du monstre et vitesse de deplacement (+Vm est ganrd moins il va vite)
Dim S          : '  Direction du monstre
Dim Depl        : '  Deplace monstre si Depl = 1
Dim Etat(Nb_Lignes,Nb_Cases_ligne), traite
Dim Temps, Score, touche_enfoncee, Pause, Blanc%
Dim LF$, Message$ : LF$=CHR$(10)
Dim taille_case : taille_case=22  : ' à régler entre 10 et 22
Dim n_joueur : ' numéro de picture de l'image actuelle du joueur

Height 0, (Nb_Lignes+13)*taille_case : Width 0, (Nb_Cases_ligne + 4)*taille_case : color 0,255,255,255
Picture 1 : Picture 2 : Hide 2: TOP 2, -2000: Height 2,160 : Width 2,80 : File_load 2,"Sprites_Vorace.bmp"

For I = 0 to N_Monstres+1
  Picture 20 + I : Height 20 + I, 20 : Width 20+ I, 20
  Image 3+I: Top 3+I, -2000 : Hide 3+I
Next I
' créer les picture pour le joueur
  ' regarde à gauche
  Picture 51 : Hide 51 : Height 51, 20 : Width 51, 20
  2D_Target_Is 2 : 2D_IMAGE_COPY 3,0,0,20,20
  2D_Target_Is 51 : 2D_IMAGE_PASTE 3,0,0
  ' regarde à droite
  Picture 52 : Hide 52 : Height 52, 20 : Width 52, 20
  2D_Target_Is 2 : 2D_IMAGE_COPY 3,20,0,40,20
  2D_Target_Is 52 : 2D_IMAGE_PASTE 3,0,0
  ' regarde à haut
  Picture 53 : Hide 53 : Height 53, 20 : Width 53, 20
  2D_Target_Is 2 : 2D_IMAGE_COPY 3,60,0,80,20
  2D_Target_Is 53 : 2D_IMAGE_PASTE 3,0,0
  ' regarde à bas
  Picture 54 : Hide 54 : Height 54, 20 : Width 54, 20
  2D_Target_Is 2 : 2D_IMAGE_COPY 3,40,0,60,20
  2D_Target_Is 54 : 2D_IMAGE_PASTE 3,0,0
  n_joueur = 51 : ' au début: à gauche

Blanc% = 4+N_Monstres

 DATA 11111111111111111111111111111111  : ' L1
 DATA 10100000010000011000000100000001  : ' L2
 DATA 10101111010111110010101110111111  : ' L3
 DATA 10001000000100010010100010100001
 DATA 11110000000111000110001010100101
 DATA 10000111010101111100001010110101
 DATA 10111100010000110001111010100101
 DATA 10000101111110000111100010101101
 DATA 11110100010011111101001010101001
 DATA 10000111010110010001011010101011
 DATA 10111100010000000001001000000011
 DATA 10000101111111110111111111011111
 DATA 11110100011000110000000001010001
 DATA 10000111000010000111111111010001
 DATA 10111111111111111111011111010001
 DATA 10000000000000000000000000010001
 DATA 10100000010000011000000100000001
 DATA 10101111010111110010101110111111
 DATA 10001000000100000010100010000001
 DATA 11111111111111111111111111111111  : ' L20

Timer 10: Timer_interval 10,80 : Timer_off 10 : On_Timer 10, Boucle
Gosub Charge_Niveau
Score = 0

Relance2:

X1=0: Y1=0 : X = 2: Y=2: D1=0 : VM=3  : ' Position intiale du joueur
Xm(1) = 12 : Ym(1)= 6  :                ' Positions initiales des Voraces
Xm(2) = 22 : Ym(2)= 4  :  Xm(3) = 7  : Ym(3) = 13
Depl = 0 : S=1 : N=0 : traite = 0
n_joueur = 51
2D_Target_is 1
2D_IMAGE_COPY Blanc%,0,0,19,19

If VM < N_Monstres Then VM = N_Monstres

on_key_down 0,touche
timer_on 10
End

Relance:
 hide n_joueur
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+9)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  For N = 1 TO Nb_Cases_ligne
    If Etat(L,N)<>2
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
Show 1
2D_Pen_Color 255,255,255 : 2D_Fill_Color 255,255,255
goto relance2
return


Change_dir:
  FOR DEPL = 1000 TO 1 STEP -1
    S= INT(RND(4))+1
    Gosub Test_dirM
  NEXT DEPL
return

Test_dirM:

    2D_Target_is 2
    IF S=1 and XM(A) < Nb_Cases_ligne-2
      IF Etat(YM(A),XM(A)+1)<2 Then XM(A)=XM(A)+1: 2D_IMAGE_COPY 3+A,21,19*A+1,40,19*(A+1)+1:DEPL=1
    END_IF
    IF S=2 and YM(A) < Nb_lignes-2
      IF Etat(YM(A)+1,XM(A))<2 Then YM(A)=YM(A)+1: 2D_IMAGE_COPY 3+A,41,19*A+1,60,19*(A+1)+1:DEPL=1
    END_IF
    IF S=3 and XM(A) > 2
      IF Etat(YM(A),XM(A)-1)<2 Then XM(A)=XM(A)-1: 2D_IMAGE_COPY 3+A, 1,19*A+1,20,19*(A+1)+1:DEPL=1
    END_IF
    IF S=4 and YM(A) > 2
      IF Etat(YM(A)-1,XM(A))<2 Then YM(A)=YM(A)-1: 2D_IMAGE_COPY 3+A,61,19*A+1,80,19*(A+1)+1:DEPL=1
    END_IF
    2D_Target_is 20+A
    2D_Image_Paste 3+A,0,0
    2D_Target_is 1
    Top n_joueur,Y*taille_case : Left n_joueur,X*taille_case : ' Affiche le joueur
    show n_joueur
Return

Boucle:
  If pause = 1 then return
  timer_off 10
  If D1= 1
      D1=0
' méthode d'origine: coller un carré blanc
'      2D_image_paste Blanc%,X1*taille_case,Y1*taille_case
' première méthode alternative: dessiner un rectangle blanc
'      2D_rectangle X1*taille_case,Y1*taille_case,(X1+1)*taille_case,(Y1+1)*taille_case
' seconde méthode alternative: dessiner un cercle blanc
      2D_Circle (X1+0.5)*taille_case,(Y1+0.5)*taille_case,3
' ma s CHACUNE de ces 3 méthodes provoquent le scintillement ! Dommage...
      Top n_joueur,Y*taille_case : Left n_joueur,X*taille_case : ' Affiche le joueur
      show n_joueur
  End_If

  N = N+1 :  A = N
  IF A <= N_Monstres
    L = RND(10)
    If L > 6
      gosub Change_dir
    Else
      gosub Test_dirM
      if depl=0 Then gosub Change_dir
    End_If
    Top 20+A,Ym(A)*taille_case : Left 20+A,Xm(A)*taille_case : Depl=0 : ' Affiche le monstre
  End_If

  IF N= VM THEN N=0

  For I=1 To N_Monstres :  If X=XM(I) and Y=YM(I) then gosub Collision : Next I
  If M = 0 Then Message "Niveau vidé, appuyez pour en faire un autre...": goto relance
  traite = 0
  timer_on 10
Return

Touche:
if traite = 0
traite = 1
touche_enfoncee = key_down_code
If touche_enfoncee = 37
' Gauche
  If X > 2
'    If Etat(Y,X-1)<2 Then X1=X : Y1=Y : D1=1 : X=X-1 : 2D_IMAGE_COPY 3,0,0,20,20
    If Etat(Y,X-1)<2 Then X1=X : Y1=Y : D1=1 : X=X-1 : hide n_joueur : n_joueur = 51
  End_If
End_If

If touche_enfoncee = 39
' Droite
  If X < (Nb_Cases_ligne-1)
'    If Etat(Y,X+1)<2 Then X1=X : Y1=Y : D1=1 : X=X+1: 2D_IMAGE_COPY 3,20,0,40,20
    If Etat(Y,X+1)<2 Then X1=X : Y1=Y : D1=1 : X=X+1: hide n_joueur : n_joueur = 52
  End_If
End_If

If touche_enfoncee = 38
' Haut
  If Y > 2
'    If Etat(Y-1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y-1: 2D_IMAGE_COPY 3,60,0,80,20
    If Etat(Y-1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y-1: hide n_joueur : n_joueur = 53
  End_If
End_If

If touche_enfoncee = 40
' Bas
  If Y < (Nb_lignes-1)
'    If Etat(Y+1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y+1: 2D_IMAGE_COPY 3,40,0,60,20
    If Etat(Y+1,X)<2 Then X1=X : Y1=Y : D1=1 : Y=Y+1: hide n_joueur : n_joueur = 54
  End_If
End_If

If touche_enfoncee = 88 or touche_enfoncee = 27 Then goto FIN

If touche_enfoncee =  80
 If Pause = 0 then Pause = 1 :else: Pause = 0
End_if

For I = 1 TO N_Monstres
  If X=XM(I) and Y=YM(I) then gosub Collision
Next I

If Etat(Y,X) = 1 Then Score=Score +10 : Etat(Y,X) = 0 : M=M-1 : Caption 13, "Score : " + RIGHT$("00000"+STR$(Score),5)
end_if
Return

Collision:
  Goto fin
Return

Charge_Niveau:
 M = 0
 Hide 1 : 2D_Target_is 1 : font_color 1,100,255,100
 Height 1, (Nb_Lignes+8)*taille_case : Width 1, (Nb_Cases_ligne+2)*taille_case
 For L = 1 TO Nb_Lignes
  Read A$
  For N = 1 TO Nb_Cases_ligne
    If Mid$(A$,N,1)="1"
        2D_Pen_Color 200,200,0 : 2D_Fill_Color 200,200,0
        2D_Rectangle N*taille_case+1,L*taille_case+1,(N+1)*taille_case-1, (L+1)*taille_case-1
        Etat(L,N)=2
    Else
        If N=2 and L=2
          ' On ne mets pas de pastille à la position de départ
        Else
          2D_Pen_Color 0,200,200 : 2D_Fill_Color 0,200,200
          2D_Circle (N+0.5)*taille_case,(L+0.5)*taille_case,3
          Etat(L,N)=1 : M = M+1
        End_If
    End_If
  Next N
 Next L
 2D_Fill_color 255,255,255 : 2D_Pen_Color 255,0,0
 2D_Rectangle taille_case, (Nb_Lignes+2)*taille_case, (Nb_Cases_ligne+2)*taille_case- taille_case, (Nb_Lignes+8)*taille_case
 Alpha 11 : Left 11,21*taille_case : Top 11, (Nb_Lignes+3)*taille_case : font_name 11, "Courier"
 Caption 11, "Temps : 00000"
 Alpha 12 : Left 12, 6*(taille_case - 7) : Top 12, (Nb_Lignes+5.5)*taille_case : font_bold 12
 font_name 12, "Courier" : Height 12, taille_case+3: Font_size 12,taille_case : Font_color 12,200,200,0
 Caption 12, "- VORACE -  (Version Panoramique)"
 Alpha 13 : Left 13,3*taille_case  : Top 13, (Nb_Lignes+3)*taille_case : font_name 13, "Courier"
 Caption 13, "Score : 00000"
Show 1
2D_Pen_Color 255,255,255 : 2D_Fill_Color 255,255,255
Return

Fin:
 timer_off 10
 Message$ =  "*********************" +LF$+ "*  Partie terminée  *" +LF$+ "*********************"
 Message$ = Message$ +LF$ + LF$ + "Score: "+ STR$ (Score)
 Message$ = Message$ +LF$ + LF$ + "Rejouer ?"
 if Message_confirmation_yes_no (Message$) = 1 then Score = 0 : goto Relance
terminate
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jean Claude

avatar

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

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 17 Mar 2012 - 10:06

Salut à tous,

Je n'ai pas l'intention d’essayer, je travaille sur autre chose, mais pour ce problème de scintillement je suis de l'avis de Klaus (il n'y a pas de solution tel quel).
Je pense qu'avec des vrais SPRITE il n'y aurait pas de scintillement.

J'avais fait un truc avec un météore qui tombait sur une planète, le météore était un sprite et il n'y avait pas de scintillement.

Je ne prétend pas dire la vérité, j'indique une piste possible...

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

avatar

Nombre de messages : 1108
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   Sam 17 Mar 2012 - 10:12

Bonjour à tous, Very Happy
Avant de me replonger dans mes recherches généalogiques, ce matin je fais un détour par Panoramic!
La solution au problème est peut-être de mettre toutes les pastilles dans des "picture" sous forme de tableau picture (pastille). Et quand le glouton arrive sur la pastille, faire hide (pastille_no_i). Ainsi on n'utilise plus le 2d_paste qui provoque le scintillement.
Bonne journée à tous! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Vorace - une autre adaptation depuis l'Hector   

Revenir en haut Aller en bas
 
Vorace - une autre adaptation depuis l'Hector
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» PPLOT - conversion depuis le Basic d'Hector ...
» Un autre mystère
» Mon ordinateur troune au ralenti....depuis plusieurs jours.
» Comment faire un lien vers une autre page du site ?
» mettre à l'heure d'un autre pays

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: