Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Vorace - une autre adaptation depuis l'Hector | |
|
+4JL35 bignono lodchjo Jicehel 8 participants | |
Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Vorace - une autre adaptation depuis l'Hector Ven 9 Mar 2012 - 2: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 | |
| | | lodchjo
Nombre de messages : 162 Age : 53 Localisation : Anvers Date d'inscription : 26/12/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 9 Mar 2012 - 8:55 | |
| Très bien, Jicehel, joli adaptation!! Marche très bien, je ai fini le niveau 1 sans problème. 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'. Bonne journée! Lode | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 9 Mar 2012 - 9: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 ) | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 9 Mar 2012 - 23:04 | |
| Bonsoir à toi Jicehel 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 + | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 9 Mar 2012 - 23: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 - 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 | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 9 Mar 2012 - 23: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! 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! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 9 Mar 2012 - 23:44 | |
| ok, bignono, je le mets dans ma todo list | |
| | | lodchjo
Nombre de messages : 162 Age : 53 Localisation : Anvers Date d'inscription : 26/12/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Sam 10 Mar 2012 - 8: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? ) 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) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Sam 10 Mar 2012 - 11:39 | |
| C'est pô juste, je me suis fait bouffer moi aussi | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Vorace Sam 10 Mar 2012 - 12:10 | |
| Salut Jicehel! C'est beau et bien. Je m'en suis rassasié. Bien vorace qui mal y pense! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Sam 10 Mar 2012 - 12: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 !! 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 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Sam 10 Mar 2012 - 15: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 ! @Jicehel moi le 'Rechercher' ne marche pas aujourdhui, mais ça a remarché depuis, je n'y comprends rien. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Sam 10 Mar 2012 - 15: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... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Sam 10 Mar 2012 - 22:00 | |
| Ouais, ben moi j'chuis pas content: y a trop de bouffeur... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Mer 14 Mar 2012 - 22: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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 16 Mar 2012 - 7: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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 16 Mar 2012 - 12:07 | |
| J'ai pris le source et je vais regarder cela. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 16 Mar 2012 - 14:36 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 16 Mar 2012 - 16: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
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 16 Mar 2012 - 17: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 Bien vu, je savais que je pouvais compter sur toi. Merci pour ton analyse et le temps que tu y as passé. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 16 Mar 2012 - 20: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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Ven 16 Mar 2012 - 20:45 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Sam 17 Mar 2012 - 1: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 | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Sam 17 Mar 2012 - 8: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+ | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector Sam 17 Mar 2012 - 8:12 | |
| Bonjour à tous, 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! | |
| | | Contenu sponsorisé
| Sujet: Re: Vorace - une autre adaptation depuis l'Hector | |
| |
| | | | Vorace - une autre adaptation depuis l'Hector | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |