Types sich gegenseitig angreifen...
Übersicht

![]() |
BaschdiBetreff: Types sich gegenseitig angreifen... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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....( ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
nice .. ich probiers ...thx | ||
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group