datas toujours ici : http://pb.ldvmultimedia.com/PB_vs_THE_WORLD_by_Ar-S.zip
Code : Tout sélectionner
;*****************************************************************************
;*
;* Birthday Punch : PureBasic 15 years of happiness
;* PureBasic 5.31 x86
;* 192 lines of 80 chars of code or data as you want
;*
;* Name : PB vs THE WORLD
;* Author : Ar-S - Music made with Music Maker Jam
;* Date : Nov/Oct 2015
;* Notes : Dedicated To my mom Apr 1940 - Sept 2015
;*
MessageRequester("Info","Use Arrows to move, space to shoot and left ctrl to use shield"+Chr(10)+"Left Mouse Button to restart"+Chr(10)+Chr(10)+"Fleches pour se diriger, ctrl : bouclier, Espace:Feu, Bouton de gauche souris pour recommencer",#PB_MessageRequester_Ok) ; LIGNE NON PRIS EN COMPTE
UseOGGSoundDecoder()
Macro m:Macro:EndMacro
m dec:decoder():EndMacro
m e:examine:EndMacro
m s(n,l,h,x,y):EndMacro
m _s:Structure:EndMacro
InitSprite():InitKeyboard():InitMouse():UseOGGSound#dec:UsePNGImage#dec
InitSound()
_S BB
x.i
y.i
ID.b
End#_S
_S SP
x.i
y.i
n.i
LL.i
HH.i
v.b
r.f
End#_S
_S St
x.i
y.i
v.b
n.b
End#_S
_S SN
D.i
F.i
End#_S
M R:random:EndMacro
M P(S)
PlaySound(S,#PB_Sound_MultiChannel,70)
EndMacro
M PP(S)
PlaySound(S,#PB_Sound_Loop,80)
EndMacro
m _k(k)
KeyboardPushed(k)
EndMacro
M G(z):Global.Z:EndMacro
M CS(n,x,y,l,h)
ClipSprite(n,x,y,l,h)
sp(n)\LL=l/2
sp(n)\HH=h/2
ZoomSprite(n,l/2,h/2)
v(n)
EndMacro
m v(n)
sp(n)\v = R(6,2)
EndMacro
m SX(n)
sp(n)\x
EndMacro
m SY(n)
sp(n)\y
EndMacro
M Redo(n)
SX(n)=820
SY(n) = R(500,100)
v(n)
EndMacro
m EX(n)
St(n)\x
EndMacro
m EY(n)
St(n)\y
EndMacro
m EN(Z)
St(Z)\n
EndMacro
m EV(n)
St(n)\v
EndMacro
m _r(n,d)
SpriteQuality(1)
RotateSprite(n,d,#PB_Absolute)
EndMacro
Global NewList BB.BB()
Global F=LoadFont(16, "Arial", R(80,50))
Global F1=LoadFont(17, "Arial", 24)
Global.b feu,NF,ENNEMI,VIZ,ShotOn.b=#True
Global.i x,y,xi,T
Global SCORE,LIFE
Global Dim sp.SP(16)
Global Dim st.st(100)
Global TimeElapset=ElapsedMilliseconds()
LoadSound(20,"01.ogg") ; laser
LoadSound(21,"02.ogg") ; impact
LoadSound(22,"03.ogg") ; shield
LoadSound(23,"04.ogg") ; shield
SCORE = 0
LIFe = 3
x= 150
y = 350
NF = 9 ; numero du sprite PB en cours
xi = 2500
t1$ = "PURE BASIC VS THE WORLD !"
t2$ = "HAPPY PURE BIRTHDAY"
; Positionnement des étoiles dans tableau
For i = 0 To 100
EX(i) = R(820)
EY(i) = R(600)
Next
For i = 0 To 20
EN(i) = 13
EV(i) = 3
Next
For i = 21 To 60
EN(i) = 14
EV(i) = 6
Next
For i = 61 To 100
EN(i) = 15
EV(i) = 10
Next
OpenScreen(800,600,32,"", #PB_Screen_SmartSynchronization)
LoadSprite(0,"im.png",8|4)
For i = 1 To 15
CopySprite(0,i,8|4)
Next
CS(1,7,142,232,133) ; ship D
CS(2,289,135,234,139) ; SHIELD
CS(3,0,1,129,128) ; Logo PYTHON
CS(4,129,1,128,128) ; Logo RUBY
CS(5,257,0,118,130) ; Logo C#
CS(6,379,0,101,131) ; Logo JAVA
CS(7,478,1,115,130) ; Logo JavaScript
CS(8,595,8,250,126) ; Logo VB
CS(9,533,213,53,62) ; PB LOGO
ClipSprite(10,675,138,140,136) ; PLanete
CS(11,606,231,25,43) ; Big reac
CS(12,631,231,25,43) ; Smal reac
CS(13,840,266,8,8) ; big etoile
CS(14,833,270,6,5) ; med etoile
CS(15,824,271,3,3) ; sm etoile
FreeSprite(0)
txt.s = t1$
xtx = r(500,100)
ColT = RGB(R(255),R(255),R(255))
sx(10) = 1500
sy(10) = r(460,140)
PS = 1
Repeat
; Chrono
StartTime.i = ElapsedMilliseconds()
ClearScreen(0)
E#Mouse()
E#Keyboard()
; TEMPORISATION DES TIRS --------------
If ElapsedMilliseconds()-TimeElapset>=350
ShotOn=#True
TimeElapset=ElapsedMilliseconds()
EndIf
; -------------------------------------
If GO = 0
If PS = 1
PP(23)
ps+1
EndIf
For i = 0 To 100
DisplayTransparentSprite(Random(15,13), EX(i), EY(i),255)
EX(i) - EV(i)
If EX(i) < 0
EX(i) = 805 : ey(i) = R(600)
EndIf
Next
DisplayTransparentSprite(10, SX(10), SY(10),255) ; Planete
; GESTION DU SCROLL TEXT
StartDrawing(ScreenOutput())
DrawingFont(f)
DrawingMode(#PB_2DDrawing_Transparent )
If xi < -2500
NT+1
If NT<2
txt.s = t1$
ElseIf NT = 2
txt.s = t2$
Else
NT=0
EndIf
xi = 2500
xtx = r(500,100)
ColT = RGB(R(255),R(255),R(255))
EndIf
DrawText(xi, xtx,txt.s ,ColT, $0)
StopDrawing()
; ////
Xi-6
; Position Vaisseau et Vaisseau shield
sx(2) = sx(1)
sy(2) = sy(1)
; Affichage des logos ennemis
For S = 3 To 8
DisplayTransparentSprite(S, SX(S), SY(S),255)
Next
;-----------------------------------------
; DIRECTION VAISSEAU avec diagonales
;-----------------------------------------
If _K(#PB_Key_Up)
y-5
ViZ = 1
If _K(#PB_Key_Left)
x-5
ViZ = 0
ElseIf _K(#PB_Key_Right)
X+5
ViZ = 1
EndIf
ElseIf _K(#PB_Key_Down)
y+5
ViZ = 1
If _K(#PB_Key_Left)
x-5
ViZ = 0
ElseIf _K(#PB_Key_Right)
X+5
ViZ = 1
EndIf
ElseIf _K(#PB_Key_Left)
x-5
VIZ = 0
ElseIf _K(#PB_Key_Right)
SX(1)=x
x+5
ViZ = 1
EndIf
If y < 25
y=25
ElseIf y > 530
y = 530
EndIf
If x < 0
x = 0
ElseIf x > 700
x = 700
EndIf
; Vaisseau
SX(1)=x
Sy(1)=y
; Reacteurs
Sx(11)=x-10
Sy(11)=y+23
Sx(12)=Sx(11)
Sy(12)=Sy(11)
;-----------------------------------------
;-----------------------------------------
; TIRS si ESPACE
;-----------------------------------------
If _k(#PB_Key_Space) And ShotOn
AddElement(BB())
BB()\X=SX(1)+120
BB()\Y=SY(1)+15
BB()\ID = 9 ; logo PBbullet
Debug "NbrBalle : " + ListSize(BB())
ShotOn=#False
;feu = 2
P(20)
EndIf
;-----------------------------------------
; BOUCLIER si CTRL
;-----------------------------------------
If _K(#PB_Key_LeftControl)
shield = 1
P(22)
Else
shield = 0
EndIf
If shield = 0
ship = 1
Else
ship = 2
EndIf
;-----------------------------------------
; AFFICHAGE
;-----------------------------------------
; Sprite vaiseau + reacteurs
DisplayTransparentSprite(ship, x, y, 255)
RE = R(12,11)
DisplayTransparentSprite(RE, sx(RE), Sy(RE),200)
; Tirs logos PB et Collisions
; If feu = 2
ForEach BB()
BB()\X + 6
DisplayTransparentSprite(BB()\ID, BB()\X, BB()\Y,255)
Next
; TESTS DES COLLISIONS AVEC LOGO PB
For ENNEMI = 3 To 8
ForEach BB()
If SpriteCollision(9, BB()\X, BB()\Y, ENNEMI, sx(ENNEMI), sy(ENNEMI) ) <> 0
T = ENNEMI
SCORE+1
redo(ENNEMI)
If ListSize(BB()) > 0
DeleteElement (BB())
EndIf
; feu = 0
P(21)
EndIf
Next
Next
If ListSize(BB()) > 0 And BB()\X > 810
DeleteElement (BB()) ;sx(9) = x+130
EndIf
; EndIf
; DEFILEMENT DES ENNEMIS
For i = 3 To 8
SX(i) - sp(i)\v
SpriteQuality(1)
RotateSprite(i, ROT.f,#PB_Absolute)
ROT.f-0.5
If SX(i)< -100
redo(i)
EndIf
Next
; TESTS DES COLLISIONS AVEC ship
For COL = 3 To 8
If SpriteCollision(1, sx(1), sy(1), COL, sx(col), sy(col) ) <> 0
If shield = 1
score-1
If Score <= 0
Score = 0
EndIf
ElseIf shield = 0
life-1
If Life <= 0
GO = 1
EndIf
EndIf
P(21)
redo(col)
EndIf
Next
;Affichage texte
StartDrawing(ScreenOutput())
DrawText(0, 0, "SCORE : " + Str(SCORE),$0000FF, $0)
DrawText(150, 0, "LIFE : " + Str(LIFE),$0000FF, $0)
DrawText(650, 0, "ESCAPE to EXIT",$ffffff, $0)
StopDrawing()
SX(10) -1
If sx(10) < -160
sx(10) = 1500
sy(10) = r(460,140)
EndIf
ElseIf GO = 1 ; Si GAME OVER
StopSound(23)
PS = 0
;Affichage Texte
StartDrawing(ScreenOutput())
DrawingFont(f)
TG$ = "GAME OVER "
DrawText( R(400,398) - TextWidth(TG$)/2 , R(280,278), tg$, $FFFFFF, $0)
DrawingFont(f1)
DrawText(R(250,248), R(510,508), "Press LMB to restart", $FFFFFF, $0)
DrawText(R(290,288), R(120,118), "SCORE : "+Str(score), $FFFFFF, $0)
StopDrawing()
If MouseButton(#PB_MouseButton_Left)
score = 0
Life = 3
x = 5 : sx(1) = x
PS = 1
GO=0
EndIf
EndIf
FlipBuffers()
deltatime = (ElapsedMilliseconds() - StartTime) / 1000
Until KeyboardPushed(#PB_Key_Escape)