FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
PANGINE2D - Page 3 Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
PANGINE2D - Page 3 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
PANGINE2D - Page 3 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
PANGINE2D - Page 3 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
PANGINE2D - Page 3 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
PANGINE2D - Page 3 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
PANGINE2D - Page 3 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
PANGINE2D - Page 3 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
PANGINE2D - Page 3 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
PANGINE2D - Page 3 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
PANGINE2D - Page 3 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
PANGINE2D - Page 3 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
PANGINE2D - Page 3 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
PANGINE2D - Page 3 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
PANGINE2D - Page 3 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-55%
Le deal à ne pas rater :
Friteuse sans huile – PHILIPS – Airfryer HD9200/90 Série 3000
49.99 € 109.99 €
Voir le deal

 

 PANGINE2D

Aller en bas 
+3
Jack
Jicehel
Jean Claude
7 participants
Aller à la page : Précédent  1, 2, 3, 4, 5  Suivant
AuteurMessage
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyJeu 18 Juin 2015 - 22:53

Non, ça se ferme tout seul car il doit y avoir une erreur quelque part.

Le truc c'est que le debuggage est vraiment fastidieux car tu n'as aucune indication te mettant sur la voie (pas de message d'erreur), donc pour le moment moi j'attendrais pour m'y remettre
Revenir en haut Aller en bas
Klaus

Klaus


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyJeu 18 Juin 2015 - 23:52

@Jicehel:
Le bug se situe en ligne 39:
Code:
vit_ast%=160 : ' + => plus lent
La variable vit_ast% n'est pas définie.

Méthode de détection: placer une commande "END" dans le texte, progressivement de plus en plus loin, en revenant en arrière pour diviser l'intervalle ajouté par 2 en cas de plantage, etc - jusqu'à trouver la ligne concernée. Méthode classique.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyJeu 18 Juin 2015 - 23:53

Jicehel
j'ai cherché, cherché, etc...

Le problème vient de la ligne41
Code:
vit_ast%=160 :' + => plus lent
Et de la ligne 108
Code:
wait vit_ast%

La variable vit_ast% n’est déclarée par DIM nulle part !!!
Aussi il est préférable d'utilise pause à la place de wait.

EDIT :Comme toujours, Klaus est le plus rapide !!!
J’ai utilisé exactement la même technique : mettre des END, c’est pourquoi j’ai perdu la numérotation exacte des lignes

EDIT 2
La ligne 146 pose problème


Code:
 px2%=sprite_X_position(nsp2%)
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 1:11

Merci à vous deux pour le debuggage. Du coup j'ai modifié le programme de Jean-Claude. Il est tard, je n'ai pas ajouté une tonne de commentaires, mais si tu as besoin d'explications, demande et je t'expliquerais.
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 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,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


' 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
scene2d_interval 500 : scene2d_on
file_load "image/espace.bmp"

' réglages
vit_vai% = 8 :' + => plus rapide
vit_mis%=12  :' + => plus rapide


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,50 : 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()
      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
  Collision_AABB(tir_x,tir_y,16,16,xA%,yA%, 22,24)
  if tir$="OK" then tir_ok()
END_SUB

rem ============================================================================
SUB tir_ok()
    ' animation de la destruction de la cible
    tir% = 0 : SPRITE_HIDE 9
    sprite_position 11,(xA% - 40),(yA% - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14
    pause 2000 : SPRITE_HIDE 10 : SPRITE_HIDE 11
    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
    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 t'ai juste remis le code d'applomb. Les wait c'est absolument à éviter ça ralenti le jeu.
Tu peux jouer sur l'intervalle du timer, mais ne jamais mettre de timer avec des valeurs trop petites, ça ne peut que provoquer des problèmes. Si tu veux faire varier la vitesse, tu mets un compteur de boucle et tu dis par exemple que tu bouge l'asteroide toutes les 5 fois que la procédure principale s’exécute.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 8:28

Bravo Jicehel,

Joli travail, ça fonctionne impeccable.
J'ai vu que tu as terminé le remplacement de la SUB verif_tir() par collisionAABB(..........), ta méthode est meilleur que la mienne, car on a pas besoin de reprendre la position des sprites à l'intérieur de la SUB, vu qu'elle sont passées en paramètres.
Franchement, je te félicite, sachant qu'il faut pratiquement lancer le programme à chaque fois, que tu ajoutes une ligne, pour voir si ça plante, et si ça ne plante pas, c'est même pas sur que ce soit bon...  cheers
Il faut du courage pour programmer à l'aveuglette. Mais bon, Jack va nous arranger ça, il faut que l'on soit patient.

j'ai légèrement retouché le code pour que l'on puisse voir l'animation de l'explosion en entier avec "scene2d_interval". Grâce à cette commande on peut régler des vitesses d'animation différentes pour chaque SPRITE_ANIMATED. Et j'ai placé un OFF_KEY_DOWN pendant la durée de cette animation, car sinon ça plante si on continu de jouer.
Voir le code ci-dessous.

@Papydall,
la variable vit_ast% n'était pas déclarée par DIM. Je ne m'en était pas rendu compte.
Utiliser Pause à la place de wait: tu as raison de le signaler, mais on peut avoir besoin de stopper l'exécution du programme.

MERCI A VOUS TOUS.

Voici la première version "aboutie" que j’appellerais "Chasseur d'astéroïde".
Il n'y a pas de comptage des points acquis, c'est une version d'entrainement. Very Happy


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 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,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


' 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%=20  :' + => plus rapide


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,50 : 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()
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 ============================================================================
' 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
  Collision_AABB(tir_x,tir_y,16,16,xA%,yA%, 22,24)
  if tir$="OK" then tir_ok()
END_SUB

rem ============================================================================
SUB tir_ok()
    ' animation de la destruction de la cible
' off_key_down 0
scene2d_interval 250 : scene2d_on
    tir% = 0 : SPRITE_HIDE 9
    sprite_position 11,(xA% - 40),(yA% - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14
    pause 2000 : SPRITE_HIDE 10 : SPRITE_HIDE 11
scene2d_off
on_key_down 0,touche
    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
    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

A+
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 8:50

@Jicehel,
Dis moi, si je me trompe.
il me semble que pour affiner (centrer) le visuel de la balle qui percute l'astéroïde, il faut diviser par deux la taille des sprites.
Code:
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)/2)) OR ((r2_x% + (r2_width/2)) <= r1_x%) OR (r2_y% >= (r1_y% + (r1_height)/2)) OR ((r2_y% + (r2_height)/2) <= r1_y%)) THEN Tir$=""
END_SUB

A+

PS: laisse tomber ce message, il est plus simple de faire la division avant de passer les paramètres.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 10:42

non, ce n'est pas obligatoire. Tu as plusieurs façon de faire. Soit tu cnsidères comme j'ai fais que dès que les 2 rectangles se touchent, il y a contact et à ce moment là, tu laisses tel quel, mais tu peux ausi tricher pour donner l'impression que les 2 sprites rentrent l'un dans l'autre en indiquant une taille plus petite (en ajoutant une marge de 3 pixel par exemple)
Tu envois alors dans l'appel Collision_AABB(tir_x + 3,tir_y + 3,13,13,xA%+3,yA%+3, 19,21)
pour une marge d'1 pixel: Collision_AABB(tir_x + 1,tir_y + 1,15,15,xA%+1,yA%+1, 21,23)

Soit au moins des sprites est assez petits (par exemple le missile) et tu peux calculer le contact d'un point situé en son centre avec le rectangle de l'asteroide.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 11:16

Oui c'est exactement, ce que j'ai fait.
C'est mieux de "bidouiller" les paramètres et de vérifier le visuel.

Ce matin j'ai codé la collision du vaisseau avec l'astéroïde et c'est que j'ai fait, j'ai bidouillé. Very Happy

Je vais mettre en place un comptage des astéroïdes détruits avec son affichage.
Cela pourra permettre de passer à niveau de difficulté supérieur (par exemple au bout de 10).

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 11:29

Génial et je serais vigileant sur ton code.
Si je peux te proposer des améliorations ou des corrections, je le ferais.
Le système du tableau pour les sprites, c'est bien.
Je n'ai pas eu le temps de remplacer les variables hier par le tableau à cause de la suppression de la variable du wait que je n'avais pas encore supprimé dans le code, mais je pense que ce serait bien. Après c'est un choix et je te laisse voir si toi tu préfères utiliser le tableau ou les variables.
L'avantage du tableau, c'est que tu pourrais facilement mettre en places des boucles de tests et d'animations de tirs ou de déplacement d'asteroides de différentes tailles.
Tu pourrais par exemple avoir des gros asteroides au départ qui se cassent en 3 morceaux plus petit la première fois que l'on les touches.
Un autre solution est de créer un tableau pour les tirs et un autre pour les asteroides
Avec 2 compteurs: un pour le nombre de tirs actifs et un pour les asteroides.
Je regarderais ta version active ce soir et si tu ne l'as pas fais je te proposerais une version avec 5 tirs simultanés possibles et si j'ai le temps et que tu ne l'a pas faits, si j'ai le temps, je coderais aussi le tableau avec les asteroides pour pouvoir en avoir jusqu'à 20 actifs (de toute façon une fois la mécanique mise en place, le maximum n'est qu'une varaible à modifier comme pour les tirs)
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 13:14

Je vois où tu veux en venir, tu as déjà une vision du jeu...

Je vais déposer sur mon Webdav la dernière version avec la nouvelle planche de Sprites.
Comme ça, de ton coté tu mets en place le tableau et les tirs multiples dans le même tour.
Et tu n'oublie pas de commenter un max. Very Happy

De mon coté je finalise la version actuelle. Et comme je ne vais pas avoir le temps ce weekend tu ne seras pas freiné.

A+
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2394
Date d'inscription : 28/05/2007

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 13:17

En lisant ce post, je constate que je me suis mal exprimé au niveau des objets, car certains s'étonnent qu'on puisse créer par exemple un TIMER.

Il y a toujours des objets, mais ce que je voulais dire c'est que, puisqu'il n'y a qu'un FORM et un SCENE2D, ces numéros d'objets ont été "supprimés" pour le programmeur.

Mais il existe toujours les objets non visibles et qui eux, possèdent un numéro d'objet pour les différencier, de la même façon que les SPRITEs sont différenciés les uns des autres par leur numéro. La documentation sera remise à jour.

Tous les objets non-visibles de Panoramic sont présents :
OPEN_DIALOG,
SAVE_DIALOG,
TIMER,
DLIST,
IMAGE,
SOUND.

Et heureusement ! Par exemple, que serait un jeu vidéo sans aucun SOUND !

Je viens de coder:
ON_KEY_UP,
ON_KEY_DOWN,
OFF_KEY_UP,
OFF_KEY_DOWN.

Cela permettra d'utiliser les événements avec les saisies clavier.

J'ai corrigé le problème qui faisait que les erreurs n'étaient pas signalées.

Je fais les derniers tests et je sors une version PANGINE2D Alpha 2 peut-être ce soir.

Pour les relations avec l'utilisateur, il y a normalement INPUT, INKEY$ et SCANCODE. Mais cela n'a pas fait l'objet de tests approfondis et il y a peut-être des bugs.

_________________
PANGINE2D - Page 3 Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 13:32

Super merci Jack.

On s'habitue bien à l'aide à la programmation et les messages d'erreur font gagner un temps fou. On s'en rend vraiment compte quand on ne les a plus comme pour beaucoup de choses.

Merci également pour les précisions données qui m'aide à mieux comprendre la philosophie à adopter.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 13:39

.


Dernière édition par Jicehel le Ven 19 Juin 2015 - 13:42, édité 1 fois (Raison : Doublon)
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 13:49

Merci Jack, ça vas nous aider... Very Happy

Une question:
Est-ce que ça veut dire qu'on peut créer des boutons, des form(s) et autres objets de Panoramic ???

A+
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 18:04

Bon, vous allez pouvoir jouer à détruire des astéroïdes, mais attention qu'ils ne vous détruisent pas.

Vous trouverez asterV1.bas sur mon Webdav dans le zip ESSAI_PANGINE2D, en première page.
à l'intérieur il y a l'éditeur, donc tout ce qu'il faut.

ATTENTION: si après avoir joué, vous ouvrez un source.bas Panoramic faites attention que ce ne soit pas l'éditeur de PANGINE2D qui s'ouvre. Cela m'est arrivé.

C'est une version avec une fin (plutôt 2, une bonne et une mauvaise).
Votre mission: détruire 10 astéroïdes.


@Jicehel, tu peux t'en servir comme base, après avoir contrôle les nouveauté .
Je viens de me rappeler que j'ai publié avant de supprimer la pause en ligne 151, elle sert à ralentir l’astéroïde pour les besoins du codage. Tu devra l'enlever, ou t'en servir pendant le codage.

Cette fois-ci, ce n'est pas le codage qui a été long, c'est la fabrication des Sprites.

Amusez-vous et n'hésitez pas à signaler les bugs.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 18:05

Comptes sur moi Smile
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 18:28

ATTENTION: pour ceux qui ont déjà téléchargé il faut remettre en service la ligne 166 (off_key_down 0) sinon vous risquez d'avoir des surprises. Repérez bien la touche arrêt Défil de votre clavier.

Je remplace le dossier de suite.

A+
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2394
Date d'inscription : 28/05/2007

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 18:42

Jean Claude a écrit:
Une question:
Est-ce que ça veut dire qu'on peut créer des boutons, des form(s) et autres objets de Panoramic ???

Non.
Dans PANGINE2D, il n'y a que les objets invisibles (qu'on ne met pas sur une interface). Les objets visibles (BUTTON, ...) n'existent pas.
C'est dit quelques lignes plus haut, mais, c'est vrai de façon ambigüe:

Jack a écrit:
Tous les objets non-visibles de Panoramic sont présents :
OPEN_DIALOG,
SAVE_DIALOG,
TIMER,
DLIST,
IMAGE,
SOUND.

_________________
PANGINE2D - Page 3 Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 18:59

Oui, j'ais compris Jack, je viens d'en faire l'expérience en testant le nouvel éditeur.


@Jicehel
Du coup, avec le nouvel éditeur, Il faut remplacer tout les ON_KEY_DOW 0,label par ON_KEY_DOW label.
ça, c'est vite fait avec la fonction remplacer de l'éditeur.
Je n'ais pas le temps maintenant, peut-être ce soir.

Pour ceux qui veulent télécharger le jeu, il ne fonctionne pas avec le nouvel éditeur pour le moment.
Mais dans le zip il y a une application exe, donc vous n'avez pas besoin de l'éditeur pour jouer.

A+
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

PANGINE2D - Page 3 Empty
MessageSujet: re   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 20:50

cheers cheers cheers
J' ai gagné !!!

lol!
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 21:18

Je vous mets déjà la version remaniée pour la nouvelle version de Pangine (nécessite la version téléchargée sur le site de Jack) Je commence à modifier après le film

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 tir$,tir%, tir_x,tir_y,tir_d,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
SPRITE 9 : SPRITE_POSITION 9,-50,-50 : SPRITE_FILE_LOAD 9,"image/balle.bmp" : SPRITE_HIDE 9  : ' un missile
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
tir% = 0 : ' Au début pas de tir actif
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

new_asteroide() : SPRITE_SHOW 10  : ' Créé l'astéroid initial
afiscore()
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 afiscore()
  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:
off_key_down
' 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 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
on_key_down touche
return

rem ============================================================================
boucle_principale:
timer_off 2
  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 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()
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 ============================================================================
' 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
  Collision_AABB(tir_x,tir_y,16,16,xA%,yA%, 22,24)
  if tir$="OK" then tir_ok()
END_SUB

rem ============================================================================
SUB tir_ok()
    ' animation de la destruction de la cible
off_key_down
scene2d_interval 40 : scene2d_on
    tir% = 0 : SPRITE_HIDE 9
    sprite_position 11,(xA% - 40),(yA% - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14
    pause 400 : SPRITE_HIDE 10 : SPRITE_HIDE 11
    scene2d_off
    on_key_down touche
    score%=score%+1 : afiscore()
    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
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 21:36

@ygeronimi,

Attends un peu de jouer avec la prochaine version, tu vas moins parader. geek

A+
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptyVen 19 Juin 2015 - 21:48

@JICEHEL,
on a un souci, ça ne marche plus.

J'ai remarqué que dans le débogage, tu as oublié off_key_down 0 à remplacer par off_key_down.
Mais, le problème c'est que le vaisseau ne bouge plus.

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptySam 20 Juin 2015 - 8:29

Bonjour, je me suis endormi hier soir. Pour moi, ça marche bien seule les flèches directionnelles ne fonctionnent pas mais les touches du pavé numérique fonctionnent bien ainsi que le tir
Comme les touches du pavé numérique fonctionnent et que cette partie du code n'a pas été modifiée, je me demande si ce ne serait pas un bug de la nouvelle version ?
C'est une interrogation. Pour toi, ça fonctionne bien avec le pavé numérique ?
Si oui, vu le code, je pense que ça viendrait de la nouvelle version car le OR ne peut pas être en cause.
Je pense donc que ça viendrait du code du ON_KEY_DOWN dans lequel il y aurait un petit oubli ou problème.
Désolé je me suis endormi avant la fin du film (c'était pourtant un film plein d'actions), je n'ai rien codé de plus hier soir sinon.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 EmptySam 20 Juin 2015 - 8:53

Salut Jicehel.
Bon, t'as passé une bonne nuit Very Happy

Le code fonctionne mais pas les flèches de direction (avec ou sans or).

Je dois m'absenter, je reviens en fin de matinée.

A+
Revenir en haut Aller en bas
Contenu sponsorisé





PANGINE2D - Page 3 Empty
MessageSujet: Re: PANGINE2D   PANGINE2D - Page 3 Empty

Revenir en haut Aller en bas
 
PANGINE2D
Revenir en haut 
Page 3 sur 5Aller à la page : Précédent  1, 2, 3, 4, 5  Suivant
 Sujets similaires
-
» PANGINE2D alpha 3 du 21 juin 2015
» Je cherche PANGINE2D
» Question à Jack sur PANGINE2D
» Chasseur d'astéroïdes (PANGINE2D)
» PANGINE2D alpha 2 du 19 juin 2015

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Expériences autour de PANORAMIC :: PANGINE2D-
Sauter vers: