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 |
---|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Mar 16 Juin 2015 - 18:52 | |
| De l'aide ! ho oui, je vais en avoir besoin. Et vous, vous aurez besoin de paracétamol, pour vaincre... BON, plus sérieusement. Maintenant je peux le dire: PANGINE2D, c'est génial et encore, je n'ai pas tout exploité.Jack, tu vas devoir améliorer l'éditeur: Uniquement, dans un premier temps, sur le minimum. Par exemple: j'ai séché pendant un bon 1/4 d'heure à cause d'un commentaire mal écrit ('blabla) Pas d'espace entre l'apostrophe et le texte...... Vous allez pouvoir tester, mais attention: ça plante à la fermeture, il faudra ne pas oublier de tuer tout les Panoramic.exe qui tournent. testez essai7.bas (c'est sur le Webdav, car il y a des nouvelles images) Penchez-vous sur l'animation de l'explosion de l’astéroïde et regardez l'image "meteore.bmp" c'est le résultat de SPRITE_ANIMATED_FRAME. Pour ceux qui veulent commencer à jouer, vous pouvez augmenter ou diminuer la vitesse du vaisseau (vit_vai%) dans le chat pitre (heu.. le chapitre) règlage. @Jicehel, Comme tu t'es proposé de mettre en place des TIMER(s), c'est le moment. Moi les TIMER(s) ça me donne des boutons... Pendant ce temps, je vais écrire un scénario, car cette fois-ci on est plus dans des essais, on se dirige tout droit vers un jeu spatial. Comme dirais Patrick Sébastien: c'est génial...
Dernière édition par Jean Claude le Mar 16 Juin 2015 - 20:11, édité 1 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: PANGINE2D Mar 16 Juin 2015 - 19:22 | |
| - jean Claude a écrit:
- testez essai7.bas (c'est sur le Webdav, car il y a des nouvelles images)
Il n'y a pas de essai7.bas ! essai1,2,3,4,5,6.bas oui essai7.bas tu l'as réservé pour toi, hein ? ça viendra ! ça viendra! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Mar 16 Juin 2015 - 20:09 | |
| Effectivement, il y a eu un problème quand j'ai déposé C'est réparé, tu peux y aller. A+ PS: une précision: Si vous avez des messages, concernant une image qui ne serait pas valable, n'en tenez pas compte. Le mieux c'est de supprimer la boucle WHILE en ligne 45 et 58, et exit_while en 54. Dans cette configuration du jeu, il vaut mieux augmenter la vitesse du vaisseau ( vit_vai%=8 )
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Mer 17 Juin 2015 - 0:40 | |
| Je te mets le listing du principe par ce que je pense que tue es mal parti pour pouvoir faire tes animations. Je pense qu'avec le code exemple tu vas mieux comprendre le principe - Code:
-
' avec tir, collision, explosion rem ============================================================================ caption "Utilisez les touches du panneau numérique (1,2,3,4,6,7,8,9) ** SPACE pour tirer ** ESC pour sortir" dim at%,x%,y%,xA%,yA%,vit_vai%,a_v%,vit_mis%,vit_ast_x%, vit_ast_y% dim tir$,tir% dim pi : pi = acos(-1) dim d : d = pi/2 : ' direction (c'est le cap) de départ du sprite (vers le haut) ' dim tir_x(30),tir_y(30),tir_d(30),nb_tir : ' si tu veux utiliser plusieurs tirs dim tir_x,tir_y,tir_d 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 9 : SPRITE_FILE_LOAD 9,"image/balle.bmp" : SPRITE_HIDE 9 : ' une balle SPRITE_ANIMATED 10 : SPRITE_ANIMATED_FILE_LOAD 10,1,8,"image/rock8.bmp" : SPRITE_HIDE 10 : ' astéroide SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' astéroide
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : a_v% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 2 : vit_mis%=10 : tir% = 0 scene2d_interval 300
new_asteroide() : SPRITE_SHOW 10 on_key_down 0,touche timer 2 : timer_interval 2,30 : on_timer 2,boucle_principale ' on_close 0,fin : ' Si on ferme, on ferme par la procédure de sortie
END
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) : ' 6 droite if KEY_DOWN_CODE = 103 then move(6) : ' 7 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(7) : ' 8 haut if KEY_DOWN_CODE = 105 then move(8) : ' 9 PgUp if KEY_DOWN_CODE = 27 then fin : ' Echap if KEY_DOWN_CODE = 32 AND tir% = 0 then tir% = 1:tir_x = x% : tir_y = y% : tir_d = d : SPRITE_SHOW 9 : ' space return
boucle_principale: timer_off 2 asteroide() if tir% = 1 then : tir() timer_on 2 return
rem ============================================================================ ' New_astéroide ' SUB new_asteroide() vit_ast_x%= 0 : vit_ast_y%= 0 while (abs(vit_ast_x%) + abs(vit_ast_y%)) < 5 vit_ast_x%=rnd(20) - 10 : vit_ast_y%=rnd(20) - 10 end_while xA% = screen_x + 10 : yA% = screen_y + 10 if vit_ast_x% > 0 then xA%=-10 if vit_ast_y% > 0 then yA%=-10 sprite_position 10,xA%,yA% END_SUB
rem ============================================================================ ' astéroide ' SUB asteroide() xA%=xA%+vit_ast_x% : yA%=yA%+vit_ast_y% : sprite_position 10,xA%,yA% if xA% < -10 if vit_ast_x% < 0 then new_asteroide() else: if xA% > screen_x + 10 and vit_ast_x% > 0 then new_asteroide() end_if if yA% < -10 if vit_ast_y% < 0 then new_asteroide() else: if yA% > screen_y + 10 and vit_ast_y% > 0 then new_asteroide() end_if END_SUB
rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir() tir_x = tir_x + cos(tir_d)* vit_mis% : tir_y = tir_y - sin(tir_d) * vit_mis% sprite_position 9,tir_x, tir_y : ' Mouvement de la balle du tir if (cos(tir_d) > 0 and tir_x > screen_x) or (cos(tir_d) < 0 and tir_x < 0 ) or (sin(tir_d) < 0 and tir_y > screen_y) or (sin(tir_d) > 0 and tir_y < 0 ) then tur% = 0 : HIDE 9 END_SUB
rem ============================================================================ SUB tir_ok() ' animation de la destruction de la cible dim_local pxb%,pyb% pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile scene2d_interval 150 : scene2d_on sprite_position 11,(pxb%-44),(pyb%-50) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 2000 : SPRITE_HIDE 10 : SPRITE_HIDE 11 : SCENE2D_OFF xA%=-30 : yA%=-30 : sprite_position 10,xA%,yA% :' repositionne l'astéroïde en dehors de l'écran END_SUB
rem ============================================================================ SUB verif_tir() dim_local pxb%,pyb% tir$="" pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile ' la balle est un sprite de 16x16 ' l'astéroide 22x24 (planche de 176x24 176/8=22) if pxb%<(xA%+16) and pxb%>xA% and pyb%>yA% and pyb%<(yA%+24) tir$="OK" end_if 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 if nsp% <> a_v% then sprite_hide a_v% : a_v% = nsp% : sprite_show nsp% ' 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 sprite_position nsp%,x%,y% END_SUB rem ============================================================================
fin: terminate return Je te laisse debugger et arranger à ta sauce et si tu veux des explications n'hésite pas à demander | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Mer 17 Juin 2015 - 7:33 | |
| Merci Jicehel, Je vais regarder ton code, (tel quel il ne fonctionne pas) j'ai tenté de débugger, mais ça ne marche toujours pas. j'y voit quelques erreurs évidentes ( if tir% = 1 then : tir()) par exemple. il y aussi cette ligne - Code:
-
if (cos(tir_d) > 0 and tir_x > screen_x) or (cos(tir_d) < 0 and tir_x < 0 ) or (sin(tir_d) < 0 and tir_y > screen_y) or (sin(tir_d) > 0 and tir_y < 0 ) then tur% = 0 : HIDE 9 je ne comprend pas sa fonction (c'est plein de gros mots du genre sin, cos, etc...) tur% (j'ai remplacé par tir%) J'espère en tirer quelque chose. En tous cas, merci. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Mer 17 Juin 2015 - 8:30 | |
| la ligne pleine de gros mot c'est pour annuler le tir s'il sort de l'écran. Désolé pour les fautes de frappes. En fait, je fais d'autres choses le soir mais je t'avais promis de t'aider alors j'ai écris le squelette mais comme je suis un peu fatigué, j'avoue un manque de vigilance J'ai corrigé une partie des erreurs mais j'ai une erreur dans les tests de sorties de l'asteroide, mais je dois aller bosser - Code:
-
' avec tir, collision, explosion rem ============================================================================ caption "Utilisez les touches du panneau numérique (1,2,3,4,6,7,8,9) ** SPACE pour tirer ** ESC pour sortir" dim at%,x%,y%,xA%,yA%,vit_vai%,a_v%,vit_mis%,vit_ast_x%, vit_ast_y% dim tir$,tir% dim pi : pi = acos(-1) dim d : d = pi/2 : ' direction (c'est le cap) de départ du sprite (vers le haut) ' dim tir_x(30),tir_y(30),tir_d(30),nb_tir : ' si tu veux utiliser plusieurs tirs dim tir_x,tir_y,tir_d 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 9 : SPRITE_FILE_LOAD 9,"image/balle.bmp" : SPRITE_HIDE 9 : ' une balle SPRITE_ANIMATED 10 : SPRITE_ANIMATED_FILE_LOAD 10,1,8,"image/rock8.bmp" : SPRITE_HIDE 10 : ' astéroide SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' astéroide
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : a_v% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 2 : vit_mis%=10 : tir% = 0 scene2d_interval 300
new_asteroide() : SPRITE_SHOW 10 on_key_down 0,touche timer 2 : timer_interval 2,30 : on_timer 2,boucle_principale ' on_close 0,fin : ' Si on ferme, on ferme par la procédure de sortie
END
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) : ' 6 droite if KEY_DOWN_CODE = 103 then move(6) : ' 7 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then move(7) : ' 8 haut if KEY_DOWN_CODE = 105 then move(8) : ' 9 PgUp if KEY_DOWN_CODE = 27 then fin : ' Echap if KEY_DOWN_CODE = 32 AND tir% = 0 tir% = 1 : tir_x = x% : tir_y = y% : tir_d = d : SPRITE_SHOW 9 end_if : ' space return
boucle_principale: timer_off 2 asteroide() if tir% = 1 then tir() timer_on 2 return
rem ============================================================================ ' New_astéroide ' SUB new_asteroide() vit_ast_x%= 0 : vit_ast_y%= 0 while (abs(vit_ast_x%) + abs(vit_ast_y%)) < 5 vit_ast_x%=rnd(20) - 10 : vit_ast_y%=rnd(20) - 10 end_while xA% = screen_x + 10 : yA% = screen_y + 10 if vit_ast_x% > 0 then xA%=-10 if vit_ast_y% > 0 then yA%=-10 sprite_position 10,xA%,yA% END_SUB
rem ============================================================================ ' astéroide ' SUB asteroide() if ((xA% < -10) and (vit_ast_x% < 0)) then new_asteroide() if ((xA% > screen_x + 10) and (vit_ast_x% > 0)) then new_asteroide() if ((yA% < -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% END_SUB
rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir() tir_x = tir_x + cos(tir_d)* vit_mis% : tir_y = tir_y - sin(tir_d) * vit_mis% if (cos(tir_d) > 0 and tir_x > screen_x) or (cos(tir_d) < 0 and tir_x < 0 ) or (sin(tir_d) < 0 and tir_y > screen_y) or (sin(tir_d) > 0 and tir_y < 0 ) then tir% = 0 : SPRITE_HIDE 9 sprite_position 9,tir_x, tir_y : ' Mouvement de la balle du tir END_SUB
rem ============================================================================ SUB tir_ok() ' animation de la destruction de la cible dim_local pxb%,pyb% pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile scene2d_interval 150 : scene2d_on sprite_position 11,(pxb%-44),(pyb%-50) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 2000 : SPRITE_HIDE 10 : SPRITE_HIDE 11 : SCENE2D_OFF xA%=-30 : yA%=-30 : sprite_position 10,xA%,yA% :' repositionne l'astéroïde en dehors de l'écran END_SUB
rem ============================================================================ SUB verif_tir() dim_local pxb%,pyb% tir$="" pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile ' la balle est un sprite de 16x16 ' l'astéroide 22x24 (planche de 176x24 176/8=22) if pxb%<(xA%+16) and pxb%>xA% and pyb%>yA% and pyb%<(yA%+24) tir$="OK" end_if 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 if nsp% <> a_v% then sprite_hide a_v% : a_v% = nsp% : sprite_show nsp% ' 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 sprite_position nsp%,x%,y% 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 Mer 17 Juin 2015 - 8:50 | |
| Je vais regarder, De mon coté j'ai mis en place un timer dans mon code en regardant ce que tu as fait sur le tien. ça marche impec, mais on a toujours un plantage à la sortie. Plus important: Je viens de me rendre compte que je me suis laissé entraîner avec ON_KEY_DOWN 0. - Jack a écrit:
- La différence fondamentale avec PANORAMIC est que pour le programmeur, PANGINE2D
ne manipule aucun objets système. Au lancement de PANGINE2D, une fenêtre apparaît (FORM) qui occupe tout l'écran, et dans laquelle est créé un SCENE2D vide occupant tout le FORM. Mais le programmeur n'a pas à se soucier de leurs numéros d'objets, comme vous le verrez par la suite. Je vais donc revenir à SCANCODE et je verrais bien. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Mer 17 Juin 2015 - 10:36 | |
| Le problème n'est pas là puisque ça fonctionne. (Tu n'as pas d'erreur si tu appuie sur une touche pour tirer, aller à gauche ou à droite.) Puisque ça fonctionne, fait la remarque à Jack pour la cohésion du langage, mais ne te focalise pas la dessus
Pour la sortie. Il faut penser à arréter le timer, mais ce n'est pas le seul problème.
Dans le code que j'ai posté, j'ai une erreur dans le if de la SUB asteroid comme il n'y a aucun message d'erreur dans cet embryon de langage, ce n'est pas simple de debugger mais je pense que c'est le "< -10" qu'il n'aime pas ou un manque de parenthèse quelque part. Il faut essayer avec "< (0-10)" peut être.
A voir, j'essayerais ce soir. Désolé, j'ai peu de temps pour programmer ou écrire les articles etc... à cause de mes autres occupations, mais tu pourras faire tes essais. Je pense que déjà ça te mets bien sur la voie. J'ai laisser ta façon de faire pour bouger le vaisseau, mais moi, j'aurais utilisé le même système que le tir, j'aurais mis une valeur dans une variable quand on appuie et j'aurais traité en appelant le déplacement dans la procédure principale, mais c'est un choix purement fonctionnel et un mode de gestion qui se choisit par le concepteur du jeu en fonction de ce qu'il veut obtenir et ta méthode est tout à fait correcte aussi.
Question à Jack: Jack, ce serait très complexe d'activer les messages d'erreurs pour ce langage ? Ca aide quand même quand on les a plutôt que le jeux qui se ferme... Certaines erreurs sont évidentes à trouver, d'autres beaucoup moins. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Mer 17 Juin 2015 - 11:44 | |
| Oui je suis d'accord, le fait que ça marche avec ON_KEY_DOWN est le seul moyen actuel de continuer.
Aujourd'hui je n'ai pas trop de temps pour programmer, le beau temps est revenu, je dois travailler à l'extérieur.
Pour la suite, je vais suivre ton idée de renvoyer l’astéroïde à nouveau, ensuite j'ai l'intention d'y ajouter un vaisseau ennemi qui tire sur le notre. Mais avant il faut que je code la collision du vaisseau avec l’astéroïde.
A+
PS: fermer le timer, aggrave le plantage, normal, il a un numéro d'objet....
Je préfère attendre la réponse de Jack. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Mer 17 Juin 2015 - 12:03 | |
| Woui, il peut déjà donner son avis sur le sujet. Il a plus d'éléments que nous. En plus je voudrais bien savoir si ce serait complexe d'activer les messages d'erreur. En fait, j'aimerais savoir si Jack va opter pour faire un environnement complet sur ce logiciel et qu'il va continuer de le développer ou s'il a réfléchi et intégrera les fonctions dans Panoramic. En fait c'est surtout pour savoir si ça vaut le coup de pousser les tests plus loin car ce produit vivra en étant très orienté "jeux" avec son éditeur dédié, son aide intéfrée, ses messages d'erreurs spécifiques, son compilateur, etc ou s'il restera assez bridé à moyen terme ou à long terme. L'éditeur a été rajouté rapidement afin que nous puissions coder les programmes de test, donc je comprends tout à fait que certaines parties soient désactivées, mais je voudrais juste savoir si Jack à l'intention de terminé l'environnement de développement dans un avenir proche ou non. PS: Je ne "troll" pas, hein ... c'est juste une interrogation... | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: PANGINE2D Mer 17 Juin 2015 - 21:06 | |
| - Jicehel a écrit:
- Jack, ce serait très complexe d'activer les messages d'erreurs pour ce langage ?
Je vais regarder pourquoi les messages d'erreur n'apparaissent pas. - Jicehel a écrit:
- En fait, j'aimerais savoir si Jack va opter pour faire un environnement complet sur ce logiciel et qu'il va continuer de le développer ou s'il a réfléchi et intégrera les fonctions dans Panoramic.
En fait c'est surtout pour savoir si ça vaut le coup de pousser les tests plus loin car ce produit vivra en étant très orienté "jeux" avec son éditeur dédié, son aide intéfrée, ses messages d'erreurs spécifiques, son compilateur, etc ou s'il restera assez bridé à moyen terme ou à long terme. J'ai l'intention de continuer ce logiciel aussi loin que possible et l'enrichir de fonctionnalités. Les tests avec PANGINE2D peuvent continuer, car PANGINE2D suit la même politique que Panoramic: la compatibilité ascendante. De la même façon qu'un source écrit pour la première version de Panoramic tourne encore aujourd'hui et de la même façon avec la dernière version et qu'il fonctionnera encore avec toutes les versions futures, je peux garantir qu'un source qui tournera avec la première version de PANGINE2D fonctionnera de la même façon avec TOUTES les versions futures et quel que soit le moteur 2D utilisé. De plus, il y aura bientôt non seulement un compilateur (il est en développement), mais il existe aussi des versions pas encore proposées qui fonctionnent avec les "grands" moteurs 2D. beaucoup plus rapides que le moteur 2D logiciel actuel. Ecrire un source pour PANGINE2D est un investissement sur l'avenir. _________________ username : panoramic@jack-panoramic password : panoramic123
Dernière édition par Jack le Sam 20 Juin 2015 - 10:45, édité 1 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Mer 17 Juin 2015 - 21:38 | |
| Merci pour tes réponses Jack J'avoue que c'est rassurant e connaitre tes plans. Un peu comme Klaus, je ne sais pas comment pour faire tout ça de front, mais du coup, je retourne au programme de Jean-Claude pour lui donner les bases d'un moteur complet qui fonctionne. Encore une question dont à parlé Jean-Claude. Est-ce que le timer fonctionne tel que l'on l'a écrit ? On laisse bien un numéro ou on devrait s'y prendre autrement ? Un timer est vital pour ce genre de jeux d'où ma question. Je pense que peux s'organiser pour ne gérer un seul timer mais tu as peut être prevu autre chose comme des nombre limité de timers avec des numéros dédiés. Je ne sais pas. Est-ce que le fait que ça marche est un oubli de ta part, un coup de chance de la mienne ou tout à fait normal ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Mer 17 Juin 2015 - 22:16 | |
| Tient Jean-Claude. J'ai corrigé mes erreurs de ce matin dans la détection de sortie de l'asteroid et j'ai rajouté la partie que je n'avais pas eu le temps de coder pour la direction du tir. Je me suis arrété là exprès pour te laisser créer ton jeu tel que tu l'imagines mais si tu rencontres des difficultés, je t'aiderais avec plaisir. - Code:
-
' avec tir, collision, explosion rem ============================================================================ caption "Utilisez les touches du panneau numérique (1,2,3,4,6,7,8,9) ** SPACE pour tirer ** ESC pour sortir" dim at%,x%,y%,xA%,yA%,vit_vai%,a_v%,vit_mis%,vit_ast_x%, vit_ast_y% dim tir$,tir% dim pi : pi = acos(-1) dim d : d = pi/2 : ' direction (c'est le cap) de départ du sprite (vers le haut) ' dim tir_x(30),tir_y(30),tir_d(30),nb_tir : ' si tu veux utiliser plusieurs tirs dim tir_x,tir_y,tir_d 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 9 : SPRITE_FILE_LOAD 9,"image/balle.bmp" : SPRITE_HIDE 9 : ' une balle SPRITE_ANIMATED 10 : SPRITE_ANIMATED_FILE_LOAD 10,1,8,"image/rock8.bmp" : SPRITE_HIDE 10 : ' astéroide SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' astéroide
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : a_v% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 2 : vit_mis%=10 : tir% = 0 scene2d_interval 300
new_asteroide() : SPRITE_SHOW 10 on_key_down 0,touche timer 2 : timer_interval 2,30 : on_timer 2,boucle_principale ' on_close 0,fin : ' Si on ferme, on ferme par la procédure de sortie
END
rem ============================================================================ touche: ' Touches du pavé numérique if KEY_DOWN_CODE = 97 then d=1 : move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then d=2 : move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then d=3 : move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then d=4 : move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then d=5 : move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then d=6 : move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then d=7 : move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then d=8 : move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then fin : ' Echap if KEY_DOWN_CODE = 32 AND tir% = 0 tir% = 1 : tir_d = d if d = 5*pi/4 then tir_x = x% + 11 : tir_y = y% + 33 if d = 3*pi/2 then tir_x = x% + 22 : tir_y = y% + 44 if d = 7*pi/4 then tir_x = x% + 33 : tir_y = y% + 33 if d = pi then tir_x = x% : tir_y = y% + 22 if d = 0 then tir_x = x% + 44 : tir_y = y% + 22 if d = 3*pi/4 then tir_x = x% + 11 : tir_y = y% + 11 if d = pi/2 then tir_x = x% + 22 : tir_y = y% if d = pi/4 then tir_x = x% + 33 : tir_y = y% + 11 sprite_position 9,tir_x, tir_y : SPRITE_SHOW 9 end_if : ' space return
boucle_principale: timer_off 2 asteroide() if tir% = 1 then tir() timer_on 2 return
rem ============================================================================ ' New_astéroide ' SUB new_asteroide() vit_ast_x%= 0 : vit_ast_y%= 0 while (abs(vit_ast_x%) + abs(vit_ast_y%)) < 5 vit_ast_x%=rnd(20) - 10 : vit_ast_y%=rnd(20) - 10 end_while xA% = screen_x + 10 : yA% = screen_y + 10 if vit_ast_x% > 0 then xA%=-10 if vit_ast_y% > 0 then yA%=-10 sprite_position 10,xA%,yA% 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% END_SUB
rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir() tir_x = tir_x + cos(tir_d)* vit_mis% : tir_y = tir_y - sin(tir_d) * vit_mis% if (cos(tir_d) > 0 and tir_x > screen_x) or (cos(tir_d) < 0 and tir_x < 0 ) or (sin(tir_d) < 0 and tir_y > screen_y) or (sin(tir_d) > 0 and tir_y < 0 ) then tir% = 0 : SPRITE_HIDE 9 sprite_position 9,tir_x, tir_y : ' Mouvement de la balle du tir END_SUB
rem ============================================================================ SUB tir_ok() ' animation de la destruction de la cible dim_local pxb%,pyb% pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile scene2d_interval 150 : scene2d_on sprite_position 11,(pxb%-44),(pyb%-50) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 2000 : SPRITE_HIDE 10 : SPRITE_HIDE 11 : SCENE2D_OFF xA%=-30 : yA%=-30 : sprite_position 10,xA%,yA% :' repositionne l'astéroïde en dehors de l'écran END_SUB
rem ============================================================================ SUB verif_tir() dim_local pxb%,pyb% tir$="" pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile ' la balle est un sprite de 16x16 ' l'astéroide 22x24 (planche de 176x24 176/8=22) if pxb%<(xA%+16) and pxb%>xA% and pyb%>yA% and pyb%<(yA%+24) tir$="OK" end_if 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 if nsp% <> a_v% then sprite_hide a_v% : a_v% = nsp% : sprite_show nsp% ' 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 sprite_position nsp%,x%,y% 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 Jeu 18 Juin 2015 - 8:43 | |
| Je vois qu'il y a des bonnes nouvelles, @Jack, Je suis ravi que tu continues le développement de PANGINE2D et cela dans le même esprit que Panoramic. je résume les priorités (je n'ai pas dit urgence) 1) les messages d'erreurs 2) les commandes ON_KEY_... et OFF_KEY_... 3) les TIMER(s) car Jicehel à raison ça me parait incontournable Par avance merci. @Jicehel, Ton code fonctionne bien, il n'y a aucun plantage. J'y ai intégré la détection de collision et l'explosion de l'astéroïde, et pour que cela fonctionne correctement, j'ai dû remplacer la sub tir() par la mienne (dérivée de celle de Papydall). J'ai ajouté une possibilité de réglage de la vitesse de déplacement de l’astéroïde, en conservant ta partie aléatoire. Maintenant c'est jouable, en réglant la vitesse du vaisseau et celle du missile a mon niveau (agilité au clavier). Il reste quelques petits réglages sur la fluidité des images, et ensuite j'attaque la suite. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 9:59 | |
| Super et surtout si tu bloques sur un truc(si tu as essayé de résoudre un problème et que tu galères sur quelque chose), n'hésite pas à demander ou sinon à bientôt pour tester ton jeu | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 10:57 | |
| @Tous, vous pouvez jouer avec ce code (il n'y a pas d''mages nouvelles) à condition d'avoir la version d'hier, sinon vous les trouverez sur mon Webdav. A vous d'adapter les vitesses des différents SPRITEs (vaisseau, missile et astéroïde). Le code ci-dessous est réglé au mieux. En théorie ça ne plante pas, mais si ça arrive n'oublier pas de tuer la tâche Panoramic.exe - Code:
-
' essai8.bas avec tir, collision, explosion (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 at%,x%,y%,xA%,yA%,vit_vai%,a_v%,vit_mis%,vit_ast_x%, vit_ast_y%,vit_ast% dim tir$,tir% : tir% = 0 dim pi : pi = acos(-1) dim d : d = pi/2 : ' direction (c'est le cap) de départ du sprite (vers le haut) ' dim tir_x(30),tir_y(30),tir_d(30),nb_tir : ' si tu veux utiliser plusieurs tirs dim tir_x,tir_y,tir_d 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 9 : SPRITE_FILE_LOAD 9,"image/balle.bmp" : SPRITE_HIDE 9 : ' une balle SPRITE_ANIMATED 10 : SPRITE_ANIMATED_FILE_LOAD 10,1,8,"image/rock8.bmp" : SPRITE_HIDE 10 : ' astéroide SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : a_v% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=12 :' + => plus rapide vit_ast%=40 :' + => plus lent
new_asteroide() : SPRITE_SHOW 10 on_key_down 0,touche timer 2 : timer_interval 2,1 : on_timer 2,boucle_principale ' on_close 0,fin : ' Si on ferme, on ferme par la procédure de sortie
END
rem ============================================================================ touche: ' Touches du pavé numérique if KEY_DOWN_CODE = 97 then d=1 : move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then d=2 : move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then d=3 : move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then d=4 : move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then d=5 : move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then d=6 : move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then d=7 : move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then d=8 : move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then fin : ' Echap ' cette ligne fonctionne avec then fin ??? if KEY_DOWN_CODE = 32 AND tir% = 0 tir% = 1 : tir_d = d if d = 5*pi/4 then tir_x = x% + 11 : tir_y = y% + 33 if d = 3*pi/2 then tir_x = x% + 22 : tir_y = y% + 44 if d = 7*pi/4 then tir_x = x% + 33 : tir_y = y% + 33 if d = pi then tir_x = x% : tir_y = y% + 22 if d = 0 then tir_x = x% + 44 : tir_y = y% + 22 if d = 3*pi/4 then tir_x = x% + 11 : tir_y = y% + 11 if d = pi/2 then tir_x = x% + 22 : tir_y = y% if d = pi/4 then tir_x = x% + 33 : tir_y = y% + 11 sprite_position 9,tir_x, tir_y :' SPRITE_SHOW 9 end_if : ' space return rem ============================================================================ boucle_principale: timer_off 2 asteroide() if tir% = 1 then tir() timer_on 2 return rem ============================================================================ ' New_astéroide SUB new_asteroide() vit_ast_x%= 0 : vit_ast_y%= 0 while (abs(vit_ast_x%) + abs(vit_ast_y%)) < 5 vit_ast_x%=rnd(20) - 10 : vit_ast_y%=rnd(20) - 10 end_while xA% = screen_x + 10 : yA% = screen_y + 10 if vit_ast_x% > 0 then xA%=-10 if vit_ast_y% > 0 then yA%=-10 sprite_position 10,xA%,yA% END_SUB rem ============================================================================ ' astéroide SUB asteroide() SPRITE_SHOW 10 scene2d_interval 500 : scene2d_on 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% wait vit_ast% scene2d_off END_SUB rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir() off_key_down 0 : ' attendre la fin du tir pour éviter l'arrêt du jeu et la déviation du tir dim_local i,px%,py% px%=sprite_x_position(9) : py%=sprite_y_position(9) REPEAT i=i+vit_mis% if i>25 then sprite_show 9 sprite_position 9,(x%+i*cos(d))+22,y%-i*sin(d)+22 : ' Mouvement de la balle du tir px%=sprite_x_position(9) : py%=sprite_y_position(9) verif_tir() if tir$="OK" tir_ok() : EXIT_REPEAT end_if UNTIL px%<0 or px%>screen_x or py%<0 or py%>screen_y tir% = 0 : sprite_hide 9 : on_key_down 0,touche END_SUB rem ============================================================================ SUB tir_ok() ' animation de la destruction de la cible dim_local pxb%,pyb% off_key_down 0 : ' attendre la fin du tir pour éviter l'arrêt du jeu et la déviation du tir pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile scene2d_interval 150 : scene2d_on sprite_position 11,(pxb%-44),(pyb%-50) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 2000 : SPRITE_HIDE 10 : SPRITE_HIDE 11 : SCENE2D_OFF xA%=-30 : yA%=-30 : sprite_position 10,xA%,yA% :' repositionne l'astéroïde en dehors de l'écran on_key_down 0,touche END_SUB rem ============================================================================ SUB verif_tir() dim_local pxb%,pyb% tir$="" pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile ' la balle est un sprite de 16x16 ' l'astéroide 22x24 (planche de 176x24 176/8=22) if pxb%<(xA%+16) and pxb%>xA% and pyb%>yA% and pyb%<(yA%+24) tir$="OK" end_if 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 if nsp% <> a_v% then sprite_hide a_v% : a_v% = nsp% : sprite_show nsp% ' 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 sprite_position nsp%,x%,y% END_SUB rem ============================================================================
fin: terminate return @Jicehel, Quand tu auras l'occasion de tester, il faudrait que tu te penches sur la manière aléatoire du point de départ des astéroïdes. Car en début de partie c'est bon, mais j'ai remarqué que dès qu'elles partent du coin haut/gauche les suivantes partent toujours du coin haut/gauche. Du coup, tu places le vaisseau à proximité et tu n'as plus qu'a les attendre. J'ai bien essayé (mais n'ayant pas codé ta partie, je nage...) Ça commence à prendre tournure, cette affaire. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 11:33 | |
| OK, je regarde ce soir, je ne comprend pas pourquoi les asteroid partiraient toujours du coin haut / gauche. J'ai certainement fait une erreur de logique. Je regarderais ce soir.
Par contre je n'aime pas du tout ta procédure de tir. Je te ferais une proposition ce soir car avec une boucle tel que tu le fait, tu bloques complétement le jeu le temps du tir
Tu devrais mettre verif_tir dans ma procédure. Pour le moment tu n'as qu'un tir et un asteroid, un vaisseau ce n'est pas encore trop grave, mais si tu veux pouvoir gérer plusieurs tir, un vaisseau ennemi, un ou plusieurs asteroid, figer le jeu et arréter tous les autres déplacements le temps que tu gère un tir aurait un effet bizzare.
Un tir est un élément à gérer chaque tour comme les autres. Tu ne doit pas faire de boucle dans sa procédure de gestion à part pour le test de collision éventuellement selon la façon dont tu procèdes. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 13:11 | |
| - Citation :
- Par contre je n'aime pas du tout ta procédure de tir. Je te ferais une proposition ce soir car avec une boucle tel que tu le fait, tu bloques complétement le jeu le temps du tir
Je suis d'accord. Je commence à être un peu dépassé, mais ce n'est pas grave. Jicehel, je te conseille de commencer par la procédure de tir, car je pense que c'est elle qui perturbe l'arrivée aléatoire des astéroïdes. Mais, sans vouloir te commander, j'aimerai que tu commentes un maximum, car si je ne te suis pas dans ta méthode, je ne vais pas apprendre. (Je te rappelle que plus nul que moi en math, ça n'existe pas) Une fois ce problème réglé, je pourrais revoir la sub verif_tir() que je renommerais verif_collision() et la rendre valable pour toutes les collisions. elle retournera les numéros de sprite en collision. Bien sûr, il faudra passer en paramètre les numéro de sprite à contrôler et leur taille. Volontairement, je ne ferais rien de plus pour le moment, car je veux absolument comprendre pour rester maître du code. (je veux dire, pouvoir continuer...) Le savoir n'est utile que si il est compris. Je suis à la retraite, donc le temps ne presse pas. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 14:04 | |
| Tu as raison. J'avoue que j'ai fais un peu vite et que c'est très light en commentaires Ce soir j'essaye de te faire une version commentée. Par contre perso, j'aime bien l'idée du tableau d'infos sur les sprites qu'a fait Klaus. Si tu n'es pas contre, je remettrais la même structure que son tableau d'informations. Ca permet de modifier facilement les informations si tu changes de sprite pour les tirs, les asteroids ou les vaisseaux. OK pour modifier la procédure de tir / collision et je vérifierais que les asteroids partent bien de n'importe où. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 16:02 | |
| Pour le tableau d'info sur les sprites, j'avoue que je n'ai pas suivi les dernières nouvelles... Je ne suis pas contre, à condition que ce soit utile et surtout je ne veux pas que le code devienne une usine à gaz. Quoique sur ce plan là, je sais faire ! . Mais ça c'est un privilège réservé aux programmeurs du dimanche, ce que Klaus n'est pas. Propose, si ça me plait je prend.... A+ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 17:03 | |
| En voulant adapter la sub verif_tir() je suis tombé sur un truc incompréhensible. Dans le code suivant, si je mets en service la ligne 137, j'ai un accès-violation - Code:
-
' essai8.bas avec tir, collision, explosion (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 at%,x%,y%,xA%,yA%,vit_vai%,a_v%,vit_mis%,vit_ast_x%, vit_ast_y%,vit_ast% dim tir$,tir% : tir% = 0 dim pi : pi = acos(-1) dim d : d = pi/2 : ' direction (c'est le cap) de départ du sprite (vers le haut) ' dim tir_x(30),tir_y(30),tir_d(30),nb_tir : ' si tu veux utiliser plusieurs tirs dim tir_x,tir_y,tir_d 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 9 : SPRITE_FILE_LOAD 9,"image/balle.bmp" : SPRITE_HIDE 9 : ' un missile SPRITE_ANIMATED 10 : SPRITE_ANIMATED_FILE_LOAD 10,1,8,"image/rock8.bmp" : SPRITE_HIDE 10 : ' astéroide SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide
' init x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : a_v% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=12 :' + => plus rapide vit_ast%=160 :' + => plus lent
new_asteroide() : SPRITE_SHOW 10 on_key_down 0,touche timer 2 : timer_interval 2,1 : on_timer 2,boucle_principale ' on_close 0,fin : ' Si on ferme, on ferme par la procédure de sortie
END
rem ============================================================================ touche: ' Touches du pavé numérique if KEY_DOWN_CODE = 97 then d=1 : move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then d=2 : move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then d=3 : move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then d=4 : move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then d=5 : move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then d=6 : move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then d=7 : move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then d=8 : move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then fin : ' Echap ' cette ligne fonctionne avec then fin ??? if KEY_DOWN_CODE = 32 AND tir% = 0 tir% = 1 : tir_d = d if d = 5*pi/4 then tir_x = x% + 11 : tir_y = y% + 33 if d = 3*pi/2 then tir_x = x% + 22 : tir_y = y% + 44 if d = 7*pi/4 then tir_x = x% + 33 : tir_y = y% + 33 if d = pi then tir_x = x% : tir_y = y% + 22 if d = 0 then tir_x = x% + 44 : tir_y = y% + 22 if d = 3*pi/4 then tir_x = x% + 11 : tir_y = y% + 11 if d = pi/2 then tir_x = x% + 22 : tir_y = y% if d = pi/4 then tir_x = x% + 33 : tir_y = y% + 11 sprite_position 9,tir_x, tir_y :' SPRITE_SHOW 9 end_if : ' space return rem ============================================================================ boucle_principale: timer_off 2 asteroide() if tir% = 1 then tir() timer_on 2 return rem ============================================================================ ' New_astéroide SUB new_asteroide() vit_ast_x%= 0 : vit_ast_y%= 0 while (abs(vit_ast_x%) + abs(vit_ast_y%)) < 5 vit_ast_x%=rnd(20) - 10 : vit_ast_y%=rnd(20) - 10 end_while xA% = screen_x + 10 : yA% = screen_y + 10 if vit_ast_x% > 0 then xA%=-10 if vit_ast_y% > 0 then yA%=-10 sprite_position 10,xA%,yA% END_SUB rem ============================================================================ ' astéroide SUB asteroide() SPRITE_SHOW 10 scene2d_interval 500 : scene2d_on 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% wait vit_ast% scene2d_off END_SUB rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir() off_key_down 0 : ' attendre la fin du tir pour éviter l'arrêt du jeu et la déviation du tir dim_local i,px%,py% px%=sprite_x_position(9) : py%=sprite_y_position(9) REPEAT i=i+vit_mis% if i>25 then sprite_show 9 sprite_position 9,(x%+i*cos(d))+22,y%-i*sin(d)+22 : ' Mouvement de la balle du tir px%=sprite_x_position(9) : py%=sprite_y_position(9) verif_tir(9,16,24,10,16,16) :' la balle est un sprite de 16x16 ' l'astéroide 22x24 (planche de 176x24 176/8=22) if tir$="OK" tir_ok() : EXIT_REPEAT end_if UNTIL px%<0 or px%>screen_x or py%<0 or py%>screen_y tir% = 0 : sprite_hide 9 : on_key_down 0,touche END_SUB rem ============================================================================ SUB tir_ok() ' animation de la destruction de la cible dim_local pxb%,pyb% off_key_down 0 : ' attendre la fin du tir pour éviter l'arrêt du jeu et la déviation du tir pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile scene2d_interval 150 : scene2d_on sprite_position 11,(pxb%-44),(pyb%-50) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 2000 : SPRITE_HIDE 10 : SPRITE_HIDE 11 : SCENE2D_OFF xA%=-30 : yA%=-30 : sprite_position 10,xA%,yA% :' repositionne l'astéroïde en dehors de l'écran on_key_down 0,touche END_SUB rem ============================================================================ SUB verif_tir(nsp1%,w1%,h1%,nsp2%,w2%,h2%) dim_local px1%,py1%,px2%,py2% h1%=(h1%/2) : w1%=(w1%/2) : h2%=(h2%/2) : w2%=(w2%/2) tir$="" px1%=sprite_X_position(nsp1%) : py1%=sprite_Y_position(nsp1%) :' position de nsp1% px2%=sprite_X_position(nsp2%) ' : py2%=sprite_Y_position(nsp2%) :' position de nsp2% if px1%<(xA%+w1%) and px1%>xA% and py1%>yA% and py1%<(yA%+h1%) tir$="OK" end_if 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 if nsp% <> a_v% then sprite_hide a_v% : a_v% = nsp% : sprite_show nsp% ' 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 sprite_position nsp%,x%,y% END_SUB rem ============================================================================
fin: terminate return
Si quelqu'un veut essayer, pour voir si c'est chez moi ou pas. Je ne trouve aucune raison pour que cette ligne fasse planter Panoramic.exe. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 17:09 | |
| OK, je garderais volontairement exactement la même structure que le tableau de Klaus pour des raisons de comptabilité et de réusibilité et aussi car si on prend l'habitude de l'utiliser, ce sera plus simple. Pour ton programme, on n'utilisera ni masque ni tunes et comme tu dis si ça te convient tu gardes, sinon tu adapteras à ta sauce Perso, je prends car je trouve que c'est une excelleent façon de s'organiser, mais c'est mon opinion et ma façon de voir et je comprendrais tout à fait que d'autres personnes préfèrent travailler autrement. (PS: En plus en reprenant sa structure, je ferais même l'économie de l'écriture des commentaires car Klaus a fait un super effort à ce niveau là ). Bon aller, j'arrète d'en parler avant de t'en proposer une version A ce soir PS: J'ai regardé ton code et la ligne 137. Je ne vois pas d'ereur mais je ne peux pas tester ici. Je te dirais si je trouve ce soir si tu n'as pas eu de réponse entre temps. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 18:23 | |
| Je viens de réagir, que tu parlais de cette sub: - Code:
-
sub creer_sprite(nam$,x%,y%,w%,h%,img%,dur%) nsprite% = nsprite% + 1 : ' passer au numéro de sprite suivant sprite nsprite% : ' créer le sprite snames$(nsprite%) = nam$ : ' memoriser son nom sprites(nsprite%,0) = w% : ' mémoriser sa largeur sprites(nsprite%,1) = h% : ' et sa hauteur sprites(nsprite%,2) = 1 : ' marquer "visible" sprites(nsprite%,3) = dur% : ' marquer 0="pénétrable" ou 1="impénétrable" sprites(nsprite%,4) = x% : ' position horizontale du sprite sprites(nsprite%,5) = y% : ' position verticale du sprite sprites(nsprite%,6) = 0 : ' pas de tunes sprites(nsprite%,7) = 0 : ' pas de tunes if img%>0 : ' une image est fournie ? sprite_image_load nsprite%,img% : ' copier une image dans le sprite if images$<>"" then file_save img%,images$+"\sprite_"+str$(nsprite%)+".bmp" : ' et la sauver end_if : ' fin test image fournie sprite_position nsprite%,x%,y% : ' positionner le sprite à l'endroit voulu if DoKGF%>0 resx% = dll_call6("DefineSprite",nsprite%,x%,y%,200,200,adr(nam$)) resx% = dll_call3("ChangeSpriteOptions",nsprite%,1,dur%) end_if display end_sub Oui, il y a surement des choses à prendre pour l'adapter à PANGINE2D. Mais en ne perdant pas de vue les commandes de PANGINE2D tel que tous les "SPRITE_ANIMATED_...." . Les sprites sont pêchés sur une planche, donc cette sub n'est pas forcément applicable. Je m'explique: avec SPRITE_ANIMATED_FRAME, on joue un séquence(toute ou une partie) de sprites qui sont sur une planche. Mais il y a matière a étudier. A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 22:07 | |
| Purée avec le programme qui se ferme sans aucun message d'erreur, c'est trop fastidieux de modifier le programme. Ca m'énerve, donc désolé mais je ne ferais pas ce que j'ai dis. Je te mets ce que j'avais commencé à commenter mais je me suis arrété puisqu'en essayant avant même de coder de nouvelle chose, le programme ne fonctionne plus. Désolé Jean-Claude. Je t'aiderait de nouveau s'il y a un peu d'aide au débuggage. Là, j'ai passé 30 minutes à regarder le code pour essayer de trouver là où j'ai du supprimer un caractère de trop ou un truc du genre. Je n'ose pas imaginer le problème si je rajoute des lignes. J'attends que Pangine2D soit plus exploitable pour le développement. Vraiment ce n'est pas agréable de développer sinon. Bon j'arrète de râler et je te donne le code qui ne marche plus avec le début des commentaires. - Code:
-
' essai8.bas avec tir, collision, explosion (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 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 xM%,yM%,vit_mis% : ' position et vitesse du missile dim xA%,yA%,vit_ast_x%, vit_ast_y% : ' position et vitesse de l'asteroid dim a_v% : ' stock le numéro correpondant à la diretion du sprite actuel pour voir s'il change dim tir$,tir%, tir_x,tir_y,tir_d : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction
' 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 9 : SPRITE_FILE_LOAD 9,"image/balle.bmp" : SPRITE_HIDE 9 : ' un missile SPRITE_ANIMATED 10 : SPRITE_ANIMATED_FILE_LOAD 10,1,8,"image/rock8.bmp" : SPRITE_HIDE 10 : ' astéroide SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide
' init tir% = 0 : ' Au début pas de tir actif x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : a_v% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=12 :' + => plus rapide vit_ast%=160 :' + => plus lent
new_asteroide() : SPRITE_SHOW 10 : ' Créé l'astéroid initial
on_key_down 0,touche : ' Active la gestion de l'appuie des touches
timer 2 : timer_interval 2,1 : on_timer 2,boucle_principale : ' Activation du timer qui activera les tours de jeu
END
rem ============================================================================ touche: ' Touches du pavé numérique if KEY_DOWN_CODE = 97 then d=1 : move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then d=2 : move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then d=3 : move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then d=4 : move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then d=5 : move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then d=6 : move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then d=7 : move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then d=8 : move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then gosub fin : ' Echap if KEY_DOWN_CODE = 32 AND tir% = 0 tir% = 1 : tir_d = 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 = x% + 11 : tir_y = y% + 33 if d = 3*pi/2 then tir_x = x% + 22 : tir_y = y% + 44 if d = 7*pi/4 then tir_x = x% + 33 : tir_y = y% + 33 if d = pi then tir_x = x% : tir_y = y% + 22 if d = 0 then tir_x = x% + 44 : tir_y = y% + 22 if d = 3*pi/4 then tir_x = x% + 11 : tir_y = y% + 11 if d = pi/2 then tir_x = x% + 22 : tir_y = y% if d = pi/4 then tir_x = x% + 33 : tir_y = y% + 11 sprite_position 9,tir_x, tir_y : SPRITE_SHOW 9 end_if : ' Fin du traitement d'un appuie sur espace return
rem ============================================================================ boucle_principale: timer_off 2 asteroide() : ' On gère notre asteroid pour ce tour if tir% = 1 then tir() : ' Si un tir est actif, on gère son tour timer_on 2 return
rem ============================================================================ ' New_astéroide SUB new_asteroide() 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() scene2d_interval 500 : scene2d_on 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% wait vit_ast% scene2d_off END_SUB rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir() off_key_down 0 : ' attendre la fin du tir pour éviter l'arrêt du jeu et la déviation du tir dim_local i,px%,py% px%=sprite_x_position(9) : py%=sprite_y_position(9) REPEAT i=i+vit_mis% if i>25 then sprite_show 9 sprite_position 9,(x%+i*cos(d))+22,y%-i*sin(d)+22 : ' Mouvement de la balle du tir px%=sprite_x_position(9) : py%=sprite_y_position(9) verif_tir(9,16,24,10,16,16) :' la balle est un sprite de 16x16 ' l'astéroide 22x24 (planche de 176x24 176/8=22) if tir$="OK" tir_ok() : EXIT_REPEAT end_if UNTIL px%<0 or px%>screen_x or py%<0 or py%>screen_y tir% = 0 : sprite_hide 9 : on_key_down 0,touche END_SUB rem ============================================================================ SUB tir_ok() ' animation de la destruction de la cible dim_local pxb%,pyb% off_key_down 0 : ' attendre la fin du tir pour éviter l'arrêt du jeu et la déviation du tir pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) :' position du missile scene2d_interval 150 : scene2d_on sprite_position 11,(pxb%-44),(pyb%-50) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 2000 : SPRITE_HIDE 10 : SPRITE_HIDE 11 : SCENE2D_OFF xA%=-30 : yA%=-30 : sprite_position 10,xA%,yA% :' repositionne l'astéroïde en dehors de l'écran on_key_down 0,touche END_SUB rem ============================================================================ SUB verif_tir(nsp1%,w1%,h1%,nsp2%,w2%,h2%) dim_local px1%,py1%,px2%,py2% h1%=(h1%/2) : w1%=(w1%/2) : h2%=(h2%/2) : w2%=(w2%/2) tir$="" px1%=sprite_X_position(nsp1%) : py1%=sprite_Y_position(nsp1%) :' position de nsp1% px2%=sprite_X_position(nsp2%) ' : py2%=sprite_Y_position(nsp2%) :' position de nsp2% if px1%<(xA%+w1%) and px1%>xA% and py1%>yA% and py1%<(yA%+h1%) tir$="OK" end_if 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 if nsp% <> a_v% then sprite_hide a_v% : a_v% = nsp% : sprite_show nsp% ' 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 sprite_position nsp%,x%,y% END_SUB rem ============================================================================
fin: terminate return | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: PANGINE2D Jeu 18 Juin 2015 - 22:26 | |
| Et comme ça, ça ne marche toujours pas ? - Code:
-
' essai8.bas avec tir, collision, explosion (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 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 xM%,yM%,vit_mis% : ' position et vitesse du missile dim xA%,yA%,vit_ast_x%, vit_ast_y% : ' position et vitesse de l'asteroid dim a_v% : ' stock le numéro correpondant à la diretion du sprite actuel pour voir s'il change dim tir$,tir%, tir_x,tir_y,tir_d : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction
' 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 9 : SPRITE_FILE_LOAD 9,"image/balle.bmp" : SPRITE_HIDE 9 : ' un missile SPRITE_ANIMATED 10 : SPRITE_ANIMATED_FILE_LOAD 10,1,8,"image/rock8.bmp" : SPRITE_HIDE 10 : ' astéroide SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp" : SPRITE_HIDE 11 : ' explosion astéroide
' init tir% = 0 : ' Au début pas de tir actif x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : a_v% = 7 : SPRITE_SHOW 7
' scene2D file_load "image/espace.bmp"
' réglages vit_vai% = 8 :' + => plus rapide vit_mis%=12 :' + => plus rapide vit_ast%=160 :' + => plus lent
new_asteroide() : SPRITE_SHOW 10 : ' Créé l'astéroid initial
on_key_down 0,touche : ' Active la gestion de l'appuie des touches
timer 2 : timer_interval 2,1 : on_timer 2,boucle_principale : ' Activation du timer qui activera les tours de jeu
END
rem ============================================================================ touche: ' Touches du pavé numérique if KEY_DOWN_CODE = 97 then d=1 : move(1) : ' 1 End if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then d=2 : move(2) : ' 2 Bas if KEY_DOWN_CODE = 99 then d=3 : move(3) : ' 3 PgDn if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then d=4 : move(4) : ' 4 gauche if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then d=5 : move(5) : ' 5 droite if KEY_DOWN_CODE = 103 then d=6 : move(6) : ' 6 Home if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then d=7 : move(7) : ' 7 haut if KEY_DOWN_CODE = 105 then d=8 : move(8) : ' 8 PgUp if KEY_DOWN_CODE = 27 then gosub fin : ' Echap if KEY_DOWN_CODE = 32 AND tir% = 0 tir% = 1 : tir_d = 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 = x% + 11 : tir_y = y% + 33 if d = 3*pi/2 then tir_x = x% + 22 : tir_y = y% + 44 if d = 7*pi/4 then tir_x = x% + 33 : tir_y = y% + 33 if d = pi then tir_x = x% : tir_y = y% + 22 if d = 0 then tir_x = x% + 44 : tir_y = y% + 22 if d = 3*pi/4 then tir_x = x% + 11 : tir_y = y% + 11 if d = pi/2 then tir_x = x% + 22 : tir_y = y% if d = pi/4 then tir_x = x% + 33 : tir_y = y% + 11 sprite_position 9,tir_x, tir_y : SPRITE_SHOW 9 end_if : ' Fin du traitement d'un appuie sur espace return
rem ============================================================================ boucle_principale: timer_off 2 asteroide() : ' On gère notre asteroid pour ce tour if tir% = 1 then tir() : ' Si un tir est actif, on gère son tour timer_on 2 return
rem ============================================================================ ' New_astéroide SUB new_asteroide() 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() scene2d_interval 500 : scene2d_on 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% wait vit_ast% scene2d_off END_SUB rem ============================================================================ ' Tirer une balle dans l'une des 8 directions possibles du sprite SUB tir() off_key_down 0 : ' attendre la fin du tir pour éviter l'arrêt du jeu et la déviation du tir dim_local i,px%,py% px%=sprite_x_position(9) : py%=sprite_y_position(9) REPEAT i=i+vit_mis% if i>25 then sprite_show 9 sprite_position 9,(x%+i*cos(d))+22,y%-i*sin(d)+22 : ' Mouvement de la balle du tir px%=sprite_x_position(9) : py%=sprite_y_position(9) verif_tir(9,16,24,10,16,16) : ' la balle est un sprite de 16x16 ' l'astéroide 22x24 (planche de 176x24 176/8=22) if tir$="OK" tir_ok() : EXIT_REPEAT end_if UNTIL px%<0 or px%>screen_x or py%<0 or py%>screen_y tir% = 0 : sprite_hide 9 : on_key_down 0,touche END_SUB rem ============================================================================ SUB tir_ok() ' animation de la destruction de la cible dim_local pxb%,pyb% off_key_down 0 : ' attendre la fin du tir pour éviter l'arrêt du jeu et la déviation du tir pxb%=sprite_X_position(9) : pyb%=sprite_Y_position(9) : ' position du missile scene2d_interval 150 : scene2d_on sprite_position 11,(pxb%-44),(pyb%-50) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14 pause 2000 : SPRITE_HIDE 10 : SPRITE_HIDE 11 : SCENE2D_OFF xA%=-30 : yA%=-30 : sprite_position 10,xA%,yA% : ' repositionne l'astéroïde en dehors de l'écran on_key_down 0,touche END_SUB rem ============================================================================ SUB verif_tir(nsp1%,w1%,h1%,nsp2%,w2%,h2%) dim_local px1%,py1%,px2%,py2% h1%=(h1%/2) : w1%=(w1%/2) : h2%=(h2%/2) : w2%=(w2%/2) tir$="" px1%=sprite_X_position(nsp1%) : py1%=sprite_Y_position(nsp1%) : ' position de nsp1% px2%=sprite_X_position(nsp2%) ' : py2%=sprite_Y_position(nsp2%) : ' position de nsp2% : ' <=====????????? if px1%<(xA%+w1%) and px1%>xA% and py1%>yA% and py1%<(yA%+h1%) tir$="OK" end_if 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 if nsp% <> a_v% then sprite_hide a_v% : a_v% = nsp% : sprite_show nsp% ' 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 sprite_position nsp%,x%,y% END_SUB rem ============================================================================
fin: terminate return (Je n'ai pas Pangine2d...) | |
| | | Contenu sponsorisé
| Sujet: Re: PANGINE2D | |
| |
| | | | PANGINE2D | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |