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 |
|
|
| PANGINE2D | |
| | |
Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 8:58 | |
| C'est donc bien un bug de la nouvelle version puisque ce code fonctionne avec la version d'avant | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 11:14 | |
| Je te mets le source gérant le multi-tirs et je te laisse réfléchir sur le multi-astéroides avec ces principes. Si tu sèches je te le coderais. Je vais regardais tes sprites, il y a quelques petits problèmes de pixels - Fichier source:
- Code:
-
' essai8.bas avec tir, collision, explosion, et fin de partie (Jean Claude, Jicehel, Papydall) rem ============================================================================ caption "Utilisez les touches du panneau numérique (1,2,3,4,6,7,8,9) ** SPACE pour tirer ** ESC pour sortir"
dim n% dim pi : pi = acos(-1) : ' mémorise la valeur pi dim x%,y%,vit_vai% : ' position et vitesse du vaisseau dim d : d = pi/2 : ' direction (c'est le cap) de départ du vaisseau (vers le haut) dim xA%,yA%,vit_ast_x%, vit_ast_y% : ' position et vitesse de l'asteroid dim Nb_tirs%,Cpt_tirs% : Nb_tirs%=5 : ' Nombre de tirs autorisés et compteur de tirs actifs dim tir$,tir%(Nb_tirs%), tir_x(Nb_tirs%),tir_y(Nb_tirs%),tir_d(Nb_tirs%),vit_mis% : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction et vitesse dim SpriteV% :' Pour savoir quelle image du vaisseau est en service (car d change dans la sub move) dim score% :' pour le score dim cpt_t_asteroide : ' ralentisseur pour les mouvements de l'asteroid
' Déclaration des étiquettes label touche,boucle_principale, fin
' création des sptites SPRITE 1 : SPRITE_POSITION 1,-50,-50 : SPRITE_FILE_LOAD 1,"image/VBG.bmp" : SPRITE_HIDE 1 SPRITE 2 : SPRITE_POSITION 2,-50,-50 : SPRITE_FILE_LOAD 2,"image/VB.bmp" : SPRITE_HIDE 2 SPRITE 3 : SPRITE_POSITION 3,-50,-50 : SPRITE_FILE_LOAD 3,"image/VBD.bmp" : SPRITE_HIDE 3 SPRITE 4 : SPRITE_POSITION 4,-50,-50 : SPRITE_FILE_LOAD 4,"image/VG.bmp" : SPRITE_HIDE 4 SPRITE 5 : SPRITE_POSITION 5,-50,-50 : SPRITE_FILE_LOAD 5,"image/VD.bmp" : SPRITE_HIDE 5 SPRITE 6 : SPRITE_POSITION 6,-50,-50 : SPRITE_FILE_LOAD 6,"image/VHG.bmp" : SPRITE_HIDE 6 SPRITE 7 : SPRITE_POSITION 7,-50,-50 : SPRITE_FILE_LOAD 7,"image/VH.bmp" : SPRITE_HIDE 7 SPRITE 8 : SPRITE_POSITION 8,-50,-50 : SPRITE_FILE_LOAD 8,"image/VHD.bmp" : SPRITE_HIDE 8 FOR n% = 1 TO Nb_tirs% SPRITE 39 + n% : SPRITE_POSITION 39 + n%,-50,-50 : SPRITE_FILE_LOAD 39 + n%,"image/balle.bmp" SPRITE_HIDE 39 + n% : ' le missile 1 à 5 tir%(n%) = 0 : ' Au début pas de tir actif NEXT n% SPRITE_ANIMATED 10 : SPRITE_POSITION 10,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 10,1,8,"image/rock8.bmp" : SPRITE_HIDE 10 : ' astéroide SPRITE_ANIMATED 11 : SPRITE_POSITION 11,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide SPRITE_ANIMATED 12 : SPRITE_POSITION 12,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 12,5,5,"image/meteore2.bmp" : SPRITE_HIDE 12 : ' explosion vaisseau ' SPRITE_ANIMATED 19 : SPRITE_POSITION 19,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 19,1,10,"image/zeroneuf.bmp" : SPRITE_HIDE 19 : ' chiffres animés pour le score SPRITE 20 : SPRITE_POSITION 20,-50,-50 : SPRITE_FILE_LOAD 20,"image/0.bmp" : SPRITE_HIDE 20 : ' chiffres pour le score SPRITE 21 : SPRITE_POSITION 21,-50,-50 : SPRITE_FILE_LOAD 21,"image/1.bmp" : SPRITE_HIDE 21 : ' chiffres pour le score SPRITE 22 : SPRITE_POSITION 22,-50,-50 : SPRITE_FILE_LOAD 22,"image/2.bmp" : SPRITE_HIDE 22 : ' chiffres pour le score SPRITE 23 : SPRITE_POSITION 23,-50,-50 : SPRITE_FILE_LOAD 23,"image/3.bmp" : SPRITE_HIDE 23 : ' chiffres pour le score SPRITE 24 : SPRITE_POSITION 24,-50,-50 : SPRITE_FILE_LOAD 24,"image/4.bmp" : SPRITE_HIDE 24 : ' chiffres pour le score SPRITE 25 : SPRITE_POSITION 25,-50,-50 : SPRITE_FILE_LOAD 25,"image/5.bmp" : SPRITE_HIDE 25 : ' chiffres pour le score SPRITE 26 : SPRITE_POSITION 26,-50,-50 : SPRITE_FILE_LOAD 26,"image/6.bmp" : SPRITE_HIDE 26 : ' chiffres pour le score SPRITE 27 : SPRITE_POSITION 27,-50,-50 : SPRITE_FILE_LOAD 27,"image/7.bmp" : SPRITE_HIDE 27 : ' chiffres pour le score SPRITE 28 : SPRITE_POSITION 28,-50,-50 : SPRITE_FILE_LOAD 28,"image/8.bmp" : SPRITE_HIDE 28 : ' chiffres pour le score SPRITE 29 : SPRITE_POSITION 29,-50,-50 : SPRITE_FILE_LOAD 29,"image/9.bmp" : SPRITE_HIDE 29 : ' chiffres pour le score
' init
x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : SpriteV% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=20 :' + => plus rapide cpt_t_asteroide = 0 : Cpt_tirs% = 0
new_asteroide() : SPRITE_SHOW 10 : ' Créé l'astéroid initial affiscore() on_key_down touche : ' Active la gestion de l'appuie des touches
timer 2 : timer_interval 2,15 : on_timer 2,boucle_principale : ' Activation du timer qui activera les tours de jeu
END
rem ============================================================================ SUB affiscore() if score%>9 then message "Bravo vous avez détruit 10 météore. Votre mission est terminée" : gosub fin if score% > 0 then SPRITE_HIDE 19 + score% SPRITE_SHOW 20 + score% END_SUB
rem ============================================================================ SUB vaisseau_detruit() ' animation de la destruction de la cible off_key_down sprite_position 10,xA%+20,yA%+20 : SPRITE_HIDE SpriteV% scene2d_interval 250 : scene2d_on sprite_position 12,(xA% - 60),(yA% - 60) : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14 pause 2000 : SPRITE_HIDE 12 scene2d_off END_SUB
rem ============================================================================ touche:
' Touches du pavé numérique if KEY_DOWN_CODE = 97 then move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then gosub fin : ' Echap if KEY_DOWN_CODE = 32 AND Cpt_tirs% < Nb_tirs% Cpt_tirs% = Cpt_tirs% + 1 tir%(Cpt_tirs%) = 1 : tir_d(Cpt_tirs%) = d : ' On mémorise qu'un tir est actif et la direction de ce tir
' On ajuste la position initale du tir en fonction de la direction du vaisseau if d = 5*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 33 if d = 3*pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% + 44 if d = 7*pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 33 if d = pi then tir_x(Cpt_tirs%) = x% : tir_y(Cpt_tirs%) = y% + 22 if d = 0 then tir_x(Cpt_tirs%) = x% + 44 : tir_y(Cpt_tirs%) = y% + 22 if d = 3*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 11 if d = pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% if d = pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 11 sprite_position 39+Cpt_tirs%,tir_x(Cpt_tirs%), tir_y(Cpt_tirs%) : SPRITE_SHOW 39+Cpt_tirs% end_if : ' Fin du traitement d'un appuie sur espace on_key_down touche return
rem ============================================================================ boucle_principale: timer_off 2: off_key_down cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 3 then asteroide() : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour Collision_AABB(xA%,yA%,22,24,x%,y%,32,32) :' vérifier si le vaisseau n'est pas en collision avec l'astéroide if tir$="OK" vaisseau_detruit() message "Votre vaisseau est détruit!" gosub fin end_if if Cpt_tirs% > 0 for n% = 1 to Cpt_tirs% if tir%(n%) = 1 then tir(n%) : ' Si un tir est actif, on gère son tour cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 3 then asteroide() : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour next n% end_if timer_on 2 : on_key_down touche return
rem ============================================================================ ' New_astéroide SUB new_asteroide() scene2d_interval 500 : scene2d_on vit_ast_x%= 0 : vit_ast_y%= 0 : ' On initialise le compteur pour un lancé aléatoire while (abs(vit_ast_x%) + abs(vit_ast_y%)) < 5 : ' On fixe une vitesse minimale en dessous vit_ast_x%=rnd(20) - 10 : vit_ast_y%=rnd(20) - 10 : ' de laquelle on n'accepte pas le tirage end_while : ' la vitesse peut être positive ou négative xA% = screen_x + 10 : yA% = screen_y + 10 : ' on fixe la position de départ de l'astéroid en bas à droite if vit_ast_x% > 0 then xA%=-10 : ' si la vitesse en x est positive, on change le point de départ à gauche if vit_ast_y% > 0 then yA%=-10 : ' si la vitesse en y est positive, on change le point de départ en haut sprite_position 10,xA%,yA% : ' on positionne notre asteroide END_SUB
rem ============================================================================ ' astéroide SUB asteroide() if ((xA% < (0-10)) and (vit_ast_x% < 0)) then new_asteroide() if ((xA% > (screen_x + 10)) and (vit_ast_x% > 0)) then new_asteroide() if ((yA% < (0-10)) and (vit_ast_y% < 0)) then new_asteroide() if ((yA% > (screen_y + 10)) and (vit_ast_y% > 0)) then new_asteroide() xA%=xA%+vit_ast_x% : yA%=yA%+vit_ast_y% : sprite_position 10,xA%,yA% scene2d_off END_SUB
rem ============================================================================ ' libère un tir SUB Annule_tir(N_t%) tir_d(N_t%) = tir_d(Cpt_tirs%) : tir_x(N_t%) = tir_x(Cpt_tirs%) : tir_y(N_t%) = tir_y(Cpt_tirs%) SPRITE_POSITION 39 + N_t%,tir_x(N_t%), tir_y(N_t%) : SPRITE_HIDE 39 + Cpt_tirs% tir%(Cpt_tirs%) = 0 : Cpt_tirs% = Cpt_tirs% - 1 END_SUB
rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir(N_t%) tir_x(N_t%) = tir_x(N_t%) + cos(tir_d(N_t%))* vit_mis% : tir_y(N_t%) = tir_y(N_t%) - sin(tir_d(N_t%)) * vit_mis% if (cos(tir_d(N_t%)) > 0 and tir_x(N_t%) > screen_x) or (cos(tir_d(N_t%)) < 0 and tir_x(N_t%) < 0 ) or (sin(tir_d(N_t%)) < 0 and tir_y(N_t%) > screen_y) or (sin(tir_d(N_t%)) > 0 and tir_y(N_t%) < 0 ) Annule_tir(N_t%) end_if sprite_position 39+N_t%,tir_x(N_t%), tir_y(N_t%) : ' Mouvement de la balle du tir Collision_AABB(tir_x(N_t%),tir_y(N_t%),16,16,xA%,yA%, 22,24) if tir$="OK" then tir_ok(N_t%) END_SUB
rem ============================================================================ SUB tir_ok(N_t%) ' animation de la destruction de la cible Annule_tir(N_t%) sprite_position 11,(xA% - 40),(yA% - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 200 : SPRITE_HIDE 10 : SPRITE_HIDE 11 on_key_down touche score%=score%+1 : affiscore() new_asteroide(): SPRITE_SHOW 10 END_SUB
rem ============================================================================ SUB Collision_AABB(r1_x%,r1_y%,r1_width,r1_height,r2_x%,r2_y%, r2_width,r2_height) Tir$="OK" IF ((r2_x% >= (r1_x% + r1_width)) OR ((r2_x% + r2_width) <= r1_x%) OR (r2_y% >= (r1_y% + r1_height)) OR ((r2_y% + r2_height) <= r1_y%)) THEN Tir$="" END_SUB
rem ============================================================================ ' d est la direction (le cap) que prendra le sprite SUB move(nsp%) select nsp% case 1 : x% = x% - vit_vai% : y% = y% + vit_vai% : d = 5*pi/4 case 2 : y% = y% + vit_vai% : d = 3*pi/2 case 3 : x% = x% + vit_vai% : y% = y% + vit_vai% : d = 7*pi/4 case 4 : x% = x% - vit_vai% : d = pi case 5 : x% = x% + vit_vai% : d = 0 case 6 : x% = x% - vit_vai% : y% = y% - vit_vai% : d = 3*pi/4 case 7 : y% = y% - vit_vai% : d = pi/2 case 8 : x% = x% + vit_vai% : y% = y% - vit_vai% : d = pi/4 end_select caption str$(nsp%) + ":" + str$(SpriteV%) if nsp% <> SpriteV% sprite_hide SpriteV% : SpriteV% = nsp% : sprite_position nsp%,x%,y% :sprite_show nsp% else sprite_position nsp%,x%,y% end_if ' Le mode ENROULE : si le sprite sort de la zone , il réapparait de l'autre côté if x% < 0 then x% = screen_x if x% > screen_x then x% = 0 if y% < 0 then y% = screen_y if y% > screen_y then y% = 0
END_SUB rem ============================================================================
fin: terminate return
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 11:57 | |
| OK Jicehel, Je me pencherais sur le multi-asréroïdes. Pas avant lundi, demain je vais visiter la grande bleu Et cet après midi, je suis devant les fourneaux. Si j'y parviens, ce sera l'occasion de faire un niveau 2. (5 astéroïdes détruits pour le premier niveau et ensuite on passe au multi-asréroïdes avec mission d'en détruire encore 5). Les tirs à répétition, ça donne un effet visuel assez sympa. Même si ça ne sert pas a grand chose, (Sauf peut-être pour le multi-asréroïdes). Par contre la partie s'arrête d'un coup (sans message d'erreur) s'il y a cumul de plusieurs tirs dont un qui fait mouche. Je pense qu'il faut ajouter off_key_down après la ligne 186 pour éviter cela. Je vais tenter de reproduire le problème et je verrais. Merci pour ton aide. A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 12:04 | |
| Où sont les fichiers 0.bmp, 1.bmp, ... 9.bmp ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 12:13 | |
| Je viens à l'instant de changer le zip sur mon Webdav.
Dedans il y a le nouvel éditeur, le dossier contenant les images, et 2 codes (niveau2.bas est en cours de codage, mais il fonctionne tel que).
A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 12:23 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 17:16 | |
| Jean-Claude, je te mets un lien vers un zip avec les images modifiées que j'ai fais ce matin. Je serais peu dispo jusqu'à demain soir fichier zip: image.zip | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 19:22 | |
| J'ai téléchargé.
Il faudra que tu me dise avec quoi tu travailles les Sprites. Moi j'utilise PhotoFiltre7.
Mais ça ne fait que 15 jours, alors là aussi j'ai à apprendre.
A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 19:58 | |
| OK, en attendant le invités (ils sont là), j'ai commencé le multi-asteroides. Je n'ai pas eu le temps de corriger. J'ai un access violation en lançant pour tester. Je poste juste le code avant de décrocher - Code:
- Code:
-
' essai8.bas avec tir, collision, explosion, et fin de partie (Jean Claude, Jicehel, Papydall) rem ============================================================================ caption "Utilisez les touches du panneau numérique (1,2,3,4,6,7,8,9) ** SPACE pour tirer ** ESC pour sortir"
dim n% dim pi : pi = acos(-1) : ' mémorise la valeur pi dim x%,y%,vit_vai% : ' position et vitesse du vaisseau dim d : d = pi/2 : ' direction (c'est le cap) de départ du vaisseau (vers le haut) dim Nb_tirs%,Cpt_tirs% : Nb_tirs%=5 : ' Nombre de tirs autorisés et compteur de tirs actifs dim tir$,tir%(Nb_tirs%), tir_x(Nb_tirs%),tir_y(Nb_tirs%),tir_d(Nb_tirs%),vit_mis% : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction et vitesse dim Nb_Asteroides%,Cpt_asteroides% : Nb_Asteroides% = 8 : ' Nombre d'Asteroides actifs dim xA%(Nb_Asteroides%),yA%(Nb_Asteroides%) : ' Position des asteroides dim vit_ast_x%(Nb_Asteroides%), vit_ast_y%(Nb_Asteroides%) : ' Vitesse des asteroides dim SpriteV% :' Pour savoir quelle image du vaisseau est en service (car d change dans la sub move) dim score% :' Pour le score dim cpt_t_asteroide : ' ralentisseur pour les mouvements de l'asteroid
' Déclaration des étiquettes label touche,boucle_principale, fin
' création des sptites SPRITE 1 : SPRITE_POSITION 1,-50,-50 : SPRITE_FILE_LOAD 1,"image/VBG.bmp" : SPRITE_HIDE 1 SPRITE 2 : SPRITE_POSITION 2,-50,-50 : SPRITE_FILE_LOAD 2,"image/VB.bmp" : SPRITE_HIDE 2 SPRITE 3 : SPRITE_POSITION 3,-50,-50 : SPRITE_FILE_LOAD 3,"image/VBD.bmp" : SPRITE_HIDE 3 SPRITE 4 : SPRITE_POSITION 4,-50,-50 : SPRITE_FILE_LOAD 4,"image/VG.bmp" : SPRITE_HIDE 4 SPRITE 5 : SPRITE_POSITION 5,-50,-50 : SPRITE_FILE_LOAD 5,"image/VD.bmp" : SPRITE_HIDE 5 SPRITE 6 : SPRITE_POSITION 6,-50,-50 : SPRITE_FILE_LOAD 6,"image/VHG.bmp" : SPRITE_HIDE 6 SPRITE 7 : SPRITE_POSITION 7,-50,-50 : SPRITE_FILE_LOAD 7,"image/VH.bmp" : SPRITE_HIDE 7 SPRITE 8 : SPRITE_POSITION 8,-50,-50 : SPRITE_FILE_LOAD 8,"image/VHD.bmp" : SPRITE_HIDE 8 FOR n% = 1 TO Nb_tirs% SPRITE 39 + n% : SPRITE_POSITION 39 + n%,-50,-50 : SPRITE_FILE_LOAD 39 + n%,"image/balle.bmp" SPRITE_HIDE 39 + n% : ' le missile 1 à 5 tir%(n%) = 0 : ' Au début pas de tir actif NEXT n% FOR n% = 1 TO Nb_Asteroides% SPRITE_ANIMATED 29 + n% : SPRITE_POSITION 29 + n% ,-50,-50 : ' Créé un sprite pour un astéroide SPRITE_ANIMATED_FILE_LOAD 29 + n% ,1,8,"image/rock8.bmp" : ' Charge le sprite animé correspondant à l'astéroide new_asteroide(n%) : SPRITE_SHOW 29 + n% : ' Créé l'astéroid initial NEXT n% Cpt_asteroides% = Nb_Asteroides% SPRITE_ANIMATED 11 : SPRITE_POSITION 11,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide SPRITE_ANIMATED 12 : SPRITE_POSITION 12,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 12,5,5,"image/meteore2.bmp" : SPRITE_HIDE 12 : ' explosion vaisseau ' SPRITE_ANIMATED 19 : SPRITE_POSITION 19,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 19,1,10,"image/zeroneuf.bmp" : SPRITE_HIDE 19 : ' chiffres animés pour le score SPRITE 20 : SPRITE_POSITION 20,-50,-50 : SPRITE_FILE_LOAD 20,"image/0.bmp" : SPRITE_HIDE 20 : ' chiffres pour le score SPRITE 21 : SPRITE_POSITION 21,-50,-50 : SPRITE_FILE_LOAD 21,"image/1.bmp" : SPRITE_HIDE 21 : ' chiffres pour le score SPRITE 22 : SPRITE_POSITION 22,-50,-50 : SPRITE_FILE_LOAD 22,"image/2.bmp" : SPRITE_HIDE 22 : ' chiffres pour le score SPRITE 23 : SPRITE_POSITION 23,-50,-50 : SPRITE_FILE_LOAD 23,"image/3.bmp" : SPRITE_HIDE 23 : ' chiffres pour le score SPRITE 24 : SPRITE_POSITION 24,-50,-50 : SPRITE_FILE_LOAD 24,"image/4.bmp" : SPRITE_HIDE 24 : ' chiffres pour le score SPRITE 25 : SPRITE_POSITION 25,-50,-50 : SPRITE_FILE_LOAD 25,"image/5.bmp" : SPRITE_HIDE 25 : ' chiffres pour le score SPRITE 26 : SPRITE_POSITION 26,-50,-50 : SPRITE_FILE_LOAD 26,"image/6.bmp" : SPRITE_HIDE 26 : ' chiffres pour le score SPRITE 27 : SPRITE_POSITION 27,-50,-50 : SPRITE_FILE_LOAD 27,"image/7.bmp" : SPRITE_HIDE 27 : ' chiffres pour le score SPRITE 28 : SPRITE_POSITION 28,-50,-50 : SPRITE_FILE_LOAD 28,"image/8.bmp" : SPRITE_HIDE 28 : ' chiffres pour le score SPRITE 29 : SPRITE_POSITION 29,-50,-50 : SPRITE_FILE_LOAD 29,"image/9.bmp" : SPRITE_HIDE 29 : ' chiffres pour le score
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : SpriteV% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=20 :' + => plus rapide cpt_t_asteroide = 0 : Cpt_tirs% = 0
affiscore() on_key_down touche : ' Active la gestion de l'appuie des touches
timer 2 : timer_interval 2,15 : on_timer 2,boucle_principale : ' Activation du timer qui activera les tours de jeu
END
rem ============================================================================ SUB affiscore() if score%>9 then message "Bravo vous avez détruit 10 météore. Votre mission est terminée" : gosub fin if score% > 0 then SPRITE_HIDE 19 + score% SPRITE_SHOW 20 + score% END_SUB
rem ============================================================================ SUB vaisseau_detruit() ' animation de la destruction de la cible off_key_down sprite_position 10,xA%+20,yA%+20 : SPRITE_HIDE SpriteV% scene2d_interval 250 : scene2d_on sprite_position 12,(xA% - 60),(yA% - 60) : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14 pause 2000 : SPRITE_HIDE 12 scene2d_off END_SUB
rem ============================================================================ SUB Test_collision_vaisseau(Aster%) Collision_AABB(xA%(Aster%),yA%(Aster%),22,24,x%,y%,32,32) :' vérifier si le vaisseau n'est pas en collision avec l'astéroide if tir$="OK" vaisseau_detruit() message "Votre vaisseau est détruit!" gosub fin end_if END_SUB
rem ============================================================================ touche:
' Touches du pavé numérique if KEY_DOWN_CODE = 97 then move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then gosub fin : ' Echap if KEY_DOWN_CODE = 32 AND Cpt_tirs% < Nb_tirs% Cpt_tirs% = Cpt_tirs% + 1 tir%(Cpt_tirs%) = 1 : tir_d(Cpt_tirs%) = d : ' On mémorise qu'un tir est actif et la direction de ce tir
' On ajuste la position initale du tir en fonction de la direction du vaisseau if d = 5*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 33 if d = 3*pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% + 44 if d = 7*pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 33 if d = pi then tir_x(Cpt_tirs%) = x% : tir_y(Cpt_tirs%) = y% + 22 if d = 0 then tir_x(Cpt_tirs%) = x% + 44 : tir_y(Cpt_tirs%) = y% + 22 if d = 3*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 11 if d = pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% if d = pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 11 sprite_position 39+Cpt_tirs%,tir_x(Cpt_tirs%), tir_y(Cpt_tirs%) : SPRITE_SHOW 39+Cpt_tirs% end_if : ' Fin du traitement d'un appuie sur espace on_key_down touche return
rem ============================================================================ boucle_principale: timer_off 2: off_key_down cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 3 then asteroide() : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour FOR n% = 1 TO Nb_Asteroides% Test_collision_vaisseau(n%) next n% if Cpt_tirs% > 0 for n% = 1 to Cpt_tirs% if tir%(n%) = 1 then tir(n%) : ' Si un tir est actif, on gère son tour cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 3 then asteroide() : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour next n% end_if timer_on 2 : on_key_down touche return
rem ============================================================================ ' New_astéroide SUB new_asteroide(Aster%) scene2d_interval 500 : scene2d_on vit_ast_x%(Aster%)= 0 : vit_ast_y%(Aster%)= 0 : ' On initialise le compteur pour un lancé aléatoire while (abs(vit_ast_x%(Aster%)) + abs(vit_ast_y%(Aster%))) < 5 : ' On fixe une vitesse minimale en dessous vit_ast_x%(Aster%)=rnd(20) - 10 : vit_ast_y%(Aster%)=rnd(20) - 10 : ' de laquelle on n'accepte pas le tirage end_while : ' la vitesse peut être positive ou négative xA%(Aster%) = screen_x + 10 : yA%(Aster%) = screen_y + 10 : ' on fixe la position de départ de l'astéroid en bas à droite if vit_ast_x%(Aster%) > 0 then xA%(Aster%)=-10 : ' si la vitesse en x est positive, on change le point de départ à gauche if vit_ast_y%(Aster%) > 0 then yA%(Aster%)=-10 : ' si la vitesse en y est positive, on change le point de départ en haut sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) : ' on positionne notre asteroide END_SUB
rem ============================================================================ ' astéroide SUB asteroide(Aster%) if ((xA%(Aster%) < (0-10)) and (vit_ast_x%(Aster%) < 0)) then new_asteroide(Aster%) if ((xA%(Aster%) > (screen_x + 10)) and (vit_ast_x%(Aster%) > 0)) then new_asteroide(Aster%) if ((yA%(Aster%) < (0-10)) and (vit_ast_y%(Aster%) < 0)) then new_asteroide(Aster%) if ((yA%(Aster%) > (screen_y + 10)) and (vit_ast_y%(Aster%) > 0)) then new_asteroide(Aster%) xA%(Aster%)=xA%(Aster%)+vit_ast_x%(Aster%) : yA%(Aster%)=yA%(Aster%)+vit_ast_y%(Aster%) sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) Test_collision_vaisseau(Aster%) scene2d_off END_SUB
rem ============================================================================ ' libère un tir SUB Annule_tir(N_t%) tir_d(N_t%) = tir_d(Cpt_tirs%) : tir_x(N_t%) = tir_x(Cpt_tirs%) : tir_y(N_t%) = tir_y(Cpt_tirs%) SPRITE_POSITION 39 + N_t%,tir_x(N_t%), tir_y(N_t%) : SPRITE_HIDE 39 + Cpt_tirs% tir%(Cpt_tirs%) = 0 : Cpt_tirs% = Cpt_tirs% - 1 END_SUB
rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir(N_t%) tir_x(N_t%) = tir_x(N_t%) + cos(tir_d(N_t%))* vit_mis% : tir_y(N_t%) = tir_y(N_t%) - sin(tir_d(N_t%)) * vit_mis% if (cos(tir_d(N_t%)) > 0 and tir_x(N_t%) > screen_x) or (cos(tir_d(N_t%)) < 0 and tir_x(N_t%) < 0 ) or (sin(tir_d(N_t%)) < 0 and tir_y(N_t%) > screen_y) or (sin(tir_d(N_t%)) > 0 and tir_y(N_t%) < 0 ) Annule_tir(N_t%) end_if sprite_position 39+N_t%,tir_x(N_t%), tir_y(N_t%) : ' Mouvement de la balle du tir FOR n% = 1 TO Nb_Asteroides% Collision_AABB(tir_x(N_t%),tir_y(N_t%),16,16,xA%(n%),yA%(n%), 22,24) if tir$="OK" then tir_ok(N_t%,n%) NEXT n% END_SUB
rem ============================================================================ SUB tir_ok(N_t%,N_a%) ' animation de la destruction de la cible Annule_tir(N_t%) off_key_down sprite_position 11,(xA%(N_a%) - 40),(yA%(N_a%) - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 200 : SPRITE_HIDE 29 + N_a% : SPRITE_HIDE 11 on_key_down touche score%=score%+1 : affiscore() new_asteroide(N_a%): SPRITE_SHOW 29 + N_a% END_SUB
rem ============================================================================ SUB Collision_AABB(r1_x%,r1_y%,r1_width,r1_height,r2_x%,r2_y%, r2_width,r2_height) Tir$="OK" IF ((r2_x% >= (r1_x% + r1_width)) OR ((r2_x% + r2_width) <= r1_x%) OR (r2_y% >= (r1_y% + r1_height)) OR ((r2_y% + r2_height) <= r1_y%)) THEN Tir$="" END_SUB
rem ============================================================================ ' d est la direction (le cap) que prendra le sprite SUB move(nsp%) select nsp% case 1 : x% = x% - vit_vai% : y% = y% + vit_vai% : d = 5*pi/4 case 2 : y% = y% + vit_vai% : d = 3*pi/2 case 3 : x% = x% + vit_vai% : y% = y% + vit_vai% : d = 7*pi/4 case 4 : x% = x% - vit_vai% : d = pi case 5 : x% = x% + vit_vai% : d = 0 case 6 : x% = x% - vit_vai% : y% = y% - vit_vai% : d = 3*pi/4 case 7 : y% = y% - vit_vai% : d = pi/2 case 8 : x% = x% + vit_vai% : y% = y% - vit_vai% : d = pi/4 end_select caption str$(nsp%) + ":" + str$(SpriteV%) if nsp% <> SpriteV% sprite_hide SpriteV% : SpriteV% = nsp% : sprite_position nsp%,x%,y% :sprite_show nsp% else sprite_position nsp%,x%,y% end_if ' Le mode ENROULE : si le sprite sort de la zone , il réapparait de l'autre côté if x% < 0 then x% = screen_x if x% > screen_x then x% = 0 if y% < 0 then y% = screen_y if y% > screen_y then y% = 0
END_SUB rem ============================================================================
fin: terminate return
Atention ouvrez le gestionnaire de taches pour pouvoir fermer Panoramic.exe si vous testez à cause de la violation d'accès memoire | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 21:31 | |
| @Jicehel, fait comme moi, prend un peu de repos. Tu n'as pas mis à jour tous les appels de la sub asteroide(x), en ligne 136 et 144. Ensuite tu as changé xA% par xA%(Nb_Asteroides%) dans la déclaration des variables, mais rien dans le reste du code. Idem pour yA%.... J'ose dire que c'est du travail baclé. Je tais dit que je ne ferais rien avant lundi, et et ce sera le cas. Alors il n'y a pas le feu. Bonne communion, et consacre toi à tes invités. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Sam 20 Juin 2015 - 23:33 | |
| Désolé, j'ai essayé de le faire avant qu'ils arrivent mais je n'ai pas eu le temps de refaire une passe de relecture. Les invités sont partis avant la journée de demain. J'ai relu le programme et modifié une partie des oublis mais j'ai encore dû en oublier puisque j'ai toujours un access violation. Je mets le code pour si quelqu'un peut y regarder demain. - Code:
- Code:
-
' essai8.bas avec tir, collision, explosion, et fin de partie (Jean Claude, Jicehel, Papydall) rem ============================================================================ caption "Utilisez les touches du panneau numérique (1,2,3,4,6,7,8,9) ** SPACE pour tirer ** ESC pour sortir"
dim n% dim pi : pi = acos(-1) : ' mémorise la valeur pi dim x%,y%,vit_vai% : ' position et vitesse du vaisseau dim d : d = pi/2 : ' direction (c'est le cap) de départ du vaisseau (vers le haut) dim Nb_tirs%,Cpt_tirs% : Nb_tirs%=5 : ' Nombre de tirs autorisés et compteur de tirs actifs dim tir$,tir%(Nb_tirs%), tir_x(Nb_tirs%),tir_y(Nb_tirs%),tir_d(Nb_tirs%),vit_mis% : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction et vitesse dim Nb_Asteroides%,Cpt_asteroides% : Nb_Asteroides% = 8 : ' Nombre d'Asteroides actifs dim xA%(Nb_Asteroides%),yA%(Nb_Asteroides%) : ' Position des asteroides dim vit_ast_x%(Nb_Asteroides%), vit_ast_y%(Nb_Asteroides%) : ' Vitesse des asteroides dim SpriteV% :' Pour savoir quelle image du vaisseau est en service (car d change dans la sub move) dim score% :' Pour le score dim cpt_t_asteroide : ' ralentisseur pour les mouvements de l'asteroid
' Déclaration des étiquettes label touche,boucle_principale, fin
' création des sptites SPRITE 1 : SPRITE_POSITION 1,-50,-50 : SPRITE_FILE_LOAD 1,"image/VBG.bmp" : SPRITE_HIDE 1 SPRITE 2 : SPRITE_POSITION 2,-50,-50 : SPRITE_FILE_LOAD 2,"image/VB.bmp" : SPRITE_HIDE 2 SPRITE 3 : SPRITE_POSITION 3,-50,-50 : SPRITE_FILE_LOAD 3,"image/VBD.bmp" : SPRITE_HIDE 3 SPRITE 4 : SPRITE_POSITION 4,-50,-50 : SPRITE_FILE_LOAD 4,"image/VG.bmp" : SPRITE_HIDE 4 SPRITE 5 : SPRITE_POSITION 5,-50,-50 : SPRITE_FILE_LOAD 5,"image/VD.bmp" : SPRITE_HIDE 5 SPRITE 6 : SPRITE_POSITION 6,-50,-50 : SPRITE_FILE_LOAD 6,"image/VHG.bmp" : SPRITE_HIDE 6 SPRITE 7 : SPRITE_POSITION 7,-50,-50 : SPRITE_FILE_LOAD 7,"image/VH.bmp" : SPRITE_HIDE 7 SPRITE 8 : SPRITE_POSITION 8,-50,-50 : SPRITE_FILE_LOAD 8,"image/VHD.bmp" : SPRITE_HIDE 8 FOR n% = 1 TO Nb_tirs% SPRITE 39 + n% : SPRITE_POSITION 39 + n%,-50,-50 : SPRITE_FILE_LOAD 39 + n%,"image/balle.bmp" SPRITE_HIDE 39 + n% : ' le missile 1 à 5 tir%(n%) = 0 : ' Au début pas de tir actif NEXT n% FOR n% = 1 TO Nb_Asteroides% SPRITE_ANIMATED 29 + n% : SPRITE_POSITION 29 + n% ,-50,-50 : ' Créé un sprite pour un astéroide SPRITE_ANIMATED_FILE_LOAD 29 + n% ,1,8,"image/rock8.bmp" : ' Charge le sprite animé correspondant à l'astéroide new_asteroide(n%) : SPRITE_SHOW 29 + n% : ' Créé l'astéroid initial NEXT n% Cpt_asteroides% = Nb_Asteroides% SPRITE_ANIMATED 11 : SPRITE_POSITION 11,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide SPRITE_ANIMATED 12 : SPRITE_POSITION 12,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 12,5,5,"image/meteore2.bmp" : SPRITE_HIDE 12 : ' explosion vaisseau ' SPRITE_ANIMATED 19 : SPRITE_POSITION 19,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 19,1,10,"image/zeroneuf.bmp" : SPRITE_HIDE 19 : ' chiffres animés pour le score SPRITE 20 : SPRITE_POSITION 20,-50,-50 : SPRITE_FILE_LOAD 20,"image/0.bmp" : SPRITE_HIDE 20 : ' chiffres pour le score SPRITE 21 : SPRITE_POSITION 21,-50,-50 : SPRITE_FILE_LOAD 21,"image/1.bmp" : SPRITE_HIDE 21 : ' chiffres pour le score SPRITE 22 : SPRITE_POSITION 22,-50,-50 : SPRITE_FILE_LOAD 22,"image/2.bmp" : SPRITE_HIDE 22 : ' chiffres pour le score SPRITE 23 : SPRITE_POSITION 23,-50,-50 : SPRITE_FILE_LOAD 23,"image/3.bmp" : SPRITE_HIDE 23 : ' chiffres pour le score SPRITE 24 : SPRITE_POSITION 24,-50,-50 : SPRITE_FILE_LOAD 24,"image/4.bmp" : SPRITE_HIDE 24 : ' chiffres pour le score SPRITE 25 : SPRITE_POSITION 25,-50,-50 : SPRITE_FILE_LOAD 25,"image/5.bmp" : SPRITE_HIDE 25 : ' chiffres pour le score SPRITE 26 : SPRITE_POSITION 26,-50,-50 : SPRITE_FILE_LOAD 26,"image/6.bmp" : SPRITE_HIDE 26 : ' chiffres pour le score SPRITE 27 : SPRITE_POSITION 27,-50,-50 : SPRITE_FILE_LOAD 27,"image/7.bmp" : SPRITE_HIDE 27 : ' chiffres pour le score SPRITE 28 : SPRITE_POSITION 28,-50,-50 : SPRITE_FILE_LOAD 28,"image/8.bmp" : SPRITE_HIDE 28 : ' chiffres pour le score SPRITE 29 : SPRITE_POSITION 29,-50,-50 : SPRITE_FILE_LOAD 29,"image/9.bmp" : SPRITE_HIDE 29 : ' chiffres pour le score
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : SpriteV% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=20 :' + => plus rapide cpt_t_asteroide = 0 : Cpt_tirs% = 0
affiscore() on_key_down touche : ' Active la gestion de l'appuie des touches
timer 2 : timer_interval 2,15 : on_timer 2,boucle_principale : ' Activation du timer qui activera les tours de jeu
END
rem ============================================================================ SUB affiscore() if score%>9 then message "Bravo vous avez détruit 10 météore. Votre mission est terminée" : gosub fin if score% > 0 then SPRITE_HIDE 19 + score% SPRITE_SHOW 20 + score% END_SUB
rem ============================================================================ SUB vaisseau_detruit(Aster%) ' animation de la destruction de la cible off_key_down sprite_position 29 + Aster%,xA%(Aster%)+20,yA%(Aster%)+20 : SPRITE_HIDE SpriteV% scene2d_interval 250 : scene2d_on sprite_position 12,(xA%(Aster%) - 60),(yA%(Aster%) - 60) : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14 pause 400 : SPRITE_HIDE 12 scene2d_off END_SUB
rem ============================================================================ SUB Test_collision_vaisseau(Aster%) Collision_AABB(xA%(Aster%),yA%(Aster%),22,24,x%,y%,32,32) :' vérifier si le vaisseau n'est pas en collision avec l'astéroide if tir$="OK" vaisseau_detruit(Aster%) message "Votre vaisseau est détruit!" gosub fin end_if END_SUB
rem ============================================================================ touche:
' Touches du pavé numérique if KEY_DOWN_CODE = 97 then move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then gosub fin : ' Echap if KEY_DOWN_CODE = 32 AND Cpt_tirs% < Nb_tirs% Cpt_tirs% = Cpt_tirs% + 1 tir%(Cpt_tirs%) = 1 : tir_d(Cpt_tirs%) = d : ' On mémorise qu'un tir est actif et la direction de ce tir
' On ajuste la position initale du tir en fonction de la direction du vaisseau if d = 5*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 33 if d = 3*pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% + 44 if d = 7*pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 33 if d = pi then tir_x(Cpt_tirs%) = x% : tir_y(Cpt_tirs%) = y% + 22 if d = 0 then tir_x(Cpt_tirs%) = x% + 44 : tir_y(Cpt_tirs%) = y% + 22 if d = 3*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 11 if d = pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% if d = pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 11 sprite_position 39+Cpt_tirs%,tir_x(Cpt_tirs%), tir_y(Cpt_tirs%) : SPRITE_SHOW 39+Cpt_tirs% end_if : ' Fin du traitement d'un appuie sur espace on_key_down touche return
rem ============================================================================ boucle_principale: timer_off 2: off_key_down cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 1 then asteroide(1) : asteroide(6) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(3) : asteroide(8) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 3 then asteroide(4) : asteroide(5) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 4 then asteroide(2) : asteroide(7) : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour FOR n% = 1 TO Nb_Asteroides% Test_collision_vaisseau(n%) next n% if Cpt_tirs% > 0 for n% = 1 to Cpt_tirs% if tir%(n%) = 1 then tir(n%) : ' Si un tir est actif, on gère son tour cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 1 then asteroide(1) : asteroide(6) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(3) : asteroide(8) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 3 then asteroide(4) : asteroide(5) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 4 then asteroide(2) : asteroide(7) : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour next n% end_if timer_on 2 : on_key_down touche return
rem ============================================================================ ' New_astéroide SUB new_asteroide(Aster%) scene2d_interval 500 : scene2d_on vit_ast_x%(Aster%)= 0 : vit_ast_y%(Aster%)= 0 : ' On initialise le compteur pour un lancé aléatoire while (abs(vit_ast_x%(Aster%)) + abs(vit_ast_y%(Aster%))) < 5 : ' On fixe une vitesse minimale en dessous vit_ast_x%(Aster%)=rnd(20) - 10 : vit_ast_y%(Aster%)=rnd(20) - 10 : ' de laquelle on n'accepte pas le tirage end_while : ' la vitesse peut être positive ou négative xA%(Aster%) = screen_x + 10 : yA%(Aster%) = screen_y + 10 : ' on fixe la position de départ de l'astéroid en bas à droite if vit_ast_x%(Aster%) > 0 then xA%(Aster%)=-10 : ' si la vitesse en x est positive, on change le point de départ à gauche if vit_ast_y%(Aster%) > 0 then yA%(Aster%)=-10 : ' si la vitesse en y est positive, on change le point de départ en haut sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) : ' on positionne notre asteroide END_SUB
rem ============================================================================ ' astéroide SUB asteroide(Aster%) if ((xA%(Aster%) < (0-10)) and (vit_ast_x%(Aster%) < 0)) then new_asteroide(Aster%) if ((xA%(Aster%) > (screen_x + 10)) and (vit_ast_x%(Aster%) > 0)) then new_asteroide(Aster%) if ((yA%(Aster%) < (0-10)) and (vit_ast_y%(Aster%) < 0)) then new_asteroide(Aster%) if ((yA%(Aster%) > (screen_y + 10)) and (vit_ast_y%(Aster%) > 0)) then new_asteroide(Aster%) xA%(Aster%)=xA%(Aster%)+vit_ast_x%(Aster%) : yA%(Aster%)=yA%(Aster%)+vit_ast_y%(Aster%) sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) Test_collision_vaisseau(Aster%) scene2d_off END_SUB
rem ============================================================================ ' libère un tir SUB Annule_tir(N_t%) tir_d(N_t%) = tir_d(Cpt_tirs%) : tir_x(N_t%) = tir_x(Cpt_tirs%) : tir_y(N_t%) = tir_y(Cpt_tirs%) SPRITE_POSITION 39 + N_t%,tir_x(N_t%), tir_y(N_t%) : SPRITE_HIDE 39 + Cpt_tirs% tir%(Cpt_tirs%) = 0 : Cpt_tirs% = Cpt_tirs% - 1 END_SUB
rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir(N_t%) tir_x(N_t%) = tir_x(N_t%) + cos(tir_d(N_t%))* vit_mis% : tir_y(N_t%) = tir_y(N_t%) - sin(tir_d(N_t%)) * vit_mis% if (cos(tir_d(N_t%)) > 0 and tir_x(N_t%) > screen_x) or (cos(tir_d(N_t%)) < 0 and tir_x(N_t%) < 0 ) or (sin(tir_d(N_t%)) < 0 and tir_y(N_t%) > screen_y) or (sin(tir_d(N_t%)) > 0 and tir_y(N_t%) < 0 ) Annule_tir(N_t%) end_if sprite_position 39+N_t%,tir_x(N_t%), tir_y(N_t%) : ' Mouvement de la balle du tir FOR n% = 1 TO Nb_Asteroides% Collision_AABB(tir_x(N_t%),tir_y(N_t%),16,16,xA%(n%),yA%(n%), 22,24) if tir$="OK" then tir_ok(N_t%,n%) NEXT n% END_SUB
rem ============================================================================ SUB tir_ok(N_t%,N_a%) ' animation de la destruction de la cible Annule_tir(N_t%) off_key_down sprite_position 11,(xA%(N_a%) - 40),(yA%(N_a%) - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 200 : SPRITE_HIDE 29 + N_a% : SPRITE_HIDE 11 on_key_down touche score%=score%+1 : affiscore() new_asteroide(N_a%): SPRITE_SHOW 29 + N_a% END_SUB
rem ============================================================================ SUB Collision_AABB(r1_x%,r1_y%,r1_width,r1_height,r2_x%,r2_y%, r2_width,r2_height) Tir$="OK" IF ((r2_x% >= (r1_x% + r1_width)) OR ((r2_x% + r2_width) <= r1_x%) OR (r2_y% >= (r1_y% + r1_height)) OR ((r2_y% + r2_height) <= r1_y%)) THEN Tir$="" END_SUB
rem ============================================================================ ' d est la direction (le cap) que prendra le sprite SUB move(nsp%) select nsp% case 1 : x% = x% - vit_vai% : y% = y% + vit_vai% : d = 5*pi/4 case 2 : y% = y% + vit_vai% : d = 3*pi/2 case 3 : x% = x% + vit_vai% : y% = y% + vit_vai% : d = 7*pi/4 case 4 : x% = x% - vit_vai% : d = pi case 5 : x% = x% + vit_vai% : d = 0 case 6 : x% = x% - vit_vai% : y% = y% - vit_vai% : d = 3*pi/4 case 7 : y% = y% - vit_vai% : d = pi/2 case 8 : x% = x% + vit_vai% : y% = y% - vit_vai% : d = pi/4 end_select caption str$(nsp%) + ":" + str$(SpriteV%) if nsp% <> SpriteV% sprite_hide SpriteV% : SpriteV% = nsp% : sprite_position nsp%,x%,y% :sprite_show nsp% else sprite_position nsp%,x%,y% end_if ' Le mode ENROULE : si le sprite sort de la zone , il réapparait de l'autre côté if x% < 0 then x% = screen_x if x% > screen_x then x% = 0 if y% < 0 then y% = screen_y if y% > screen_y then y% = 0
END_SUB rem ============================================================================
fin: terminate return
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Dim 21 Juin 2015 - 8:47 | |
| Avant la communion, j'ai vu que Jack avait fait une nouvelle version. Je mets si dessous la version compatible alpha3 - Code:
- Code:
-
' essai8.bas avec tir, collision, explosion, et fin de partie (Jean Claude, Jicehel, Papydall) rem ============================================================================ caption "Utilisez les touches du panneau numérique (1,2,3,4,6,7,8,9) ** SPACE pour tirer ** ESC pour sortir"
dim n%,i% dim pi : pi = acos(-1) : ' mémorise la valeur pi dim x%,y%,vit_vai% : ' position et vitesse du vaisseau dim d : d = pi/2 : ' direction (c'est le cap) de départ du vaisseau (vers le haut) dim Nb_tirs%,Cpt_tirs% : Nb_tirs%=5 : ' Nombre de tirs autorisés et compteur de tirs actifs dim tir$,tir%(Nb_tirs%), tir_x(Nb_tirs%),tir_y(Nb_tirs%),tir_d(Nb_tirs%),vit_mis% : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction et vitesse dim Nb_Asteroides%,Cpt_asteroides% : Nb_Asteroides% = 3 : ' Nombre d'Asteroides actifs dim xA%(Nb_Asteroides%),yA%(Nb_Asteroides%) : ' Position des asteroides dim vit_ast_x%(Nb_Asteroides%), vit_ast_y%(Nb_Asteroides%) : ' Vitesse des asteroides dim SpriteV% :' Pour savoir quelle image du vaisseau est en service (car d change dans la sub move) dim score% :' Pour le score dim cpt_t_asteroide : ' ralentisseur pour les mouvements de l'asteroid
' Déclaration des étiquettes label touche,boucle_principale, fin
' création des sptites SPRITE 1 : SPRITE_POSITION 1,-50,-50 : SPRITE_FILE_LOAD 1,"image/VBG.bmp" : SPRITE_HIDE 1 SPRITE 2 : SPRITE_POSITION 2,-50,-50 : SPRITE_FILE_LOAD 2,"image/VB.bmp" : SPRITE_HIDE 2 SPRITE 3 : SPRITE_POSITION 3,-50,-50 : SPRITE_FILE_LOAD 3,"image/VBD.bmp" : SPRITE_HIDE 3 SPRITE 4 : SPRITE_POSITION 4,-50,-50 : SPRITE_FILE_LOAD 4,"image/VG.bmp" : SPRITE_HIDE 4 SPRITE 5 : SPRITE_POSITION 5,-50,-50 : SPRITE_FILE_LOAD 5,"image/VD.bmp" : SPRITE_HIDE 5 SPRITE 6 : SPRITE_POSITION 6,-50,-50 : SPRITE_FILE_LOAD 6,"image/VHG.bmp" : SPRITE_HIDE 6 SPRITE 7 : SPRITE_POSITION 7,-50,-50 : SPRITE_FILE_LOAD 7,"image/VH.bmp" : SPRITE_HIDE 7 SPRITE 8 : SPRITE_POSITION 8,-50,-50 : SPRITE_FILE_LOAD 8,"image/VHD.bmp" : SPRITE_HIDE 8 FOR n% = 1 TO Nb_tirs% SPRITE 39 + n% : SPRITE_POSITION 39 + n%,-50,-50 : SPRITE_FILE_LOAD 39 + n%,"image/balle.bmp" SPRITE_HIDE 39 + n% : ' le missile 1 à 5 tir%(n%) = 0 : ' Au début pas de tir actif NEXT n% FOR n% = 1 TO Nb_Asteroides% SPRITE_ANIMATED 29 + n% : SPRITE_POSITION 29 + n% ,-50,-50 : ' Créé un sprite pour un astéroide SPRITE_ANIMATED_FILE_LOAD 29 + n% ,1,8,"image/rock9.bmp" : ' Charge le sprite animé correspondant à l'astéroide new_asteroide(n%) : SPRITE_SHOW 29 + n% : ' Créé l'astéroid initial NEXT n% Cpt_asteroides% = Nb_Asteroides% SPRITE_ANIMATED 11 : SPRITE_POSITION 11,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide SPRITE_ANIMATED 12 : SPRITE_POSITION 12,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 12,5,5,"image/meteore2.bmp" : SPRITE_HIDE 12 : ' explosion vaisseau ' SPRITE_ANIMATED 19 : SPRITE_POSITION 19,-50,-50 :SPRITE_ANIMATED_FILE_LOAD 19,1,10,"image/zeroneuf.bmp" : SPRITE_HIDE 19 : ' chiffres animés pour le score SPRITE 20 : SPRITE_POSITION 20,-50,-50 : SPRITE_FILE_LOAD 20,"image/0.bmp" : SPRITE_HIDE 20 : ' chiffres pour le score SPRITE 21 : SPRITE_POSITION 21,-50,-50 : SPRITE_FILE_LOAD 21,"image/1.bmp" : SPRITE_HIDE 21 : ' chiffres pour le score SPRITE 22 : SPRITE_POSITION 22,-50,-50 : SPRITE_FILE_LOAD 22,"image/2.bmp" : SPRITE_HIDE 22 : ' chiffres pour le score SPRITE 23 : SPRITE_POSITION 23,-50,-50 : SPRITE_FILE_LOAD 23,"image/3.bmp" : SPRITE_HIDE 23 : ' chiffres pour le score SPRITE 24 : SPRITE_POSITION 24,-50,-50 : SPRITE_FILE_LOAD 24,"image/4.bmp" : SPRITE_HIDE 24 : ' chiffres pour le score SPRITE 25 : SPRITE_POSITION 25,-50,-50 : SPRITE_FILE_LOAD 25,"image/5.bmp" : SPRITE_HIDE 25 : ' chiffres pour le score SPRITE 26 : SPRITE_POSITION 26,-50,-50 : SPRITE_FILE_LOAD 26,"image/6.bmp" : SPRITE_HIDE 26 : ' chiffres pour le score SPRITE 27 : SPRITE_POSITION 27,-50,-50 : SPRITE_FILE_LOAD 27,"image/7.bmp" : SPRITE_HIDE 27 : ' chiffres pour le score SPRITE 28 : SPRITE_POSITION 28,-50,-50 : SPRITE_FILE_LOAD 28,"image/8.bmp" : SPRITE_HIDE 28 : ' chiffres pour le score SPRITE 29 : SPRITE_POSITION 29,-50,-50 : SPRITE_FILE_LOAD 29,"image/9.bmp" : SPRITE_HIDE 29 : ' chiffres pour le score
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : SpriteV% = 7 : SPRITE_SHOW 7
' scene2D BACKGND_LOAD "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=20 :' + => plus rapide cpt_t_asteroide = 0 : Cpt_tirs% = 0
affiscore() on_key_down touche : ' Active la gestion de l'appuie des touches
timer 2 : timer_interval 2,20 : on_timer 2,boucle_principale : ' Activation du timer qui activera les tours de jeu
END
rem ============================================================================ SUB affiscore() if score%>9 then message "Bravo vous avez détruit 10 météore. Votre mission est terminée" : gosub fin if score% > 0 then SPRITE_HIDE 19 + score% SPRITE_SHOW 20 + score% END_SUB
rem ============================================================================ SUB vaisseau_detruit(Aster%) ' animation de la destruction de la cible off_key_down sprite_position 29 + Aster%,xA%(Aster%)+20,yA%(Aster%)+20 : SPRITE_HIDE SpriteV% scene2d_interval 250 : scene2d_on sprite_position 12,(xA%(Aster%) - 60),(yA%(Aster%) - 60) : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14 pause 400 : SPRITE_HIDE 12 scene2d_off END_SUB
rem ============================================================================ SUB Test_collision_vaisseau(Aster%) Collision_AABB(xA%(Aster%),yA%(Aster%),22,24,x%,y%,32,32) :' vérifier si le vaisseau n'est pas en collision avec l'astéroide if tir$="OK" vaisseau_detruit(Aster%) message "Votre vaisseau est détruit!" gosub fin end_if END_SUB
rem ============================================================================ touche:
' Touches du pavé numérique if KEY_DOWN_CODE = 97 then move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then gosub fin : ' Echap if KEY_DOWN_CODE = 32 AND Cpt_tirs% < Nb_tirs% Cpt_tirs% = Cpt_tirs% + 1 tir%(Cpt_tirs%) = 1 : tir_d(Cpt_tirs%) = d : ' On mémorise qu'un tir est actif et la direction de ce tir
' On ajuste la position initale du tir en fonction de la direction du vaisseau if d = 5*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 33 if d = 3*pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% + 44 if d = 7*pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 33 if d = pi then tir_x(Cpt_tirs%) = x% : tir_y(Cpt_tirs%) = y% + 22 if d = 0 then tir_x(Cpt_tirs%) = x% + 44 : tir_y(Cpt_tirs%) = y% + 22 if d = 3*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 11 if d = pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% if d = pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 11 sprite_position 39+Cpt_tirs%,tir_x(Cpt_tirs%), tir_y(Cpt_tirs%) : SPRITE_SHOW 39+Cpt_tirs% end_if : ' Fin du traitement d'un appuie sur espace on_key_down touche return
rem ============================================================================ boucle_principale: timer_off 2: off_key_down cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 1 then asteroide(1) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(3): ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(2) : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour FOR i% = 1 TO Nb_Asteroides% Test_collision_vaisseau(i%) next i% if Cpt_tirs% > 0 for i% = 1 to Cpt_tirs% if tir%(i%) = 1 then tir(i%) : ' Si un tir est actif, on gère son tour cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 1 then asteroide(1) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(3): ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(2) : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour next i% end_if timer_on 2 : on_key_down touche return
rem ============================================================================ ' New_astéroide SUB new_asteroide(Aster%) scene2d_interval 500 : scene2d_on vit_ast_x%(Aster%)= 0 : vit_ast_y%(Aster%)= 0 : ' On initialise le compteur pour un lancé aléatoire while (abs(vit_ast_x%(Aster%)) + abs(vit_ast_y%(Aster%))) < 5 : ' On fixe une vitesse minimale en dessous vit_ast_x%(Aster%)=rnd(20) - 10 : vit_ast_y%(Aster%)=rnd(20) - 10 : ' de laquelle on n'accepte pas le tirage end_while : ' la vitesse peut être positive ou négative xA%(Aster%) = screen_x + 10 : yA%(Aster%) = screen_y + 10 : ' on fixe la position de départ de l'astéroid en bas à droite if vit_ast_x%(Aster%) > 0 then xA%(Aster%)=-10 : ' si la vitesse en x est positive, on change le point de départ à gauche if vit_ast_y%(Aster%) > 0 then yA%(Aster%)=-10 : ' si la vitesse en y est positive, on change le point de départ en haut sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) : ' on positionne notre asteroide END_SUB
rem ============================================================================ ' astéroide SUB asteroide(Aster%) if ((xA%(Aster%) < (0-10)) and (vit_ast_x%(Aster%) < 0)) then new_asteroide(Aster%) if ((xA%(Aster%) > (screen_x + 10)) and (vit_ast_x%(Aster%) > 0)) then new_asteroide(Aster%) if ((yA%(Aster%) < (0-10)) and (vit_ast_y%(Aster%) < 0)) then new_asteroide(Aster%) if ((yA%(Aster%) > (screen_y + 10)) and (vit_ast_y%(Aster%) > 0)) then new_asteroide(Aster%) xA%(Aster%)=xA%(Aster%)+vit_ast_x%(Aster%) : yA%(Aster%)=yA%(Aster%)+vit_ast_y%(Aster%) sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) Test_collision_vaisseau(Aster%) scene2d_off END_SUB
rem ============================================================================ ' libère un tir SUB Annule_tir(N_t%) tir_d(N_t%) = tir_d(Cpt_tirs%) : tir_x(N_t%) = tir_x(Cpt_tirs%) : tir_y(N_t%) = tir_y(Cpt_tirs%) SPRITE_POSITION 39 + N_t%,tir_x(N_t%), tir_y(N_t%) : SPRITE_HIDE 39 + Cpt_tirs% tir%(Cpt_tirs%) = 0 : Cpt_tirs% = Cpt_tirs% - 1 END_SUB
rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir(N_t%) tir_x(N_t%) = tir_x(N_t%) + cos(tir_d(N_t%))* vit_mis% : tir_y(N_t%) = tir_y(N_t%) - sin(tir_d(N_t%)) * vit_mis% if (cos(tir_d(N_t%)) > 0 and tir_x(N_t%) > screen_x) or (cos(tir_d(N_t%)) < 0 and tir_x(N_t%) < 0 ) or (sin(tir_d(N_t%)) < 0 and tir_y(N_t%) > screen_y) or (sin(tir_d(N_t%)) > 0 and tir_y(N_t%) < 0 ) Annule_tir(N_t%) end_if sprite_position 39+N_t%,tir_x(N_t%), tir_y(N_t%) : ' Mouvement de la balle du tir FOR n% = 1 TO Nb_Asteroides% Collision_AABB(tir_x(N_t%),tir_y(N_t%),16,16,xA%(n%),yA%(n%), 22,24) if tir$="OK" then tir_ok(N_t%,n%) NEXT n% END_SUB
rem ============================================================================ SUB tir_ok(N_t%,N_a%) ' animation de la destruction de la cible Annule_tir(N_t%) off_key_down sprite_position 11,(xA%(N_a%) - 40),(yA%(N_a%) - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 200 : SPRITE_HIDE 29 + N_a% : SPRITE_HIDE 11 on_key_down touche score%=score%+1 : affiscore() new_asteroide(N_a%): SPRITE_SHOW 29 + N_a% END_SUB
rem ============================================================================ SUB Collision_AABB(r1_x%,r1_y%,r1_width,r1_height,r2_x%,r2_y%, r2_width,r2_height) Tir$="OK" IF ((r2_x% >= (r1_x% + r1_width)) OR ((r2_x% + r2_width) <= r1_x%) OR (r2_y% >= (r1_y% + r1_height)) OR ((r2_y% + r2_height) <= r1_y%)) THEN Tir$="" END_SUB
rem ============================================================================ ' d est la direction (le cap) que prendra le sprite SUB move(nsp%) select nsp% case 1 : x% = x% - vit_vai% : y% = y% + vit_vai% : d = 5*pi/4 case 2 : y% = y% + vit_vai% : d = 3*pi/2 case 3 : x% = x% + vit_vai% : y% = y% + vit_vai% : d = 7*pi/4 case 4 : x% = x% - vit_vai% : d = pi case 5 : x% = x% + vit_vai% : d = 0 case 6 : x% = x% - vit_vai% : y% = y% - vit_vai% : d = 3*pi/4 case 7 : y% = y% - vit_vai% : d = pi/2 case 8 : x% = x% + vit_vai% : y% = y% - vit_vai% : d = pi/4 end_select caption str$(nsp%) + ":" + str$(SpriteV%) if nsp% <> SpriteV% sprite_hide SpriteV% : SpriteV% = nsp% : sprite_position nsp%,x%,y% :sprite_show nsp% else sprite_position nsp%,x%,y% end_if ' Le mode ENROULE : si le sprite sort de la zone , il réapparait de l'autre côté if x% < 0 then x% = screen_x if x% > screen_x then x% = 0 if y% < 0 then y% = screen_y if y% > screen_y then y% = 0
END_SUB rem ============================================================================
fin: terminate return
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Dim 21 Juin 2015 - 9:25 | |
| Salut Jicehel, Encore des bonnes nouvelles ce matin. Pourrais-tu fournir cette image "image/rock9.bmp" (à moins qu'il s'agisse de "image/rock8.bmp") Apparemment la création en boucle pour les SPRITE_ANIMATED à l'air de poser un problème. Je vais devoir partir, si j'ai le temps je regarderais ce soir, sinon ce sera demain comme prévu. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Dim 21 Juin 2015 - 9:35 | |
| oui rock9.bmp c'est une copie de rock8.bmp que j'ai fais hier quand j'ai eu le problème de chargement de l'image en pensant que c'était un bug ponctuel. Le truc c'est que le bug se reproduit avec des fichiers variables et à priori dont le nom de fichier est assez aléatoire ou lié à des raisons qui m'échappent totalement.
Pour rock9.bmp ne t'embête pas a copier l'image. Change juste en 8, c'est un oubli de ma part de ne pas avoir remis rock8.bmp | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: PANGINE2D Dim 21 Juin 2015 - 9:38 | |
| Mais qu'est ce que tu fais encore là !! Allé ouste !!! A la communion !!! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Dim 21 Juin 2015 - 9:41 | |
| Je pars à 10H et on se prépare, on discute et je jette un coup d'oeil sur le forum ... Après, je ne sais pas trop à quelle heure je reviens ce soir | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Dim 21 Juin 2015 - 9:46 | |
| Salut Nardo. @Jicehel, Tu vas être en retard Pour ton code il faut que tu mette les SPRITE_POSITION après avoir chargé l'image, c'est ça qui coince. Bon cette fois-ci, c'est moi qui doit décroché. A ce soir. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Dim 21 Juin 2015 - 18:03 | |
| Bien essayé mais non le problème ne vient pas de là ... "Impossible to load file line 44" en retirant les sprite_position avant. Une fois de plus, je pense que si je reboot, la première fois, ça marchera très bien. - Code:
-
' essai8.bas avec tir, collision, explosion, et fin de partie (Jean Claude, Jicehel, Papydall) rem ============================================================================ caption "Utilisez les touches du panneau numérique (1,2,3,4,6,7,8,9) ** SPACE pour tirer ** ESC pour sortir"
dim n%,i% dim pi : pi = acos(-1) : ' mémorise la valeur pi dim x%,y%,vit_vai% : ' position et vitesse du vaisseau dim d : d = pi/2 : ' direction (c'est le cap) de départ du vaisseau (vers le haut) dim Nb_tirs%,Cpt_tirs% : Nb_tirs%=5 : ' Nombre de tirs autorisés et compteur de tirs actifs dim tir$,tir%(Nb_tirs%), tir_x(Nb_tirs%),tir_y(Nb_tirs%),tir_d(Nb_tirs%),vit_mis% : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction et vitesse dim Nb_Asteroides%,Cpt_asteroides% : Nb_Asteroides% = 3 : ' Nombre d'Asteroides actifs dim xA%(Nb_Asteroides%),yA%(Nb_Asteroides%) : ' Position des asteroides dim vit_ast_x%(Nb_Asteroides%), vit_ast_y%(Nb_Asteroides%) : ' Vitesse des asteroides dim SpriteV% :' Pour savoir quelle image du vaisseau est en service (car d change dans la sub move) dim score% :' Pour le score dim cpt_t_asteroide : ' ralentisseur pour les mouvements de l'asteroid
' Déclaration des étiquettes label touche,boucle_principale, fin
' création des sptites SPRITE 1 : SPRITE_FILE_LOAD 1,"image/VBG.bmp" : SPRITE_HIDE 1 SPRITE 2 : SPRITE_FILE_LOAD 2,"image/VB.bmp" : SPRITE_HIDE 2 SPRITE 3 : SPRITE_FILE_LOAD 3,"image/VBD.bmp" : SPRITE_HIDE 3 SPRITE 4 : SPRITE_FILE_LOAD 4,"image/VG.bmp" : SPRITE_HIDE 4 SPRITE 5 : SPRITE_FILE_LOAD 5,"image/VD.bmp" : SPRITE_HIDE 5 SPRITE 6 : SPRITE_FILE_LOAD 6,"image/VHG.bmp" : SPRITE_HIDE 6 SPRITE 7 : SPRITE_FILE_LOAD 7,"image/VH.bmp" : SPRITE_HIDE 7 SPRITE 8 : SPRITE_FILE_LOAD 8,"image/VHD.bmp" : SPRITE_HIDE 8 FOR n% = 1 TO Nb_tirs% SPRITE 39 + n% : SPRITE_FILE_LOAD 39 + n%,"image/balle.bmp" SPRITE_HIDE 39 + n% : ' le missile 1 à 5 tir%(n%) = 0 : ' Au début pas de tir actif NEXT n% FOR n% = 1 TO Nb_Asteroides% SPRITE_ANIMATED 29 + n% : ' Créé un sprite pour un astéroide SPRITE_ANIMATED_FILE_LOAD 29 + n% ,1,8,"image/rock9.bmp" : ' Charge le sprite animé correspondant à l'astéroide new_asteroide(n%) : SPRITE_SHOW 29 + n% : ' Créé l'astéroid initial NEXT n% Cpt_asteroides% = Nb_Asteroides% SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide SPRITE_ANIMATED 12 : SPRITE_ANIMATED_FILE_LOAD 12,5,5,"image/meteore2.bmp" : SPRITE_HIDE 12 : ' explosion vaisseau SPRITE 20 : SPRITE_FILE_LOAD 20,"image/0.bmp" : SPRITE_HIDE 20 : ' chiffres pour le score SPRITE 21 : SPRITE_FILE_LOAD 21,"image/1.bmp" : SPRITE_HIDE 21 : ' chiffres pour le score SPRITE 22 : SPRITE_FILE_LOAD 22,"image/2.bmp" : SPRITE_HIDE 22 : ' chiffres pour le score SPRITE 23 : SPRITE_FILE_LOAD 23,"image/3.bmp" : SPRITE_HIDE 23 : ' chiffres pour le score SPRITE 24 : SPRITE_FILE_LOAD 24,"image/4.bmp" : SPRITE_HIDE 24 : ' chiffres pour le score SPRITE 25 : SPRITE_FILE_LOAD 25,"image/5.bmp" : SPRITE_HIDE 25 : ' chiffres pour le score SPRITE 26 : SPRITE_FILE_LOAD 26,"image/6.bmp" : SPRITE_HIDE 26 : ' chiffres pour le score SPRITE 27 : SPRITE_FILE_LOAD 27,"image/7.bmp" : SPRITE_HIDE 27 : ' chiffres pour le score SPRITE 28 : SPRITE_FILE_LOAD 28,"image/8.bmp" : SPRITE_HIDE 28 : ' chiffres pour le score SPRITE 29 : SPRITE_FILE_LOAD 29,"image/9.bmp" : SPRITE_HIDE 29 : ' chiffres pour le score
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : SpriteV% = 7 : SPRITE_SHOW 7
' scene2D BACKGND_LOAD "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=20 :' + => plus rapide cpt_t_asteroide = 0 : Cpt_tirs% = 0
affiscore() on_key_down touche : ' Active la gestion de l'appuie des touches
timer 2 : timer_interval 2,20 : on_timer 2,boucle_principale : ' Activation du timer qui activera les tours de jeu
END
rem ============================================================================ SUB affiscore() if score%>9 then message "Bravo vous avez détruit 10 météore. Votre mission est terminée" : gosub fin if score% > 0 then SPRITE_HIDE 19 + score% SPRITE_SHOW 20 + score% END_SUB
rem ============================================================================ SUB vaisseau_detruit(Aster%) ' animation de la destruction de la cible off_key_down sprite_position 29 + Aster%,xA%(Aster%)+20,yA%(Aster%)+20 : SPRITE_HIDE SpriteV% scene2d_interval 250 : scene2d_on sprite_position 12,(xA%(Aster%) - 60),(yA%(Aster%) - 60) : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14 pause 400 : SPRITE_HIDE 12 scene2d_off END_SUB
rem ============================================================================ SUB Test_collision_vaisseau(Aster%) Collision_AABB(xA%(Aster%),yA%(Aster%),22,24,x%,y%,32,32) :' vérifier si le vaisseau n'est pas en collision avec l'astéroide if tir$="OK" vaisseau_detruit(Aster%) message "Votre vaisseau est détruit!" gosub fin end_if END_SUB
rem ============================================================================ touche:
' Touches du pavé numérique if KEY_DOWN_CODE = 97 then move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then gosub fin : ' Echap if KEY_DOWN_CODE = 32 AND Cpt_tirs% < Nb_tirs% Cpt_tirs% = Cpt_tirs% + 1 tir%(Cpt_tirs%) = 1 : tir_d(Cpt_tirs%) = d : ' On mémorise qu'un tir est actif et la direction de ce tir
' On ajuste la position initale du tir en fonction de la direction du vaisseau if d = 5*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 33 if d = 3*pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% + 44 if d = 7*pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 33 if d = pi then tir_x(Cpt_tirs%) = x% : tir_y(Cpt_tirs%) = y% + 22 if d = 0 then tir_x(Cpt_tirs%) = x% + 44 : tir_y(Cpt_tirs%) = y% + 22 if d = 3*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 11 if d = pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% if d = pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 11 sprite_position 39+Cpt_tirs%,tir_x(Cpt_tirs%), tir_y(Cpt_tirs%) : SPRITE_SHOW 39+Cpt_tirs% end_if : ' Fin du traitement d'un appuie sur espace on_key_down touche return
rem ============================================================================ boucle_principale: timer_off 2: off_key_down cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 1 then asteroide(1) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(3): ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(2) : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour FOR i% = 1 TO Nb_Asteroides% Test_collision_vaisseau(i%) next i% if Cpt_tirs% > 0 for i% = 1 to Cpt_tirs% if tir%(i%) = 1 then tir(i%) : ' Si un tir est actif, on gère son tour cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 1 then asteroide(1) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(3): ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(2) : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour next i% end_if timer_on 2 : on_key_down touche return
rem ============================================================================ ' New_astéroide SUB new_asteroide(Aster%) scene2d_interval 500 : scene2d_on vit_ast_x%(Aster%)= 0 : vit_ast_y%(Aster%)= 0 : ' On initialise le compteur pour un lancé aléatoire while (abs(vit_ast_x%(Aster%)) + abs(vit_ast_y%(Aster%))) < 5 : ' On fixe une vitesse minimale en dessous vit_ast_x%(Aster%)=rnd(20) - 10 : vit_ast_y%(Aster%)=rnd(20) - 10 : ' de laquelle on n'accepte pas le tirage end_while : ' la vitesse peut être positive ou négative xA%(Aster%) = screen_x + 10 : yA%(Aster%) = screen_y + 10 : ' on fixe la position de départ de l'astéroid en bas à droite if vit_ast_x%(Aster%) > 0 then xA%(Aster%)=-10 : ' si la vitesse en x est positive, on change le point de départ à gauche if vit_ast_y%(Aster%) > 0 then yA%(Aster%)=-10 : ' si la vitesse en y est positive, on change le point de départ en haut sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) : ' on positionne notre asteroide END_SUB
rem ============================================================================ ' astéroide SUB asteroide(Aster%) if ((xA%(Aster%) < (0-10)) and (vit_ast_x%(Aster%) < 0)) then new_asteroide(Aster%) if ((xA%(Aster%) > (screen_x + 10)) and (vit_ast_x%(Aster%) > 0)) then new_asteroide(Aster%) if ((yA%(Aster%) < (0-10)) and (vit_ast_y%(Aster%) < 0)) then new_asteroide(Aster%) if ((yA%(Aster%) > (screen_y + 10)) and (vit_ast_y%(Aster%) > 0)) then new_asteroide(Aster%) xA%(Aster%)=xA%(Aster%)+vit_ast_x%(Aster%) : yA%(Aster%)=yA%(Aster%)+vit_ast_y%(Aster%) sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) Test_collision_vaisseau(Aster%) scene2d_off END_SUB
rem ============================================================================ ' libère un tir SUB Annule_tir(N_t%) tir_d(N_t%) = tir_d(Cpt_tirs%) : tir_x(N_t%) = tir_x(Cpt_tirs%) : tir_y(N_t%) = tir_y(Cpt_tirs%) SPRITE_POSITION 39 + N_t%,tir_x(N_t%), tir_y(N_t%) : SPRITE_HIDE 39 + Cpt_tirs% tir%(Cpt_tirs%) = 0 : Cpt_tirs% = Cpt_tirs% - 1 END_SUB
rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir(N_t%) tir_x(N_t%) = tir_x(N_t%) + cos(tir_d(N_t%))* vit_mis% : tir_y(N_t%) = tir_y(N_t%) - sin(tir_d(N_t%)) * vit_mis% if (cos(tir_d(N_t%)) > 0 and tir_x(N_t%) > screen_x) or (cos(tir_d(N_t%)) < 0 and tir_x(N_t%) < 0 ) or (sin(tir_d(N_t%)) < 0 and tir_y(N_t%) > screen_y) or (sin(tir_d(N_t%)) > 0 and tir_y(N_t%) < 0 ) Annule_tir(N_t%) end_if sprite_position 39+N_t%,tir_x(N_t%), tir_y(N_t%) : ' Mouvement de la balle du tir FOR n% = 1 TO Nb_Asteroides% Collision_AABB(tir_x(N_t%),tir_y(N_t%),16,16,xA%(n%),yA%(n%), 22,24) if tir$="OK" then tir_ok(N_t%,n%) NEXT n% END_SUB
rem ============================================================================ SUB tir_ok(N_t%,N_a%) ' animation de la destruction de la cible Annule_tir(N_t%) off_key_down sprite_position 11,(xA%(N_a%) - 40),(yA%(N_a%) - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 200 : SPRITE_HIDE 29 + N_a% : SPRITE_HIDE 11 on_key_down touche score%=score%+1 : affiscore() new_asteroide(N_a%): SPRITE_SHOW 29 + N_a% END_SUB
rem ============================================================================ SUB Collision_AABB(r1_x%,r1_y%,r1_width,r1_height,r2_x%,r2_y%, r2_width,r2_height) Tir$="OK" IF ((r2_x% >= (r1_x% + r1_width)) OR ((r2_x% + r2_width) <= r1_x%) OR (r2_y% >= (r1_y% + r1_height)) OR ((r2_y% + r2_height) <= r1_y%)) THEN Tir$="" END_SUB
rem ============================================================================ ' d est la direction (le cap) que prendra le sprite SUB move(nsp%) select nsp% case 1 : x% = x% - vit_vai% : y% = y% + vit_vai% : d = 5*pi/4 case 2 : y% = y% + vit_vai% : d = 3*pi/2 case 3 : x% = x% + vit_vai% : y% = y% + vit_vai% : d = 7*pi/4 case 4 : x% = x% - vit_vai% : d = pi case 5 : x% = x% + vit_vai% : d = 0 case 6 : x% = x% - vit_vai% : y% = y% - vit_vai% : d = 3*pi/4 case 7 : y% = y% - vit_vai% : d = pi/2 case 8 : x% = x% + vit_vai% : y% = y% - vit_vai% : d = pi/4 end_select caption str$(nsp%) + ":" + str$(SpriteV%) if nsp% <> SpriteV% sprite_hide SpriteV% : SpriteV% = nsp% : sprite_position nsp%,x%,y% :sprite_show nsp% else sprite_position nsp%,x%,y% end_if ' Le mode ENROULE : si le sprite sort de la zone , il réapparait de l'autre côté if x% < 0 then x% = screen_x if x% > screen_x then x% = 0 if y% < 0 then y% = screen_y if y% > screen_y then y% = 0
END_SUB rem ============================================================================
fin: terminate return
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Dim 21 Juin 2015 - 20:10 | |
| @Jicehel, J'ai réussi à faire fonctionner ton code. Au début il plantai d'entrée. ensuite j'ai vu ceci: - Code:
-
dim Nb_tirs%,Cpt_tirs% : Nb_tirs%=5 : ' Nombre de tirs autorisés et compteur de tirs actifs dim tir$,tir%(Nb_tirs%), tir_x(Nb_tirs%),tir_y(Nb_tirs%),tir_d(Nb_tirs%),vit_mis% : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction et vitesse dim Nb_Asteroides%,Cpt_asteroides% : Nb_Asteroides% = 3 : ' Nombre d'Asteroides actifs dim xA%(Nb_Asteroides%),yA%(Nb_Asteroides%) : ' Position des asteroides dim vit_ast_x%(Nb_Asteroides%), vit_ast_y%(Nb_Asteroides%) : ' Vitesse des asteroides
Maintenant remplacedim tir$,tir%(Nb_tirs%), tir_x(Nb_tirs%),tir_y(Nb_tirs%),tir_d(Nb_tirs%),vit_mis% pardim tir$,tir%(5), tir_x(5),tir_y(5),tir_d(5),vit_mis%et pareil pourdim xA%(Nb_Asteroides%),yA%(Nb_Asteroides%) : ' Position des asteroides dim vit_ast_x%(Nb_Asteroides%), vit_ast_y%(Nb_Asteroides%) : ' Vitesse des asteroidespardim xA%(,yA%( : ' Position des asteroides dim vit_ast_x%(, vit_ast_y%( : ' Vitesse des asteroidesJe pense que ça devrait aller mieux, je l'espère. Vérifie et si c'est ça, on en parlera à Jack, car ce n'est pas normal. PS: tous ces jolies smileys, sont bien entendu des 8 entre parenthèses. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Dim 21 Juin 2015 - 21:01 | |
| Changement par des caleurs fixes et redémarrage de PANGINE2D => Problème identique .... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Lun 22 Juin 2015 - 8:05 | |
| @Jicehel, essai celui-ci, il fonctionne très bien chez moi. - Code:
-
' essai8.bas avec tir, collision, explosion, et fin de partie (Jean Claude, Jicehel, Papydall) rem ============================================================================ caption "Utilisez les touches du panneau numérique (1,2,3,4,6,7,8,9) ** SPACE pour tirer ** ESC pour sortir"
dim n%,i% dim pi : pi = acos(-1) : ' mémorise la valeur pi dim x%,y%,vit_vai% : ' position et vitesse du vaisseau dim d : d = pi/2 : ' direction (c'est le cap) de départ du vaisseau (vers le haut) dim Nb_tirs%,Cpt_tirs% : Nb_tirs%=5 : ' Nombre de tirs autorisés et compteur de tirs actifs dim tir$,tir%(Nb_tirs%), tir_x(Nb_tirs%),tir_y(Nb_tirs%),tir_d(Nb_tirs%),vit_mis% : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction et vitesse dim Nb_Asteroides%,Cpt_asteroides% : Nb_Asteroides% = 3 : ' Nombre d'Asteroides actifs dim xA%(Nb_Asteroides%),yA%(Nb_Asteroides%) : ' Position des asteroides dim vit_ast_x%(Nb_Asteroides%), vit_ast_y%(Nb_Asteroides%) : ' Vitesse des asteroides dim SpriteV% :' Pour savoir quelle image du vaisseau est en service (car d change dans la sub move) dim score% :' Pour le score dim cpt_t_asteroide : ' ralentisseur pour les mouvements de l'asteroid
' Déclaration des étiquettes label touche,boucle_principale, fin
' création des sptites SPRITE 1 : SPRITE_FILE_LOAD 1,"image/VBG.bmp" : SPRITE_HIDE 1 SPRITE 2 : SPRITE_FILE_LOAD 2,"image/VB.bmp" : SPRITE_HIDE 2 SPRITE 3 : SPRITE_FILE_LOAD 3,"image/VBD.bmp" : SPRITE_HIDE 3 SPRITE 4 : SPRITE_FILE_LOAD 4,"image/VG.bmp" : SPRITE_HIDE 4 SPRITE 5 : SPRITE_FILE_LOAD 5,"image/VD.bmp" : SPRITE_HIDE 5 SPRITE 6 : SPRITE_FILE_LOAD 6,"image/VHG.bmp" : SPRITE_HIDE 6 SPRITE 7 : SPRITE_FILE_LOAD 7,"image/VH.bmp" : SPRITE_HIDE 7 SPRITE 8 : SPRITE_FILE_LOAD 8,"image/VHD.bmp" : SPRITE_HIDE 8
SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide SPRITE_ANIMATED 12 : SPRITE_ANIMATED_FILE_LOAD 12,5,5,"image/meteore2.bmp" : SPRITE_HIDE 12 : ' explosion vaisseau
SPRITE 20 : SPRITE_FILE_LOAD 20,"image/0.bmp" : SPRITE_HIDE 20 : ' chiffres pour le score SPRITE 21 : SPRITE_FILE_LOAD 21,"image/1.bmp" : SPRITE_HIDE 21 : ' chiffres pour le score SPRITE 22 : SPRITE_FILE_LOAD 22,"image/2.bmp" : SPRITE_HIDE 22 : ' chiffres pour le score SPRITE 23 : SPRITE_FILE_LOAD 23,"image/3.bmp" : SPRITE_HIDE 23 : ' chiffres pour le score SPRITE 24 : SPRITE_FILE_LOAD 24,"image/4.bmp" : SPRITE_HIDE 24 : ' chiffres pour le score SPRITE 25 : SPRITE_FILE_LOAD 25,"image/5.bmp" : SPRITE_HIDE 25 : ' chiffres pour le score SPRITE 26 : SPRITE_FILE_LOAD 26,"image/6.bmp" : SPRITE_HIDE 26 : ' chiffres pour le score SPRITE 27 : SPRITE_FILE_LOAD 27,"image/7.bmp" : SPRITE_HIDE 27 : ' chiffres pour le score SPRITE 28 : SPRITE_FILE_LOAD 28,"image/8.bmp" : SPRITE_HIDE 28 : ' chiffres pour le score SPRITE 29 : SPRITE_FILE_LOAD 29,"image/9.bmp" : SPRITE_HIDE 29 : ' chiffres pour le score
FOR n% = 1 TO Nb_Asteroides% SPRITE_ANIMATED 29 + n% : ' Créé un sprite pour un astéroide SPRITE_ANIMATED_FILE_LOAD 29 + n% ,1,8,"image/rock8.bmp" : ' Charge le sprite animé correspondant à l'astéroide new_asteroide(n%) : SPRITE_SHOW 29 + n% : ' Créé l'astéroid initial NEXT n% Cpt_asteroides% = Nb_Asteroides%
FOR n% = 1 TO Nb_tirs% SPRITE 39 + n% : SPRITE_FILE_LOAD 39 + n%,"image/balle.bmp" SPRITE_HIDE 39 + n% : ' le missile 1 à 5 tir%(n%) = 0 : ' Au début pas de tir actif NEXT n%
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : SpriteV% = 7 : SPRITE_SHOW 7
' scene2D BACKGND_LOAD "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=20 :' + => plus rapide cpt_t_asteroide = 0 : Cpt_tirs% = 0
affiscore() on_key_down touche : ' Active la gestion de l'appuie des touches
timer 2 : timer_interval 2,20 : on_timer 2,boucle_principale : ' Activation du timer qui activera les tours de jeu
END
rem ============================================================================ SUB affiscore() if score%>9 then message "Bravo vous avez détruit 10 météore. Votre mission est terminée" : gosub fin if score% > 0 then SPRITE_HIDE 19 + score% SPRITE_SHOW 20 + score% END_SUB
rem ============================================================================ SUB vaisseau_detruit(Aster%) ' animation de la destruction de la cible off_key_down sprite_position 29 + Aster%,xA%(Aster%)+20,yA%(Aster%)+20 : SPRITE_HIDE SpriteV% scene2d_interval 250 : scene2d_on sprite_position 12,(xA%(Aster%) - 60),(yA%(Aster%) - 60) : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14 pause 400 : SPRITE_HIDE 12 scene2d_off END_SUB
rem ============================================================================ SUB Test_collision_vaisseau(Aster%) Collision_AABB(xA%(Aster%),yA%(Aster%),22,24,x%,y%,32,32) :' vérifier si le vaisseau n'est pas en collision avec l'astéroide if tir$="OK" vaisseau_detruit(Aster%) message "Votre vaisseau est détruit!" gosub fin end_if END_SUB
rem ============================================================================ touche:
' Touches du pavé numérique if KEY_DOWN_CODE = 97 then move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then gosub fin : ' Echap if KEY_DOWN_CODE = 32 AND Cpt_tirs% < Nb_tirs% Cpt_tirs% = Cpt_tirs% + 1 tir%(Cpt_tirs%) = 1 : tir_d(Cpt_tirs%) = d : ' On mémorise qu'un tir est actif et la direction de ce tir
' On ajuste la position initale du tir en fonction de la direction du vaisseau if d = 5*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 33 if d = 3*pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% + 44 if d = 7*pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 33 if d = pi then tir_x(Cpt_tirs%) = x% : tir_y(Cpt_tirs%) = y% + 22 if d = 0 then tir_x(Cpt_tirs%) = x% + 44 : tir_y(Cpt_tirs%) = y% + 22 if d = 3*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 11 if d = pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% if d = pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 11 sprite_position 39+Cpt_tirs%,tir_x(Cpt_tirs%), tir_y(Cpt_tirs%) : SPRITE_SHOW 39+Cpt_tirs% end_if : ' Fin du traitement d'un appuie sur espace on_key_down touche return
rem ============================================================================ boucle_principale: timer_off 2: off_key_down cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 1 then asteroide(1) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(3): ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(2) : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour FOR i% = 1 TO Nb_Asteroides% Test_collision_vaisseau(i%) next i% if Cpt_tirs% > 0 for i% = 1 to Cpt_tirs% if tir%(i%) = 1 then tir(i%) : ' Si un tir est actif, on gère son tour cpt_t_asteroide = cpt_t_asteroide + 1 if cpt_t_asteroide = 1 then asteroide(1) : ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(3): ' On gère notre asteroid pour ce tour if cpt_t_asteroide = 2 then asteroide(2) : cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour next i% end_if timer_on 2 : on_key_down touche return
rem ============================================================================ ' New_astéroide SUB new_asteroide(Aster%) scene2d_interval 500 : scene2d_on vit_ast_x%(Aster%)= 0 : vit_ast_y%(Aster%)= 0 : ' On initialise le compteur pour un lancé aléatoire while (abs(vit_ast_x%(Aster%)) + abs(vit_ast_y%(Aster%))) < 5 : ' On fixe une vitesse minimale en dessous vit_ast_x%(Aster%)=rnd(20) - 10 : vit_ast_y%(Aster%)=rnd(20) - 10 : ' de laquelle on n'accepte pas le tirage end_while : ' la vitesse peut être positive ou négative xA%(Aster%) = screen_x + 10 : yA%(Aster%) = screen_y + 10 : ' on fixe la position de départ de l'astéroid en bas à droite if vit_ast_x%(Aster%) > 0 then xA%(Aster%)=-10 : ' si la vitesse en x est positive, on change le point de départ à gauche if vit_ast_y%(Aster%) > 0 then yA%(Aster%)=-10 : ' si la vitesse en y est positive, on change le point de départ en haut sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) : ' on positionne notre asteroide END_SUB
rem ============================================================================ ' astéroide SUB asteroide(Aster%) if ((xA%(Aster%) < (0-10)) and (vit_ast_x%(Aster%) < 0)) then new_asteroide(Aster%) if ((xA%(Aster%) > (screen_x + 10)) and (vit_ast_x%(Aster%) > 0)) then new_asteroide(Aster%) if ((yA%(Aster%) < (0-10)) and (vit_ast_y%(Aster%) < 0)) then new_asteroide(Aster%) if ((yA%(Aster%) > (screen_y + 10)) and (vit_ast_y%(Aster%) > 0)) then new_asteroide(Aster%) xA%(Aster%)=xA%(Aster%)+vit_ast_x%(Aster%) : yA%(Aster%)=yA%(Aster%)+vit_ast_y%(Aster%) sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%) Test_collision_vaisseau(Aster%) scene2d_off END_SUB
rem ============================================================================ ' libère un tir SUB Annule_tir(N_t%) tir_d(N_t%) = tir_d(Cpt_tirs%) : tir_x(N_t%) = tir_x(Cpt_tirs%) : tir_y(N_t%) = tir_y(Cpt_tirs%) SPRITE_POSITION 39 + N_t%,tir_x(N_t%), tir_y(N_t%) : SPRITE_HIDE 39 + Cpt_tirs% tir%(Cpt_tirs%) = 0 : Cpt_tirs% = Cpt_tirs% - 1 END_SUB
rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir(N_t%) tir_x(N_t%) = tir_x(N_t%) + cos(tir_d(N_t%))* vit_mis% : tir_y(N_t%) = tir_y(N_t%) - sin(tir_d(N_t%)) * vit_mis% if (cos(tir_d(N_t%)) > 0 and tir_x(N_t%) > screen_x) or (cos(tir_d(N_t%)) < 0 and tir_x(N_t%) < 0 ) or (sin(tir_d(N_t%)) < 0 and tir_y(N_t%) > screen_y) or (sin(tir_d(N_t%)) > 0 and tir_y(N_t%) < 0 ) Annule_tir(N_t%) end_if sprite_position 39+N_t%,tir_x(N_t%), tir_y(N_t%) : ' Mouvement de la balle du tir FOR n% = 1 TO Nb_Asteroides% Collision_AABB(tir_x(N_t%),tir_y(N_t%),16,16,xA%(n%),yA%(n%), 22,24) if tir$="OK" then tir_ok(N_t%,n%) NEXT n% END_SUB
rem ============================================================================ SUB tir_ok(N_t%,N_a%) ' animation de la destruction de la cible Annule_tir(N_t%) off_key_down sprite_position 11,(xA%(N_a%) - 40),(yA%(N_a%) - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 200 : SPRITE_HIDE 29 + N_a% : SPRITE_HIDE 11 on_key_down touche score%=score%+1 : affiscore() new_asteroide(N_a%): SPRITE_SHOW 29 + N_a% END_SUB
rem ============================================================================ SUB Collision_AABB(r1_x%,r1_y%,r1_width,r1_height,r2_x%,r2_y%, r2_width,r2_height) Tir$="OK" IF ((r2_x% >= (r1_x% + r1_width)) OR ((r2_x% + r2_width) <= r1_x%) OR (r2_y% >= (r1_y% + r1_height)) OR ((r2_y% + r2_height) <= r1_y%)) THEN Tir$="" END_SUB
rem ============================================================================ ' d est la direction (le cap) que prendra le sprite SUB move(nsp%) select nsp% case 1 : x% = x% - vit_vai% : y% = y% + vit_vai% : d = 5*pi/4 case 2 : y% = y% + vit_vai% : d = 3*pi/2 case 3 : x% = x% + vit_vai% : y% = y% + vit_vai% : d = 7*pi/4 case 4 : x% = x% - vit_vai% : d = pi case 5 : x% = x% + vit_vai% : d = 0 case 6 : x% = x% - vit_vai% : y% = y% - vit_vai% : d = 3*pi/4 case 7 : y% = y% - vit_vai% : d = pi/2 case 8 : x% = x% + vit_vai% : y% = y% - vit_vai% : d = pi/4 end_select caption str$(nsp%) + ":" + str$(SpriteV%) if nsp% <> SpriteV% sprite_hide SpriteV% : SpriteV% = nsp% : sprite_position nsp%,x%,y% :sprite_show nsp% else sprite_position nsp%,x%,y% end_if ' Le mode ENROULE : si le sprite sort de la zone , il réapparait de l'autre côté if x% < 0 then x% = screen_x if x% > screen_x then x% = 0 if y% < 0 then y% = screen_y if y% > screen_y then y% = 0
END_SUB rem ============================================================================
fin: terminate return
Si ça marche, on en reparle. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Lun 22 Juin 2015 - 10:06 | |
| Avec plaisir Jean-Claude.
PS: Normalement, le positionnement du sprite avant le chargement doit marché car même s'il n'y a pas d'image dedans, le sprite existe. Par contre, je l'ai supprimé car j'avais oublié qu'il ne sert à rien avant le chargement car le sprite chargé s'affiche quand même en 0,0. Il faudrait donc mieux créer un view décalé de 200 en X durant le chargement.Après on pourrait supprimer le view puisque les sprite seront chargés une fois pour toute et cachés (Ca éviterait d'avoir à décaler tous les sprites de 200 après durant le jeu) Je n'en suis pas sûr mais je crois que Jack avait écrit une commande pour que les sprites ne soient pas affiché lors de leur chargement. Ce soir en rentrant si personne n'a retrouvé cette commande, je chercherais. Ma mémoire me joue peut être des tours aussi et je te confirmerais si ta version fonctionne bien ou non chez moi. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Lun 22 Juin 2015 - 11:21 | |
| Je ne vois pas de quelle commande tu parles. De toute façon on peut très bien les créer en dehors de l'écran. D'ailleurs, j'ai adapté asterV1 au dernier éditeur et les SPRITE_POSITION sont avant le chargement de l'mage et ça marche. Bref, ça n'a pas d'importance, j'ai finalisé les 2 versions et elle fonctionnent parfaitement bien. Je vais ouvrir un nouveau poste pour avoir les réactions par rapport aux jeux. Je dois dire que asterV2 est particulièrement sympa à jouer, ni trop facile, ni trop difficile. J'ai corrigé l'affichage pour avoir le nombre 10 à la fin. La Grande Question:Pourquoi ça marche maintenant, j'avoue que je ne sais pas pourquoi. Je me suis contenté de déplacer les création de sprite, dans le code, pour pouvoir suivre plus facilement la numérotation. Et après, bingo, ça marche impec J'ai pensé un moment que c'était la création en boucle qui n'allait pas, apparemment non. Je te laisse le soins de comparer les 2 codes, il n'y a pratiquement pas de différence, mais tu trouveras peut-être pourquoi. J'ai étudier ta façon de faire, pour avoir 3 astéroïdes dans le même tour, j'ai compris le système et j'ai vu aussi que tu contrôles l'état de chaque "balles" avec trir%(n%), ça c'est très malin, je n'y aurait pas pensé. Donc le but est atteint: ça fonctionne et j'ais compris. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Lun 22 Juin 2015 - 11:45 | |
| Super Je suis content tu sembles avoir plein d'idées et d'envie de développement de jeux et moi je sais à peu près faire (même si je fais des erreurs et que je bloque aussi parfois sur des trucs et que je suis bien content que vous m'apportiez vos solutions ou votre aide dans la réfléxion, l'approche ou de nouvelles fonctions dans KGF ). Par contre, j'ai envie de faire plein de trucs, mais je n'en ais ni le temps, ni même le courage en ce moment pour diverses raisons alors je suis bien content de pouvoir t'aider. D'une part, ça me motive et d'autre part, je sens que l'on va avoir pleins de nouveaux jeux sympas à tester pour se défouler et s'amuser. Je compare ce soir, voir si je trouve pourquoi ça fonctionne (si cela peut s'expliquer) ou s'il y a un bug de fiabilité dans Pangine2D qui peut se produire dans certains cas lors du chargement des sprites (mais pas évident à reproduire à priori). Qaund tu décales le sprites, il ne s'affiche pas lors du chargement de l'image ? Je retesterais ça ce soir. De toute façon sinon je ferais le système du view pour qu'ils n'apparaissent plus lors du chargement (je ne sais pas, mais ça doit être possible aussi autrement) Tu peux aussi faire une grande image et jouer avec le view pour faire un scrolling vertical en début de jeu | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Lun 22 Juin 2015 - 12:16 | |
| Pour le moment, j'ai deux choses en tête ( ça en fait une de trop ) 1) Faire un générique avec le SCROLLING 2) Mettre un peut de son avec SOUND Une bonne occasion de tester ces 2 commandes avec la version 3 de l'éditeur. Je ne manquerai pas d'appeler au secours, si besoin, mais de grâce, laisse moi le temps En tous cas, ce jeux n'existerait pas sans ta contribution. A+ | |
| | | Contenu sponsorisé
| Sujet: Re: PANGINE2D | |
| |
| | | | PANGINE2D | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |