Freund und Feind in ein Type?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Retro

Betreff: Freund und Feind in ein Type?

BeitragMi, Aug 11, 2004 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Angenommen aus 4 Richtungen kommen Gegner/Freunde auf die Spielfigur zu... macht es Sinn, die alle in ein Type zu setzen?

Zumal zu jeder Zeit aus jeder Richtung auch immer nur wahlweise ein Freund/Feind kommen darf...

TheShadow

Moderator

BeitragMi, Aug 11, 2004 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
sehe nix, was dagegen spricht - mach noch eine kennung rein und fertig...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

theBlade

BeitragMi, Aug 11, 2004 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
scheiss egal, kannst auch 2 machen, juckt im prinzip niemanden... bei einem ist es aber etwas übersichtlicher
"Ich bin wie ich bin. Die einen kennen mich, die anderen können mich." (Dr. Konrad Adenauer)

UTFSB -> (use the fuckin "suchen"-button)

User posted image <- link -.-
 

Retro

BeitragMi, Aug 11, 2004 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
@TheShadow: Meinst Du die Art des Gegners? Freund/Feind?

Type Gegner
Field Gegnerart, X, Y, Startrichtung, Richtung, Geschwindigkeit
End Type

Da müßte man noch zusätzlich ein Feld reinmachen, wenn es verschiedene Feinde/Freunde gibt.

Und wie würdet ihr die Startrichtung (links, oben, rechts, unten) auch so angeben?

Wie verwaltet man das am Sinnvollsten, daß aus jeder Richtung immer nur ein Feind/Freund kommen kann? DIM?
 

Blitzkrieg Bop

BeitragMi, Aug 11, 2004 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi! Habs mal so in etwa versucht! Geht doch super.
Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Type Gegner
   Field Gegnerart, X, Y, Startrichtung, Richtung, Geschwindigkeit
End Type

gegner_feind()

Repeat
Cls

For g.gegner = Each gegner
If g\gegnerart = 1
   Rect g\x,g\y,20,20
ElseIf g\gegnerart = 2
   Oval g\x,g\y,20,20
EndIf
If g\richtung = 1
   g\y = g\y + g\geschwindigkeit
ElseIf g\richtung = 2
   g\y = g\y - g\geschwindigkeit
ElseIf g\richtung = 3
   g\x = g\x + g\geschwindigkeit
ElseIf g\richtung = 4
   g\x = g\x - g\geschwindigkeit
EndIf          

If g\y < - 10 Or g\y > 490 Or g\x < - 10 Or g\x > 650
   Delete g.gegner
   gegner_feind()
   Exit
EndIf    
   
Next       


Flip
Until KeyHit(1):End

Function gegner_feind()
g.gegner = New gegner
g\gegnerart = Rand(1,2) ;1: Freund - 2: Feind
g\richtung = Rand(1,4) ; 1: von oben - 2: von unten - 3: von links - 4: von rechts
If g\richtung = 1
   g\x = 400
   g\y = 0
ElseIf g\richtung = 2
   g\x = 400
   g\y = 480
ElseIf g\richtung = 3
   g\x = 0
   g\y = 300
ElseIf g\richtung = 4
   g\x = 640
   g\y = 300
EndIf
g\geschwindigkeit = Rand(10,20)      
End Function       


Code wurde schnell geschrieben, also net meckern.
~ Hey Ho Let's Go ~
 

c64

BeitragMi, Aug 11, 2004 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn eine Objectgruppe zb. Gruppe : " Bewegliche Objecte "
20 gleiche Attribute hat und nur 1 Attribut zur genaueren Definition
eines Objectes (zb. Feind , Freund , o.ä.)
dient dann schreibt doch kein vernünftiger Programmierer
eine neue Structur für dieses . Es sei denn bestimmte umstände erfordern
dies . Ich denke du hast es so wie du es jetzt handhabst am Optimalsten.

mfg : Pr.Dr. C64 Laughing
 

Retro

BeitragMi, Aug 11, 2004 12:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Funzt prima! Ich verstehe bloß nicht, warum René im Buch das Thema als kompliziert beschreibt - ich find das eher einfacher als mit Dim zu arbeiten. Types sind ja regelrecht "geil" wenn man es so nimmt *g*
 

Dreamora

BeitragMi, Aug 11, 2004 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Bis an den Punkt ist alles noch einfach wo du es nicht wirklich benutzt.

Wir werden sehen inwiefern sie wirklich verstanden worden sind.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Blitzkrieg Bop

BeitragMi, Aug 11, 2004 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich hoffe du nutzt den Code auch nicht nach dem Copy'n'Paste Schema. Guck ihn dir an, lösch ihn und versuche das selbst nochmal zu machen, sonst bringt es dir nichts.
~ Hey Ho Let's Go ~
 

Retro

BeitragMi, Aug 11, 2004 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code ist ja nur ein grobes Gerüst, was ich vorhabe, ist bischen mehr. Und nein ich werde es nicht bloß nutzen ohne zu wissen was da genau abgeht. Aber Types scheinen nicht sooo schwer zu sein, habe die schon oft in Spielen gesehen und irgendwie die Logik auch gleich verstanden.
 

Flip

BeitragMo, Aug 23, 2004 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
@Blitzkrieg Bop: Lerne mich auch gerade in Types ein, aber wie erweitert man z.B. Dein obiges Beispiel so, daß die Gegner auch gleichzeitig und nicht immer nacheinander erscheinen?
 

Blitzkrieg Bop

BeitragMo, Aug 23, 2004 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Na, das ist kein Problem. Um die Frage zu lösen, guck dir an, wie die Gegner erstellt werden: Immer wenn der vorige Gegner über den Rand weg ist und gelöscht wurde Exclamation
Wenn du dich fragst, wie dann der aller erste entstanden ist, guck dir vor Repeat an, das ich bereits einmal gegner_feind() genutzt habe.
Es gibt mehrere Sachen, das nun zu ändern. Beispiel:
Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Type Gegner
   Field Gegnerart, X, Y, Startrichtung, Richtung, Geschwindigkeit
End Type

For i = 1 To 5
   gegner_feind()
Next    

Repeat
Cls

For g.gegner = Each gegner
If g\gegnerart = 1
   Rect g\x,g\y,20,20
ElseIf g\gegnerart = 2
   Oval g\x,g\y,20,20
EndIf
If g\richtung = 1
   g\y = g\y + g\geschwindigkeit
ElseIf g\richtung = 2
   g\y = g\y - g\geschwindigkeit
ElseIf g\richtung = 3
   g\x = g\x + g\geschwindigkeit
ElseIf g\richtung = 4
   g\x = g\x - g\geschwindigkeit
EndIf           

If g\y < - 10 Or g\y > 490 Or g\x < - 10 Or g\x > 650
   Delete g.gegner
   gegner_feind()
   Exit
EndIf     

If KeyHit(28)
   gegner_feind()
EndIf    
   
Next       


Flip
Until KeyHit(1):End

Function gegner_feind()
g.gegner = New gegner
g\gegnerart = Rand(1,2) ;1: Freund - 2: Feind
g\richtung = Rand(1,4) ; 1: von oben - 2: von unten - 3: von links - 4: von rechts
If g\richtung = 1
   g\x = 400
   g\y = 0
ElseIf g\richtung = 2
   g\x = 400
   g\y = 480
ElseIf g\richtung = 3
   g\x = 0
   g\y = 300
ElseIf g\richtung = 4
   g\x = 640
   g\y = 300
EndIf
g\geschwindigkeit = Rand(10,20)       
End Function


Nun werden gleich am Anfang nicht nur 1 Objekt, sondern 5 erstellt und wenn man Enter drückt, wird ebenfalls ein neues erstellt.
So, wenn du den Code nun verstanden hast, solltest du sowas auch locker alleine schaffen. Bei Fragen, einfach melden. Von mir aus auch per PN. 8)
Ich helfe ja gerne.
~ Hey Ho Let's Go ~
 

Flip

BeitragMo, Aug 23, 2004 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ups, meinte eigentlich das gleichzeitig von mehreren Seiten Gegner kommen, aber nicht von einer Seite mehrere.

Müßte man da einfach 4 zusätzliche Variablen anlegen und diese immer abfragen?
 

Blitzkrieg Bop

BeitragMo, Aug 23, 2004 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, im mom läuft alles über das Zufallsprinzip.
Setz dich ran und du schaffst es, da bin ich sicher
Wink
Du musst halt nur z.B sagen:
If modus = 1
figur von links
elseif modus = 2
fifur von rechts
endif

oder so ähnlich.
~ Hey Ho Let's Go ~

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group