Käfer "Vermeren" sich net !?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: Käfer "Vermeren" sich net !?

BeitragSa, Dez 01, 2007 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

AppTitle "Das große Krabbeln"

SeedRnd MilliSecs()

Type info
Field x#,y#,ms,w,winkel,s#,h_ms,h,typ,ID
End Type

Type o
Field x,y,typ,ms
End Type

Dim K(30)

Global b.info
Global o.o
Global max_speed=3,min_speed=1,max_time=3000,min_time=2000,hunger_time=5000,max_hunger = 10
Global count,tot = 0,leben = 0
Global Geld = 100,ID = 1

Global Kaefer = LoadImage("Kaefer.bmp")
MaskImage Kaefer,255,0,255
MidHandle Kaefer
For i = 0 To 29
K(i+1) = CopyImage(Kaefer)
RotateImage K(i+1),i*12
Next
For i = 1 To 2
b.info = New info
b\x = Rand(1,780):b\y = Rand(1,580)
b\w = Rand(1,360)b\winkel = 1:b\s = Rand(min_speed,max_speed)b\h = 0
b\h_ms = MilliSecs()+Rand(1000,hunger_time):b\ms = MilliSecs()+Rand(min_time,max_time)
b\typ = i
b\ID = ID:ID = ID + 1
Next

Repeat
If MouseHit(1) And Geld > 1 Then
o.o = New o
o\x = MouseX()
o\y = MouseY()
o\typ = 0
count = count + 1
o\ms = MilliSecs() + hunger_time*3
Geld = Geld - 2
EndIf
leben = 0
For b.info = Each info
If b\h_ms < MilliSecs() Then b\h = b\h + 1:b\h_ms = MilliSecs()+Rand(1000,hunger_time)
If b\ms < MilliSecs() Or b\x+20 > 800 Or b\y+20 > 600 Or b\x < 1 Or b\y < 1 Then
b\w = Rand(1,360):b\s = Rand(min_speed,max_speed):b\ms = MilliSecs() + Rand(min_time,max_time)
If b\x+20 > 800
b\x = 780
b\w = Rand(0,180)
b\winkel = b\w
ElseIf b\y+20 > 600
b\y = 580
ww = Rand(1,2)
If ww = 1 b\w = Rand(0,90) ElseIf ww = 2 b\w = Rand(270,360)
b\winkel = b\w
ElseIf b\x < 1
b\x = 1
b\w = Rand(180,360)
b\winkel = b\w
ElseIf b\y < 1
b\y = 1
b\w = Rand(90,270)
b\winkel = b\w
EndIf 
EndIf
If b\winkel > b\w And b\winkel -180 < b\w Then b\winkel = b\winkel -2
If b\winkel > b\w And b\winkel -180 > b\w Then b\winkel = b\winkel +2
If b\winkel < b\w And b\winkel +180 < b\w Then b\winkel = b\winkel -2
If b\winkel < b\w And b\winkel +180 > b\w Then b\winkel = b\winkel +2
If b\winkel = b\w -180 Or b\winkel -180 = b\w Then b\winkel = b\winkel +2
If b\winkel < 1 Then b\winkel = 360
If b\winkel > 360 Then b\winkel = 1
b\x = b\x + Cos(b\winkel+90) * b\s
b\y = b\y - Sin(b\winkel+90) * b\s
If b\h < max_hunger/2 Then Color 128,64,0 Else Color 255,0,0
Oval b\x,b\y,20,20
Color 255,0,0:Rect b\x-15,b\y-15,50-b\h*(50/max_hunger),5
Color 255,255,255:Rect b\x-15,b\y-15,50,5,0
If b\typ = 1 Then Text b\x+10,b\y+10,"W",1,1 Else Text b\x+10,b\y+10,"M",1,1
;Color 255,255,255:Text b\x+10,b\y+10,b\,1,1
;Line b\x+10,b\y+10,b\x+10+Cos(b\winkel+90)*20,b\y+10-Sin(b\winkel+90)*10
Ver = 0
For b2.info = Each info
  If RectsOverlap(b2\x,b2\y,20,20,b\x,b\y,20,20)=1 Then
    b\w = Rand(1,360)
    b2\w = Rand(1,360)
    If b2\typ = 0 And b\typ = 1 Or b2\typ = 1 And b\typ = 0 And b\ID <> b2\ID Then
      Ver = 1
      b3.info = New info
      b3\x = b\x:b3\y = b\y
      b3\w = Rand(1,360)b3\winkel = 1:b3\s = Rand(min_speed,max_speed)b3\h = 0
      b3\h_ms = MilliSecs()+Rand(1000,hunger_time):b\ms = MilliSecs()+Rand(min_time,max_time)
      b3\typ = Rand(0,1)
     b3\ID = ID:ID = ID + 1
    EndIf
  EndIf
Next
For o.o = Each o
If RectsOverlap(o\x,o\y,10,10,b\x,b\y,20,20) Then
If b\h > 0
b\h = b\h - 2
If b\h < 0 Then b\h = 0
Delete o.o
Count = Count - 1
EndIf
EndIf
Next
If count > 0 And b\h > 0
o.o = First o
If o.o <> Null
b\w = ATan2(o\x-b\x,o\y-b\y)+180
EndIf
EndIf
If b\h > max_hunger Then Delete b.info:Tot = tot + 1
leben = leben + 1
Next
For o.o = Each o
Color 0,170,0:Oval o\x,o\y,10,10
If o\ms < MilliSecs() Then Delete o.o
Next
Color 255,255,255
Text 1,1 ,    "Lebende Insecten : "+leben
Text 1,20,"Verhungerte Insecten : "+tot
Text 1,40,"                Geld : "+Geld+" "+Ver
Flip
Cls
Until KeyHit(1)
End


Warum vermeheren sich die Käfer net, wenn ein Weibchen "W" und ein Männchen "M" mit einander Collidieren ("If RectsOverlap(b2\x,b2\y,20,20,b\x,b\y,20,20)=1") ? Ich Check gar nichts mehr....

Ich hab schon eine Variable eingebaut, "Ver", die soll auf "1" gesetzt werden, wenn die Collision da ist und M und W einander Treffen. Ist aber immer Null, Tu ich sie hinter die Abfrage wo abgefragt wirt ob ein M und ein W miteinander Collidieren, ist sie immer Null, Tu ich sie davor, ist sie immer 1...
Könnt ihr mir Helfen ?

thx und 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!
 

echi

BeitragSo, Dez 16, 2007 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
kannst du irgentwie die Bilder dazutun, ich hasse Zeichnen Wink

EDIT: ok, is ja nur ein bild^^ ich probiers jetz ma aus
 

echi

BeitragSo, Dez 16, 2007 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, bei dem Code vermehren sie sich jetzt unendlich Wink (dein Code war mir zu unübersichtlich zum weitermachen Sad)

Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

AppTitle "Das große Krabbeln"

SeedRnd MilliSecs()

Type info
Field x#,y#,ms,w,winkel,s#,h_ms,h,typ,ID
End Type

Type o
Field x,y,typ,ms
End Type

Dim K(30)

Global b.info
Global o.o
Global max_speed=3,min_speed=1,max_time=3000,min_time=2000,hunger_time=5000,max_hunger = 10
Global count,tot = 0,leben = 0
Global Geld = 100,ID = 1

Global Kaefer = LoadImage("Kaefer.bmp")
MaskImage Kaefer,255,0,255
MidHandle Kaefer
For i = 0 To 29
K(i+1) = CopyImage(Kaefer)
RotateImage K(i+1),i*12
Next

b.info = New info
b\x = Rand(1,780):b\y = Rand(1,580)
b\w = Rand(1,360)b\winkel = 1:b\s = Rand(min_speed,max_speed)b\h = 0
b\h_ms = MilliSecs()+Rand(1000,hunger_time):b\ms = MilliSecs()+Rand(min_time,max_time)
b\typ = 0
b\ID = 1

b2.info = New info
b2\x = Rand(1,780):b\y = Rand(1,580)
b2\w = Rand(1,360)b\winkel = 1:b\s = Rand(min_speed,max_speed)b\h = 0
b2\h_ms = MilliSecs()+Rand(1000,hunger_time):b\ms = MilliSecs()+Rand(min_time,max_time)
b2\typ = 1
b2\ID = 2

Repeat
If MouseHit(1) And Geld > 1 Then
o.o = New o
o\x = MouseX()
o\y = MouseY()
o\typ = 0
count = count + 1
o\ms = MilliSecs() + hunger_time*3
Geld = Geld - 2
EndIf
leben = 0
For b.info = Each info
If b\h_ms < MilliSecs() Then b\h = b\h + 1:b\h_ms = MilliSecs()+Rand(1000,hunger_time)
If b\ms < MilliSecs() Or b\x+20 > 800 Or b\y+20 > 600 Or b\x < 1 Or b\y < 1 Then
b\w = Rand(1,360):b\s = Rand(min_speed,max_speed):b\ms = MilliSecs() + Rand(min_time,max_time)
If b\x+20 > 800
b\x = 780
b\w = Rand(0,180)
b\winkel = b\w
ElseIf b\y+20 > 600
b\y = 580
ww = Rand(1,2)
If ww = 1 b\w = Rand(0,90) ElseIf ww = 2 b\w = Rand(270,360)
b\winkel = b\w
ElseIf b\x < 1
b\x = 1
b\w = Rand(180,360)
b\winkel = b\w
ElseIf b\y < 1
b\y = 1
b\w = Rand(90,270)
b\winkel = b\w
EndIf
EndIf
If b\winkel > b\w And b\winkel -180 < b\w Then b\winkel = b\winkel -2
If b\winkel > b\w And b\winkel -180 > b\w Then b\winkel = b\winkel +2
If b\winkel < b\w And b\winkel +180 < b\w Then b\winkel = b\winkel -2
If b\winkel < b\w And b\winkel +180 > b\w Then b\winkel = b\winkel +2
If b\winkel = b\w -180 Or b\winkel -180 = b\w Then b\winkel = b\winkel +2
If b\winkel < 1 Then b\winkel = 360
If b\winkel > 360 Then b\winkel = 1
b\x = b\x + Cos(b\winkel+90) * b\s
b\y = b\y - Sin(b\winkel+90) * b\s
If b\h < max_hunger/2 Then Color 128,64,0 Else Color 255,0,0
Oval b\x,b\y,20,20
Color 255,0,0:Rect b\x-15,b\y-15,50-b\h*(50/max_hunger),5
Color 255,255,255:Rect b\x-15,b\y-15,50,5,0
If b\typ = 1 Then Text b\x+10,b\y+10,"W",1,1 Else Text b\x+10,b\y+10,"M",1,1
;Color 255,255,255:Text b\x+10,b\y+10,b\,1,1
;Line b\x+10,b\y+10,b\x+10+Cos(b\winkel+90)*20,b\y+10-Sin(b\winkel+90)*10
Ver = 0
For b2.info = Each info
  If RectsOverlap(b2\x,b2\y,20,20,b\x,b\y,20,20)=1 Then
    b\w = Rand(1,360)
    b2\w = Rand(1,360)
    If b2\typ = 0 And b\typ = 1 Or b2\typ = 1 And b\typ = 0 And b\ID <> b2\ID Then
      DebugLog "haha"
      Ver = 1
      b3.info = New info
      b3\x = b\x:b3\y = b\y
      b3\w = Rand(1,360)b3\winkel = 1:b3\s = Rand(min_speed,max_speed)b3\h = 0
      b3\h_ms = MilliSecs()+Rand(1000,hunger_time):b\ms = MilliSecs()+Rand(min_time,max_time)
      b3\typ = Rand(0,1)
     b3\ID = ID:ID = ID + 1
    EndIf
  EndIf
Next
For o.o = Each o
If RectsOverlap(o\x,o\y,10,10,b\x,b\y,20,20) Then
If b\h > 0
b\h = b\h - 2
If b\h < 0 Then b\h = 0
Delete o.o
Count = Count - 1
EndIf
EndIf
Next
If count > 0 And b\h > 0
o.o = First o
If o.o <> Null
b\w = ATan2(o\x-b\x,o\y-b\y)+180
EndIf
EndIf
If b\h > max_hunger Then Delete b.info:Tot = tot + 1
leben = leben + 1
Next
For o.o = Each o
Color 0,170,0:Oval o\x,o\y,10,10
If o\ms < MilliSecs() Then Delete o.o
Next
Color 255,255,255
Text 1,1 ,    "Lebende Insecten : "+leben
Text 1,20,"Verhungerte Insecten : "+tot
Text 1,40,"                Geld : "+Geld+" "+Ver
Flip
Cls
Until KeyHit(1)
End


Du hattest nämlich garkein b2 Wink (nur 2 mal b)

ToeB

BeitragSo, Dez 16, 2007 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
aso cool danke funzt jetzt kann ich jetzt verbessern xD

thx und 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!
 

echi

BeitragMo, Dez 17, 2007 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
kein Problem, aber ich geb dir mal nen Tipp: mach deine Quellcodes übersichtlicher! Ich musste bei nem Projekt von mir ganz neu anfangen, weil ich spagetticode programmiert hab^^ (noch nichmal so unordentlich wie deiner Wink)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group