Types sich gegenseitig angreifen...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Baschdi

Betreff: Types sich gegenseitig angreifen...

BeitragSo, Aug 05, 2007 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi ...da ich ja jetzt ein lag-freies spiel habe habe ich gleich weiter geproggt und bin auf ein mir altbekanntes problem gestoßen ...ich hab schon ewigkeiten nach ner lösung gesucht ....und nie gefunden ...drum frag ich euch also hier erst mal der erweiterte code:
Code: [AUSKLAPPEN]

;#
Const weight=640
Const height=480
Const tile=32
Graphics weight,height,0,1
SetBuffer BackBuffer()
;#
Global mx,my,Pmx,Pmy,xback,yback,mapX=64,mapY=64,feld=2
Global gfx$="Graphic\",sfx$="Sound\",name$="map",nam$="map"
;#
Global tileset  = LoadAnimImage(gfx$+"tileset.bmp",tile,tile,0,60)
Global human    = LoadAnimImage(gfx$+"player.bmp",tile,tile,0,35)
Global alien    = LoadAnimImage(gfx$+"alien4.bmp",tile,tile,0,70)
Global Imouse   = LoadImage(gfx$+"Imouse.bmp")
Global mouse    = LoadImage(gfx$+"mouse.bmp")
;#
Dim map(mapX,mapY)
Dim stat(mapX,mapY)
;#
Type human
Field x,y,xx,yy,xZ,yZ,nr,typ,sel,spe,liv,att
End Type
;#
Type alien
Field x,y,xx,yy,xZ,yZ,nr,typ,sel,spe,liv,att
Field move,xo,aa,px,py,team
End Type
;#
;#
;#
Main()
Function Main()
NewAlien(2*tile,2*tile,0)
NewAlien(5*tile,5*tile,0)
NewAlien(7*tile,7*tile,0)
NewAlien(9*tile,9*tile,0)

   Repeat
   Cls
   ;BG malen
      For x=0 To mapX
      For y=0 To mapY
         DrawImage tileset,x*tile-xback,y*tile-yback,map(x,y)
         If map(x,y)>=feld Then: stat(x,y)=1
            ElseIf map(x,y)<feld Then: stat(x,y)=0
         EndIf
         For al.alien=Each alien
            stat(al\px,al\py)=al\team
         Next
      Next
      Next
      
   ;Unitsladen
      UpdateHuman()
      UpdateAlien()
      
      
   ;Maus malen
      UpdateMouse()
   Flip
   Until KeyHit(1)   
   End
End Function
;#
;#
;#
Function LoadMap(name$)

   file=OpenFile("Level\"+name$+".map")
      
      For x=0 To mapX
      For y=0 To mapY
         
         map(x,y)=ReadInt(file)
         
      Next
      Next
            
   CloseFile file
   
End Function
;#
;#
;#
Function UpdateMouse()

   ;Scolling
   If KeyDown(200) And yback>0 Then:
      yback=yback-4
   EndIf
   If KeyDown(208) And yback<mapY*tile-height Then:
      yback=yback+4
   EndIf
   If KeyDown(205) And xback<mapX*tile-weight Then:
      xback=xback+4
   EndIf
   If KeyDown(203) And xback>0 Then:
      xback=xback-4
   EndIf    

   ;Radar
   Color 192,192,192
   Rect (weight-100)-10,10,100,100,1   
   Color 0,0,0
   Rect ((weight-100)-10)+xback / ( (mapX * tile) / 100 ),10+yback / ( (mapY * tile) / 100 ), weight / ( (mapX * tile) / 100 ),height / ( (mapY * tile) / 100 ),0      
   
   ;Maus
   mx=MouseX()
   my=MouseY()
   DrawImage mouse,mx,my
   DrawImage Imouse,mx,my   
   Pmx=(mx+xback)/tile
   Pmy=(my+yback)/tile
   Text 0,0,""+Pmx+" "+Pmy
   
End Function
;#
;#
;#
Function NewHuman(x,y,typ)
   
   hu.human=New human
   hu\xx=x
   hu\yy=y
   hu\xZ=hu\xx
   hu\yZ=hu\yy
   hu\typ=typ
   hu\spe=2
   hu\liv=100
   hu\att=5
   
End Function
;#
;#
;#
Function UpdateHuman()
   
   For hu.human=Each human
      
   ;Bild Anzeigen
      hu\x=hu\xx-xback
      hu\y=hu\yy-yback
      DrawImage human,hu\x,hu\y,hu\nr
      
   ;Selektieren
      If ImagesCollide(mouse,mx,my,0,human,hu\x,hu\y,hu\nr)=1 And MouseDown(1) Then hu\sel=1
      If ImagesCollide(mouse,mx,my,0,human,hu\x,hu\y,hu\nr)=0 And MouseDown(1) Then hu\sel=0
      If hu\sel=1 Then Color 0,255,0 : Rect hu\x,hu\y,tile,tile,0
   
   ;Zielkoos   
      If hu\sel=1 And MouseDown(2) And map(Pmx,Pmy)<feld Then hu\xZ=Pmx*tile : hu\yZ=Pmy*tile
      
   ;Bewegen
      If hu\xx < hu\xZ Then:
         hu\xx=hu\xx+hu\spe
      ElseIf hu\xx > hu\xZ Then:
         hu\xx=hu\xx-hu\spe          
      EndIf
      If hu\yy < hu\yZ Then:
          hu\yy=hu\yy+hu\spe       
      ElseIf hu\yy > hu\yZ Then:
         hu\yy=hu\yy-hu\spe
      EndIf         
      
   Next
   
End Function
;#
;#
;#
Function NewAlien(x,y,typ)

   al.alien=New alien
   al\xx=x
   al\yy=y
   al\xZ=al\xx
   al\yZ=al\yy
   al\typ=typ
   al\spe=1
   al\liv=100
   al\att=5
   al\team=Rnd(1,5)
   
End Function
;#
;#
;#
Function UpdateAlien()

   For al.alien=Each alien
      
   ;Bild Anzeigen
      al\x=al\xx-xback
      al\y=al\yy-yback
      al\px=al\xx/tile
      al\py=al\yy/tile      
      DrawImage alien,al\x,al\y,al\nr
      Text al\x,al\y+tile-4,"Team"+al\team

   ;Selektieren
      If ImagesCollide(mouse,mx,my,0,alien,al\x,al\y,al\nr)=1 And MouseDown(1) Then al\sel=1
      If ImagesCollide(mouse,mx,my,0,alien,al\x,al\y,al\nr)=0 And MouseDown(1) Then al\sel=0
      If al\sel=1 Then Color 0,255,0 : Rect al\x,al\y,tile,tile,0
   
   ;Zielkoos   
      If al\sel=1 And MouseDown(2) And stat(Pmx,Pmy)=0 Then al\xZ=Pmx*tile : al\yZ=Pmy*tile
   
   ;Platz belegen
         stat(al\px,al\py)=al\team
      
   ;Bewegen
      ;oben-rechts laufen
         If al\xZ > al\xx And al\yZ < al\yy Then:
            If stat(al\px+1,al\py-1)=0 And al\aa<1 Then:
               al\move=5
               al\aa=1
            EndIf
      ;unten-rechts laufen
         ElseIf al\xZ > al\xx And al\yZ > al\yy Then:
            If stat(al\px+1,al\py+1)=0 And al\aa<1 Then:
               al\move=6
               al\aa=1
            EndIf
      ;unten-links laufen
         ElseIf al\xZ < al\xx And al\yZ > al\yy Then:
            If stat(al\px-1,al\py+1)=0 And al\aa<1 Then:
               al\move=7
               al\aa=1
            EndIf
      ;oben-links laufen
         ElseIf al\xZ < al\xx And al\yZ < al\yy Then:
            If stat(al\px-1,al\py-1)=0 And al\aa<1 Then:
               al\move=8
               al\aa=1
            EndIf                             
      ;Oben laufen
         ElseIf al\yZ < al\yy Then:
            If stat(al\px,al\py-1)=0 And al\aa<1 Then:
               al\move=2
               al\aa=1         
            EndIf 
      ;Unten laufen
         ElseIf al\yZ > al\yy Then:
            If stat(al\px,al\py+1)=0 And al\aa<1 Then:
               al\move=1
               al\aa=1         
            EndIf
      ;rechts laufen
         ElseIf al\xZ > al\xx Then:
            If stat(al\px+1,al\py)=0 And al\aa<1 Then:
               al\move=4
               al\aa=1            
            EndIf
      ;links laufen
         ElseIf al\xZ < al\xx Then:
            If stat(al\px-1,al\py)=0 And al\aa<1 Then:
               al\move=3
               al\aa=1
            EndIf          
      ;oben-rechts angreifen
         ElseIf stat(al\px+1,al\py-1)<>al\team And stat(al\px+1,al\py-1)>1 And al\aa<1 Then:
               al\move=9
               al\aa=1
      ;unten-rechts angreifen
         ElseIf stat(al\px+1,al\py+1)<>al\team And stat(al\px+1,al\py+1)>1 And al\aa<1 Then:
               al\move=10
               al\aa=1
      ;unten-links angreifen
         ElseIf stat(al\px-1,al\py+1)<>al\team And stat(al\px-1,al\py+1)>1 And al\aa<1 Then:
               al\move=11
               al\aa=1
      ;oben-links angreifen
         ElseIf stat(al\px-1,al\py-1)<>al\team And stat(al\px-1,al\py-1)>1 And al\aa<1 Then:
               al\move=12
               al\aa=1                         
      ;Oben angreifen
         ElseIf stat(al\px,al\py-1)<>al\team And stat(al\px,al\py-1)>1 And al\aa<1 Then:
               al\move=13
               al\aa=1         
      ;Unten angreifen
         ElseIf stat(al\px,al\py+1)<>al\team And stat(al\px,al\py+1)>1 And al\aa<1 Then:
               al\move=14
               al\aa=1         
      ;rechts angreifen
         ElseIf stat(al\px+1,al\py)<>al\team And stat(al\px+1,al\py)>1 And al\aa<1 Then:
               al\move=15
               al\aa=1            
      ;links angreifen
         ElseIf stat(al\px-1,al\py)<>al\team And stat(al\px-1,al\py)>1 And al\aa<1 Then:
               al\move=16
               al\aa=1
         EndIf    
      
      ;pfeilhoch-taste
         If al\move = 2 Then
         al\nr=0
         If al\aa > 0
         al\yy = al\yy - al\spe
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 3          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 2
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 1
         If al\xo = (tile/al\spe) Then al\aa = 0 : al\xo = 0:al\nr = 0
         EndIf
         EndIf
      ;pfeilrechts-taste
         If al\move = 4 Then
         al\nr=4   
         If al\aa > 0
         al\xx = al\xx + al\spe
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 7          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 6
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 5     
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 4
         EndIf
         EndIf
      ;pfeilrunter-taste
         If al\move = 1 Then
         al\nr=8
         If al\aa > 0
         al\yy = al\yy + al\spe
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 11          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 10
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 9
         If al\xo = (tile/al\spe) Then al\aa = 0 : al\xo = 0:al\nr = 8
         EndIf
         EndIf      
      ;pfeillinks-taste
         If al\move = 3 Then
         al\nr=12   
         If al\aa > 0
         al\xx = al\xx - al\spe
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 15          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 14
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 13     
         If al\xo = (tile/al\spe) Then al\aa = 0 : al\xo = 0:al\nr = 12
         EndIf
         EndIf   
      ;oben rechts
         If al\move = 5 Then
         al\nr=16   
         If al\aa > 0
         al\xx = al\xx + al\spe
         al\yy = al\yy - al\spe
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 19          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 18
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 17   
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 16
         EndIf
         EndIf
      ;unten rechts
         If al\move = 6 Then
         al\nr=20   
         If al\aa > 0
         al\xx = al\xx + al\spe
         al\yy = al\yy + al\spe
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 23          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 22
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 21   
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 20
         EndIf
         EndIf
      ;unten links
         If al\move = 7 Then
         al\nr=24   
         If al\aa > 0
         al\xx = al\xx - al\spe
         al\yy = al\yy + al\spe
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 27          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 26
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 25    
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 24
         EndIf
         EndIf
      ;oben links
         If al\move = 8 Then
         al\nr=28   
         If al\aa > 0
         al\xx = al\xx - al\spe
         al\yy = al\yy - al\spe
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 31          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 30
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 29     
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 28
         EndIf
         EndIf

      ;pfeilhoch-angreifen
         If al\move = 13 Then
         al\nr=32
         If al\aa > 0
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 35         
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 34
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 33
         If al\xo = (tile/al\spe) Then al\aa = 0 : al\xo = 0:al\nr = 32
         EndIf
         EndIf
      ;pfeilrechts-angreifen
         If al\move = 15 Then
         al\nr=36   
         If al\aa > 0
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 39         
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 38
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 37     
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 36
         EndIf
         EndIf
      ;pfeilrunter-angreifen
         If al\move = 14 Then
         al\nr=40
         If al\aa > 0
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 43          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 42
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 41
         If al\xo = (tile/al\spe) Then al\aa = 0 : al\xo = 0:al\nr = 40
         EndIf
         EndIf      
      ;pfeillinks-angreifen
         If al\move = 16 Then
         al\nr=44   
         If al\aa > 0
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 47          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 46
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 45    
         If al\xo = (tile/al\spe) Then al\aa = 0 : al\xo = 0:al\nr = 44
         EndIf
         EndIf   
      ;oben rechts-angreifen
         If al\move = 9 Then
         al\nr=48   
         If al\aa > 0
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 51          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 50
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 49   
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 48
         EndIf
         EndIf
      ;unten rechts-angreifen
         If al\move = 10 Then
         al\nr=52   
         If al\aa > 0
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 55          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 54
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 53   
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 52
         EndIf
         EndIf
      ;unten links-angreifen
         If al\move = 11 Then
         al\nr=56   
         If al\aa > 0
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 59          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 58
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 57
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 56
         EndIf
         EndIf
      ;oben links-angreifen
         If al\move = 12 Then
         al\nr=60   
         If al\aa > 0
         al\xo = al\xo + 1
         If al\xo < (tile/al\spe)*0.75 Then al\nr = 63          
         If al\xo < (tile/al\spe)*0.50 Then al\nr = 62
         If al\xo < (tile/al\spe)*0.25 Then al\nr = 61     
         If al\xo = (tile/al\spe) Then al\aa = 0 :al\xo = 0:al\nr = 60
         EndIf
         EndIf
   ;Kollision
      
            
            
                  
   ;sterben                     

   Next

End Function
;#
;#
;#


die Functions mit Human sind noch scheiße egal ...ich glaub ich brauch sie nicht mal wenn das hier klappt

also ich habe meine types in teams aufgeteilt ...und die angriffsbewegung klappt perffekt, nur eine sache nicht : wie kann ich jetzt dem angegriffenen leben abziehen????
mit al\liv=al\liv-1 ist es nicht getan, weil er dann sich selbst leben abzieht und nicht dem opfer....wie also (ohne einen typ für angriffs kugeln....das krieg ich denk ich schon hin- ich will nämlich nahkämpfer....(Wink
krieg ich das hin?????????
thx im vorraus
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden

ToeB

BeitragSo, Aug 05, 2007 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Machne zweite For...Next schleife :
Code: [AUSKLAPPEN]

For a.alien
For b.alien
If bekämpfensich(a\alien,b\alien) then
a\liv = a\liv -1
b\liv = b\liv -1
EndIf
next
next


so müsste es gehn ^^

mfg
Crack93 Wink
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Baschdi

BeitragSo, Aug 05, 2007 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
ne es ist eben nur ein type da ...also soll die unit 1 die team 2 ist die unit 2 angreifen....

beide units sind der selbe type ..... nur das team ist unterschiedlich

aber thx fürs antowrten
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden

ToeB

BeitragSo, Aug 05, 2007 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ! Dann musst du es so machen ! DAnn fragst du halt ab, in welchem Team der Type sich befindet, und wenn in 1 und der andere in 2 und die sich bekämpfen oda sonst was dann halt leben abziehen ^^

Code: [AUSKLAPPEN]
For a.alien = Each alien
For b.alien = Each alien
If a\team = 1 And b\team = 2 And bekämpf = 1 then 
a\liv = a\liv -1
b\liv = b\liv -1
EndIf
Next
next
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Baschdi

BeitragSo, Aug 05, 2007 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
nice .. ich probiers ...thx
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden

Markus2

BeitragMi, Aug 08, 2007 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Würde ich so machen ...
Code: [AUSKLAPPEN]

For a.alien = Each alien
if a\kaempfen=1 and a\feindteam>0 then
;Feinde Suchen
For b.alien = Each alien
If b\team = a\feindteam then  'A schießt auf B
 if b\liv >0 then b\liv = b\liv -1
EndIf
Next
endif
next

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group