File: tiroriente1a.pb - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

001: ; philippe - Toulouse - 2013 - purebasic 4.61 x86
002: ; sprite orient� : d'un point A ï¿½ un point B 
003: 
004: If InitMouse ()=0 Or InitKeyboard ()=0 Or InitSprite ()=0  Or InitSprite3D ()=0 
005:      MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
006:      End
007: EndIf
008: If InitSound()=0 Or InitMovie()=0
009:   MessageRequester("Error", "Can't open DirectX 7 Or Sound Card is not present", 0)
010:   End
011: EndIf
012: 
013: UsePNGImageDecoder()
014: 
015: ; ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
016: ;LoadFont ( 0 , "Comic Sans Ms" ,16, #PB_Font_Bold)
017: ;LoadFont ( 1 , "Comic Sans Ms" ,30, #PB_Font_Bold)
018: Enumeration ; ici, on donne un petit nom ï¿½ nos sprites( non, chuis pas un num�ro !):
019: 
020: #raquette
021: #tird
022:        
023: EndEnumeration
024: 
025: If OpenWindow ( 0 , 0, 0, 1024, 768, "tir orient� 2" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar| #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_ScreenCentered ) 
026:  OpenWindowedScreen ( WindowID ( 0 ), 0, 0, 1024, 768, 0, 1, 1) ; un ecran graphique dans la fen�tre.
027: 
028:   SetWindowColor(0, RGB (236,216,234))  
029: EndIf
030: KeyboardMode(#PB_Keyboard_International)
031: 
032:  CreateSprite ( #raquette , 64, 16, 0 ) 
033:  StartDrawing ( SpriteOutput ( #raquette )) ;- image pour la raquette
034:   BackColor ( RGB (0,0,0))
035:   Box (0,0, 64, 16, RGB (255, 255, 255))
036:  StopDrawing ()
037:  
038:  CreateSprite ( #tird , 32, 32, 0 ) 
039:  StartDrawing ( SpriteOutput ( #tird )) ;- image pour le tir
040:   BackColor ( RGB (0,0,0))
041:   Circle(16, 16, 16 , RGB (255, 0, 0)) 
042:  StopDrawing () 
043:  
044: Structure objet ;- variables pour les clones (liste chain�es).
045: 
046: objetetat.w
047: 
048: objetx.f 
049: objety.f 
050: objetxs.f 
051: objetys.f 
052: objetangle.f
053: 
054: objetspeed.w
055: 
056: EndStructure
057: Global NewList trait.objet() ; -> #raquette 
058: Global NewList tir.objet() ; -> #tird  
059: 
060: 
061: Global etape.b, tempoA.b, nbrtir.w
062: 
063: 
064: Procedure.f GetAngle(gx,gy, tx,ty) ; g comme go( d�part de l'action) et t comme target( l'objet cible ï¿½ toucher). 
065:   a.f = tx-gx
066:   b.f = ty-gy
067:   c.f = Sqr(a*a+b*b) 
068:   angle.f = -ACos(a/c)*57.29577 
069: 
070:   If ty < gy : angle=360-angle : EndIf 
071:   If ty > gy : angle=360+angle : EndIf
072: 
073:   ProcedureReturn angle+90 
074: EndProcedure 
075: 
076: ; ******************************************************************************************************
077: Repeat ; Boucle principale
078: ; ******************************************************************************************************
079:  Event= WindowEvent ()
080:  Start3D() ; on place cette commande d�s le d�but de la boucle principale.
081: 
082:  ExamineMouse()
083:  ExamineKeyboard ()
084:  
085: If etape=0 ;- fabrication de la raquette
086:   LastElement(trait())
087:   AddElement(trait())
088:   trait()\objetetat=1
089:   trait()\objetx=512
090:   trait()\objety=640 
091: 
092:   etape=1
093: EndIf
094: 
095: If etape=1 
096:   
097:   ForEach trait()
098:     If trait()\objetetat=1;- raquette
099: 
100:       DisplayTransparentSprite ( #raquette , trait()\objetx, trait()\objety)
101:       
102:       If KeyboardPushed ( #PB_Key_Up ) And trait()\objety>10:trait()\objety-5:EndIf ; haut. 
103:       If KeyboardPushed ( #PB_Key_Down ) And trait()\objety<732:trait()\objety+5:EndIf ; bas.     
104: 
105:       If KeyboardPushed ( #PB_Key_Right ) And trait()\objetx<932:trait()\objetx+5:EndIf ; droite.   
106:       If KeyboardPushed ( #PB_Key_Left ) And trait()\objetx>0:trait()\objetx-5:EndIf ; gauche.        
107:     EndIf     
108:   Next  
109: 
110: 
111: 
112: ;- fabrication tir *************
113:   If KeyboardPushed(#PB_Key_X)=0 And tempoA=2:tempoA=0:EndIf
114:   If KeyboardPushed(#PB_Key_X) And tempoA=0:tempoA=1:EndIf
115:   If tempoA=1:tempoA=2 
116:       
117:     LastElement(tir())
118:     AddElement(tir())
119:     tir()\objetetat=1
120:     tir()\objetx=512 
121:     tir()\objety=384    
122:     tir()\objetspeed=16 ;- vitesse des boulettes
123: 
124:     ForEach trait()
125:       If trait()\objetetat=1;- raquette( ici la cible, car nous avons besoin de connaitre ses coordonn�es X et Y)
126:         ; pense b�te: GetAngle( bouletteX,bouletteY, cibleX,cibleY)
127:         
128:         tir()\objetangle = GetAngle(tir()\objetx,tir()\objety, trait()\objetx+16,trait()\objety)
129:         
130:         ; milieu de la raquette(taille:64*16) -> 64/2=32 puis 32-16( car disque rouge 16) et donc trait()\objetx+16
131:       EndIf
132:     Next
133:       
134:     tir()\objetxs = Sin(tir()\objetangle*(3.14/180))*tir()\objetspeed
135:     tir()\objetys = Cos(tir()\objetangle*(3.14/180))*tir()\objetspeed 
136: 
137:   EndIf
138: ; fin fabrication tir **********
139: 
140: 
141: 
142: nbrtir=0  
143:   ForEach tir()
144:     If tir()\objetetat=1;- clone tir
145:       nbrtir+1 ; connaitre le nbre de tirs
146:       
147:       DisplayTransparentSprite ( #tird , tir()\objetx, tir()\objety)
148:       
149:       tir()\objetx=tir()\objetx+tir()\objetxs
150:       tir()\objety=tir()\objety+tir()\objetys 
151: 
152:       
153:       If tir()\objetx>1024 Or tir()\objetx<0 Or tir()\objety>700 Or tir()\objety<0
154:         DeleteElement(tir()) 
155:         Continue
156:       EndIf
157:       
158:     EndIf     
159:   Next   
160:    
161: EndIf 
162:  
163:  
164:   StartDrawing ( ScreenOutput ())
165:     DrawingMode (1)
166:       ;DrawingFont ( FontID (0)) 
167:       FrontColor ( RGB (255,255,255))
168:      rezut1$= Str (rezut1)
169:      rezut2$= Str (rezut2)
170:      
171:      FrontColor ( RGB (154,154,154)) :DrawText (1+1,220+1, "rezut1: " +rezut1$)
172:      FrontColor ( RGB (234,234,234)) :DrawText (1,220, "rezut1: " +rezut1$) 
173:      FrontColor ( RGB (154,154,154)) :DrawText (1+1,240+1, "rezut2: " +rezut2$)
174:      FrontColor ( RGB (234,234,234)) :DrawText (1,240, "rezut2: " +rezut2$) 
175: 
176:       FrontColor ( RGB (154,154,154)) :DrawText (350+1,20+1, "push X")
177:       FrontColor ( RGB (234,234,234)) :DrawText (350,20, "push X")
178:  
179:       nbrtir$= Str (nbrtir) 
180:       FrontColor ( RGB (164,21,21)) :DrawText (42+1, 4+1, "  " +nbrtir$)
181:       FrontColor ( RGB (253,201,255)) :DrawText (42, 4, "  " +nbrtir$) 
182:  
183:   StopDrawing () 
184:  
185:  
186:  
187:   Stop3D(); on place cette commande ï¿½ la fin de la boucle principale.
188:  FlipBuffers()
189:  ClearScreen(RGB(0, 42, 255)) 
190: ; ******************************************************************************************************   
191:  If Event= #PB_Event_CloseWindow Or KeyboardPushed ( #PB_Key_Escape ):End:EndIf; si clique coin haut droit ou touche Esc, alors ferme fen�tre.
192: ForEver
193: 
194: 
195: 
196: 
197: 
198: 
199: 
200: 
201: ; IDE Options = PureBasic 4.61 (Windows - x86)
202: ; CursorPosition = 2
203: ; FirstLine = 96
204: ; Folding = -