cs_iLow
Messages postés2Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention19 août 2005
-
19 août 2005 à 19:11
cs_iLow
Messages postés2Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention19 août 2005
-
19 août 2005 à 22:00
Je suis actuellement sur un tutorial pour un jeu dénomé "space war 1" mais je rencontre plusieur probleme.
Je vais vous montrer deux codes differents(basé sur le meme jeu) que j'ai ecrit et vous expliquer quelle partie du code me pose probleme et l'effet que celui-ci est censé produire (vu la simplicité du code-je suis débutant et je trouve que cela est assez simple dans l'ensemble-je pense que vous devriez de toute facon comprendre)
1er code et 1er probleme:
'EXPLORER.BAS
'Ecrit par eliot le 18/08/2005
'
'
'Afficher une explosion avec fond sonore sur un background !
nomainwin
'etape1 : mettre en place la fenetre graphique
'donner les dimensions de la fenetre
WindowWidth=400
WindowHeight=430
'la fenetre doit apparaitre au milieu de l'écran
UpperLeftX=Int((DisplayWidth-WindowWidth)/2)
UpperLeftY=Int((DisplayHeight-WindowHeight)/2)
'Ouvrir la fenetre est attandre
open "space war I" for graphics_nsb as #game
#game, "trapclose [quit]"
'etape2 : affichier les sprites et le background dans la fenetre
'toutes les routines qui doivent etre executées
'tous les dixiemes de seconde
[timer_routines]
gosub [control_explo]
gosub [draw]
wait
'etape5 : terminer le programme
[quit]
unloadbmp "bg"
unloadbmp "explo1"
unloadbmp "explo2"
unloadbmp "explo3"
unloadbmp "explo4"
unloadbmp "explo5"
unloadbmp "meteroite"
unloadbmp "blueplanet"
unloadbmp "spider1"
unloadbmp "spider2"
unloadbmp "rouge12"
unloadbmp "redshot"
unloadbmp "alien1"
unloadbmp "alien2"
unloadbmp "alien3"
unloadbmp "bomb"
unloadbmp "bigexplo1"
unloadbmp "bigexplo2"
unloadbmp "bigexplo3"
unloadbmp "bigexplo4"
unloadbmp "bigexplo5"
confirm "es-tu sur de vouloir quitter ?";reponse$
if reponse$ = "no" then wait
close #game
end
'routines
'afficher une explosion s'il n'y en a pas deja
[exploser]
'afficher une explosion s'il n'y en a pas deja
'une en cours
if exploactive = 0 then
#game, "spritexy explo 180 190"
'indiquer maintenant qu'une explosion est en cours
exploactive=1
playwave "explosion.wav",async
end if
return
'controler la durée de l'explosion
[control_explo] if exploactive 1 then explocount explocount + 1
if explocount > 15 then
exploactive=0
explocount=0
#game, "spritexy explo 500 500"
end if
return
'dessiner tous les sprites dans la fenetre
[draw]
#game, "drawsprites";
return
'afficher le tout dans la fenetre
#game, "drawsprites"
wait
'cycler la liste d'explosion
#game, "cyclesprite explo 1"
#game, "cyclesprite bigexplo 1"
#game, "cyclesprite spider 1"
#game, "cyclesprite alien 1"
Probleme encouru : Lorsque j'utilise la fonction "run" (aperçu) j'ai un message d'erreur du style "error bitmap named 500 not found"
_2ieme code et 2ieme probleme :
'EXPLORER.BAS
'Ecrit par eliot le 18/08/2005
'
'
'Afficher une explosion avec fond sonore sur un background !
nomainwin
'etape1 : mettre en place la fenetre graphique
'donner les dimensions de la fenetre
WindowWidth=400
WindowHeight=430
'la fenetre doit apparaitre au milieu de l'écran
UpperLeftX=Int((DisplayWidth-WindowWidth)/2)
UpperLeftY=Int((DisplayHeight-WindowHeight)/2)
'Ouvrir la fenetre est attandre
open "space war I" for graphics_nsb as #game
#game, "trapclose [quit]"
'etape2 : affichier les sprites et le background dans la fenetre
'initialiser toutes les variables
exploactive=0
exlpocount=0
gauche=0
agauche=0
'regler le timer à 100 millisecondes
timer 100, [timer_routines]
'etape4 : controler le clavier
#game, "setfocus"
#game,"when characterInput [control_touche]"
wait
'utiliser les touches numeriques
[control_touche]
k$=inkey$ 'plus simple à ecrire
if k$="9" or k$="6" then rouge12X=rouge12X+5 'aller a gauche
if k$="7" or k$="4" then rouge12X=rouge12X-5 'aller a droite
if k$="9" or k$="8" or k$="7" then rouge12Y=rouge12Y-5 'aller en haut
if k$="5" then rouge12Y=rouge12Y+5 'aller en bas
'le vaisseau ne doit pas depasser les bords
if rouge12X<1 then rouge12X=1
if rouge12Y>350 then rouge12Y=350
if rouge12Y<55 then rouge12Y=55
if rouge12X>330 then rouge12X=330
'faire avancer le vaisseau
print #game, "spritexy rouge12 ";rouge12X;" ";rouge12Y
'afficher le tout dans la fenetre
#game, "drawsprites"
wait
'toutes les routines qui doivent etre executées
'tous les dixiemes de seconde
[timer_routines]
gosub [go_alien]
gosub [go_meteroite]
gosub [go_blueplanet]
gosub [go_spider]
gosub [control_explo]
gosub [draw]
wait
'etape5 : terminer le programme
[quit]
unloadbmp "bg"
unloadbmp "explo1"
unloadbmp "explo2"
unloadbmp "explo3"
unloadbmp "explo4"
unloadbmp "explo5"
unloadbmp "meteroite"
unloadbmp "blueplanet"
unloadbmp "spider1"
unloadbmp "spider2"
unloadbmp "rouge12"
unloadbmp "redshot"
unloadbmp "alien1"
unloadbmp "alien2"
unloadbmp "alien3"
unloadbmp "bomb"
unloadbmp "bigexplo1"
unloadbmp "bigexplo2"
unloadbmp "bigexplo3"
unloadbmp "bigexplo4"
unloadbmp "bigexplo5"
confirm "es-tu sur de vouloir quitter ?";reponse$
if reponse$ = "no" then wait
close #game
end
'ROUTINES
[go_alien]
'D'abord on verifie la position de la meteorite
#game, "spritexy? alien alienX alienY"
'si l'alien deborde de l'un des coté
if alienX > 450 or alienY > 480 or alienX < 0 or alienY < 0 then
alienY=int(rnd(0)*100)+1
'si 'alien vient de la direction gauche>droite
'repartir en direction droite>gauche
if agauche = 0 then
alienX=0
agauche=1
#game, "spritemovexy alien 5 4"
'si c'est l'inverse
else
alienX=450
agauche=0
#game, "spritemovexy alien -5 4"
end if
#game, "spritexy alien ";alienX;" ";alienY
end if
return
[go_meteroite]
'D'abord on verifie la position de la meteorite
#game, "spritexy? meteroite metX metY"
'si la meteorite deborde de n'importe quel coté
if metX > 450 or metY > 480 or metX < 0 or metY < 0 then
metY=int(rnd(0)*400)+1
'si la meteorite vient de la direction gauche>droite la faire
'repartir dans une direction droite>gauche
if gauche = 0 then
metX=450
gauche=1
#game, "spritemovexy meteroite -2 1"
'si c'est l'inverse
else
gauche=0
metX=0
#game, "spritemovexy meteroite 2 1"
end if
#game, "spritexy meteroite ";metX;" ";metY
end if
return
[go_blueplanet]
'D'abord on verifie la position de la planete
#game, "spritexy? blueplanet bpX bpY"
'si la planete depasse le bord inferieur de la fenetre
'la replacer en haut 50pixels plus a droite
#game, "spritexy? blueplanet bpX bpY"
if spiderY>400 then
bpX=50
bpY=-50
#game, "spritexy blueplanet ";bpX;" ";bpY
end if
bpY=bpY+4
#game, "spritexy blueplanet ";bpX;" ";bpY
return
'faire avancer l'araignée
[go_spider]
#game, "spritexy? spider spiderX spiderY"
if spiderY>400 then
spiderX=int(rnd(0)*350)+1
spiderY=0
#game, "spritexy spider ";spiderX;" ";spiderY
end if
spiderY=spiderY+5
#game, "spritexy spider ";spiderX;" ";spiderY
return
'controler la durée de l'explosion
[control_explo] if exploactive 1 then explocount explocount + 1
if explocount > 15 then
exploactive=0
explocount=0
#game, "spritexy explo 500 500"
end if
return
'dessiner tous les sprites dans la fenetre
[draw]
#game, "drawsprites";
return
'afficher le tout dans la fenetre
#game, "drawsprites"
wait
La partie qui me pose probleme :
'etape4 : controler le clavier
#game, "setfocus"
#game,"when characterInput [control_touche]"
wait
'utiliser les touches numeriques
[control_touche]
k$=inkey$ 'plus simple à ecrire
if k$="9" or k$="6" then rouge12X=rouge12X+5 'aller a gauche
if k$="7" or k$="4" then rouge12X=rouge12X-5 'aller a droite
if k$="9" or k$="8" or k$="7" then rouge12Y=rouge12Y-5 'aller en haut
if k$="5" then rouge12Y=rouge12Y+5 'aller en bas
'le vaisseau ne doit pas depasser les bords
if rouge12X<1 then rouge12X=1
if rouge12Y>350 then rouge12Y=350
if rouge12Y<55 then rouge12Y=55
if rouge12X>330 then rouge12X=330
'faire avancer le vaisseau
print #game, "spritexy rouge12 ";rouge12X;" ";rouge12Y
Probleme encouru : Le vaisseau est censé pouvoir ce déplacer grace au touche "4,5,6,7,8,9" du clavier numérique mais lorsque je l'ai utilise,le vaisseau se retrouve dans le coin superieur gauche de l'écran.
Voila je pense avoir fait le tour de "mes problemes" et je vous remercie de m'éclrairer sur mes erreurs.
Merci d'avoir eu le courage de lire jusqu'au bout :D
Bien à vous.
ps : Si vous pouviez critiquer de maniere constructive la maniere dont est écrit le code...je vous en remercierai :)
ps2:Oui c'est du liberty basic ( faut bien débuter :p )
cs_aKheNathOn
Messages postés575Date d'inscriptiondimanche 23 décembre 2001StatutMembreDernière intervention23 octobre 2012 19 août 2005 à 20:26
Perso je connais pas ce language, même s'il est proche de VB (basic) les fonctions ne le disent rien.
Essayes le Qbasic en mode console si windows c'est un peu trop complexe, mais sinon je te conséillerais comme même VB pour débuter, t'as plein d'exemples ICI.
(Regardes PureBasic c'est dans le même style que ton language)
cs_iLow
Messages postés2Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention19 août 2005 19 août 2005 à 22:00
Oui je sais que débuter en VB est le moyen le plus connu mais pour des raisons personnelles ( vacances,accecibilitées aux pc ) ce language est l'un des seuls que je peux utiliser et exlpoiter actuellement ( pas possible de télécharger sur ce pc et acheter VB6 ne me dit trop rien :p ) donc je me contente de ce que j'ai jusqu'a présent mais je pense que la logique du LB est proche du VB donc quite à attendre d'avoir VB6 autant utiliser ce temps à autres choses.
J'attends toujours la réponse à mon probleme donc si quelqu'un pouvait m'aider :)
N'hésitez pas à commenter mon code,la maniere dont je l'ai écrit etc...
ps: je ne me dis pas auteur de ce code mais la maniere dont il est présenté m'est propre