here is a little Game
Rem Soufian Hunter V1.0
rem ---------------------------------------------------------
rem pensé par chiwawa
rem sénario par chiwawa
rem codé par chiwawa
rem modélisation et art visuel par chiwawa
rem commentaire par chiwawa
rem nouriture ...nesséssaire durant la création ... payé par chiwawa
rem -----------------------------------------------------------
rem ceci sont les instruction et autres conneries....
start:
cls
Print "----------------------"
print "Upkey=Foward"
print "Downkey=Backward"
print "LeftKey=Turn left"
print "Rightkey=Turn right"
print "SPacebar=Shoot"
print "a&z=Change camera angle"
Print "-------------------------"
Print "Red and Green things in left top corner are the Power and the Angle of the Bullet"
print "----------------------------------------------------------------------------"
while inkey$()=""
endwhile
rem setting de camera ...et écran
autocam off
sync on
sync rate 30
set camera range 1,40000
set display mode 800,600,32
draw to front
randomize timer()
rem création des textures...
INK rgb(20,130,25),1
box 0,0,128,128
INK rgb(170,100,15),1
box 128,0,256,128
get image 1,0,0,256,256
cls 0
INK rgb(0,0,0),1
box 0,0,256,128
INK rgb(100,0,0),1
set text size 100
set text to bold
text 10,10,"Soufian"
get image 2,0,0,256,128
cls 0
create bitmap 1,257,257
set current bitmap 1
INK rgb(129,80,0),1
box 0,0,256,256
get image 3,0,0,256,256
set current bitmap 0
cls 0
INK rgb(255,192,192),1
box 0,0,256,256
INK rgb(0,100,0),1
box 100,100,120,120
box 130,100,150,120
box 80,140,170,150
get image 4,0,0,256,256
cls 0
rem création de la matrice
make matrix 1,40000,40000,70,70
prepare matrix texture 1,1,2,2
i#=1
for x=1 to 69
for y=1 to 69
if i#/2.0=int(i#/2) then t=2 else t=1
set matrix tile 1,x,y,T
i#=i#+1
next y
next x
update matrix 1
rem l'object au dessus de lenemi...le text écrit:"soufian"en gros...
make object plain 1,700,350
texture object 1,2
rem le noir sur lobject est rendu transparent....
set object 1,1,0,0
rem ceci est soufian
make object cone 2,500
texture object 2,3
make object sphere 3,300
make mesh from object 1,3
delete object 3
add limb 2,1,1
texture limb 2,1,4
rem ces 2 ligne..sont la pcq..la face de soufian étais a lenvers..jaurais pu faire autrement..
rem mais c'est moins long dememe...
rotate object 2,0,180,0
fix object pivot 2
rem ceci ..est NOUS ..notre personnage..
make object cone 3,500
make object sphere 4,300
make mesh from object 2,4
delete object 4
add limb 3,1,2
rem je position NOUS...au dessus du plancher....
position object 3,object position x(3),object position y(3)+300,object position z(3)
rem je positionne Soufian au dessus du plancher..
position object 2,5000,object position y(2)+300,5000
rem ceci est le projectile...
rem premierement je prend un petit cone ..pour gérer les déplacement et la rotation sur les Y
make object cone 4,1
rem et je prend un dieme cone..celui kon voit ...sur notre tete..pour la rotation sur X et Z..mais je ne rotate pas sur Z..
make object cone 5,100
rem icit..je glue..lobject ki rorate sur les X ..celui aparant..sur le petit ki gere les déplacemetn et les rotation Y
glue object to limb 5,4,0
rem icit je glue le projectile complet..sur notre tete..pour ne pas avoir a gérer les déplacement..
glue object to limb 4,3,0
rem ici je place ..le projectile ..exactement sur notre tete..
position object 4,0,object position y(3)-100,0
rem initialisation de la variable projectile..pour savoir kelle est le # de lobject..ki est le projectile..
projectile=4
rem icit c'est la création ..de la barre de force..de lencement..dans le coin gauche en haut..
cls 0
create bitmap 2,101,31
set current bitmap 2
INK rgb(200,0,0),1
box 0,0,100,5
box 0,0,5,30
box 0,25,100,30
box 96,0,100,30
INK rgb(0,200,0),1
box 15-10,6,15+10,24
get image 5,0,0,100,30
set current bitmap 0
cls 0
sprite 1,0,0,5
rem icit ..création de la barre de ..l'agle du projectile..
cls 0
create bitmap 3,101,31
set current bitmap 3
INK rgb(200,0,0),1
box 0,0,100,5
box 0,0,5,30
box 0,25,100,30
box 65,0,100,30
INK rgb(0,200,0),1
box 15-10,6,15+10,24
get image 6,0,0,100,30
set current bitmap 0
cls 0
sprite 2,0,50,6
rem ...Vinit est la Vitesse initiale.. en Km/h ...kan on lance le projectile..ke lon peu changer avec la barre...
Vinit#=44
rem ces 2 variables..sont pour les barre de ...force et d'angle..
oldmx#=15
oldmx2#=15
rem Axp est l'angle de lancement..du projectile...ke lon change avec la barre
axp#=30
rem ############################################# MAIN LOOP #################################################
do
rem gestion du temp...
oldtime#=timer()
rem ..allez au Sub ...AI..
gosub AI
rem aller au sub..pour mettre le texte soufian au dessus ..de lenemi..
gosub Indicateur
rem aller au sub..pour la gestioon de la barre de force(vitesse) et d'angle..de lancement..
gosub Force_Angle
rem ..icit c'est les input...
if upkey()=1 then move object 3,30
if leftkey()=1 then yrotate object 3,wrapvalue(object angle y(3)-1)
if rightkey()=1 then yrotate object 3,wrapvalue(object angle y(3)+1)
if downkey()=1 then move object 3,-30
rem icit...si la space bar est pressé et ke aucun projectile..nest deja en mouvement..on va au sub de ..lancement..
rem et on entre 1 dans "lance" pour dire kil y a un projectile...en mouvement...
if spacekey()=1 and lance=0 then gosub projectile:lance=1
rem ..si il y a un projectile..dactivé..on le bouge..correctement...
if lance=1 then gosub gerer_projectile
rem rotation de la vue...haut et bas..
if inkey$()="a" then Axc#=wrapvalue(axc#+5)
if inkey$()="z" then Axc#=wrapvalue(axc#-5)
rem positionnement de la caméra...
position camera object position x(3),object position y(3)+250,object position z(3)
yrotate camera object angle y(3)
xrotate camera Axc#
move camera -800
rem ...écrire combien de fois..vou avez atteint soufian..
set cursor 0,100
print "Vous Avez toucher Soufian ",Touch," fois"
print "y=",yp#
rem rafraichissement de lécran
sync
loop
rem ########################################### SUB ###########################################################
rem **************** initialisation du projectile..**************************************************
projectile:
rem on prend le temp...de début du lancement..pour la formule..de la distance parcourue..
debut#=oldtime#
rem on détache le projectile..
unglue object projectile
rem lon prend ..la position de notre personnage...et l'angle Y ..pour le lencement..du projectile..
xp1#=object position x(3)
yp1#=object position y(3)+100
zp1#=object position z(3)
ayp#=object angle y(3)
rem vitesse en rotations/minute du projectile..
Vrotat#=600
rem vitesse transformé en m/s et ensuite ...x100 ..pour ke ce soit converti en ..DB...
rem je prend en considération ke 1cm=1 unité de DB
rem les 2 ligne de code plus bas..le 10.0/36.0 sont pour les tranformation ..de km en m et des minute en seconde....
rem car au début..nous avons une vitesse en KM/h
rem Vinit est la vitesse..total..de départ..Vxzinit..est la vitesse...horizontale..
VXZinit#=Vinit#*cos(axp#)*(10.0/36.0)*100
rem Vyinit est la vitesse...verticale..de lancement...
VYinit#=Vinit#*sin(axp#)*(10.0/36.0)*100
rem rotater le projectile...dans le meme send.ke notre..personnage..
rotate object projectile,0,ayp#,0
rotate object projectile+1,0,0,0
rem initialisation de la variable..ki donne langle..de rotation sur les X du projectile...c'est purement..pour la beauté..cette rotation..
axpr#=0
return
rem ********************************************* Gestion du projectile *****************************************
gerer_projectile:
rem ok...nous arrivons a la formule..principale..de notre projectile.
rem ...la formule ke jutilise..est la formule:
rem Distance_Parcourue=Vitesse_Initiale*Temp_Écoulé+0.5*Accélération*(Temp_Écoulé)^2
rem je ne ferai pas de démarche pour ..vou montrer..comment obtenir cette formule..ce serais beaucoup trop compliké sans crayon..ni papier..
rem ...tout le monde sais..ke en chute libre sur la TERRE l'accélération est de 9.8m/s^2 ..mais je le change en CM (1cm=1 unité DB) ..donc 980..
rem cette formule ..nous permet..de trouver...la distance parcouru sur les Y ...a partir du point de lancement..étant donné kil y a une..attraction terrestre..
Sy#=(VYinit#*((oldtime#/1000.0)-(debut#/1000.0)))+(0.5*(-1*980.0)*((oldtime#/1000.0)-(debut#/1000.0))^2.0)
rem ..ok...tout le monde sais ke dans une chute libre..la vitesse horizontale..reste la meme tout le trajet..(Dans un monde sans friction,possible en DB )
rem alors je calcule..le temp écoulé depuis le début..et je le multiplie par la vitesse ki nous donne une distance..en unité DB..
Sxz#=((oldtime#/1000.0)-(debut#/1000))*Vxzinit#
rem ..application de la distance horizontale...aux X
xp#=newxvalue(xp1#,ayp#,Sxz#)
rem application de la distance Verticale...aux Y...
yp#=yp1#+Sy#
rem ..application de la distance horizontale...aux Z
zp#=newzvalue(zp1#,ayp#,Sxz#)
rem ...icit..c'est simplement la..rotation de lobject...la vitesse de rotation multiplié par le temp...ki nous donne langle..
axpr#=wrapvalue(axpr#+(Vrotat#/60)*((oldtime#/1000.0)-(debut#/1000.0)))
rem Positionnement..et rotation du projectile..
rotate object projectile+1,axpr#,0,0
position object projectile,xp#,yp#,zp#
rem Si le projectile Touche le Sol...
if yp#(object position y(2)-300.0))
rem ok..c'est ici les triangles semblables.....bon ..en gros je prend la distance en les 2 object..le théhorème de PYTHAGORE..
rem rem apres je la compare a la distace...entre.. bord..du cone...et son milieu
rem pour trouver cette distance..on a besion de 2 triangle...semblable..le complet..est ..la demi du cone...je sais sa hauteur...je lai mesuré ..en le fesant renter dans le plancher..
rem ...et apres..je prend un 2ieme triangle RECTANGLE avec le meme angle...et je remplace .. le coté du milieu mar la distance..entre le haut du done..et la hauteur du projectile...
rem jsais pas si vou comprenez.....si vou ne comprenez pas..jvou ferai un DESSIN..un vrai en paint..pour vou lexpliker..
if (sqrt((object position x(projectile)-object position x(2))^2+(object position z(projectile)-object position z(2))^2))0 and Dz#>=0 then A_Project_Cible#=180.0+atan(Dz#/Dx#)
if Dx#=0 then A_Project_Cible#=360.0-atan(abs(Dz#/Dx#))
if Dx#0 and Dz#0 then A_Project_Cible#=270.0
if Dx#=0 and Dz#10000 then VitessEnemi=7
if Sqrt(cible_moix#^2+cible_moiz^2)15 and mousey()15 and mousey()50 and mouseclick()=1
rem axp# est langle de tir....
axp#=wrapvalue((mousex()+15))
set current bitmap 3
INK rgb(0,0,0),1
box (oldmx2#-10),6,(oldmx2#+10),24
oldmx2#=mousex()
INK rgb(0,200,0),1
box mousex()-10,6,mousex()+10,24
get image 6,0,0,100,30
set current bitmap 0
endif
return
rem *********************** Indicateur de Soufian**********
Indicateur:
rem icit on affiche Soufian au dessus de Soufian...
position object 1,object position x(2),object position y(2)+500,object position Z(2)
Cible_Moix#=object position x(3)-object position x(2)
Cible_Moiz#=object position z(3)-object position z(2)
rotate object 1,0,wrapvalue(ATANFULL(Cible_Moix#,Cible_Moiz#)+180),0
return