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
» Une calculatrice en une ligne de programme
Chasseur d'astéroïdes (PANGINE2D) Emptypar jean_debord Aujourd'hui à 8:01

» Gestion d'un système client-serveur.
Chasseur d'astéroïdes (PANGINE2D) Emptypar Pedro Hier à 19:31

» Les maths du crocodile
Chasseur d'astéroïdes (PANGINE2D) Emptypar jean_debord Hier à 10:37

» Naissance de Crocodile Basic
Chasseur d'astéroïdes (PANGINE2D) Emptypar jean_debord Hier à 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Chasseur d'astéroïdes (PANGINE2D) Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Chasseur d'astéroïdes (PANGINE2D) Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Chasseur d'astéroïdes (PANGINE2D) Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Chasseur d'astéroïdes (PANGINE2D) Emptypar papydall Dim 21 Avr 2024 - 23:30

» Form
Chasseur d'astéroïdes (PANGINE2D) Emptypar leclode Dim 21 Avr 2024 - 18:09

» trop de fichiers en cours
Chasseur d'astéroïdes (PANGINE2D) Emptypar Marc Dim 21 Avr 2024 - 2:41

» 2D_fill_color(résolu)
Chasseur d'astéroïdes (PANGINE2D) Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Chasseur d'astéroïdes (PANGINE2D) Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Chasseur d'astéroïdes (PANGINE2D) Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Chasseur d'astéroïdes (PANGINE2D) Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

» Bataille-navale
Chasseur d'astéroïdes (PANGINE2D) Emptypar jjn4 Mer 3 Avr 2024 - 14:08

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le deal à ne pas rater :
Cdiscount : -30€ dès 300€ d’achat sur une sélection Apple
Voir le deal

 

 Chasseur d'astéroïdes (PANGINE2D)

Aller en bas 
3 participants
AuteurMessage
Jean Claude

Jean Claude


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

Chasseur d'astéroïdes (PANGINE2D) Empty
MessageSujet: Chasseur d'astéroïdes (PANGINE2D)   Chasseur d'astéroïdes (PANGINE2D) EmptyMer 4 Avr 2018 - 13:54

Bonjour à tous,

Je reviens sur ce sujet de 2015, car j'ai constaté qu'un nouveau sur le forum s'intéresse à la 2D.
Fhoest, si tu t'es reconnu Very Happy  tu as tout bon ! Razz

Pour commencer:
PANGINE2D à été conçu par Jack pour faire des jeux en 2D.
Cela fonctionne presque comme Panoramic, mais avec des instructions particulières pour les jeux en 2D. Et surtout son moteur 2D est plus performant que celui de Panoramic.
Il n'est pas question pour moi d’embêter Jack pour continuer son développement, (si c'est pour 2 personnes, ça ne vaut pas la chandelle...). Mais te quel ! PANGINE2D offre déjà beaucoup.
Le but est d'informer les Panoramiciens qui ne savaient pas que ça existe et que c'est exploitable.

J'ai déposé ICI un jeu nommé AsterV4.1 sous forme de zip.
Attention: il est assez volumineux (274 Mo compressé, 302 Mo décompressé). Et il ne sera disponible que 30 jours.
Ce jeu montre les possibilités de PANGINE2G et est intéressant pour les adeptes....
Lisez le générique, mettez le casque et jouez... cheers

Si besoin, par la suite je fournirais le code.bas construit avec l'aide d'un grand nombre de Panoramicien.

Pour finir, PANGINE2D est disponible sur mon Wevdev  (voir ma signature). Il contient son propre éditeur et un PDF d'explication (qu'il faut lire absolument) et une série d'exemples pour les mots-clés propre à ce langage. Tout ça fait par Jack.


A+


Dernière édition par Jean Claude le Dim 8 Avr 2018 - 20:56, édité 1 fois
Revenir en haut Aller en bas
Fhoest

Fhoest


Nombre de messages : 97
Age : 48
Localisation : Nord
Date d'inscription : 04/01/2015

Chasseur d'astéroïdes (PANGINE2D) Empty
MessageSujet: Re: Chasseur d'astéroïdes (PANGINE2D)   Chasseur d'astéroïdes (PANGINE2D) EmptyMer 4 Avr 2018 - 21:16

cheers Bonsoir et merci pour le partage.
je regarderai cela a tête reposé si j'arrive à la reposer bien sur.
il est toujours intéressant de s'instruire sur diverses forme de codage et de plus fait par Jack.
A bientôt study

Edit : le jeu est excellent,bravo.(j'espère arriver à se niveau avec l'autre.)
Revenir en haut Aller en bas
http://programmer-en-vb.forumactif.org/
Jean Claude

Jean Claude


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

Chasseur d'astéroïdes (PANGINE2D) Empty
MessageSujet: Re: Chasseur d'astéroïdes (PANGINE2D)   Chasseur d'astéroïdes (PANGINE2D) EmptyJeu 5 Avr 2018 - 8:28

Comme promis, voici le code.

ATTENTION: Ce code ne fonctionne que dans l'éditeur PANGINE2D.

Code:
' AsterV4.1.bas (Jean Claude, Jicehel, Papydall, Bignono, Klaus) (JUIN 2015)

rem ============================================================================

dim n%,i%,at%
dim pi : pi = acos(-1)              : ' mémorise la valeur pi
dim x%,y%,vit_vai%                  : ' position et vitesse du vaisseau
dim d  : d = pi/2                   : ' direction (c'est le cap) de départ du vaisseau (vers le haut)
dim Nb_tirs%,Cpt_tirs% : Nb_tirs%=5 : ' Nombre de tirs autorisés et compteur de tirs actifs
dim tir$,tir%(Nb_tirs%), tir_x(Nb_tirs%),tir_y(Nb_tirs%),tir_d(Nb_tirs%),vit_mis% : ' Resultat du tir, Tir actif ou non, coord en x et en y du tir et mémoristion de la direction et vitesse
dim Nb_Asteroides%,Cpt_asteroides% : Nb_Asteroides% = 3     : ' Nombre d'Asteroides actifs
dim xA%(Nb_Asteroides%),yA%(Nb_Asteroides%)                 : ' Position des asteroides
dim vit_ast_x%(Nb_Asteroides%), vit_ast_y%(Nb_Asteroides%)  : ' Vitesse des asteroides
dim SpriteV%        :' Pour savoir quelle image du vaisseau ami 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
dim niveau%         :' Niveau du jeu
dim xE%,yE%         :' Position de l'ennemi
dim vit_E%,vit_E_max%,vit_E_min%  :' Vitesse de l'ennemi et son maximum et minimum
dim tirE%           :' Tir ennemi
dim SpriteVE%       :' Pour savoir quelle image du vaisseau Ennemi est en service
dim num_wav%        :' Pour définir les morceaux de musique à jouer
dim touche%         :' Pour mémoriser la touche enfoncée

' Déclaration des étiquettes
label touche,boucle_principale,fin,Attente,Repart,Musique,time_ennemi

' fichiers audios
sound 197 :' musique d'ambiance
sound 198 : file_load 198,"audio/explosion_vaisseau.wav": ' explosion du vaisseau
sound 199 : file_load 199,"audio/explosion_aster.wav"  : ' explosion des asteroides

SPRITE_CREATE_HIDE

' création des vaisseaux amis
SPRITE 1 : SPRITE_FILE_LOAD 1,"image/VBG.bmp"
SPRITE 2 : SPRITE_FILE_LOAD 2,"image/VB.bmp"
SPRITE 3 : SPRITE_FILE_LOAD 3,"image/VBD.bmp"
SPRITE 4 : SPRITE_FILE_LOAD 4,"image/VG.bmp"
SPRITE 5 : SPRITE_FILE_LOAD 5,"image/VD.bmp"
SPRITE 6 : SPRITE_FILE_LOAD 6,"image/VHG.bmp"
SPRITE 7 : SPRITE_FILE_LOAD 7,"image/VH.bmp"
SPRITE 8 : SPRITE_FILE_LOAD 8,"image/VHD.bmp"

SPRITE_ANIMATED 11 : SPRITE_ANIMATED_FILE_LOAD 11,5,5,"image/meteore.bmp"  : ' explosion astéroide
SPRITE_ANIMATED 12 : SPRITE_ANIMATED_FILE_LOAD 12,5,5,"image/meteore2.bmp" : ' explosion vaisseau


FOR n% = 1 TO Nb_Asteroides%
  SPRITE_ANIMATED 29 + n% : ' Créé un sprite pour un astéroide
  SPRITE_ANIMATED_FILE_LOAD 29 + n% ,1,8,"image/rock8.bmp"    : ' Charge le sprite animé correspondant à l'astéroide
  new_asteroide(n%) : SPRITE_SHOW 29 + n%  : ' Créé l'astéroid initial
NEXT n%
Cpt_asteroides% = Nb_Asteroides%

FOR n% = 1 TO Nb_tirs%
  SPRITE 39 + n% : SPRITE_FILE_LOAD 39 + n%,"image/balle.bmp"
  tir%(n%) = 0 : ' Au début pas de tir actif
NEXT n%

' Sprites pour le générique.
SPRITE 51 : SPRITE_FILE_LOAD 51,"image/gen3.bmp" : SPRITE_POSITION 51,(screen_x/2)-350,screen_y+200
SPRITE 50 : SPRITE_FILE_LOAD 50,"image/gen1.bmp" : SPRITE_POSITION 50,(screen_x/2)-350,screen_y-40

' création des vaisseaux ennemis
SPRITE 61 : SPRITE_FILE_LOAD 61,"image/VEBG.bmp"
SPRITE 62 : SPRITE_FILE_LOAD 62,"image/VEB.bmp"
SPRITE 63 : SPRITE_FILE_LOAD 63,"image/VEBD.bmp"
SPRITE 64 : SPRITE_FILE_LOAD 64,"image/VEG.bmp"
SPRITE 65 : SPRITE_FILE_LOAD 65,"image/VED.bmp"
SPRITE 66 : SPRITE_FILE_LOAD 66,"image/VEHG.bmp"
SPRITE 67 : SPRITE_FILE_LOAD 67,"image/VEH.bmp"
SPRITE 68 : SPRITE_FILE_LOAD 68,"image/VEHD.bmp"
' boulet ennemi
SPRITE 69 : SPRITE_FILE_LOAD 69,"image/balleE.bmp"

' scene2D
BACKGND_LOAD "image/espace.bmp"

niveau%=1 : niveau() : cpt_t_asteroide = 0 : Cpt_tirs% = 0

file_load 197,"audio/music18.wav" : play 197
SPRITE_SHOW 51 : SPRITE_SHOW 50
generique(): 'démarrage du programme par le générique

' init
x%=(screen_x/2)+32 : y%=700 : sprite_position 7,x%,y% : SpriteV% = 7 : SPRITE_SHOW 7
scene2d_interval 80
affiscore()

' Gestion du jeu: activation des 3 timer
timer 2 : timer_interval 2,8 : on_timer 2,boucle_principale  : ' Activation du timer qui activera les tours de jeu
timer 3 : timer_interval 3,105500 : on_timer 3,Musique       : ' Musique d'ambiance (recommence toutes les minutes)
timer 4 : timer_interval 4,8 : on_timer 4,time_ennemi        : ' Activation de la boucle pour les mouvements ennemis

END :' FIN DE LA MISE EN PLACE
' ==============================================================================
' CI-DESSOUS: Les sous_programmes
rem ================================ Musique ===================================
Musique:
  off_key_down
  num_wav%=num_wav%+1
  if num_wav%>18 then num_wav%=1
  file_load 197,"audio/music"+str$(num_wav%)+".wav"
  on_key_down touche
  play 197
RETURN

rem ================================= PAUSE ====================================
Attente:
  timer_off 2 : timer_off 3
  on_key_down Repart
RETURN

Repart:
  timer_on 3 : timer_on 2 : on_key_down touche
RETURN

rem =============================== Générique ==================================
SUB generique()
    DIM_LOCAL X1,Y1,X2,Y2,Y3,Y4
    scene2d_interval 20 : scene2d_on
    X1=0 : Y1=0 : X2=2184 : Y2=1167 : view X1,Y1,X2,Y2
    Y2=600 : Y3=70 : Y4=screen_y+100
    SPRITE_POSITION 50,(screen_x/2)-350,Y3
    REPEAT
        Y1=Y1+1 : Y2=Y2+1 : view X1,Y1,X2,Y2
        Y4=Y4-2 : SPRITE_POSITION 51,(screen_x/2)-350,Y4
        scene2d_off : pause 50
    UNTIL y2>1000 or scancode<>0
    pause 2000
    X1=0 : Y1=0 : X2=screen_x : Y2=screen_y : view X1,Y1,X2,Y2
    SPRITE_HIDE 50 : SPRITE_HIDE 51
END_SUB

rem ========================== Réglage des Niveaux =============================
SUB niveau()
    if niveau%>10 then niveau%=10
    if niveau%=1 then vit_vai%=8 : vit_mis%=20
    if niveau%=2 then vit_vai%=9 : vit_mis%=22
    if niveau%=3 then vit_vai%=10 : vit_mis%=24  : vit_E_max%=8 : vit_E_min%=3
    if niveau%=4 then vit_vai%=11 : vit_mis%=26  : vit_E_max%=9 : vit_E_min%=4
    if niveau%=5 then vit_vai%=12 : vit_mis%=28  : vit_E_max%=10 : vit_E_min%=5
    if niveau%=6 then vit_vai%=13 : vit_mis%=30  : vit_E_max%=11 : vit_E_min%=6
    if niveau%=7 then vit_vai%=14 : vit_mis%=32  : vit_E_max%=12 : vit_E_min%=7
    if niveau%=8 then vit_vai%=15 : vit_mis%=34  : vit_E_max%=13 : vit_E_min%=8
    if niveau%=9 then vit_vai%=16 : vit_mis%=36  : vit_E_max%=14 : vit_E_min%=9
    if niveau%=10 then vit_vai%=17 : vit_mis%=38 : vit_E_max%=15 : vit_E_min%=10

' réglages
' vit_vai% = 8 :' + => plus rapide
' vit_mis%=20  :' + => plus rapide
' vit_E_min%=2 : ' vitesse ennemi: minimum 2
' vit_E_max%=12 :' vitesse ennemi: + => plus rapide (mais aléatoire >vit_E_min%)

END_SUB

rem ============== Score et réglage des paliers pour les niveaux ===============
SUB affiscore()
    ' affichage du score et progression du niveau par paliers
    if score%=1 then niveau%=niveau%+1  :' 2
    if score%=2 then niveau%=niveau%    :' 2
    if score%=3 then niveau%=niveau%+1  :' 3
    if score%=4 then niveau%=niveau%    :' 3
    if score%>4 and score%<10 then niveau%=niveau%+1  :' 4
    if score%>9 and score%<15 then niveau%=niveau%+1  :' 5
    if score%>14 and score%<20 then niveau%=niveau%+1 :' 6
    if score%>19 and score%<25 then niveau%=niveau%+1 :' 7
    if score%>24 and score%<30 then niveau%=niveau%+1 :' 8
    if score%>29 and score%<35 then niveau%=niveau%+1 :' 9
    if score%>34 then niveau%=10
    caption "CHASSEUR D'ASTEROIDES  -  Score: "+str$(score%)
    niveau()
END_SUB

rem ================== Attribution des touches du clavier ======================
touche:
' Touches du pavé numérique
  if KEY_DOWN_CODE = 97 then touche% = 1                        : ' 1 End
  if KEY_DOWN_CODE = 40 or KEY_DOWN_CODE = 98 then touche% = 2  : ' 2 Bas
  if KEY_DOWN_CODE = 99 then touche% = 3                        : ' 3 PgDn
  if KEY_DOWN_CODE = 37 or KEY_DOWN_CODE = 100 then touche% = 4 : ' 4 gauche
  if KEY_DOWN_CODE = 39 or KEY_DOWN_CODE = 102 then touche% = 5 : ' 5 droite
  if KEY_DOWN_CODE = 103 then touche% = 6                       : ' 6 Home
  if KEY_DOWN_CODE = 38 or KEY_DOWN_CODE = 104 then touche% = 7 : ' 7 haut
  if KEY_DOWN_CODE = 105 then touche% = 8                       : ' 8 PgUp
  if KEY_DOWN_CODE = 27 then gosub fin                          : ' Echap
  if KEY_DOWN_CODE = 80 then gosub Attente : RETURN
  if KEY_DOWN_CODE = 83 then timer_off 3
  if KEY_DOWN_CODE = 77 then timer_on 3 : play 197
  if KEY_DOWN_CODE = 32 then touche% = 32  : ' Fin du traitement d'un appuie sur espace
RETURN

rem ================ Boucle des ennemis ========================================
time_ennemi:
timer_off 4
  if niveau%>2
    ' on gére le vaisseau ennemi pour ce tour
    if SpriteVE%=0 then new_ennemi()
    ennemi()
  end_if
  cpt_t_asteroide = cpt_t_asteroide + 1
  if cpt_t_asteroide = 1 then asteroide(1) : asteroide(3)
  if cpt_t_asteroide = 2 then asteroide(2) : asteroide(3)
  if cpt_t_asteroide = 3 then asteroide(3) : asteroide(2) :  cpt_t_asteroide = 0 : ' On gère notre asteroid pour ce tour
  FOR i% = 1 TO Nb_Asteroides%
      Test_collision_vaisseau(i%)
  next i%
timer_on 2 : on_key_down touche
RETURN

rem ==================== Boucle_principale (tour) ==============================
boucle_principale:
  timer_off 2 : off_key_down
  SELECT touche%
    case 1 : move(1) : ' touche 1 du pavé numérique End
    case 2 : move(2) : ' 2 Bas
    case 3 : move(3) : ' 3 PgDn (flèche de pagination vers le bas du pavé numérique)
    case 4 : move(4) : ' 4 gauche
    case 5 : move(5) : ' 6 droite
    case 6 : move(6) : ' 7 Home (touche début du pavé numérique)
    case 7 : move(7) : ' 8 haut
    case 8 : move(8) : ' 9 PgUp (flèche de pagination vers le haut du pavé numérique)
    case 32
      IF Cpt_tirs% < Nb_tirs%
         Cpt_tirs% = Cpt_tirs% + 1
         tir%(Cpt_tirs%) = 1 :  tir_d(Cpt_tirs%) = d  : ' On mémorise qu'un tir est actif et la direction de ce tir
        ' On ajuste la position initale du tir en fonction de la direction du vaisseau
         if d = 5*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 33
         if d = 3*pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y% + 44
         if d = 7*pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 33
         if d = pi then tir_x(Cpt_tirs%) = x%      : tir_y(Cpt_tirs%) = y% + 22
         if d = 0 then tir_x(Cpt_tirs%) = x% + 44 : tir_y(Cpt_tirs%) = y% + 22
         if d = 3*pi/4 then tir_x(Cpt_tirs%) = x% + 11 : tir_y(Cpt_tirs%) = y% + 11
         if d = pi/2 then tir_x(Cpt_tirs%) = x% + 22 : tir_y(Cpt_tirs%) = y%
         if d = pi/4 then tir_x(Cpt_tirs%) = x% + 33 : tir_y(Cpt_tirs%) = y% + 11
         sprite_position 39+Cpt_tirs%,tir_x(Cpt_tirs%), tir_y(Cpt_tirs%) : SPRITE_SHOW 39+Cpt_tirs%
      END_IF   : ' Fin du traitement d'un appuie sur espace
  END_SELECT
  touche% = 0
  if Cpt_tirs% > 0
    for i% = 1 to Cpt_tirs%
      if tir%(i%) = 1 then tir(i%) :  ' Si un tir est actif, on gère son tour
    next i%
  end_if
  timer_on 4 :  on_key_down touche
RETURN

rem ============================================================================
SUB vaisseau_detruit(Aster%)
    ' animation de la destruction de la cible
    off_key_down
    sprite_position 29 + Aster%,xA%(Aster%)+20,yA%(Aster%)+20 : SPRITE_HIDE SpriteV%
    scene2d_interval 250 : scene2d_on
    sprite_position 12,(xA%(Aster%) - 60),(yA%(Aster%) - 60) : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14
    pause 2400 : SPRITE_HIDE 12
    scene2d_off
END_SUB

rem ============================================================================
SUB Test_collision_vaisseau(Aster%)
    Collision_AABB(xA%(Aster%),yA%(Aster%),22,24,x%,y%,32,32) :' vérifier si le vaisseau ami n'est pas en collision avec l'astéroide
    if tir$="OK"
      play 198 : ' explosion vaisseau
      vaisseau_detruit(Aster%) : message "Votre vaisseau est détruit!"+chr$(13)+chr$(13)+"Votre score: "+str$(score%) :' fin de partie
      gosub fin : EXIT_SUB
    end_if
' test collision VE avec Astéroïde
    IF SpriteVE%<>0
      Collision_AABB(xA%(Aster%),yA%(Aster%),16,16,xE%,yE%,28,28) :' vérifier si le vaisseau ennemi n'est pas en collision avec l'astéroide
      If tir$="OK"
         play 198 : ' explosion vaisseau
      ' animation de la destruction du vaisseau ennemi par un astéroïde
        off_key_down
        SPRITE_HIDE SpriteVE%
        scene2d_interval 250 : scene2d_on
        sprite_position 12,xE%-60,yE%-60 : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14
        pause 400 : SPRITE_HIDE 12 : scene2d_off
        SpriteVE%=0 : tirE%=0
      End_if
    END_IF
END_SUB

rem ============================================================================
' New_astéroide
SUB new_asteroide(Aster%)
    scene2d_interval 500 : scene2d_on
    vit_ast_x%(Aster%)= 0 : vit_ast_y%(Aster%)= 0  : ' On initialise le compteur pour un lancé aléatoire
    WHILE (abs(vit_ast_x%(Aster%)) + abs(vit_ast_y%(Aster%))) < 10      : ' On fixe une vitesse minimale en dessous
      vit_ast_x%(Aster%)=rnd(30) - 15 : vit_ast_y%(Aster%)=rnd(30) - 15 : ' de laquelle on n'accepte pas le tirage
    END_WHILE                                                           : ' la vitesse peut être positive ou négative
    xA%(Aster%) = screen_x + 10 : yA%(Aster%) = screen_y + 10  : ' on fixe la position de départ de l'astéroid en bas à droite
    if vit_ast_x%(Aster%) > 0 then xA%(Aster%)=-10             : ' si la vitesse en x est positive, on change le point de départ à gauche
    if vit_ast_y%(Aster%) > 0 then yA%(Aster%)=-10             : ' si la vitesse en y est positive, on change le point de départ en haut
    sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%)        : ' on positionne notre asteroide
END_SUB

rem ============================================================================
' astéroide
SUB asteroide(Aster%)
    if ((xA%(Aster%) < (0-10)) and (vit_ast_x%(Aster%) < 0)) then new_asteroide(Aster%)
    if ((xA%(Aster%) > (screen_x + 10)) and (vit_ast_x%(Aster%) > 0)) then new_asteroide(Aster%)
    if ((yA%(Aster%) < (0-10))  and (vit_ast_y%(Aster%) < 0)) then new_asteroide(Aster%)
    if ((yA%(Aster%) > (screen_y + 10)) and (vit_ast_y%(Aster%) > 0)) then new_asteroide(Aster%)
    xA%(Aster%)=xA%(Aster%)+vit_ast_x%(Aster%) : yA%(Aster%)=yA%(Aster%)+vit_ast_y%(Aster%)
    sprite_position 29 + Aster%,xA%(Aster%),yA%(Aster%)
    Test_collision_vaisseau(Aster%)
    scene2d_off
END_SUB

rem ============================================================================
' libère un tir
SUB Annule_tir(N_t%)
    tir_d(N_t%) = tir_d(Cpt_tirs%) :  tir_x(N_t%) = tir_x(Cpt_tirs%) : tir_y(N_t%) = tir_y(Cpt_tirs%)
    SPRITE_POSITION 39 + N_t%,tir_x(N_t%), tir_y(N_t%) : SPRITE_HIDE 39 + Cpt_tirs%
    tir%(Cpt_tirs%) = 0 : Cpt_tirs% = Cpt_tirs% - 1
END_SUB

rem ============================================================================
' Tirer une balle dans l'une des 8 directions possibles du sprite
SUB tir(N_t%)
    dim_local pxbe%,pybe%,pxve%,pyve%
    tir_x(N_t%) = tir_x(N_t%) + cos(tir_d(N_t%))* vit_mis%  : tir_y(N_t%) = tir_y(N_t%) - sin(tir_d(N_t%)) * vit_mis%
    if (cos(tir_d(N_t%)) > 0 and tir_x(N_t%) > screen_x) or (cos(tir_d(N_t%)) < 0 and tir_x(N_t%) < 0 ) or (sin(tir_d(N_t%)) < 0 and tir_y(N_t%) > screen_y) or (sin(tir_d(N_t%)) > 0 and tir_y(N_t%) < 0 )
      Annule_tir(N_t%)
    end_if
    sprite_position 39+N_t%,tir_x(N_t%), tir_y(N_t%) : ' Mouvement de la balle du tir
    FOR n% = 1 TO Nb_Asteroides%
        Collision_AABB(tir_x(N_t%),tir_y(N_t%),16,16,xA%(n%),yA%(n%), 22,24)
        if tir$="OK" then tir_ok(N_t%,n%)
    NEXT n%
  ' verif si collision avec vaisseau ennemi
    IF SpriteVE%<>0
        pxbe%=sprite_x_position(39+N_t%) : pybe%=sprite_y_position(39+N_t%)
        pxve%=sprite_x_position(SpriteVE%) : pyve%=sprite_y_position(SpriteVE%)
        Collision_AABB(pxbe%,pybe%,10,10,pxve%,pyve%,40,40)
        if tir$="OK"
          off_key_down
          Annule_tir(N_t%)
          play 198 : ' explosion vaisseau
    '  animation de la destruction du vaisseau ami par un ennemi
          SPRITE_HIDE SpriteVE% : tirE%=0  : SPRITE_HIDE 69
          scene2d_interval 250 : scene2d_on
          sprite_position 12,pxbe%-60,pybe%-60 : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14
          pause 400 : SPRITE_HIDE 12 : SpriteVE%=0
          on_key_down touche
          scene2d_off : score%=score%+1 : affiscore()
        end_if
    END_IF
END_SUB

rem ============================================================================
SUB tir_ok(N_t%,N_a%)
    ' animation de la destruction de la cible
    play 199 :' explosion_aster
    off_key_down
    Annule_tir(N_t%)
    sprite_position 11,(xA%(N_a%) - 40),(yA%(N_a%) - 40) : SPRITE_SHOW 11 : sprite_animated_frames 11,8,14
    pause 100 : SPRITE_HIDE 29 + N_a% : SPRITE_HIDE 11
    on_key_down touche
    score%=score%+2 : affiscore()
    new_asteroide(N_a%):  SPRITE_SHOW 29 + N_a%
END_SUB

rem ============================================================================
SUB Collision_AABB(r1_x%,r1_y%,r1_width,r1_height,r2_x%,r2_y%, r2_width,r2_height)
    Tir$="OK"
    IF ((r2_x% >= (r1_x% + r1_width)) OR ((r2_x% + r2_width) <= r1_x%) OR (r2_y% >= (r1_y% + r1_height)) OR ((r2_y% + r2_height) <= r1_y%)) THEN Tir$=""
END_SUB

rem ============================================================================
' d est la direction (le cap) que prendra le sprite
SUB move(nsp%)
    select nsp%
        case 1 : x% = x% - vit_vai% : y% = y% + vit_vai%  : d = 5*pi/4
        case 2 : y% = y% + vit_vai%                  : d = 3*pi/2
        case 3 : x% = x% + vit_vai% : y% = y% + vit_vai%  : d = 7*pi/4
        case 4 : x% = x% - vit_vai%                  : d = pi
        case 5 : x% = x% + vit_vai%                  : d = 0
        case 6 : x% = x% - vit_vai% : y% = y% - vit_vai%  : d = 3*pi/4
        case 7 : y% = y% - vit_vai%                  : d = pi/2
        case 8 : x% = x% + vit_vai% : y% = y% - vit_vai%  : d = pi/4
    end_select
'   caption str$(nsp%) + ":" + str$(SpriteV%)
    if nsp% <> SpriteV%
        sprite_hide SpriteV% : SpriteV% = nsp%  : sprite_position nsp%,x%,y% :sprite_show nsp%
    else
        sprite_position nsp%,x%,y%
    end_if
'   Le mode ENROULE : si le sprite sort de la zone , il réapparait de l'autre côté
    if x% < 0  then x% = screen_x
    if x% > screen_x then x% = 0
    if y% < 0 then y% = screen_y
    if y% > screen_y then y% = 0
END_SUB
rem ============================================================================
SUB ennemi()
    SPRITE_SHOW SpriteVE%
  ' bouger le vaisseau
    if SpriteVE%=63 then xE%=xE%+vit_E% : yE%=yE%+vit_E% : Test_collision_vaisseau_E(SpriteVE%)
    if SpriteVE%=62 then yE%=yE%+vit_E% : Test_collision_vaisseau_E(SpriteVE%)
    if SpriteVE%=61 then xE%=xE%-vit_E% : yE%=yE%+vit_E% : Test_collision_vaisseau_E(SpriteVE%)
    if SpriteVE%=64 then xE%=xE%-vit_E% : Test_collision_vaisseau_E(SpriteVE%)
    if SpriteVE%=66 then xE%=xE%-vit_E% : yE%=yE%-vit_E% : Test_collision_vaisseau_E(SpriteVE%)
    if SpriteVE%=67 then yE%=yE%-vit_E% : Test_collision_vaisseau_E(SpriteVE%)
    if SpriteVE%=68 then xE%=xE%+vit_E% : yE%=yE%-vit_E% : Test_collision_vaisseau_E(SpriteVE%)
    if SpriteVE%=65 then xE%=xE%+vit_E% : Test_collision_vaisseau_E(SpriteVE%)
    sprite_position SpriteVE%,xE%,yE%
'  Pas de collision donc
'  si en dehors du cadre SpriteVE%=0
    if xE%<(0-64) or xE%>(screen_x+64) or yE%<(0-64) or yE%>(screen_y+64)
      SpriteVE%=0 : tirE%=0 : SPRITE_HIDE 69
    else
    ' faire un tir ou pas
      if xE%>128 and xE%<(screen_x-128) and yE%>128 and yE%<(screen_y-128)
        if tirE%=0
            init_tir_ennemi() : tir_ennemi()
        else
            tir_ennemi()
        end_if
      end_if
    end_if
END_SUB

rem ============================================================================
SUB tir_ennemi()
    dim_local pxbe%,pybe%
    pxbe%=sprite_x_position(69) : pybe%=sprite_y_position(69)
    ' vérifier si la balle est sortie
    if SpriteVE%=63 then pxbe%=pxbe%+(vit_E%*2) : pybe%=pybe%+(vit_E%*2) :' (VEBD) Vaisseau Ennemi Bas Droit
    if SpriteVE%=62 then pybe%=pybe%+(vit_E%*2)                          :' (VEB)
    if SpriteVE%=61 then pxbe%=pxbe%-(vit_E%*2) : pybe%=pybe%+(vit_E%*2) :' (VEBG)
    if SpriteVE%=64 then pxbe%=pxbe%-(vit_E%*2)                          :' (VEG)
    if SpriteVE%=66 then pxbe%=pxbe%-(vit_E%*2) : pybe%=pybe%-(vit_E%*2) :' (VEHG)
    if SpriteVE%=67 then pybe%=pybe%-(vit_E%*2)                          :' (VEH)
    if SpriteVE%=68 then pxbe%=pxbe%+(vit_E%*2) : pybe%=pybe%-(vit_E%*2) :' (VEHD)
    if SpriteVE%=65 then pxbe%=pxbe%+(vit_E%*2)                          :' (VED)
    sprite_position 69,pxbe%,pybe%
    Collision_AABB(pxbe%,pybe%,32,32,x%,y%,32,32)
    if tir$="OK"
      tirE%=0 : vaisseau_detruit_par_E(69)
      message "Vos ennemis sont d'excellent tireur ! c'est terminé pour vous"+chr$(13)+chr$(13)+"Votre score: "+str$(score%)
      gosub fin
    end_if
END_SUB

rem ============================================================================
SUB init_tir_ennemi()
    dim_local pxbe%,pybe%
    tirE%=tirE%+1
    ' position de départ
    if SpriteVE%=63 then pxbe%=xE%+45 : pybe%=yE%+45
    if SpriteVE%=62 then pxbe%=xE%+25 : pybe%=yE%+55
    if SpriteVE%=61 then pxbe%=xE%+2  : pybe%=yE%+48
    if SpriteVE%=64 then pxbe%=xE%-7  : pybe%=yE%+24
    if SpriteVE%=66 then pxbe%=xE%    : pybe%=yE%
    if SpriteVE%=67 then pxbe%=xE%+24 : pybe%=yE%-12
    if SpriteVE%=68 then pxbe%=xE%+47 : pybe%=yE%
    if SpriteVE%=65 then pxbe%=xE%+56 : pybe%=yE%+24
    SPRITE_SHOW 69 : sprite_position 69,pxbe%,pybe%
END_SUB

rem ============================================================================
SUB Test_collision_vaisseau_E(nspE%)
  ' test collision entre vaisseaux
    Collision_AABB(x%,y%,28,28,xE%,yE%,28,28)
    if tir$="OK"
      play 198 : ' explosion vaisseau
      vaisseau_detruit_par_E(nspE%)
      message "HA ! HA ! Il y a des kamikazes, chez vos ennemis !"+chr$(13)+chr$(13)+"Votre score: "+str$(score%): ' fin de partie
      gosub fin : EXIT_SUB
    end_if
END_SUB
rem ============================================================================
SUB vaisseau_detruit_par_E(NE%)
    dim_local px%,py%
    px%=sprite_x_position(SpriteV%) : py%=sprite_y_position(SpriteV%)
    ' animation de la destruction du vaisseau ami par un ennemi
      play 198 : ' explosion vaisseau
    off_key_down : tirE%=0 : SPRITE_HIDE 69
    SPRITE_HIDE SpriteV% : SPRITE_HIDE NE% :' les deux sont détruit
    scene2d_interval 250 : scene2d_on
    sprite_position 12,px%-60,py%-60 : SPRITE_SHOW 12 : sprite_animated_frames 12,8,14
    pause 2400 : SPRITE_HIDE 12
    scene2d_off
END_SUB

rem ============================================================================
' nouveau vaisseau ennemi
SUB new_ennemi()
    dim_local pde%
    ' choix aléatoire du vaisseau
    repeat : pde%=rnd(9): until pde%>0 and pde%<9
    if pde%<1 or pde%>8 then message "Echec choix aléatoire pde%="+str$(pde%) : terminate
    ' positionner (aléatoirement) le vaisseau en dehors de l'écran suivant le choix
    if pde%=1 then SpriteVE%=63 : xE%=-64 : yE%=-64                      :' Coin HG (VEBD)
    if pde%=2 then SpriteVE%=62 : xE%=rnd(screen_x) : yE%=-64            :' Haut    (VEB)
    if pde%=3 then SpriteVE%=61 : xE%=screen_x+64 : yE%=-64              :' Coin HD (VEBG)
    if pde%=4 then SpriteVE%=64 : xE%=screen_x+64 : yE%=rnd(screen_y)    :' Droite  (VEG)
    if pde%=5 then SpriteVE%=66 : xE%=screen_x+64 : yE%=screen_y+64      :' Coin BD (VEHG)
    if pde%=6 then SpriteVE%=67 : xE%=rnd(screen_x) : yE%=screen_y+64    :' Bas (VEH)
    if pde%=7 then SpriteVE%=68 : xE%=-64 : yE%=screen_y+64              :' Coin BG (VEHD)
    if pde%=8 then SpriteVE%=65 : xE%=-64 : yE%=rnd(screen_y)            :' Gauche (VED)
    sprite_position SpriteVE%,xE%,yE%
    ' déterminer une vitesse aléatoire
    repeat : vit_E%=rnd(vit_E_max%) : until vit_E%>vit_E_min%
END_SUB

rem ============================================================================

fin:
  terminate
RETURN

A+


Dernière édition par Jean Claude le Ven 6 Avr 2018 - 7:54, édité 1 fois
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Chasseur d'astéroïdes (PANGINE2D) Empty
MessageSujet: Re: Chasseur d'astéroïdes (PANGINE2D)   Chasseur d'astéroïdes (PANGINE2D) EmptyJeu 5 Avr 2018 - 19:40

Ben mince alors, je me souviens pas de ce jeu !
Je l'avais sûrement zapper car ça me dit rien du tout. pale

Je viens de le tester, et c'est vrai que ça prouve qu'on peut faire des jeux sympa en Panoramic.
Enfin je veux dire en Pangine2D. Wink

En tout cas félicitation pour ce projet de groupe. cheers
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Fhoest

Fhoest


Nombre de messages : 97
Age : 48
Localisation : Nord
Date d'inscription : 04/01/2015

Chasseur d'astéroïdes (PANGINE2D) Empty
MessageSujet: Re: Chasseur d'astéroïdes (PANGINE2D)   Chasseur d'astéroïdes (PANGINE2D) EmptyJeu 5 Avr 2018 - 19:48

Bonjour,
merci pour le code ça aide à voir les possibilités de programmation en PANGINE2D.
il est vrai qu'il y a beaucoup de similitude avec le code Panoramic.
Sympa et même trop génial.
@+ Very Happy
Revenir en haut Aller en bas
http://programmer-en-vb.forumactif.org/
Jean Claude

Jean Claude


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

Chasseur d'astéroïdes (PANGINE2D) Empty
MessageSujet: Re: Chasseur d'astéroïdes (PANGINE2D)   Chasseur d'astéroïdes (PANGINE2D) EmptyJeu 5 Avr 2018 - 20:32

@Minibug,
Je crois bien qu'à l'époque tu étais à font sur GPP, si c'est le cas on ne peut pas t'en vouloir Very Happy  ...

@Fohest,
Si tu préfères coder des jeux en 2D du même genre que celui que tu as commencé, PANGINE2D est certainement le meilleur outil pour toi.
Je le répète, tel quel, il offre bien des possibilités. Mais attention, il faut bien lire le PDF fourni par Jack car il y a quelques différences avec Panoramic. Néanmoins pour les habitués de Panoramic, c'est assez facile de "rentrer dedans".

A tous,
Pour retrouver les discussions sur ce sujet, tapez PANGINE2D dans le moteur de recherche du forum.
Il y a tout de même un inconvénient: la plupart des codes ne sont plus accessibles car la limitation sur sur mon webdev m'a obligé a les enlever.

Je n'ai pas le temps actuellement, mais un jour ou l'autre, je reviendrai vers PANGINE2D pour m'y amuser un peu.

A+
Revenir en haut Aller en bas
Contenu sponsorisé





Chasseur d'astéroïdes (PANGINE2D) Empty
MessageSujet: Re: Chasseur d'astéroïdes (PANGINE2D)   Chasseur d'astéroïdes (PANGINE2D) Empty

Revenir en haut Aller en bas
 
Chasseur d'astéroïdes (PANGINE2D)
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» PANGINE2D
» chasseur d’astéroïdes V3
» Pangine2D's girl
» Je cherche PANGINE2D
» Les 2 premiers jeux avec PANGINE2D

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les jeux faits avec Panoramic-
Sauter vers: