FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Demande pour Jack concernant PanExpress
par Jack Aujourd'hui à 7:48

» Calculatrice
par papydall Hier à 22:54

» EPP_V01 éditeur pour Panoramic
par Minibug Mer 19 Sep 2018 - 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Mer 19 Sep 2018 - 21:02

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Mer 19 Sep 2018 - 15:58

» Planétarium virtuel.
par Pedro Alvarez Mer 19 Sep 2018 - 9:28

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

» La théorie du chaos
par jean_debord Mar 11 Sep 2018 - 9:30

» Orbites de l’ensemble de Mandelbrot
par Jean Claude Lun 10 Sep 2018 - 21:08

» Version instantanée V 0.9.29i2 du 4/09/2018
par silverman Mer 5 Sep 2018 - 10:15

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 Panoram'Invaders

Aller en bas 
AuteurMessage
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Panoram'Invaders   Lun 16 Mai 2011 - 13:47

Bonjour,

Est-ce que tout le monde connait le programme qu'avait fait Philou029 ?
Panoram'Invaders dont le sujet (désormais verouillé) était :
- http://panoramic.1fr1.net/t1308-shoot-en-up

J'ai trouvé le programme très sympa et j'ai remis un peu le programme à ma sauce pour la maintenance en utilisant des boucles.

Lien sur l'archive avec tous les fichiers: Voir le Fichier : Kevins_Invader.7z

Je vous joint le code source:
Code:

REM ************************************************************
REM *                                                          *
REM *  Panoram Invanders Fichier source d origine: Philou029  *
REM *  Modifications: Jean-Charles - Version: 3.0 - 16/05/2011 *
REM *                                                          *
REM ************************************************************
REM *  Touches:                                                *
REM *        - "Les fléches" gauche ou droite: déplacement    *
REM *        - "Esc" pour quitter                              *
REM *        - "CTRL" ou clic gauche pour tirer                *
REM *                                                          *
REM ************************************************************

dim a%,touche%,vie%,vsou%,hsou%,soudec%,afs$,live%, aflive%, boucle%, boucle2%, boucle3%, boucle4%, dir%, pas%
dim tirh%,bb%,aleat%,i%,point%,afscore%,invader% ,temp%, temp2%
dim point$(10),tirdec%(5),tirv%(5),postir%(5), env%(40), vinv%(40),hinv%(40), nl%

label soucoupe,crash, score, gameover,debut, inv_pos_initiale, E_boucle, inv

Data "ga","me","ov", "er", 150,"mi2", 151, "mi1", 152,"mi1", 153, "mi2", 200, "exp"
Data 300, "sou", 301, "exps"
top 0,0: left 0,0: width 0,600 : height 0,600
sound 500:file_load 500,"shot.wav": sound 501:file_load 501,"02.wav":sound 502:file_load 502,"walk3.wav": sound 503:file_load 503,"walk4.wav":sound 504:file_load 504,"explode.wav"
sound 700:file_load 700,"ufohit.wav": sound 702:file_load 702,"ufo.wav"

SCENE2D 1: top 1,0: left 1,0: width 1,600: height 1,600 :file_load 1,"nuit.bmp":full_space 1
a%=0
for boucle%=0 to 3
  read afs$
  if boucle%=2 then a%=20
  sprite 900+boucle%: SPRITE_hide 900+boucle%:SPRITE_FILE_LOAD 900+boucle%,afs$+".bmp":  SPRITE_POSITION 900+boucle%, 200+boucle%*37+a%,250
next boucle%
for boucle%=0 to 6
  read a%:read afs$
  sprite a%: SPRITE_hide a%:SPRITE_FILE_LOAD a%,afs$+".bmp"
next boucle%
sprite 302: sprite_hide 302:SPRITE_FILE_LOAD 302,"titre1.bmp": SPRITE_POSITION 302, 50 , 20: sprite_show 302
sprite 303: sprite_hide 303:SPRITE_FILE_LOAD 303,"titre2.bmp": SPRITE_POSITION 303, 225, 20: sprite_show 303
for boucle2%=0 to 3: temp%=11*boucle2%: for boucle%=(1+temp%) to (7+temp%): sprite boucle%+4 : sprite_hide boucle%+4 : SPRITE_FILE_LOAD boucle%+4,str$(boucle2%+1)+"1.bmp" : next boucle%: next boucle2%
for boucle2%=0 to 3: temp%=11*boucle2%:for boucle%=105+temp% to 111+temp%: sprite boucle%  :  sprite_hide boucle%  : SPRITE_FILE_LOAD boucle%,str$(boucle2%+1)+"2.bmp"  :  next boucle%: next boucle2%
for boucle%=0 to 4: sprite 500+boucle% : SPRITE_FILE_LOAD 500+boucle%,"0.bmp": SPRITE_POSITION 500+boucle%, 250-13*boucle%,100: NEXT boucle%
sprite 505: SPRITE_FILE_LOAD 505,"score.bmp":SPRITE_POSITION 505, 237-120,95 : sprite 506: SPRITE_FILE_LOAD 506,"live.bmp" :SPRITE_POSITION 506, 300,95 :sprite 507: SPRITE_FILE_LOAD 507,"0.bmp" : SPRITE_POSITION 507, 350,100
for boucle%=0 to 9: point$(boucle%)=str$(boucle%)+".bmp":next boucle%
sprite 3: SPRITE_hide 3: SPRITE_FILE_LOAD 3,"mis.bmp" : sprite 4: SPRITE_FILE_LOAD 4,"vai.bmp"

TIMER 61: TIMER_INTERVAL 61,30000: ON_TIMER 61,soucoupe

debut:
bb%=0: live%=5:hsou%=700 :vsou%=170: a%=280: invader%=28 : point%=0 : pas% = 1
for boucle4%=1 to 5:tirdec%(boucle4%)=0: next boucle4%
sprite_hide 150: sprite_hide 151: sprite_hide 3 :  sprite_hide 152 : sprite_hide 153: sprite_hide 900: sprite_hide 901: sprite_hide 902: sprite_hide 903

gosub inv_pos_initiale
aflive%=10+live% : afs$=str$(aflive%) : SPRITE_FILE_LOAD 507,point$(val(mid$(afs$,2,1))):SPRITE_POSITION 507, 350,100

E_boucle:
aleat%=int(rnd(40)+1)
nl%=0
for boucle%=1 to 4
  if tirdec%(boucle%)=1 then tirv%(boucle%)=tirv%(boucle%)+5: SPRITE_POSITION 149+boucle%,postir%(boucle%),tirv%(boucle%): if tirv%(boucle%)=530 then SPRITE_Hide 149+boucle% : tirdec%(boucle%)=0
  if postir%(boucle%) >=a%-13 then if postir%(boucle%) <=(a%+16) then if tirv%(boucle%)>=477 then if tirv%(boucle%)< 523 then gosub crash
  gosub inv
next boucle%
if nl%=1
  for boucle%=0 to 3
    temp%=(boucle%)*11: vinv%(1+temp%)=vinv%(1+temp%)+25: vinv%(2+temp%)=vinv%(2+temp%)+25: vinv%(3+temp%)=vinv%(3+temp%)+25
    vinv%(4+temp%)=vinv%(4+temp%)+25: vinv%(5+temp%)=vinv%(5+temp%)+25: vinv%(6+temp%)=vinv%(6+temp%)+25: vinv%(7+temp%)=vinv%(7+temp%)+25
  next boucle%
end_if
if soudec%=1 then gosub soucoupe
if tirdec%(5)=1
  tirv%(5)=tirv%(5)-8 : SPRITE_POSITION 3,postir%(5),tirv%(5)
  if soudec%=1 then if tirv%(5)>vsou% then if tirv%(5)<vsou%+24 then if (postir%(5) > (hsou%-15) and postir%(5) < (hsou%+16)) then SPRITE_Hide 300:SPRITE_POSITION 301, hsou%,vsou%: sprite_show 301:play 702 : wait 200: soudec%=0 : SPRITE_hide 301: tirdec%(5)=0  : SPRITE_HIDE 3  : tirv%(5)=0  : hsou%=700 : soudec%=0 : point%=point%+300
  if tirv%(5) <=172 then SPRITE_HIDE 3 : tirdec%(5)=0
end_if

if bb%=0 then play 503: bb%=1 : else : play 502: bb%=0

touche%=scancode
if touche%=37 then i%=-4
if touche%=39 then i%=4
if touche%=27 then goto gameover
if touche%=163 or touche%=162 or touche%=1 then if tirdec%(5)=0 then tirdec%(5)=1  : tirv%(5)=500 :play 500: SPRITE_SHOW 3:postir%(5)=a%
a%=a%+i%:i%=0 : SPRITE_POSITION 4,a%,500
goto E_boucle
END

inv_pos_initiale:
SPRITE_POSITION 4,a%,500 : dir%=1
for boucle2%=0 to 3:temp%=11*boucle2%: for boucle%=1 to 7 :  env%(boucle%+temp%)=1:hinv%(boucle%+temp%)=170+30*(boucle%) :vinv%(boucle%+temp%)=200+25*boucle2%:sprite_show boucle%+temp%+4: next boucle%: next boucle2%
return
 
inv:
 temp%=dir%*pas%: temp2%=(boucle%-1)*11
 hinv%(1+temp2%)=hinv%(1+temp2%)+temp%:hinv%(2+temp2%)=hinv%(2+temp2%)+temp%:hinv%(3+temp2%)=hinv%(3+temp2%)+temp%:hinv%(4+temp2%)=hinv%(4+temp2%)+temp%
 hinv%(5+temp2%)=hinv%(5+temp2%)+temp%:hinv%(6+temp2%)=hinv%(6+temp2%)+temp%:hinv%(7+temp2%)=hinv%(7+temp2%)+temp%
 for boucle2%= (1+temp2%) to (7+temp2%)
 if env%(boucle2%)<>0
  if nl%=0 and hinv%(boucle2%)=550 then dir%=-1 : nl%=1
  if nl%=0 and hinv%(boucle2%)=0 then dir%=1: nl%=1
  if bb%=0 then SPRITE_POSITION boucle2%+4, hinv%(boucle2%),vinv%(boucle2%):sprite_hide boucle2%+104:SPRITE_SHOW boucle2%+4
  if bb%=1 then SPRITE_POSITION boucle2%+104, hinv%(boucle2%),vinv%(boucle2%): sprite_hide boucle2%+4:SPRITE_SHOW boucle2%+104
  if postir%(5) > (hinv%(boucle2%)-12) then if postir%(5) < (hinv%(boucle2%)+3) then if tirv%(5)>vinv%(boucle2%) then if tirv%(5)<(vinv%(boucle2%)+16) then point%=point%+50-10*boucle%:  SPRITE_hide boucle2%+4+100*bb%:  :play 501 :SPRITE_POSITION 200, hinv%(boucle2%),vinv%(boucle2%) : SPRITE_SHOW 200: wait 25: env%(boucle2%)=0 : SPRITE_HIDE 200 : tirdec%(5)=0 : SPRITE_HIDE 3:tirv%(5)=0: point%=point%+30 :invader%=invader%-1 :gosub score
  if aleat%=boucle2% and tirdec%(boucle%)=0 then tirv%(boucle%)=vinv%(boucle2%) : postir%(boucle%)=hinv%(boucle2%) : tirdec%(boucle%)=1:SPRITE_POSITION 149+boucle%,postir%(boucle%),tirv%(boucle%):Sprite_Show 149+boucle%
 end_if
 next boucle2%
return

soucoupe:
  if soudec%<>1 then soudec%=1
  hsou%=hsou%-2
  if hsou%=550 or hsou%=250 then play 700
  if soudec%=1 then SPRITE_POSITION 300,hsou%,vsou%:  sprite_show 300 :if hsou%=-100 then SPRITE_hide 300 : soudec%=0 :hsou%=700
return

score:
  afscore%=1000000+point%
  afs$=str$(afscore%)
  for boucle4% = 0 to 4: SPRITE_FILE_LOAD 500+boucle4%,point$(val(mid$(afs$,7-boucle4%,1))): SPRITE_POSITION 500+boucle4%, 250-13*boucle4%,100:next boucle4%
return

crash:
  play 504: live%=live%-1: timer_off_all
  for boucle4%=1 to 3: SPRITE_HIDE 4: wait 100: SPRITE_SHOW 4: wait 100: next boucle4%
  aflive%=10+live% : afs$=str$(aflive%) : SPRITE_FILE_LOAD 507,point$(val(mid$(afs$,2,1))):SPRITE_POSITION 507, 350,100
  for boucle4%=1 to 4:  if tirdec%(boucle4%)=1 then SPRITE_Hide 150+boucle4% : tirdec%(boucle4%)=0 : postir%(boucle4%)=0 : tirv%(boucle4%)=0: next boucle4%
  if live%=0 then goto gameover
  timer_on 61
return

gameover:
  for boucle4% = 1 to 4
    sprite_show 900: sprite_show 901: sprite_show 902: sprite_show 903: wait 200
    if boucle4% < 4 then sprite_hide 900: sprite_hide 901: sprite_hide 902 :sprite_hide 903: wait 200
  next boucle4%
  timer_off_all : off_KEY_DOWN 0 : Off_CLICK 1 : sprite_hide 3: tirdec%(5)=0: sprite_hide 150 :tirdec%(1)=0
  sprite_hide 151 :tirdec%(2)=0:  sprite_hide 152 :tirdec%(3)=0 :sprite_hide 153 :tirdec%(4)=0
  if message_confirmation_yes_no("Voulez-vous rejouer ?")=1 then  sprite_hide 900: sprite_hide 901 : sprite_hide 902: sprite_hide 903:  goto debut :else: terminate
end

Voilà, je me suis réapproprié le source pour en comprendre le fonctionnement et j'ai commencé à faire les boucles pour "aléger" la compréhension et surtout les modifications. Maintenant, je vais chercher à en améliorer les performance car actuellement, c'est beaucoup trop lent et du cout, non paramètrable en vitesse (Je ne peux pas accélérer autrement qu'en espérant que le joueur élimine assez d'envahissurs pour que le jeu accélère, actuellement...)


Dernière édition par Jicehel le Mer 18 Mai 2011 - 0:44, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jpcr

avatar

Nombre de messages : 276
Age : 51
Localisation : Val de Marne (94)
Date d'inscription : 06/05/2011

MessageSujet: Re: Panoram'Invaders   Lun 16 Mai 2011 - 14:36

Salut Jicehel,

non je connaissais pas mais j'essayerai ce soir après le boulot.

ça a l'air d'un projet sympa!!

je te ferai un retour sur mon essai.
jp

edit : je viens de tester, effectivement c très lent puis quand il restait 2 ennemis, c'est devenu si rapide que c’était injouable.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jeanpierre.creis.free.fr/Panoramic/Panoramic.html
Polaris



Nombre de messages : 69
Date d'inscription : 03/04/2011

MessageSujet: Yeah!!   Mar 17 Mai 2011 - 13:29

Super invaders!!

Quel langage de prog n'as pas son invaders!!
Génial me suis bien marer avec.
Parfois le programme freeze(fige) et reprend quelque seconde après.
A part cela ça le fait bien!

merci et bon jeu!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Panoram'Invaders   Mer 18 Mai 2011 - 0:47

obsolète


Dernière édition par Jicehel le Dim 29 Mai 2011 - 10:55, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Panoram'Invaders   Sam 21 Mai 2011 - 9:49

J'ai vraiment besoin d'un coup de main pour comprendre d'où vient l'erreur (29) not correct Arithmetic expression qui se produit sur les return du program... Je ne vois vraiment pas comment résoudre le problème.
D'autre part qu'elle est la bonne méthode pour ne pas voir apparaitre les sprites en haut à gauche quand je fais un load (a priori, il ne tient pas compte du load). Je suis revenu au load car cela semble plus rapide contrairement à ce que je pensais qu'un hide xx suivi d'un show yy

Code:

REM ************************************************************
REM *                                                          *
REM *  Panoram Invanders Fichier source d origine: Philou029  *
REM *  Modifications: Jean-Charles - Version: 2.0 - 16/05/2011 *
REM *                                                          *
REM ************************************************************
REM *  Touches:                                                *
REM *        - "Les fléches" gauche ou droite: déplacement    *
REM *        - "Esc" pour quitter                              *
REM *        - "CTRL" ou clic gauche pour tirer                *
REM *                                                          *
REM ************************************************************

dim a%,touche%,vie%,vsou%,hsou%,soudec%,afs$,live%, aflive%, boucle%, boucle2%, boucle3%, boucle4%, dir%, pas%
dim tirh%,bb%,aleat%,point%,afscore%,invader% ,temp%, temp2%, temp3%
dim point$(10),tirdec%(5),tirv%(5),postir%(5), env%(40), vinv%,hinv%, nl%, dech%

label soucoupe,crash, score, gameover,debut,E_boucle,test_touche

Data "ga","me","ov", "er", 150,"mi2", 151, "mi1", 152,"mi1", 153, "mi2", 200, "exp"
Data 300, "sou", 301, "exps"
top 0,0: left 0,0: width 0,600 : height 0,600
sound 500:file_load 500,"shot.wav": sound 501:file_load 501,"02.wav":sound 502:file_load 502,"walk3.wav": sound 503:file_load 503,"walk4.wav":sound 504:file_load 504,"explode.wav"
sound 700:file_load 700,"ufohit.wav": sound 702:file_load 702,"ufo.wav"


SCENE2D 1: top 1,0: left 1,0: width 1,600: height 1,600 :file_load 1,"nuit.bmp":full_space 1
a%=0
for boucle%=0 to 3
  read afs$
  if boucle%=2 then a%=20
  sprite 900+boucle%: SPRITE_hide 900+boucle%:SPRITE_FILE_LOAD 900+boucle%,afs$+".bmp":  SPRITE_POSITION 900+boucle%, 200+boucle%*37+a%,250
next boucle%
for boucle%=0 to 6:  read a%:read afs$: sprite a%: SPRITE_hide a%:SPRITE_FILE_LOAD a%,afs$+".bmp": next boucle%
sprite 302: sprite_hide 302:SPRITE_FILE_LOAD 302,"titre1.bmp": SPRITE_POSITION 302, 50 , 20: sprite_show 302
sprite 303: sprite_hide 303:SPRITE_FILE_LOAD 303,"titre2.bmp": SPRITE_POSITION 303, 225, 20: sprite_show 303
for boucle%=0 to 4: sprite 500+boucle% : SPRITE_FILE_LOAD 500+boucle%,"0.bmp": SPRITE_POSITION 500+boucle%, 250-13*boucle%,100: NEXT boucle%
sprite 505: SPRITE_FILE_LOAD 505,"score.bmp":SPRITE_POSITION 505, 237-120,95 : sprite 506: SPRITE_FILE_LOAD 506,"live.bmp" :SPRITE_POSITION 506, 300,95 :sprite 507: SPRITE_FILE_LOAD 507,"0.bmp" : SPRITE_POSITION 507, 350,100
for boucle%=0 to 9: point$(boucle%)=str$(boucle%)+".bmp":next boucle%
sprite 3: SPRITE_hide 3: SPRITE_FILE_LOAD 3,"mis.bmp" : sprite 4: SPRITE_FILE_LOAD 4,"vai.bmp"

TIMER 61: TIMER_INTERVAL 61,30000: ON_TIMER 61,soucoupe
ON_KEY_DOWN 0,test_touche

debut:
bb%=0: live%=5:hsou%=700 :vsou%=170: a%=280: invader%=28 : point%=0 : pas% = 1
rem for boucle4%=1 to 5:tirdec%(boucle4%)=0: next boucle4%
sprite_hide 150: sprite_hide 151: sprite_hide 3 :  sprite_hide 152 : sprite_hide 153: sprite_hide 900: sprite_hide 901: sprite_hide 902: sprite_hide 903

SPRITE_POSITION 4,a%,500 : dir%=1 : vinv%=200 :hinv%=200
for boucle2%=0 to 3: temp%=11*boucle2%: for boucle%=(1+temp%) to (7+temp%): sprite boucle%+4 : sprite_position boucle%+4,800,800 : SPRITE_FILE_LOAD boucle%+4,str$(boucle2%+1)+"1.bmp":env%(boucle%)=1:SPRITE_SHOW boucle%+4: next boucle%: next boucle2%
aflive%=10+live% : afs$=str$(aflive%) : SPRITE_FILE_LOAD 507,point$(val(mid$(afs$,2,1))):SPRITE_POSITION 507, 350,100

E_boucle:
aleat%=int(rnd(40)+1)
nl%=0
temp%=dir%*pas%: hinv%=hinv%+temp%
for boucle%=1 to 4
  if tirdec%(boucle%)=1 then tirv%(boucle%)=tirv%(boucle%)+5: SPRITE_POSITION 149+boucle%,postir%(boucle%),tirv%(boucle%): if tirv%(boucle%)=530 then SPRITE_Hide 149+boucle% : tirdec%(boucle%)=0
  if postir%(boucle%) >=a%-13 then if postir%(boucle%) <=(a%+16) then if tirv%(boucle%)>=477 then if tirv%(boucle%)< 523 then gosub crash
  temp2%=(boucle%-1)*11
  for boucle2%= 1 to 7
    if env%(boucle2%+temp2%)<>0
      if nl%=0
        if hinv%=(550-(boucle2%-1)*30) then dir%=-1 : nl%=1: else: if (hinv%+(boucle2%-1)*30)=0 then dir%=1: nl%=1
      end_if
      if (aleat%=(boucle2%+temp2%) and tirdec%(boucle%)=0) then tirv%(boucle%)=vinv%+25*boucle% : postir%(boucle%)=hinv%+(boucle2%-1)*30: tirdec%(boucle%)=1:SPRITE_POSITION 149+boucle%,postir%(boucle%),tirv%(boucle%):Sprite_Show 149+boucle%
    end_if
  next boucle2%
next boucle%
if nl%=1 then vinv%=vinv%+25
for boucle2%=1 to 7
  dech%= hinv%+(boucle2%-1)*30
  if bb%=0
    if env%(boucle2%) <>0  then SPRITE_FILE_LOAD boucle2%+4,"11.bmp": SPRITE_POSITION boucle2%+4, dech%,vinv%
    if env%(boucle2%+11)<>0 then SPRITE_FILE_LOAD boucle2%+15,"21.bmp":SPRITE_POSITION boucle2%+15, dech%,vinv%+25
    if env%(boucle2%+22)<>0 then SPRITE_FILE_LOAD boucle2%+26,"31.bmp": SPRITE_POSITION boucle2%+26, dech%,vinv%+50
    if env%(boucle2%+33)<>0 then SPRITE_FILE_LOAD boucle2%+37,"41.bmp":SPRITE_POSITION boucle2%+37, dech%,vinv%+75
  else
    if env%(boucle2%) <>0  then SPRITE_FILE_LOAD boucle2%+4,"12.bmp":SPRITE_POSITION boucle2%+4, dech%,vinv%
    if env%(boucle2%+11)<>0 then SPRITE_FILE_LOAD boucle2%+15,"22.bmp":SPRITE_POSITION boucle2%+15, dech%,vinv%+25
    if env%(boucle2%+22)<>0 then SPRITE_FILE_LOAD boucle2%+26,"32.bmp":SPRITE_POSITION boucle2%+26, dech%,vinv%+50
    if env%(boucle2%+33)<>0 then SPRITE_FILE_LOAD boucle2%+37,"42.bmp":SPRITE_POSITION boucle2%+37, dech%,vinv%+75
  end_if
next boucle2%
if soudec%=1 then gosub soucoupe
if tirdec%(5)=1
  tirv%(5)=tirv%(5)-8 : SPRITE_POSITION 3,postir%(5),tirv%(5)
  temp%=0: temp2%=0
  if (tirv%(5)< (vinv%+90) and tirv%(5)> (vinv%-12))
    if (postir%(5) < (hinv%+219) and postir%(5) > (hinv%-14))
          temp%=int((postir%(5)-hinv%+15)/30)+1: temp2%=int((tirv%(5)-vinv%+2)/25): temp3%=11*(temp2%)+temp%
            If env%(temp3%)<>0 then point%=point%+50-10*temp2%:SPRITE_delete temp3%+4:play 501 :SPRITE_POSITION 200, hinv%+(temp%-1)*30,vinv%+temp2%*25: SPRITE_SHOW 200: wait 25: env%(temp3%)=0: SPRITE_HIDE 200: tirdec%(5)=0 : SPRITE_HIDE 3:tirv%(5)=0:invader%=invader%-1: gosub score
    end_if
  end_if
  if soudec%=1 then if tirv%(5)>vsou% then if tirv%(5)<vsou%+24 then if (postir%(5) > (hsou%-15) and postir%(5) < (hsou%+16)) then SPRITE_Hide 300:SPRITE_POSITION 301, hsou%,vsou%: sprite_show 301:play 702 : wait 200: soudec%=0 : SPRITE_hide 301: tirdec%(5)=0 : SPRITE_HIDE 3 : tirv%(5)=0  : hsou%=700 : soudec%=0 : point%=point%+300
  if tirv%(5) <=172 then SPRITE_HIDE 3 : tirdec%(5)=0
end_if

if bb%=0 then play 503: bb%=1 : else : play 502: bb%=0
gosub test_touche
SPRITE_POSITION 4,a%,500
goto E_boucle
END
return

test_touche:
 touche%=scancode
 if touche%=37 then a%=a%-4
 if touche%=39 then a%=a%+4
 if touche%=27 then goto gameover
 if touche%=163 or touche%=162 or touche%=1 then if tirdec%(5)=0 then tirdec%(5)=1  : tirv%(5)=500 :play 500: SPRITE_SHOW 3:postir%(5)=a%
 if a% < -30 then a%=-30 :else: if a% > 630 then a%=630
return

soucoupe:
  hsou%=hsou%-2
  if hsou%=550 or hsou%=250 then play 700
  if soudec%=1 then SPRITE_POSITION 300,hsou%,vsou%:  sprite_show 300: else: soudec%=1
  if hsou%=-100then SPRITE_hide 300: soudec%=0: hsou%=700
return
 
score:
  afscore%=1000000+point%
  afs$=str$(afscore%)
  for boucle4% = 0 to 4: SPRITE_FILE_LOAD 500+boucle4%,point$(val(mid$(afs$,7-boucle4%,1))): SPRITE_POSITION 500+boucle4%, 250-13*boucle4%,100:next boucle4%
return

crash:
  play 504: live%=live%-1: timer_off_all
  for boucle4%=1 to 3: SPRITE_HIDE 4: wait 100: SPRITE_SHOW 4: wait 100: next boucle4%
  aflive%=10+live% : afs$=str$(aflive%) : SPRITE_FILE_LOAD 507,point$(val(mid$(afs$,2,1))):SPRITE_POSITION 507, 350,100
  for boucle4%=1 to 4:  if tirdec%(boucle4%)=1 then SPRITE_Hide 150+boucle4% : tirdec%(boucle4%)=0 : postir%(boucle4%)=0 : tirv%(boucle4%)=0: next boucle4%
  if live%=0 then goto gameover
  timer_on 61
return

gameover:
  for boucle4% = 1 to 4
    sprite_show 900: sprite_show 901: sprite_show 902: sprite_show 903: wait 200
    if boucle4% < 4 then sprite_hide 900: sprite_hide 901: sprite_hide 902 :sprite_hide 903: wait 200
  next boucle4%
  timer_off_all : off_KEY_DOWN 0 : Off_CLICK 1 : sprite_hide 3: tirdec%(5)=0
  for boucle4% = 0 to 3:sprite_hide 150+boucle4% :tirdec%(boucle4%+1)=0:next boucle4%
  if message_confirmation_yes_no("Voulez-vous rejouer ?")=1 then  sprite_hide 900: sprite_hide 901 : sprite_hide 902: sprite_hide 903:  goto debut :else: erminate
sprite_delete_all:terminate: end
return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Panoram'Invaders   Sam 21 Mai 2011 - 13:50

Bonjour,
Very Happy Vous êtes "chiant". Je ne voudrai plus intervenir, mais vous brulez les étapes. Et je crois qu'il faut que ce soit un "vieux" malgrès mon jeune âge qui intervienne.

Tu devrez aller sur le poste de Klaus. Il a fait des modules (je ne me rappel plus comment c'est présenté) pour que Panoramic fonctionne dans son bon jus!

Tu fais marcher ton programme alors que tout n'est pas installé avec des timers.

Rêgle d'or:!
Panoramic ne fonctionne bien, soit lorsqu'il est en mode évènementiel, et ce n'est pas le cas ici, soit lorsqu'il n'y a aucun évènement (c'est-à dire: ancien programme sans les boutons...)

Pour que cela marche sans problème avec les évènements: button on_key_etc, timer_on ..., le programme doit tout installé, et voir le mot END pour que les touches, les boutons, les clics les timers fonctionnent normalement. Sinon tu auras par exemple un problème un moment ou un autre avec des erreurs sur RETURN
Ensuite les appuis des évènements, n'ayant pas vus de END ne sauront pas où se rebrancher.

Enfin, et lire tous sur les timers, tout ce que j'ai mis par exemple, ou d'autre: (et c'est également vrai je le dis ici pour on_change), il faut mettre en tout dernier avant le END les branchements: ON_TIMER , et juste avant les ON_CHANGE

Pourquoi:
Quelque soit le réglage, le timer démarre très rapidement (j'ai constaté, qu'une suivant ou deux instructions, le timer démarrait) et ensuite il tient compte de l'interval.
Si sur un objet, il y a ON_CHANGE de validé, et que tu modifie (même dans le programme) alors que le programme n'est pas totalement installé, il y a branchement, et la question est: Où il va se rebrancher au return?????? Question
exemple:
Code:
edit 1:on_change 1,clic
text 1,"branchement"

Et bien il y a erreur, car tu viens de changer le texte de l'edit qui était vide avant, et il veut se rebrancher!!!, mais comment et pour quoi faire.

U programme en Panoramic doit se faire avec une bonne réflexion de départ.

dans ton programme je vois:
Code:
goto E_boucle
END
return
C'est quoi ce return: Normalement il ne sert à rien! Le END est dans le module de départ. Même si tu fais un gosub au début pour installer les objets (et tu en as le droit) au retour du sous programme tu mets le end, Dans certain cas je mets un END dans un sous programme, mais c'est des cas particulier, et c'est un END en supplément pour résoudre ce cas particulier, mais cela ne s'emploi pas n'importe comment.

et maintenant:
Bonne programmation!


Dernière édition par cosmos70 le Sam 21 Mai 2011 - 14:07, édité 1 fois
Revenir en haut Aller en bas
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Panoram'Invaders   Sam 21 Mai 2011 - 14:02

Merci Cosmos pour la piste, je vais essayer de repenser la boucle comme ça, ça ne devrai pas demander trop de changement ^^.
Tu vois, c'est beaucoup trop tôt pour que tu nous abandonne, on n'a pas encore eu le temps de récupérer toutes vos expériences et votre longue pratique.

Le return après le END, ne sert à rien, comme je ne voyais pas d'où venait l'erreur, je me suis dit qu'il y avait peut-être des astuces de programmation à faire pour que ça marche bien... mais je m'étais trompé de piste
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Panoram'Invaders   Sam 21 Mai 2011 - 15:21

Il n'y a pas d'abandon de ma part, je veux seulement laisser les autres travailler. J'ai déjà 1600 messages ici, alors que je n'interviens nul part ailleurs. Ce n'est pas mon but de faire de la discution, et normalement c'est le contraire.
Je ne parle pas de ceux d'avant, vu que je ne les connais pas, mais avec JL35, Jean-Claude JJN4, Nicolas, Georges au début, puis Klaus, Nardo, et quelques-uns, on a vraiment dégrossi et orienté Jack sur ce qu'on voulais.
Panoramic a vraiment avancé, la preuve est que ces derniers temps, plus personne n'intervenait.

Dans un forum, seules les demandes, ou les erreurs font intervenir les membres, parfois quelques discutions sur un sujet. Lorsque cela fonctionne, les interventions s’estompent.

Vous êtes arrivés avec des idées sur les jeux avec la 2D et la 3D, et comme ce n'était pas notre fort, vous allez prendre la relève.

Ce qui me gène le plus sur ce forum, est de voir que les plus aguerris à la programmation, laissent les autres de côté. Celà me rappel ce que je voyais au ping-pong. Les plus doués ne voulaient absolument pas jouer avec les plus jeunes qui le demandaient. Plus on est élevé, du haut de sa grandeur, on laisse les autres se débrouiller. On veut absolument pas donner une information qui résout un problème, ou aider. Du haut de sa grandeur, on prend toute information qu'on a pas pensé, mais c'est tout. Si on parle de Klaus, c'est que c'est une exception à cette règle. Il n'y en a pas beaucoup d'autre. J'espère que si vous êtes doué et costaud en informatique, vous agirez autrement.

Bonne programmation en Panoramic
Revenir en haut Aller en bas
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Panoram'Invaders   Dim 22 Mai 2011 - 9:50

Quelques remarques sur ta réponse:

Citation :
Dans un forum, seules les demandes, ou les erreurs font intervenir les membres, parfois quelques discutions sur un sujet. Lorsque cela fonctionne, les interventions s’estompent.
Heu, là, je ne suis pas d'accord, tu oublies les tutos, partages d'experiences, programmes, les developpement en commun (team working), ... qui sont pour moi les point principaux d'un forum.

Quand à moi, je n'ai jamais eu un "bon" niveau en programmation, je me débrouille, j'ai fais quelques petits programmes il y a une quinzaine d'années à la fin de ma vie scolaire (en quick basic, turbo pascal, C++, etc...) mais c'est très vieux et maintenant, je me sert de mes souvenirs pour me faire des macros sous Excel pour mon boulot (qu'est-ce que c'est pratique le VBA pour les applis bureautiques ^^). J'ai découvert ce langage il y a peu au moment où je cherchais à faire de petits programmes pour mon fiston qui aiment beaucoup jouer avec l'ordinateur (CP) et qui aurait besoin d'un petit coup de pouce.

Par contre du coup, je pense être interessant pour le forum, je permet de voir comment un utilisateur "moyen" se débrouille avec ce langage.
Les points forts: Super facile à mettre en oeuvre et très ouverts sur pleins d'applis.
Les points faibles: quelques suptilités à maitriser, j'ai du mal par exemple à ce que les sprites ne s'affichent pas quand je les charge, j'ai eu des erreurs avec les Timers, ...

Beaucoup de réponses sont dans le forum, mais il y a plusieurs années de discution, pas facile de trouver "aisément" la réponse au problème parmi tous les sujets, d'autant plus qu'un problème ancien peut avoir évolué ou être résolu à ce jour... D'où l'énorme interet "d'anciens" comme toi qui connaissent ces problèmes et l'état des résolutions

En plus avec les nouveaux qui arrivent et qui vont nous apprendre à maitriser la 3D, je suis sûr que tu vas apprendre pleins de trucs sympas et avoir de nouvelles idées de programmes

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Panoram'Invaders   Dim 22 Mai 2011 - 13:38

Bonjour,
Par ta réponse, tu confirmes ce que je dis.
Ce sont ceux qui cherchent à comprendre qui interviennent. Donc tu es comme moi, tu intervient pour comprendre et partager ton expérience.

Je retire le reste car finalement le forum est à Jack, et puis cela n’empêchera pas le monde de tourner. Si je pense cela, c'est que ce sont toujours les même qui font marcher ce forum, et lorsque j'ai demandé de l'aide, c'est encore JL35 qui m'a aidé, toujours les mêmes. Dommage!
Revenir en haut Aller en bas
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Panoram'Invaders   Lun 23 Mai 2011 - 7:29

Je pense que la raison principal de cela c'est que vous n'êtes qu'une poignée a suffisamment bien connaitre pour pouvoir répondre. Regarde le problème d'enform avec le If...End_if qui ne s'execute pas à cause du stop.
Perso, je n'ai jamais essayé et je pense que beaucoup de nouveaux sont dans mon cas, vous n'êtes pas nombreux à pouvoir réagir de manière interessante.
Perso, j'aurai pu dire, ça doit être à cause du stop dans le bloc mais bon, ça ne fait pas avancer la problèmatique, enform doit déjà s'en douter et voudrait une solution paliative et ça, je ne connais pas encore pour le moment et ça doit être le cas pour beaucoup de lecteurs du fourms.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Panoram'Invaders   Dim 29 Mai 2011 - 11:20

Bon, on avait un peu quitté le sujet et moi faute de temps, je n'avais pas trop avancé dans mon programme.

Je l'ai mis à jour à la lumière de vos explications et il est mieux (je trouve maintenant).

Par contre, j'ai une problème à partir du niveau 2 que mon petit cerveau attrophié (je fais une imitation d'autoflagélation à la COMOS70 Shocked ) n'arrive pas à comprendre et j'espère que l'un de vos cerveau fertile (là, je fais un peu de lèche pour essayer de vous motiver à réfléchir au problème Very Happy )

Bon, je mets le code et je lance le concours pour voir quel sera le premier qui trouve le problème de sortie de invaders à partir du niveau 2 et qui me trouve une solution...
Code:

REM ************************************************************
REM *                                                          *
REM *  Panoram Invanders Fichier source d origine: Philou029  *
REM *  Modifications: Jean-Charles - Version: 3.0 - 28/05/2011 *
REM *                                                          *
REM ************************************************************
REM *  Touches:                                                *
REM *        - "Les fléches" gauche ou droite: déplacement    *
REM *        - "Esc" pour quitter                              *
REM *        - "CTRL" ou clic gauche pour tirer                *
REM *                                                          *
REM ************************************************************

ERROR_FRENCH

dim a%,touche%,vie%,vsou%,hsou%,soudec%,afs$,live%, aflive%, boucle%, boucle2%, boucle3%, boucle4%, dir%,C_boucle%
dim tirh%,bb%,aleat%,point%,afscore%,invader% ,temp%, temp2%, temp3%, i%, cpt_err%, vitesse%, niveau%, vtest%
dim point$(10),tirdec%(8),tirv%(8),postir%(8), env%(40), vinv%,hinv%, nl%, dech%, tirs%, maxtirs%,err$

label soucoupe,crash, score, gameover,debut,E_boucle,test_touche, err, T_collision, level

Data "ga","me","ov", "er", 150,"mi2", 151, "mi1", 152,"mi1", 153, "mi2", 200, "exp"
Data 300, "sou", 301, "exps"
top 0,0: left 0,0: width 0,600 : height 0,600
sound 500:file_load 500,"shot.wav": sound 501:file_load 501,"02.wav":sound 502:file_load 502,"walk3.wav": sound 503:file_load 503,"walk4.wav":sound 504:file_load 504,"explode.wav"
sound 700:file_load 700,"ufohit.wav": sound 702:file_load 702,"ufo.wav"

SCENE2D 1: top 1,0: left 1,0: width 1,600: height 1,600 :file_load 1,"nuit.bmp":full_space 1
Hide 1
a%=0
for boucle%=0 to 3
  read afs$
  if boucle%=2 then a%=20
  sprite 900+boucle%: SPRITE_hide 900+boucle%:SPRITE_FILE_LOAD 900+boucle%,afs$+".bmp":  SPRITE_POSITION 900+boucle%, 200+boucle%*37+a%,250
next boucle%
for boucle%=0 to 6:  read a%:read afs$: sprite a%: SPRITE_hide a%:SPRITE_FILE_LOAD a%,afs$+".bmp": next boucle%
sprite 302: sprite_hide 302:SPRITE_FILE_LOAD 302,"titre1.bmp": SPRITE_POSITION 302, 50 , 20: sprite_show 302
sprite 303: sprite_hide 303:SPRITE_FILE_LOAD 303,"titre2.bmp": SPRITE_POSITION 303, 225, 20: sprite_show 303
for boucle%=0 to 4: sprite 500+boucle% : SPRITE_FILE_LOAD 500+boucle%,"0.bmp": SPRITE_POSITION 500+boucle%, 250-13*boucle%,100: NEXT boucle%
sprite 505: SPRITE_FILE_LOAD 505,"score.bmp":SPRITE_POSITION 505, 237-120,95 : sprite 506: SPRITE_FILE_LOAD 506,"live.bmp" :SPRITE_POSITION 506, 300,95 :sprite 507: SPRITE_FILE_LOAD 507,"0.bmp" : SPRITE_POSITION 507, 350,100
for boucle%=0 to 9: point$(boucle%)=str$(boucle%)+".bmp":next boucle%
sprite 51: SPRITE_hide 51: SPRITE_FILE_LOAD 51,"mis.bmp" :sprite 52: SPRITE_hide 52: SPRITE_FILE_LOAD 52,"mis.bmp"
sprite 53: SPRITE_hide 53: SPRITE_FILE_LOAD 53,"mis.bmp" : sprite 4: SPRITE_FILE_LOAD 4,"vai.bmp"
for boucle2%=0 to 3: temp%=11*boucle2%: for boucle%=(1+temp%) to (7+temp%): sprite boucle%+4:sprite boucle%+154: next boucle%: image 60+boucle2% : file_load 60+boucle2%,str$(boucle2%+1)+"1.bmp": image 80+boucle2%: file_load 80+boucle2%,str$(boucle2%+1)+"2.bmp": next boucle2%

TIMER 70

debut:
vitesse%=3:niveau%=0: point%=0: live%=5: maxtirs%=3

level:

Hide 1
niveau%=niveau%+1: for boucle4% = 0 to 3:sprite_hide 150+boucle4% :tirdec%(boucle4%+1)=0:next boucle4%
sprite_hide 51: sprite_hide 52: sprite_hide 53: tirdec%(5)=0: tirdec%(6)=0:  tirdec%(7)=0: tirdec%(8)=0: C_boucle%=0
for boucle2%=0 to 3
  temp%=11*boucle2%
  for boucle%=(1+temp%) to (7+temp%)
      env%(boucle%)=1
      SPRITE_IMAGE_LOAD boucle%+4,60+boucle2%
      SPRITE_SHOW boucle%+4
      SPRITE_IMAGE_LOAD boucle%+154, 80+boucle2%
  next boucle%
next boucle2%
if vitesse% < 20 then vitesse%=vitesse%+2
bb%=0: hsou%=700 :vsou%=170: a%=280: invader%=28 :  tirs%=0 : cpt_err%=0
sprite_hide 150: sprite_hide 151: sprite_hide 152 : sprite_hide 153: sprite_hide 900: sprite_hide 901: sprite_hide 902: sprite_hide 903
SPRITE_POSITION 4,a%,500 : dir%=1 : vinv%=200 :hinv%=200
aflive%=10+live% : afs$=str$(aflive%) : SPRITE_FILE_LOAD 507,point$(val(mid$(afs$,2,1))):SPRITE_POSITION 507, 350,100
show 1

TIMER_INTERVAL 70,50:  ON_TIMER 70,E_boucle
ON_KEY_DOWN 0,test_touche
ON_ERROR_GOTO Err
END


E_boucle:
REM controle anti bouclage d'erreur
cpt_err%=cpt_err%+1: aleat%=int(rnd(40)+1): nl%=0: C_boucle%=C_boucle%+1
REM déplacement logique  des invaders
temp%=dir%*vitesse%: hinv%=hinv%+temp%
for boucle%=1 to 4
  Rem Test si un tir touche le vaisseau
  if tirdec%(boucle%)=1
    tirv%(boucle%)=tirv%(boucle%)+5: SPRITE_POSITION 149+boucle%,postir%(boucle%),tirv%(boucle%): if tirv%(boucle%)=530 then SPRITE_Hide 149+boucle% : tirdec%(boucle%)=0
    if postir%(boucle%)> (a%-14)
      if postir%(boucle%)< (a%+17)
        if tirv%(boucle%)>476
            if tirv%(boucle%)<523
            rem caption 0,"boucle% ="+str$(boucle%)+"  :a% ="+str$(a%) + ": postir%(boucle%) > a%-14 & <a%+17 & tirv%(boucle%) > 476 & <523"
            gosub crash
          end_if
        end_if
      end_if
    end_if
  end_if
  Rem test si un vaisseau touche une limite droite ou gauche
  temp2%=(boucle%-1)*11
  for boucle2%= 1 to 7
    if env%(boucle2%+temp2%)<>0
      if nl%=0
        if hinv%=(550-(boucle2%-1)*30) then dir%=-1 : nl%=1: else: if (hinv%+(boucle2%-1)*30)=0 then dir%=1: nl%=1
      end_if
      if (aleat%=(boucle2%+temp2%) and tirdec%(boucle%)=0) then tirv%(boucle%)=vinv%+25*boucle% : postir%(boucle%)=hinv%+(boucle2%-1)*30: tirdec%(boucle%)=1:SPRITE_POSITION 149+boucle%,postir%(boucle%),tirv%(boucle%):Sprite_Show 149+boucle%
    end_if
  next boucle2%
next boucle%
Rem si limite, on descend d'une ligne
if nl%=1 then vinv%=vinv%+25
for boucle2%=1 to 7
  dech%= hinv%+(boucle2%-1)*30: vtest%=0
  REM caption 0,"boucle2% ="+str$(boucle2%)+"  :a% ="+str$(a%) + "  : hinv%="+str$(hinv%)+"  : dir%="+str$(dir%)
  if bb%=0
    if env%(boucle2%) <>0
      SPRITE_POSITION boucle2%+4  , dech%,vinv%  : SPRITE_HIDE boucle2%+154: SPRITE_SHOW boucle2%+4
      vtest%=vinv%:gosub T_collision
    end_if
    if env%(boucle2%+11)<>0
      SPRITE_POSITION boucle2%+15 , dech%,vinv%+25:SPRITE_HIDE boucle2%+165: SPRITE_SHOW boucle2%+15
      vtest%=vinv%+25:gosub T_collision
    end_if
    if env%(boucle2%+22)<>0
      SPRITE_POSITION boucle2%+26 , dech%,vinv%+50:SPRITE_HIDE boucle2%+176: SPRITE_SHOW boucle2%+26
      vtest%=vinv%+50:gosub T_collision
    end_if
    if env%(boucle2%+33)<>0
      SPRITE_POSITION boucle2%+37 , dech%,vinv%+75:SPRITE_HIDE boucle2%+187: SPRITE_SHOW boucle2%+37
      vtest%=vinv%+75:gosub T_collision
    end_if
  else
    if env%(boucle2%) <>0
      SPRITE_POSITION boucle2%+154, dech%,vinv% :  SPRITE_HIDE boucle2%+4  : SPRITE_SHOW boucle2%+154
      vtest%=vinv%:gosub T_collision
    end_if
    if env%(boucle2%+11)<>0
      SPRITE_POSITION boucle2%+165, dech%,vinv%+25:SPRITE_HIDE boucle2%+15 : SPRITE_SHOW boucle2%+165
      vtest%=vinv%+25:gosub T_collision
    end_if
    if env%(boucle2%+22)<>0
      SPRITE_POSITION boucle2%+176, dech%,vinv%+50:SPRITE_HIDE boucle2%+26 : SPRITE_SHOW boucle2%+176
      vtest%=vinv%+50:gosub T_collision
    end_if
    if env%(boucle2%+33)<>0
      SPRITE_POSITION boucle2%+187, dech%,vinv%+75:SPRITE_HIDE boucle2%+37 : SPRITE_SHOW boucle2%+187
      vtest%=vinv%+75:gosub T_collision
    end_if
  end_if
next boucle2%

REM si on arrive en bas, repatir d'en haut
if vtest% > 0 then if vtest% > 500 then vinv%=200

REM Et maintenant on s'occupe de la soucoupe
if (soudec%=1 or C_boucle%=250) then gosub soucoupe

REM Test de collisions des lasers tirés par notre vaisseau
for i%=1 to maxtirs%
if tirdec%(4+i%)=1
  tirv%(4+i%)=tirv%(4+i%)-8 : SPRITE_POSITION 50+i%,postir%(4+i%),tirv%(4+i%)
  temp%=0: temp2%=0
  if (tirv%(4+i%)< (vinv%+90) and tirv%(4+i%)> (vinv%-12))
    if (postir%(4+i%) < (hinv%+219) and postir%(4+i%) > (hinv%-14))
          temp%=int((postir%(4+i%)-hinv%+15)/30)+1: temp2%=int((tirv%(4+i%)-vinv%+2)/25): temp3%=11*temp2%+temp%
          If (temp3% > 0 and temp3% < 41)
          If env%(temp3%)<>0
            point%=point%+50-10*temp2%
            SPRITE_Hide temp3%+4+150*bb%
            play 501
            SPRITE_POSITION 200, hinv%+(temp%-1)*30,vinv%+temp2%*25
            SPRITE_SHOW 200
            wait 25
            env%(temp3%)=0
            SPRITE_HIDE 200
            tirdec%(4+i%)=0
            tirs%=tirs%-1
            SPRITE_HIDE 50+i%
            tirv%(4+i%)=0
            invader%=invader%-1
            gosub score
          End_if
        End_if
        if soudec%=1 then if tirv%(4+i%)>vsou% then if tirv%(4+i%)<vsou%+24 then if (postir%(4+i%) > (hsou%-15) and postir%(4+i%) < (hsou%+16)) then SPRITE_Hide 300:SPRITE_POSITION 301, hsou%,vsou%: sprite_show 301:play 702 : wait 200: soudec%=0 : SPRITE_hide 301: tirdec%(4+i%)=0 :tirs%=tirs%-1: SPRITE_HIDE 50+i% : tirv%(4+i%)=0 : tirs%=tirs%-1 : hsou%=700 : soudec%=0 : point%=point%+300: gosub score
    end_if
  end_if
  if tirv%(4+i%) <=172 then SPRITE_HIDE 50+i% : tirdec%(4+i%)=0: tirs%=tirs%-1
end_if
next i%
REM Test fin de niveau
if invader% < 1 then message "Niveau "+str$(Niveau%)+" terminé": timer_off 70 : off_KEY_DOWN 0 : Off_CLICK 1:goto level

REM animation des invaders
if bb%=0 then play 503: bb%=1 : else : play 502: bb%=0

gosub test_touche
SPRITE_POSITION 4,a%,500

REM contrôle anti bouclage d'erreur réinialisé
cpt_err%=0
return

test_touche:
 touche%=scancode
 if touche%=37 then a%=a%-6
 if touche%=39 then a%=a%+6
 if touche%=27 then goto gameover
 if (touche%=163 or touche%=162 or touche%=1) and tirs% < maxtirs%
    for i%=1 to maxtirs%
      if tirdec%(4+i%)=0 then tirdec%(4+i%)=1: tirv%(4+i%)=500 :play 500: SPRITE_SHOW 50+i%:postir%(4+i%)=a%:tirs%=tirs%+1: exit_for
    next i%
 end_if
 if a% < -30 then a%=-30 :else: if a% > 630 then a%=630
 touche%=0
return

T_collision:
if dech%> (a%-14)
  if dech% < (a%+17)
    if vtest%>476
      if vtest<523
        gosub crash
      end_if
    end_if
  end_if
end_if
return

soucoupe:
  hsou%=hsou%-2
  if hsou%=550 or hsou%=250 then play 700
  if soudec%=1 then SPRITE_POSITION 300,hsou%,vsou%:  sprite_show 300: else: soudec%=1:C_boucle%=0
  if hsou%=-100then SPRITE_hide 300: soudec%=0: hsou%=700
return
 
score:
  afscore%=1000000+point%
  afs$=str$(afscore%)
  for boucle4% = 0 to 4: SPRITE_FILE_LOAD 500+boucle4%,point$(val(mid$(afs$,7-boucle4%,1))): SPRITE_POSITION 500+boucle4%, 250-13*boucle4%,100:next boucle4%
return

crash:
  play 504: live%=live%-1: timer_off 70
  for boucle4%=1 to 3: SPRITE_HIDE 4: wait 100: SPRITE_SHOW 4: wait 100: next boucle4%
  aflive%=10+live% : afs$=str$(aflive%) : SPRITE_FILE_LOAD 507,point$(val(mid$(afs$,2,1))):SPRITE_POSITION 507, 350,100
  for boucle4%=1 to 4:  if tirdec%(boucle4%)=1 then SPRITE_Hide 149+boucle4% : tirdec%(boucle4%)=0 : postir%(boucle4%)=0 : tirv%(boucle4%)=0: next boucle4%
  if live%=0 then goto gameover
  timer_on 70
return

gameover:
  for boucle4% = 1 to 4
    sprite_show 900: sprite_show 901: sprite_show 902: sprite_show 903: wait 200
    if boucle4% < 4 then sprite_hide 900: sprite_hide 901: sprite_hide 902 :sprite_hide 903: wait 200
  next boucle4%
  timer_off 70 : off_KEY_DOWN 0 : Off_CLICK 1
  if message_confirmation_yes_no("Voulez-vous rejouer ?")=1
    sprite_hide 900
    sprite_hide 901
    sprite_hide 902
    sprite_hide 903
    niveau%=0
    goto debut
  end_if
sprite_delete_all
terminate
end

err:
temp%=error_line:temp2%=error_number:err$=error_type$
caption 0, "L'erreur n°"+str$(error_number)+": "+err$+" s'est produite ligne: "+str$(temp%)+"  :temp3%="+str$(temp3%)
if cpt_err%<15 then goto E_boucle: else: goto gameover
end

Bon, je fais mon possible pour vous motiver !! Rolling Eyes
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Panoram'Invaders   

Revenir en haut Aller en bas
 
Panoram'Invaders
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Space invaders
» metal invaders

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