Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Suite du programme de Dragonno | |
| | Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Suite du programme de Dragonno Mar 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 .... Edité le 07/05/11: Les sources multimédias sont dans ce fichier d'archive 7zip: Voir le Fichier : Kevin_s_war.7zBon voilà, c'est jouable, dans les versions 1 et 2, je vais pouvoir faire autre chose maintenant 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 | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Suite du programme de Dragonno Mar 19 Avr 2011 - 21:11 | |
| Bonsoir Jicehel et bienvenu parmis nous !!! 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?) | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Mar 19 Avr 2011 - 21:31 | |
| Bonjour, Merci , 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Mar 19 Avr 2011 - 22:48 | |
|
Dernière édition par Jicehel le Mer 20 Avr 2011 - 18:07, édité 1 fois | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Suite du programme de Dragonno Mar 19 Avr 2011 - 23:32 | |
| Hello Jicehel ! C'est pas mal du tout ! 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Mer 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 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 | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Suite du programme de Dragonno Mer 20 Avr 2011 - 0:23 | |
| Ok, t'as raison pour etat2...je n'y avais pas pensé ! 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 ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Mer 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Jeu 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Ven 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" | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Ven 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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Dim 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Jeu 28 Avr 2011 - 2:07 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Mer 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Jeu 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
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Ven 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
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Sam 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 | |
| | | dragonno
Nombre de messages : 341 Localisation : Près de Toulouse Date d'inscription : 22/01/2009
| Sujet: Re: Suite du programme de Dragonno Mar 14 Juin 2011 - 22:15 | |
| Salut Jicehel 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 Bonne continuation à ton jeu et à ton apprentissage de panoramic, on apprend de plus en plus nous tous chaque fois 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Suite du programme de Dragonno Mar 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 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 ... | |
| | | Contenu sponsorisé
| Sujet: Re: Suite du programme de Dragonno | |
| |
| | | | Suite du programme de Dragonno | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |