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.
Suite du programme de Dragonno Emptypar Pedro Hier à 10:37

» Un autre pense-bête...
Suite du programme de Dragonno Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Suite du programme de Dragonno Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Suite du programme de Dragonno Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Suite du programme de Dragonno Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Suite du programme de Dragonno Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Suite du programme de Dragonno Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Suite du programme de Dragonno Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Suite du programme de Dragonno Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Suite du programme de Dragonno Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Suite du programme de Dragonno Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Suite du programme de Dragonno Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Suite du programme de Dragonno Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Suite du programme de Dragonno Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Suite du programme de Dragonno 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

 

 Suite du programme de Dragonno

Aller en bas 
3 participants
AuteurMessage
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMar 19 Avr 2011 - 1:54

Bonjour,

En navigant dans le forum, j'ai vu le début d'un programme fait par Dragonno dans un sujet verrouillé. J'ai donc ouvert un nouveau post pour la création d'un petit shoot dont je me servirais plus tard pour faire réviser mon fils (en cp) avec des petits exos de maths qui lui rendront de l'énérgie .... Very Happy


Edité le 07/05/11:

Les sources multimédias sont dans ce fichier d'archive 7zip:
Voir le Fichier : Kevin_s_war.7z

Bon voilà, c'est jouable, dans les versions 1 et 2, je vais pouvoir faire autre chose maintenant Smile
Ajouts: barre pour le bouclier et les lasers


Code:

' ======================================================================
' Exemple en PANORAMIC de gestion d'un vaisseau en 800x600
' ======================================================================
'                      Kevin s war V1
' ======================================================================
' Déplacements : Flèches clavier (haut,bas,gauche,droite)
' Tir laser : touche CTRL
' Téléportation (cloack) : touche c minuscule
' Quitter : Touche ESC (echap)
' ======================================================================

' Déclaration des constantes et initialisation
Dim chemin$,XWing_Largeur%, XWing_Hauteur%, max_laser_Xwing%, max_laser_Tie%, Taille_x%, Taille_y%, multiplicateur
Dim Tie_Largeur%, Tie_Hauteur%, long_laser%, celerite_laser_tie%, Tolerance%,vitesse_tie%, BouclierMax%, Decalage_barre%
chemin$="C:\Program Files\Panoramic Editor V 0.9.20\sources\Kevin_s_war"
max_laser_Xwing%= 8: max_laser_Tie%=15: Taille_x%=850: Taille_y%=650: Tolerance%=80 : Decalage_barre% = 400
Tie_Largeur%=40: Tie_Hauteur%=55: Xwing_Largeur%=48: Xwing_Hauteur%=39 : long_laser%=30 : vitesse_tie%=2: BouclierMax%=200
multiplicateur =  (Taille_x% - Decalage_barre%) /  max_laser_Xwing%

' Déclaration des variables
Dim x%,y%,  x_tie%,y_tie%, touche%, Bouclier%, i%, j%, xMax%, yMax%, scale , temp%, Compteur_Laser%, Compteur_Laser_tie%, change%
Dim laser_x%(max_laser_Xwing%),laser_y%(max_laser_Xwing%), dir%(max_laser_Xwing%), Etat1%(max_laser_Xwing%),Etat2%(max_laser_Xwing%)
Dim laser_tie_x%(max_laser_tie%),laser_tie_y%(max_laser_tie%), dir_laser_tie%(max_laser_tie%), Etat_tie%(max_laser_tie%)
Dim vitesse% , score, Premier_Sprite_auto%,Premier_Sprite_laser_Tie%, N_sprite%

' Déclaration des sous-programmes
label gauche, droite, bas, haut, laser, teleporte, affiche, tir_tie, suppr_laser, game_over
label suppr_laser_tie, boucle_laser, boucle_laser_tie, new_tie, test_collision, Tie_explose, Xwing_explose, restart
label depl_tie, Test_touche

' =====================================================================
' Création de la scene 2D pour afficher le vaisseau en 800x600
xMax%=Taille_x%-XWing_Largeur%: yMax%=Taille_y%-XWing_Hauteur%-40
width 0,Taille_x%:top 0,50: left 0,50: height 0, Taille_y%: border_hide 0
scene2D 1: left 1,0 : top 1,40 : width 1,Taille_x% : height 1,Taille_y% :stretch_on 1

' Initialisation de l écran de lancement
file_load 1,chemin$+"\graph\The Kevin's war.bmp" : rem présentation
alpha 8: top 8,5 : left 8,10 : Width 8,200 : Height 8,20 :font_name 8,"Arial":font_size 8,20:font_color 8,0,0,0: caption 8, " Appuyez sur une touche pour continuer"
while scancode=0 : wait 50 : end_while : caption 8,""

' Création des zones de texte
caption 8, "Score :" + right$("00000" + str$(score),5)
alpha 9: top 9,7: left 9,250: Width 9,300: Height 9,10 :font_name 9,"Arial" :font_size 9,10:font_color 9,255,0,0
caption 9,"Energie du bouclier"
alpha 2: top 2,22: left 2,250: Width 2,300: Height 2,10 :font_name 2,"Arial" :font_size 2,10:font_color 2,0,0,255
caption 2,"Energie des lasers"

' Création de la musique et des sons
sound 3 :file_load 3,chemin$+"\son\rebel_laser.wav"
sound 5: file_load 5,chemin$+"\son\musiqueSW.mp3"
sound 7 :file_load 7,chemin$+"\son\explode1.wav"

' Création des Sprites
for i%=1 to 100: Sprite i%: next i%
file_load 1,chemin$+"\graph\background.bmp" : width 1,Taille_x% : height 1,Taille_y% : rem image de fond du jeu
sprite_hide 1:sprite_file_load 1, chemin$+"\graph\Game_0ver2.bmp"
sprite_hide 3:sprite_file_load 3, chemin$+"\graph\xwing_5.bmp"
sprite_hide 4:sprite_file_load 4, chemin$+"\graph\xwing_1.bmp"
sprite_hide 5:sprite_file_load 5, chemin$+"\graph\tie_5.bmp"
for i% = 1 to 5 : sprite_hide 5+i% : sprite_file_load 5+i%, chemin$+"\graph\exp_"+str$(i%)+".bmp" :next i%
Premier_Sprite_auto% = 10
Premier_Sprite_laser_Tie%= Premier_Sprite_auto% + 2*max_laser_Xwing%
for i%=1 to max_laser_Xwing%
  sprite_hide Premier_Sprite_auto%+i% : sprite_file_load Premier_Sprite_auto%+i%,chemin$+"\graph\rebel_laser_H.bmp"
  sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+i% : sprite_file_load Premier_Sprite_auto%+max_laser_Xwing%+i%,chemin$+"\graph\rebel_laser_H.bmp"
next i%
Premier_Sprite_laser_Tie%= Premier_Sprite_auto% + 2*max_laser_Xwing%
for i%=1 to max_laser_Tie%
  sprite_hide Premier_Sprite_laser_Tie%+i% : sprite_file_load Premier_Sprite_laser_Tie%+i%,chemin$+"\graph\empire_laser.bmp"
next i%

restart:
' =====================================================================
' Restart = Début du programme
vitesse%=4: Compteur_Laser%=0: Compteur_Laser_tie% = 0: score = 0: N_sprite%=4 : Rem N_Sprite%=4 pour que le X_Wing soit orienté à droite
x%=Taille_x%/2: y%=Taille_y%/2: change%=1 : Bouclier% = BouclierMax%: Rem On paramètre le X-Wing à l état initial
for i%=1 to max_laser_Xwing%: Etat1%(i%)=0 : Etat2%(i%)=0 : next i%
for i%=1 to max_laser_Tie%: Etat_tie%(i%)=0 : next i%

' Création de la barre d'énergie du bouclier
Bouclier% = BouclierMax%
2D_Fill_color 255,0,0: 2D_rectangle Decalage_barre%,10,Decalage_barre%+BouclierMax%*2.5, 20
2D_Fill_color 0,0,255: 2D_rectangle Decalage_barre%,35,int(Decalage_barre%+max_laser_Xwing%*multiplicateur), 25
play 5 : gosub new_tie


' =====================================================================
' Boucle principale infinie
While change% <> 5000                :' Boucle principale
  gosub affiche                      :' Mettre à jour l'affichage des éléments
  wait 5                            :' ralentissement à ajuster selon le joueur
  if rnd(2) < 1 then gosub depl_tie  :' réaction du pilote du tie à ajuster selon le niveau du joueur
  if rnd (8 + 5 * Compteur_Laser_tie%) < 1 then gosub tir_tie :' fréquence de tir du tie
  gosub test_touche
end_while
end


affiche:
' Affiche = Affichage de l'écran
  caption 8, "Score :" +  right$("00000" + str$(score),5)
  If Compteur_Laser% > 0 then gosub boucle_laser
  If Compteur_Laser_tie% > 0 then gosub boucle_laser_tie
  gosub test_collision
  2D_Fill_color 0,0,0: 2D_rectangle Decalage_barre%+Bouclier%*2.5,10,Decalage_barre%+BouclierMax%*2.5, 20
  2D_rectangle Decalage_barre%,35,Decalage_barre%+int(max_laser_Xwing%*multiplicateur), 25
  2D_Fill_color 0,0,255: 2D_rectangle Decalage_barre%,35,Decalage_barre%+int((max_laser_Xwing%-Compteur_laser%)*multiplicateur), 25
  sprite_position N_Sprite%,x%,y%
  if change%=1 then sprite_show N_Sprite% : change%=0
return

depl_tie:
' depl_tie = calcule le déplacement du Tie actif
  x_tie%=x_tie%+int(rnd(vitesse_tie%*10))-int(rnd(vitesse_tie%*10)): y_tie%=y_tie%+int(rnd(30))-int(rnd(30))
  if x_tie% < x% Then x_tie%=x_tie%+vitesse_tie%:else:x_tie%=x_tie%-vitesse_tie%
  if x_tie% <10 Then x_tie%=10
  if x_tie% > xMax% Then x_tie%=xMax%
  if y_tie% < y% then y_tie%=y_tie%+vitesse_tie%:else:y_tie%=y_tie%-vitesse_tie%
  if y_tie% < 10 Then y_tie%=10
  if y_tie% > yMax% Then y_tie%=yMax%
  gosub test_collision
  sprite_position 5,x_tie%,y_tie%
return

tir_tie:
' tir_tie = nouveau tir du Tie
  if Compteur_Laser_tie% < max_laser_tie%
    if x_tie% < x% Then temp%=4 : else: temp%=3
    play 3 : Compteur_Laser_tie%= Compteur_Laser_tie% + 1 : dir_laser_tie%(Compteur_Laser_tie%)= temp% : etat_tie%(Compteur_Laser_tie%)=1
    if temp%=4 then laser_tie_x%(Compteur_Laser_tie%)=x_tie%+41 : else: laser_tie_x%(Compteur_Laser_tie%)=x_tie%-30
    laser_tie_y%(Compteur_Laser_tie%)=y_tie%+23
    Sprite_position Premier_Sprite_laser_Tie% + Compteur_Laser_tie%, laser_tie_x%(Compteur_Laser_tie%),laser_tie_y%(Compteur_Laser_tie%)
    Sprite_show Premier_Sprite_laser_Tie% + Compteur_Laser_tie%
  end_if
return


Test_touche:
' =====================================================================
' Test_touche = Traitement de l'entrée clavier
touche% = scancode
  if touche%=27 then goto game_over
  if touche%=37 then gosub gauche : rem fleche gauche
  if touche%=39 then gosub droite : rem fleche droite
  if touche%=40 then gosub bas : rem fleche bas
  if touche%=38 then gosub haut : rem fleche haut
  if touche%=163 or touche%=162 then gosub laser : rem nouveau laser
  if touche%=67 then gosub teleporte : rem téléportation du vaisseau
  if touche%=49 then vitesse%=1
  if touche%=50 then vitesse%=5
touche% = 0
return

gauche:
  if N_Sprite% <> 3 then sprite_hide 4 : N_sprite% = 3: change%=1
  if x% > vitesse% then x%=x%-vitesse%: else:  x% = 1
return

droite:
  if N_Sprite% <> 4 then sprite_hide 3: N_sprite% = 4 : change%=1
  if x% < xMax% then x%=x%+vitesse%: else: x% = xMax%
return

bas:
  if y% < yMax% then y% =y% + vitesse% : else: y% = yMax%
return

haut:
  if y% > 0 then y% = y% - vitesse% : else: y% = 1
return

laser:
  if Compteur_Laser%< max_laser_Xwing%
    play 3 : Compteur_Laser%= Compteur_Laser% + 1 : dir%(Compteur_Laser%)= N_sprite% : etat1%(Compteur_Laser%)=1: etat2%(Compteur_Laser%)=1
    if N_sprite%=4 then laser_x%(Compteur_Laser%)=x%+38 : else: laser_x%(Compteur_Laser%)=x%-21
    laser_y%(Compteur_Laser%)=y%+1
    Sprite_hide Premier_Sprite_auto% + Compteur_Laser% : Sprite_hide Premier_Sprite_auto%+max_laser_Xwing% + Compteur_Laser%
    Sprite_position Premier_Sprite_auto% + Compteur_Laser%,laser_x%(Compteur_Laser%),laser_y%(Compteur_Laser%)
    Sprite_show Premier_Sprite_auto% + Compteur_Laser% : Sprite_show Premier_Sprite_auto%+max_laser_Xwing% + Compteur_Laser%
  end_if
return

teleporte:
  for i%=0 to 9 : sprite_scale N_sprite%,0.5,0.5 : wait 20: next i%
  x%=int(rnd(xMax%)): y%=int(rnd(yMax%)):  if N_sprite%=3 then sprite_file_load 3, chemin$+"\graph\xwing_5.bmp" : else: sprite_file_load 4, chemin$+"\graph\xwing_1.bmp"
  sprite_scale N_sprite%, 1, 1: sprite_position N_sprite%,x%,y%
return


boucle_laser:
' =====================================================================
' boucle_laser: calcule la position des lasers du X-Wing
i%=1
while i% <= Compteur_Laser%
  if (etat1%(i%) + etat2%(i%)) > 0
    if dir%(i%)=4 then laser_x%(i%)=laser_x%(i%)+ 10 :else: laser_x%(i%)=laser_x%(i%)- 10
    if laser_x%(i%) > xMax% or laser_x%(i%) < 1 then gosub suppr_laser : else: i%=i%+1
  else
    gosub suppr_laser
  end_if
end_while
if Compteur_Laser%= 0 then sprite_hide Premier_Sprite_auto%+1:sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+1
i%=1
while i% <= Compteur_Laser%
  if etat1%(i%)=1
    sprite_hide Premier_Sprite_auto%+i%
    sprite_position Premier_Sprite_auto%+i%,laser_x%(i%),laser_y%(i%)
    if laser_x%(i%)+30 > x_tie% and laser_x%(i%) < x_tie%+Tie_Largeur%
      if ((laser_y%(i%)+3) > y_tie%) and (laser_y%(i%)<(y_tie%+Tie_hauteur%))
        etat1%(i%)=0 : sprite_hide Premier_Sprite_auto%+i%: gosub Tie_explose
      else
        sprite_show Premier_Sprite_auto%+i%
      end_if
    else
      sprite_show Premier_Sprite_auto%+i%
    end_if
  end_if
  if etat2%(i%)=1
    sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+i%
    sprite_position Premier_Sprite_auto%+max_laser_Xwing%+i%,laser_x%(i%),laser_y%(i%)+34
    if laser_x%(i%)+30 > x_tie% and laser_x%(i%) < x_tie%+Tie_Largeur%
      if ((laser_y%(i%)+37) > y_tie%) and ((laser_y%(i%)+34) < (y_tie%+Tie_Hauteur%))
        etat2%(i%)=0 : sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+i% : gosub Tie_explose
      else
        sprite_show Premier_Sprite_auto%+max_laser_Xwing%+i%
      end_if
    else
      sprite_show Premier_Sprite_auto%+max_laser_Xwing%+i%
    end_if
  end_if
  i%=i%+1
end_while
return

suppr_laser:
' Suppression d'un laser tiré par un X-Wing
sprite_hide Premier_Sprite_auto%+i%:sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+i%
if i% < Compteur_Laser% Then laser_x%(i%) = laser_x%(Compteur_Laser%): laser_y%(i%) = laser_y%(Compteur_Laser%) : dir%(i%)=dir%(Compteur_Laser%): etat1%(i%)=etat1%(Compteur_Laser%): etat2%(i%)=etat2%(Compteur_Laser%)
sprite_hide Premier_Sprite_auto%+Compteur_Laser%:sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+Compteur_Laser%
etat1%(Compteur_Laser%) = 0 : etat2%(Compteur_Laser%) = 0
if Compteur_Laser% > 0 Then Compteur_Laser%=Compteur_Laser%-1
return

boucle_laser_tie:
' =====================================================================
' boucle_laser_tie = Calcule la position des tirs du Tie
i%=1
while i% <= Compteur_Laser_tie%
  if etat_tie%(i%)=1
    if dir_laser_tie%(i%)=4 then laser_tie_x%(i%)=laser_tie_x%(i%)+ 7: else: laser_tie_x%(i%)=laser_tie_x%(i%)- 7
    if laser_tie_x%(i%) > xMax% or laser_tie_x%(i%) < 0 then gosub suppr_laser_tie:else: i%=i%+1
  else
    gosub suppr_laser_tie
  end_if
End_while
if Compteur_Laser_tie% = 0 then sprite_hide Premier_Sprite_laser_Tie%+1
i%=1
While i% <= Compteur_Laser_tie%
  if etat_tie%(i%)=1
    sprite_position Premier_Sprite_laser_Tie%+i%,laser_tie_x%(i%),laser_tie_y%(i%)
    if laser_tie_x%(i%)+30 > x% and laser_tie_x%(i%) < x%+Xwing_Largeur%
      if ((laser_tie_y%(i%)+3) > y%) and (laser_tie_y%(i%)<(y%+Xwing_hauteur%))
        etat_tie%(i%)=0 : sprite_hide Premier_Sprite_laser_Tie%+i%: gosub Xwing_explose
      else
        sprite_show Premier_Sprite_laser_Tie%+i%
      end_if
    else
      sprite_show Premier_Sprite_laser_Tie%+i%
    end_if
  end_if
  i%=i%+1
End_while
return

suppr_laser_tie:
' Suppression d'un laser tiré par un Tie-Fighter
sprite_hide Premier_Sprite_laser_Tie%+i%
if i%< Compteur_Laser_tie% then laser_tie_x%(i%) = laser_tie_x%(Compteur_Laser_tie%): laser_tie_y%(i%) = laser_tie_y%(Compteur_Laser_tie%) : dir_laser_tie%(i%)=dir_laser_tie%(Compteur_Laser_tie%):etat_tie%(i%)=etat_tie%(Compteur_Laser_tie%)
etat_tie%(Compteur_Laser_tie%) = 0: sprite_hide Premier_Sprite_laser_Tie%+Compteur_Laser_tie%
if Compteur_Laser_tie% > 0 then Compteur_Laser_tie%=Compteur_Laser_tie%-1
return


Tie_explose:
' =====================================================================
' Tie_explose = Traitement de l'explosion d'un Tie touché
play 7: sprite_hide 5
for j%=1 to 5
  sprite_position 5+j%,x_tie%,y_tie% : sprite_show 5+j% : if j%>1 then sprite_hide 5+j%-1: wait 5
next j%
sprite_hide 10: wait 50 : score = score + 10: gosub new_tie
return


Xwing_explose:
' =====================================================================
' Xwing_explose = Traitement de l'explosion du Xwing
Bouclier% = Bouclier% - 30
if Bouclier% < 0
  play 7: 2D_Fill_Color 0,0,0:  2D_rectangle Decalage_barre%,10,Decalage_barre%+BouclierMax%*2.5, 20:sprite_hide N_sprite%
  for j%=1 to 5
    sprite_position 5+j%,x%,y% : sprite_show 5+j% : if j%>1 then sprite_hide 5+j%-1 : wait 5
  next j%
  sprite_hide 10: wait 50 : goto Game_over
end_if
rem play 4
2D_rectangle Decalage_barre%+Bouclier%*2.5,10,Decalage_barre%+BouclierMax%*2.5, 20
return


test_collision:
' =====================================================================
' test_collision = Controle la collision du Tie et du X-Wing
  if x_tie%+Tie_Largeur% > x% and x_tie% < x%+XWing_Largeur%
      if y_tie% +Tie_hauteur% > y% and y_tie% < y%+XWing_Hauteur%
        Bouclier% = Bouclier% - 120
        if Bouclier% < 0
          play 7 : sprite_hide 3 : sprite_hide 4 : sprite_hide 5
          for j%=1 to 5
            sprite_position 5+j%,x_tie%,y_tie% : sprite_show 5+j%
            if j%>1 then sprite_hide 5+j%-1
            wait 5
          next j%
          sprite_hide 10: wait 50 : goto Game_over
        else
        rem play 4
        end_if
    end_if
  end_if
return


new_tie:
' =====================================================================
' new_tie = Initialise un nouveau Tie_fighter
  x_tie%=int(rnd(2))*xMax% : if x_tie% > xMax% Then x_tie%=xMax%
  y_tie%=int(rnd(yMax%))
  sprite_position 5,x_tie%,y_tie% : sprite_show 5
return

game_over:
' =====================================================================
' game_over = Traite la fin d'une partie et la sortie ou le redémarrage
  for scale=0.5 to 2 step 0.5 : sprite_position 1, Taille_x%/2 - (0.5*scale* 90),Taille_y%/2 -(0.5*scale* 60): sprite_scale 1,scale,scale : sprite_show 1 : next scale
  if message_confirmation_yes_no("Voulez-vous rejouer ?")<>1
    terminate
  else
    for i%=1 to max_laser_Xwing% : sprite_hide Premier_Sprite_auto%+i%:sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+i%:sprite_position Premier_Sprite_auto%+i%, 0,0: sprite_position Premier_Sprite_auto%+ max_laser_Xwing%+i%, 0,0: Etat1%(i%)=0 : Etat2%(i%)=0 :next i%
    for i%=1 to max_laser_Tie%: sprite_hide Premier_Sprite_laser_Tie%+i%:sprite_position Premier_Sprite_laser_Tie%+i%, 0,0:  Etat_tie%(i%)=0 : next i%
    for i%=3 to 5: sprite_position i%, 0,0: sprite_hide i%: next i%
    sprite_hide 1
    goto restart
  end_if
return

Voilà, j'espère que ce code interessera du monde et que vous m'aiderez à l'optimiser et à le finir. Avec les nouvelles fonctions, je pense que l'on devrait pouvoir faire un scrolling également...

Toutes idées, conseil et aide seront les bienvenus


Dernière édition par Jicehel le Sam 7 Mai 2011 - 10:36, édité 11 fois
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMar 19 Avr 2011 - 21:11

Bonsoir Jicehel et bienvenu parmis nous !!! Smile

cheers
Ca a l'air pas mal ton jeu...
Pour pouvoir tester correctement ton jeu, pourrais-tu rajouter le fichier rebel_laser.wav dans le fichier archive stp ?...
(on mettre un lien sur le fichier?)
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMar 19 Avr 2011 - 21:31

Bonjour,

Merci Smile , voila le lien manquant: < Supprimé et ajouté à l'archive du premier post >

Sinon, j'ai commencé la gestion des tirs mais je pense que c'est perfectible ...
J'utilise la barre du haut en debug au besoin (Caption 9)

Edit: Je viens également de rajouté un tie avec déplacement aléatoire


Bon maintenant, reste à intégrer les tirs des Tie_Fighters (sur le même principe, je pense), puis la gestion des collisions ... et pourquoi pas un scrolling ?


Dernière édition par Jicehel le Mer 20 Avr 2011 - 18:06, édité 1 fois
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMar 19 Avr 2011 - 22:48

supprimé


Dernière édition par Jicehel le Mer 20 Avr 2011 - 18:07, édité 1 fois
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMar 19 Avr 2011 - 23:32

Hello Jicehel !

C'est pas mal du tout ! Wink
Si par la suite tu envisages de compliquer le jeu (passage de niveau).Tu devrais peut être envisager une gestion des Tie de la même manière que tu as fait pour les lasers. De cette façon, tu pourrais avoir plusieurs Tie...

[Edit]
Au sujet des sprite 25+i%
tu pourrais faire l'economie des tableau:
etat2%() puisque = à etat1%()
laser2_x%() = laser1_x
laser2_y = laser1_y+34

Dans ce cas, boucle_laser deviendrai :
Code:
boucle_laser:
  For i%=1 to Compteur_Laser%
    if etat1%(i%)=1
      sprite_position  9+i%,laser1_x%(i%), laser1_y%(i%)
      sprite_position 25+i%,laser1_x%(i%), laser1_y%(i%)+34
    end_if
  Next i%
return
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMer 20 Avr 2011 - 0:09

une petite réponse avant d'aller dormir.
J'ai pensé au tableau de tie, mais comme j'avance sans avoir écris mon projet (je me sert du programme pour découvrir Panoramic en même temps), je vais essayer d'abord avec un seul Tie et un tableau de Tir pour faire la gestion des collisions, des sprites et d'une barre d'énergie (à venir).

Le tableau etat2% servira si le laser2 a une collision et pas le 1 par exemple
par contre, pour laserx et laser y, je suis d'accord Smile

Je modifie avant de me coucher et je colle le source


Dernière édition par Jicehel le Mer 20 Avr 2011 - 18:08, édité 1 fois
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMer 20 Avr 2011 - 0:23

Ok,
t'as raison pour etat2...je n'y avais pas pensé ! Wink
Faudrais une grosse malchance du cote obscur de la force si après la destruction d'un tie, le suivant se fasse toucher par le tir restant... hein ?
mais on va pas s'en plaindre ! Wink


Revenir en haut Aller en bas
http://nardo26.lescigales.org
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMer 20 Avr 2011 - 18:17

Voilà, j'ai mis à jour le premier post avec un nouveau fichier 7zip qui contient les sprites, musiques, sons utilisés (il y a eu un peu de changement).

Les collisions sont gérées (x-wing <=> Tie => Game over Laser du Xwing <=> Tie => Score)

Attention, prendre le source du post, celui du 7-zip est déjà obsolète

Prochain objectif perso: géré le tir du Tie et donc les collision avec le X-wing
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyJeu 21 Avr 2011 - 0:23

Bon, une petite modif avant d'aller au lit:
Réorganisation de la présentation du source pour diminuer le nombre de ligne
Ajout de la gestion des tirs du Tie fighter et des collisions
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyVen 22 Avr 2011 - 2:37

Bon, je n'étais pas là aujourd'hui, alors juste une petite modif du programme pour gérer la relance en interne lors des "game over"
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyVen 22 Avr 2011 - 10:36

J'étais reparti d'un mauvais source, j'ai remis les corrections (téléportation, gestion des variables qui n'étaient pas utilisées partout dans le source, ...)

Pour faciliter le réglage de la difficulté, utilisation de timer (le jeu était trop dur pour mon fils et a terme, je pense qu'il faudra pouvoir ajuster la difficulté par un menu) ou / et la varier en fonction du niveau.
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyDim 24 Avr 2011 - 1:52

Bon, j'ai essayé de faire une variante mais j'ai dû faire des erreurs puisque mes Tie se transforment en X-Wing. De plus j'ai des problèmes de gestion des tirs (changements bizarres qui doivent être dûs à ma gestion de tableau)

Si quelqu'un voit d'où viennent les erreurs ...

Sources "multimédia": Voir le Fichier : Kevin_s_war.7z
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyJeu 28 Avr 2011 - 2:07

Supprimé - obsolète
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMer 4 Mai 2011 - 8:30

' ======================================================================
' Autre exemple en PANORAMIC de gestion d un vaisseau en 800x600
' ======================================================================
' Kevin s war V2 (rotation)
' ======================================================================
' Un X-Wing peut se accélerer / ralentir / tourner ou/et tirer
' Il dispose d'un bouclier contrairement au Tie, le bouclier baisse lors
' des collisions (avec le tie ou ses lasers) à 0, le X-wing explose...
' ======================================================================
' Rotation horraire: Flèches bas , Rotation inverse: Flèches haut
' Freine: Flèche gauche , Accélère: Flèche droite
' Tir laser : CTRL , Téléporte : c
' Quitter : ESC (echap)
' ======================================================================

' Déclaration des constantes et initialisation
Dim chemin$,XWing_Largeur%, XWing_Hauteur%, max_laser_Xwing%, max_laser_Tie%, Taille_x%, Taille_y%
Dim Tie_Largeur%, Tie_Hauteur%, long_laser%, celerite_laser_tie%, Tolerance%,vitesse_tie%, BouclierMax%
chemin$="C:\Program Files\Panoramic Editor V 0.9.20\sources\Kevin_s_war"
max_laser_Xwing%=15: max_laser_Tie%=15: Taille_x%=850: Taille_y%=650: Tolerance%=80
Tie_Largeur%=40: Tie_Hauteur%=55: Xwing_Largeur%=48: Xwing_Hauteur%=39 : long_laser%=30 : vitesse_tie%=2 : BouclierMax%=200

' Déclaration des variables
Dim x%,y%, Sprite_Xwing%, Sprite_Tie%, Sprite_Exp%, touche%
Dim laser_x%(max_laser_Xwing%),laser_y%(max_laser_Xwing%), dir%(max_laser_Xwing%), Etat1%(max_laser_Xwing%),Etat2%(max_laser_Xwing%), Compteur_Laser%
Dim x_tie%,y_tie%, dir_tie%, dir_Xwing%, Bouclier%,
Dim laser_tie_x%(max_laser_tie%),laser_tie_y%(max_laser_tie%), dir_laser_tie%(max_laser_tie%), Etat_tie%(max_laser_tie%), Compteur_Laser_tie%
Dim i%, j%, xMax%, yMax%, scale , temp%, change%, changeTie%
Dim vitesse% , score, Premier_Sprite_auto%,Premier_Sprite_laser_Tie%

' Déclaration des sous-programmes
label bas, haut, laser, teleporte, affiche, tir_tie, game_over, suppr_laser, suppr_laser_tie
label boucle_laser, boucle_laser_tie, new_tie, test_collision, Tie_explose, Xwing_explose, restart, depl_tie, Test_touche
label laser_tie_dir_1, laser_tie_dir_2, laser_tie_dir_3

' =====================================================================
' Création de la scene 2D pour afficher le vaisseau en 800x600
xMax%=Taille_x%-XWing_Largeur%: yMax%=Taille_y%-XWing_Hauteur%-40
width 0,Taille_x%:top 0,50: left 0,50: height 0, Taille_y%: border_hide 0
scene2D 1: left 1,0 : top 1,40 : width 1,Taille_x% : height 1,Taille_y% :stretch_on 1

' Initialisation de l écran de lancement
file_load 1,chemin$+"\graph\The Kevin's war.bmp" : rem présentation
alpha 8: top 8,5 : left 8,10 : Width 8,200 : Height 8,20 :font_name 8,"Arial":font_size 8,20:font_color 8,0,0,0: caption 8, " Appuyez sur une touche pour continuer"
while scancode=0 : wait 50 : end_while : caption 8,""

' Création des zones de texte
caption 8, "Score :" + right$("00000" + str$(score),5)
alpha 9: top 9,7: left 9,250: Width 9,300: Height 9,20 :font_name 9,"Arial" :font_size 9,10:font_color 9,0,0,0

' Création de la musique et des sons
rem sound 4 :file_load 4,chemin$+"\son\Touche.mp3"
sound 3 :file_load 3,chemin$+"\son\rebel_laser.wav"
sound 5: file_load 5,chemin$+"\son\musiqueSW.mp3"
sound 7 :file_load 7,chemin$+"\son\explode1.wav"

' Création des Sprites
for i%=1 to 100: Sprite i%: next i%
file_load 1,chemin$+"\graph\background.bmp" : width 1,Taille_x%+200 : height 1,Taille_y%+200 : rem image de fond du jeu
sprite_file_load 1, chemin$+"\graph\Game_0ver2.bmp" : sprite_hide 1
Sprite_Xwing% =1 : Sprite_Tie% = Sprite_Xwing%+8: Sprite_Exp% = Sprite_Tie% + 8
for i%=1 to 8
sprite_position Sprite_Xwing%+i%, Taille_x%+200,Taille_y%+200: sprite_file_load Sprite_Xwing%+i%, chemin$+"\graph\xwing_"+str$(i%)+".bmp"
sprite_position Sprite_Tie%+i%, Taille_x%+200,Taille_y%+200: sprite_file_load Sprite_Tie%+i%, chemin$+"\graph\tie_"+str$(i%)+".bmp"
sprite_hide Sprite_Xwing%+i%:sprite_hide Sprite_Tie%+i%
next i%
for i% = 1 to 5 : sprite_position Sprite_Exp%+i%, Taille_x%+200,Taille_y%+200: sprite_file_load Sprite_Exp%+ i%, chemin$+"\graph\exp_"+str$(i%)+".bmp" : sprite_hide Sprite_Exp%+i% :next i%
Premier_Sprite_auto% = Sprite_Exp% + 5
Premier_Sprite_laser_Tie%= Premier_Sprite_auto% + 2*max_laser_Xwing%


restart:
' =====================================================================
' Restart = Début du programme
vitesse%=2: Compteur_Laser%=0: Compteur_Laser_tie% = 0:x%=Taille_x%/2: y%=Taille_y%/2: score = 0: dir_Xwing%=5 : Rem 5 pour que le XWing soit orienté à droite
change%=1: changeTie%=0: Bouclier% = BouclierMax% : rem on affiche le xwing mais il n y a pas encore de Tie
play 5
for i%=1 to max_laser_Xwing% : sprite_position Premier_Sprite_auto%+i%, Taille_x%+200,Taille_y%+200: sprite_hide Premier_Sprite_auto%+i%: sprite_position Premier_Sprite_auto%+ max_laser_Xwing%+i%, 0,0: sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+i%:Etat1%(i%)=0 : Etat2%(i%)=0 :next i%
for i%=1 to max_laser_Tie%: sprite_position Premier_Sprite_laser_Tie%+i%, Taille_x%+200,Taille_y%+200: sprite_hide Premier_Sprite_laser_Tie%+i%: Etat_tie%(i%)=0 : next i%

' Création de la barre d'énergie du bouclier
2D_Fill_color 255,0,0: 2D_rectangle 300,10,300+BouclierMax%*2.5, 20: 2D_Fill_color 0,0,0

gosub new_tie

' =====================================================================
' Boucle principale infinie
While change% <> 5000 :' Boucle principale
gosub affiche :' Mettre à jour l'affichage des éléments
wait 15 :' ralentissement à ajuster selon le joueur
if rnd(3) < 1 then gosub depl_tie :' réaction du pilote du tie à ajuster selon le niveau du joueur
if rnd (20) < 1 then gosub tir_tie :' fréquence de tir du tie
gosub test_touche
end_while
end

affiche:
' Affiche = Affichage de l'écran
Select dir_Xwing%
case 1: x%=x%+vitesse%
case 2: x%=x%+int(vitesse%/2):y%=y%+int(vitesse%/2)
case 3: y%=y%+vitesse%
case 4: x%=x%-int(vitesse%/2):y%=y%+int(vitesse%/2)
case 5: x%=x%-vitesse%
case 6: x%=x%-int(vitesse%/2):y%=y%-int(vitesse%/2)
case 7: y%=y%-vitesse%
case 8: x%=x%+int(vitesse%/2):y%=y%-int(vitesse%/2)
End_Select
if x% > xMax% then x% = xMax%:else : if x% < 0 then x% = 0
if y% > yMax% then y% = yMax%:else : if y% < 0 then y% = 0
caption 8, "Score :" + right$("00000" + str$(score),5)
If Compteur_Laser% > 0 then gosub boucle_laser
If Compteur_Laser_tie% > 0 then gosub boucle_laser_tie
gosub test_collision
2D_rectangle 300+Bouclier%*2.5,10,300+BouclierMax%*2.5, 20
sprite_position Sprite_Xwing% + dir_Xwing%,x%,y%
if change%=1 then sprite_show Sprite_Xwing% + dir_Xwing% : change%=0
sprite_position Sprite_Tie% + dir_Tie%,x_tie%,y_tie%
if changeTie%=1 then sprite_show Sprite_Tie% + dir_Tie% : changeTie%=0
return

depl_tie:
' depl_tie = calcule le déplacement du Tie actif
x_tie%=x_tie%+int(rnd(vitesse_tie%*10))-int(rnd(vitesse_tie%*10)): y_tie%=y_tie%+int(rnd(30))-int(rnd(30))
if x_tie% < x% Then x_tie%=x_tie%+vitesse_tie%:else:x_tie%=x_tie%-vitesse_tie%
if x_tie% <10 Then x_tie%=10
if x_tie% > xMax% Then x_tie%=xMax%
if y_tie% < y% then y_tie%=y_tie%+vitesse_tie%:else:y_tie%=y_tie%-vitesse_tie%
if y_tie% < 10 Then y_tie%=10
if y_tie% > yMax% Then y_tie%=yMax%
if x_tie% < x% - Tolerance%
if y_tie% < y% - Tolerance%
if dir_tie% <> 2 then sprite_hide Sprite_Tie% + dir_Tie%:dir_tie% = 2:ChangeTie%=1
else
if y_tie% > y% + Tolerance%
if dir_tie% <> 8 then sprite_hide Sprite_Tie% + dir_Tie%:dir_tie% = 8:ChangeTie%=1
else
if dir_tie% <> 1 then sprite_hide Sprite_Tie% + dir_Tie%:dir_tie% = 1:ChangeTie%=1
end_if
end_if
else
if x_tie% > x% + Tolerance%
if y_tie% < y% - Tolerance%
if dir_tie% <> 4 then sprite_hide Sprite_Tie% + dir_Tie%:dir_tie% = 4:ChangeTie%=1
else
if y_tie% > y% + Tolerance%
if dir_tie% <> 6 then sprite_hide Sprite_Tie% + dir_Tie%:dir_tie% = 6:ChangeTie%=1
else
if dir_tie% <> 5 then sprite_hide Sprite_Tie% + dir_Tie%:dir_tie% = 5:ChangeTie%=1
end_if
end_if
else
if y_tie% < y% - Tolerance%
if dir_tie% <> 3 then sprite_hide Sprite_Tie% + dir_Tie%:dir_tie% = 3:ChangeTie%=1
else
if dir_tie% <> 7 then sprite_hide Sprite_Tie% + dir_Tie%:dir_tie% = 7:ChangeTie%=1
end_if
end_if
end_if
gosub test_collision
changeTie%=1
return

tir_tie:
' tir_tie = nouveau tir du Tie
if Compteur_Laser_tie% < max_laser_tie%
play 3 : Compteur_Laser_tie%= Compteur_Laser_tie% + 1 : etat_tie%(Compteur_Laser_tie%)=1: dir_laser_tie%(Compteur_Laser_tie%)=dir_Tie%
select dir_laser_tie%(Compteur_Laser_tie%)
case 1: laser_tie_x%(Compteur_Laser_tie%)=x_tie%+Tie_Largeur%+1: laser_tie_y%(Compteur_Laser_tie%)=y_tie%+int(Tie_Hauteur%/2)
case 2: laser_tie_x%(Compteur_Laser_tie%)=x_tie%+int(Tie_Largeur%/2)+1:laser_tie_y%(Compteur_Laser_tie%)=y_tie%+int(Tie_Hauteur%/2)+1
case 3: laser_tie_x%(Compteur_Laser_tie%)=x_tie%+int(Tie_Largeur%/2): laser_tie_y%(Compteur_Laser_tie%)=y_tie%+Tie_Hauteur%+1
case 4: laser_tie_x%(Compteur_Laser_tie%)=x_tie%+int(Tie_Largeur%/2)-int(long_Laser%/2)-1: laser_tie_y%(Compteur_Laser_tie%)=y_tie%+int(Tie_Hauteur%/2)+1
case 5: laser_tie_x%(Compteur_Laser_tie%)=x_tie%-Long_laser%-1: laser_tie_y%(Compteur_Laser_tie%)=y_tie%+int(Tie_Hauteur%/2)-int(Long_laser%/6)-1
case 6: laser_tie_x%(Compteur_Laser_tie%)=x_tie%-int(Long_laser%/2)-1: laser_tie_y%(Compteur_Laser_tie%)=y_tie%-int(Tie_Hauteur%/2)-int(Long_laser%/2)-1
case 7: laser_tie_x%(Compteur_Laser_tie%)=x_tie%+int(Tie_Largeur%/2): laser_tie_y%(Compteur_Laser_tie%)=y_tie%+int(Tie_Hauteur%/2)-int(Long_laser%/2)-1
case 8: laser_tie_x%(Compteur_Laser_tie%)=x_tie%+int(Tie_Largeur%/2)+1: laser_tie_y%(Compteur_Laser_tie%)=y_tie%+int(Tie_Hauteur%/2)-int(long_Laser%/2)-1
end_select
Sprite_position Premier_Sprite_laser_Tie% + Compteur_Laser_tie%, laser_tie_x%(Compteur_Laser_tie%),laser_tie_y%(Compteur_Laser_tie%)
if dir_laser_tie%(Compteur_Laser_tie%)> 4
sprite_file_load Premier_Sprite_laser_Tie% + Compteur_Laser_tie%, chemin$+"\graph\empire_laser_"+str$(dir_laser_tie%(Compteur_Laser_tie%)-4)+".bmp"
else
sprite_file_load Premier_Sprite_laser_Tie% + Compteur_Laser_tie%, chemin$+"\graph\empire_laser_"+str$(dir_laser_tie%(Compteur_Laser_tie%))+".bmp"
end_if
Sprite_show Premier_Sprite_laser_Tie% + Compteur_Laser_tie%
end_if
return


Test_touche:
' =====================================================================
' Test_touche = Traitement de l'entrée clavier
touche% = scancode
if touche%=27 then goto game_over
if touche%=40 then gosub bas : rem fleche bas tourne en sens inverse d une montre
if touche%=38 then gosub haut : rem fleche haut tourne dans le sens d une montre
if touche%=163 or touche%=162 then gosub laser : rem nouveau laser
if touche%=67 then gosub teleporte : rem téléportation du vaisseau
if (touche%=49 or touche%=37) and vitesse% > 0 then vitesse% = vitesse% - 1
if (touche%=50 or touche%=39) and vitesse% < 10 then vitesse% = vitesse% + 1
touche% = 0
return

bas:
' bas = Traitement de la touche <Bas> pour faire tourner le Xwing dans sens contraire des aiguilles d'une montre
sprite_hide sprite_Xwing%+dir_xwing%
if dir_Xwing% > 1 then dir_Xwing% = dir_Xwing%-1 : else : dir_Xwing% = 8
change%=1
return

haut:
' haut = Traitement de la touche <Haut> pour faire tourner le Xwing dans sens des aiguilles d'une montre
sprite_hide sprite_Xwing%+dir_xwing%
if dir_Xwing% < 8 then dir_Xwing% = dir_Xwing%+1 : else : dir_Xwing% = 1
change%=1
return

laser:
' laser = Nouveau tir du X-Wing
if Compteur_Laser%< max_laser_Xwing%
play 3 : Compteur_Laser%= Compteur_Laser% + 1 : dir%(Compteur_Laser%)= dir_Xwing% : etat1%(Compteur_Laser%)=1: rem etat2%(Compteur_Laser%)=1
select dir_Xwing%
case 1: laser_x%(Compteur_Laser%)=x%+Xwing_Largeur% - 10 : laser_y%(Compteur_Laser%)=y%+1
case 2: laser_x%(Compteur_Laser%)=x%+int(Xwing_Largeur%/2) - 4 : laser_y%(Compteur_Laser%)=y%+int(Xwing_Hauteur%/2)+1
case 3: laser_x%(Compteur_Laser%)=x%+ Xwing_Largeur% - 1 : laser_y%(Compteur_Laser%)=y%+Xwing_Hauteur%-9
case 4: laser_x%(Compteur_Laser%)=x%+int(Xwing_Largeur%/2)-int(Long_Laser%/2) - 4 : laser_y%(Compteur_Laser%)=y%+int(Xwing_Hauteur%/2)
case 5: laser_x%(Compteur_Laser%)=x%-Long_Laser% + 10 : laser_y%(Compteur_Laser%)=y%+1
case 6: laser_x%(Compteur_Laser%)=x%-int(Long_Laser%/2)-1 : laser_y%(Compteur_Laser%)=y%+int(xwing_hauteur%/2)-int(Long_Laser%/2)
case 7: laser_x%(Compteur_Laser%)=x%+1 : laser_y%(Compteur_Laser%)=y% - Long_Laser% +9
case 8: laser_x%(Compteur_Laser%)=x%+int(Xwing_Largeur%/2) - 4 : laser_y%(Compteur_Laser%)=y%+int(xwing_hauteur%/2)
end_select
sprite_position Premier_Sprite_auto% + Compteur_laser%, laser_x%(Compteur_Laser%), laser_y%(Compteur_Laser%)
if dir_Xwing%> 4
sprite_file_load Premier_Sprite_auto% + Compteur_laser%, chemin$+"\graph\rebel_laser_"+str$(dir_Xwing%-4)+".bmp"
else
sprite_file_load Premier_Sprite_auto% + Compteur_laser%, chemin$+"\graph\rebel_laser_"+str$(dir_Xwing%)+".bmp"
end_if
Sprite_show Premier_Sprite_auto% + Compteur_Laser%
rem sprite_show Premier_Sprite_auto%+max_laser_Xwing% + Compteur_Laser%
end_if
return

teleporte:
' teleporte = Traitement de la téléportation
for i%=0 to 9 : sprite_scale Sprite_Xwing%+dir_Xwing%,0.5,0.5 : wait 20: next i%
x%=int(rnd(xMax%)): y%=int(rnd(yMax%)): if dir_Xwing%=3 then sprite_file_load Sprite_Xwing%+dir_Xwing%, chemin$+"\graph\xwing_5.bmp" : else: sprite_file_load Sprite_Xwing%+dir_Xwing%, chemin$+"\graph\xwing_1.bmp"
sprite_scale Sprite_Xwing%+dir_Xwing%, 1, 1: sprite_position Sprite_Xwing%+dir_Xwing%,x%,y%
return


boucle_laser:
' =====================================================================
' boucle_laser: calcule la position des lasers du X-Wing
i%=1
while i% <= Compteur_Laser%
if (etat1%(i%) + etat2%(i%)) > 0
select dir%(i%)
case 1: laser_x%(i%)=laser_x%(i%)+ 10
case 2: laser_x%(i%)=laser_x%(i%)+ 5 : laser_y%(i%)=laser_y%(i%)+ 5
case 3: laser_y%(i%)=laser_y%(i%)+ 10
case 4: laser_x%(i%)=laser_x%(i%)- 5 : laser_y%(i%)=laser_y%(i%)+ 5
case 5: laser_x%(i%)=laser_x%(i%)- 10
case 6: laser_x%(i%)=laser_x%(i%)- 5 : laser_y%(i%)=laser_y%(i%)- 5
case 7: laser_y%(i%)=laser_y%(i%)- 10
case 8: laser_x%(i%)=laser_x%(i%)+ 5 : laser_y%(i%)=laser_y%(i%)- 5
end_select
if laser_x%(i%) > xMax% or laser_x%(i%) < 1 or laser_y%(i%) > yMax% or laser_y%(i%) < 1 then gosub suppr_laser : else: i%=i%+1
else
gosub suppr_laser
end_if
end_while
i%=1
while i% <= Compteur_Laser%
if etat1%(i%)=1
sprite_position Premier_Sprite_auto%+i%,laser_x%(i%),laser_y%(i%)
if laser_x%(i%)+30 > x_tie% and laser_x%(i%) < x_tie%+Tie_Largeur%
temp% = laser_y%(i%)+3
if temp% > y_tie% and laser_y%(i%)<(y_tie%+Tie_hauteur%) then etat1%(i%)=0 : sprite_hide Premier_Sprite_auto%+i%: gosub Tie_explose
end_if
end_if
rem if etat2%(i%)=1
rem sprite_position Premier_Sprite_auto%+max_laser_Xwing%+i%,laser_x%(i%),laser_y%(i%)+34
rem if laser_x%(i%)+30 > x_tie% and laser_x%(i%) < x_tie%+Tie_Largeur%
rem temp% = laser_y%(i%)+37
rem if temp% > y_tie% then temp%=temp%-3: if temp% < y_tie%+Tie_Hauteur% then etat2%(i%)=0 : sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+i% : gosub Tie_explose
rem end_if
rem end_if
i%=i%+1
end_while
return

suppr_laser:
' Suppression d'un laser tiré par un X-Wing
if i% < Compteur_Laser% Then laser_x%(i%) = laser_x%(Compteur_Laser%): laser_y%(i%) = laser_y%(Compteur_Laser%) : dir%(i%)=dir%(Compteur_Laser%): etat1%(i%)=etat1%(Compteur_Laser%): etat2%(i%)=etat2%(Compteur_Laser%)
sprite_hide Premier_Sprite_auto%+Compteur_Laser%:sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+Compteur_Laser%
etat1%(Compteur_Laser%) = 0 : etat2%(Compteur_Laser%) = 0
sprite_position Premier_Sprite_auto%+i%, laser_x%(i%), laser_y%(i%)
if dir%(i%)> 4
sprite_file_load Premier_Sprite_auto% + i%, chemin$+"\graph\rebel_laser_"+str$(dir%(i%)-4)+".bmp"
else
sprite_file_load Premier_Sprite_auto% + i%, chemin$+"\graph\rebel_laser_"+str$(dir%(i%))+".bmp"
end_if
if Compteur_Laser% > 0 Then Compteur_Laser%=Compteur_Laser%-1
return


boucle_laser_tie:
' =====================================================================
' boucle_laser_tie = Calcule la position des tirs du Tie
i%=1
while i% <= Compteur_Laser_tie%
if etat_tie%(i%)=1
select dir_laser_tie%(i%)
case 1: laser_tie_x%(i%)=laser_tie_x%(i%)+ 8
case 2: laser_tie_x%(i%)=laser_tie_x%(i%)+ 4: laser_tie_y%(i%)=laser_tie_y%(i%)+ 4
case 3: laser_tie_y%(i%)=laser_tie_y%(i%)+ 8
case 4: laser_tie_x%(i%)=laser_tie_x%(i%)- 4 : laser_tie_y%(i%)=laser_tie_y%(i%)+ 4
case 5: laser_tie_x%(i%)=laser_tie_x%(i%)- 8
case 6: laser_tie_x%(i%)=laser_tie_x%(i%)- 4 : laser_tie_y%(i%)=laser_tie_y%(i%)- 4
case 7: laser_tie_y%(i%)=laser_tie_y%(i%)- 8
case 8: laser_tie_x%(i%)=laser_tie_x%(i%)+ 4 : laser_tie_y%(i%)=laser_tie_y%(i%)- 4
end_select
if laser_tie_x%(i%) > xMax% or laser_tie_x%(i%) < 0 or laser_tie_y%(i%) > yMax% or laser_tie_y%(i%) < 1 then gosub suppr_laser_tie:else: i%=i%+1
else
gosub suppr_laser_tie
end_if
End_while
i%=1
While i% <= Compteur_Laser_tie%
if etat_tie%(i%)=1
select dir_laser_tie%(i%)
case 1: gosub laser_tie_dir_1
case 2: gosub laser_tie_dir_2
case 4: gosub laser_tie_dir_2
case 5: gosub laser_tie_dir_1
case 6: gosub laser_tie_dir_2
case 8: gosub laser_tie_dir_2
end_select
end_if
i%=i%+1
End_while
return

laser_tie_dir_1:
' Traitement d'un laser horizontal
if ((laser_tie_x%(i%)+ long_laser%) > x%) and (laser_tie_x%(i%) < (x%+Xwing_Largeur%)) and ((laser_tie_y%(i%)+ 3) > y%) and ((laser_tie_y%(i%)+int(long_laser%/6) - 2)<(y%+Xwing_hauteur%))
etat_tie%(i%)=0 : sprite_hide Premier_Sprite_laser_Tie%+i%: gosub Xwing_explose
else
sprite_position Premier_Sprite_laser_Tie%+i%,laser_tie_x%(i%),laser_tie_y%(i%)
end_if
return

laser_tie_dir_2:
' Traitement d'un laser diagonal
if ((laser_tie_x%(i%)+ int(long_laser%/2)) > x%) and (laser_tie_x%(i%) < (x%+Xwing_Largeur%)) and ((laser_tie_y%(i%)+ int(long_laser%/2)) > y%) and (laser_tie_y%(i%)<(y%+Xwing_hauteur%))
etat_tie%(i%)=0 : sprite_hide Premier_Sprite_laser_Tie%+i%: gosub Xwing_explose
else
sprite_position Premier_Sprite_laser_Tie%+i%,laser_tie_x%(i%),laser_tie_y%(i%)
end_if
return

laser_tie_dir_3:
' Traitement d'un laser vertical
if (laser_tie_x%(i%)+int(long_laser%/6) - 2) > x%) and ((laser_tie_x%(i%)+ 3) < (x%+Xwing_Largeur%)) and ((laser_tie_y%(i%)+ long_laser%) > y%) and (laser_tie_y%(i%)<(y%+Xwing_hauteur%))
etat_tie%(i%)=0 : sprite_hide Premier_Sprite_laser_Tie%+i%: gosub Xwing_explose
else
sprite_position Premier_Sprite_laser_Tie%+i%,laser_tie_x%(i%),laser_tie_y%(i%)
end_if
return

suppr_laser_tie:
' Suppression d'un laser tiré par un Tie-Fighter
if i%< Compteur_Laser_tie% then laser_tie_x%(i%) = laser_tie_x%(Compteur_Laser_tie%): laser_tie_y%(i%) = laser_tie_y%(Compteur_Laser_tie%) : dir_laser_tie%(i%)=dir_laser_tie%(Compteur_Laser_tie%):etat_tie%(i%)=etat_tie%(Compteur_Laser_tie%)
etat_tie%(Compteur_Laser_tie%) = 0
sprite_hide Premier_Sprite_laser_Tie%+Compteur_Laser_tie%
if dir_laser_tie%(i%)> 4
sprite_file_load Premier_Sprite_laser_Tie% + i%, chemin$+"\graph\empire_laser_"+str$(dir_laser_tie%(i%)-4)+".bmp"
else
sprite_file_load Premier_Sprite_laser_Tie% + i%, chemin$+"\graph\empire_laser_"+str$(dir_laser_tie%(i%))+".bmp"
end_if
sprite_position Premier_Sprite_laser_Tie%+i%, laser_tie_x%(i%), laser_tie_y%(i%): sprite_show Premier_Sprite_laser_Tie%+i%
if Compteur_Laser_tie% > 0 then Compteur_Laser_tie%=Compteur_Laser_tie%-1
return


Tie_explose:
' =====================================================================
' Tie_explose = Traitement de l'explosion d'un Tie touché
play 7: sprite_hide Sprite_Tie%+dir_Tie%
changeTie%=0
for j%=1 to 5
sprite_position Sprite_exp%+j%,x_tie%,y_tie% : sprite_show Sprite_exp%+j% : if j%>1 then sprite_hide Sprite_exp%+j%-1: wait 5
next j%
sprite_hide Sprite_Exp% + 5: wait 50 : score = score + 10: gosub new_tie
return


Xwing_explose:
' =====================================================================
' Xwing_explose = Traitement de l'explosion du Xwing
Bouclier% = Bouclier% - 30
if Bouclier% < 0
play 7: 2D_rectangle 300,10,300+BouclierMax%*2.5, 20:sprite_hide Sprite_Xwing%+dir_Xwing%
for j%=1 to 5
sprite_position Sprite_exp%+j%,x%,y% : sprite_show Sprite_exp%+j% : if j%>1 then sprite_hide Sprite_exp%+j%-1 : wait 5
next j%
sprite_hide Sprite_Exp% + 5: wait 50 : goto Game_over
end_if
rem play 4
2D_rectangle 300+Bouclier%*2.5,10,300+BouclierMax%*2.5, 20
return


test_collision:
' =====================================================================
' test_collision = Controle la collision du Tie et du X-Wing
if x_tie%+Tie_Largeur% > x% and x_tie% < x%+XWing_Largeur%
if y_tie% +Tie_hauteur% > y% and y_tie% < y%+XWing_Hauteur%
Bouclier% = Bouclier% - 120
if Bouclier < 0
play 7: 2D_rectangle 300,10,300+BouclierMax%*2.5, 20: sprite_hide Sprite_Tie%+dir_Tie% : sprite_hide Sprite_Xwing%+dir_Xwing%
for j%=1 to 5
sprite_position Sprite_exp%+j%,x_tie%,y_tie% : sprite_show Sprite_exp%+j%
if j%>1 then sprite_hide Sprite_exp%+j%-1
wait 5
next j%
sprite_hide Sprite_Exp% + 5: wait 50 : goto Game_over
else
rem play 4
end_if
end_if
end_if
return


new_tie:
' =====================================================================
' new_tie = Initialise un nouveau Tie_fighter
x_tie%=int(rnd(2))*xMax% : if x_tie% > xMax% Then x_tie%=xMax%
y_tie%=int(rnd(2))*yMax% : if y_tie% > yMax% Then y_tie%=yMax%
dir_tie%=5
sprite_position Sprite_tie%+dir_Tie%,x_tie%,y_tie%
changeTie%=1
return


game_over:
' =====================================================================
' game_over = Traite la fin d'une partie et la sortie ou le redémarrage
for scale=0.5 to 2 step 0.5 : sprite_position 1, 400 - (0.5*scale* 90),300 -(0.5*scale* 60): sprite_scale 1,scale,scale : sprite_show 1 : next scale
if message_confirmation_yes_no("Voulez-vous rejouer ?")<>1
terminate
else
for i%=1 to max_laser_Xwing% : sprite_position Premier_Sprite_auto%+i%, 0,0: sprite_hide Premier_Sprite_auto%+i%: sprite_position Premier_Sprite_auto%+ max_laser_Xwing%+i%, 0,0: sprite_hide Premier_Sprite_auto%+max_laser_Xwing%+i%:Etat1%(i%)=0 : Etat2%(i%)=0 :next i%
for i%=1 to max_laser_Tie%: sprite_position Premier_Sprite_laser_Tie%+i%, 0,0: sprite_hide Premier_Sprite_laser_Tie%+i%: Etat_tie%(i%)=0 : next i%
for i%=1 to 8: sprite_position Sprite_Xwing%+i%, 0,0: sprite_hide Sprite_Xwing%+i%:sprite_position Sprite_Tie%+i%, 0,0: sprite_hide Sprite_Tie%+i%: next i%
sprite_hide 1
goto restart
end_if
return


Dernière édition par Jicehel le Ven 6 Mai 2011 - 2:01, édité 2 fois
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyJeu 5 Mai 2011 - 2:06

Bon, j'ai mis à jour le code de la V2 pour corriger les plus gros bugs. C'est jouable maintenant et il y a beaucoup moins de bugs d'affichage.

Prochaines étapes, reprendre la V1 pour y intégrer les corrections et améliorations de la V2 en gardant le système simple de déplacement (sans les rotations) puis ajouter une progress_bar qui représentra le bouclier du X_wing avec le game_over quand la barre est à 0
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyVen 6 Mai 2011 - 2:03

Code source de la V2 maj pour faire apparaitre la barre d'energie du bouclier
Code source de la V1 maj pour faire apparaitre la barre d'energie du bouclier
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptySam 7 Mai 2011 - 10:40

Voilà, la V1 du programme a était mise à jour:

Ajout des barres pour le bouclier et l'état des lasers et quelques corrections logiques / affichage

C'est encore améliorable mais bon maintenant, je vais passer à autre chose.

Pour ma prise en main de Panoramic, je pense que maintenant j'ai compris l'utilisation des fonctions 2D. Dans mes prochains sources, j'essayerais de mettre en place le système de comptage des objets que j'ai vu dans certains de vos sources et que je trouve très pratique Smile

Revenir en haut Aller en bas
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMar 14 Juin 2011 - 22:15

Salut Jicehel Wink

Je suis content que mon petit code aie pu te servir de base départ, le but était justement de montrer qu'on pouvait faire des jeux sympas avec panoramic Wink

Bonne continuation à ton jeu et à ton apprentissage de panoramic, on apprend de plus en plus nous tous chaque fois Wink

Je n'ai pas encore analysé ton code car je viens d'arriver et j'ai peu de temps à présent dans ma vie pour programmer ou voir les codes des autres mais j'espère bien le voir un jour proche le tiens Wink
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno EmptyMar 14 Juin 2011 - 23:04

Bon retour parmis nous, j'espère que tu auras un peu de temps pour reprogrammer. Il y a tellement d'idées dans nos têtes respectives et tellement de personnes dont les "talents" peuvent se compléter pour faire des trucs sympas Smile

Bon, il y en a comme Klaus, JL35, Cosmos,Nardo26... qui ont plus de talents que d'autres, mais bon avec Georges, Enform, ygeronimi,659_minifly,jjn4,etc... on n'arrive quand même à créer des pt'i trucs sympas.

PS: Je n'ai pas essayé de citer tout le monde, j'ai juste mis les noms qui me passaient par la tête ...
Revenir en haut Aller en bas
Contenu sponsorisé





Suite du programme de Dragonno Empty
MessageSujet: Re: Suite du programme de Dragonno   Suite du programme de Dragonno Empty

Revenir en haut Aller en bas
 
Suite du programme de Dragonno
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» dragonno le retour ;)
» fermer le programme qui lance un autre programme
» ce fut mon 2ème programme en panoramic! (mauvais programme)
» Éditeur de texte : Mini Word
» Barre de titre sans les 3 boutons

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: