Gegner für mein Pac man Spiel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

black_hunter

Betreff: Gegner für mein Pac man Spiel

BeitragDi, Dez 20, 2005 3:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
so, mein Pac man spiel ist fast fertig, jetzt brauche ich nur noch gegners die den Spieler verfolgen, nur wie mache ich das jetzt?
für hilfen bin ich euch sehr dankbar, danke schonmal Confused

markus

Hubsi

BeitragDi, Dez 20, 2005 10:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kommt stark auf die Art der Map an, sprich arbeitest Du mit einer Tilemap? Wenn ja würde ich es so angehen das der Geist seine Bewegungsrichtung nach folgendem Muster entscheidet:Zitat:
Wo ist Spieler - links, rechts, oben, unten
Weg in entsprechende Richtung frei - bewegen
Weg versperrt - point=Suchfunktion()
Zum Punkt point schweben

Function Suchfunktion()

Ausgehend von der Position des Geists nach links und rechts (oder unten/oben, je nach versperrter Richtung) nach einem freien Feld suchen, Position merken und als Returnwert zurückgeben

End Function

Grob umrissen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Omenaton_2

BeitragDi, Dez 20, 2005 11:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, wie beschrieben. Ich möchte nur hinzufügen, daß du daran denken sollst, bei Wegverzweigungen eine kleine, Pac Man typische Unsicherheit einzubauen. Per Zufall soll manchmal (in ca. 30% der Fälle) der Gegner nicht den richtigen Weg wählen. Die Monster müssen immer ein wenig doof sein.
 

black_hunter

BeitragDi, Dez 20, 2005 11:28
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank für die antworten,
ja ich benutze eine map, wo jeweils 16 felder hat,
aber wie mache ich das jetzt, habe noch nie mit gegners gearbeitet Sad
könnt ihr mir vieleicht mal erklären wie man das genau machen könnte, ich bin euch schonmal sehr dankbar für die hilfen Wink

markus

Bigmichi

BeitragDi, Dez 20, 2005 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ich verstehe nicht wo dein Problem ist Confused
Wurde doch alles bestens erklärt =))

wie schon gesagt kannst du die richtung erstma ausrechnen lassen, z.B könntest du ja die x und y pos von den jeweiligen objekten vergleichen =)

dannach weißt du in welche richtung du dich bewegen solltest...
wenn der weg frei ist kansnt du das objekt direkt in die richtung schicken falls nicht kansnt du sie ja bissi dümmer lassen und einfach versuchen die näüchste mögliche strecke zu gehen von mir aus statt linsk dan halt nach oben oder unten was halt frei ist....
und dan kontrollierst du immer wenn eine abzweigung kommt, ob das Objekt imemr noch sein ziel folgen soll oder halt mal falsch gehen soll bzw. mann muss den weg ja immer neu berechnen wo er hin soll...

und so würde ich auch vorgehen =) recht einfach =)))
 

Kaplan

BeitragDi, Dez 20, 2005 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub, er will mehr nen kleinen Code Wink. Versuchs doch mal selber. So schwer ist das nicht. Du hast genug Hilfe bekommen. Damit müsste das machbar sein.
"Jedes Ereigniss hinterlässt eine Narbe in der Seele des Beteiligten. Manche sind größer als andere, manche aber teilen deine Seele in Zwei."


User posted image
User posted image

Ironstorm

Erstklassiger Contest-Veranstalter

BeitragDi, Dez 20, 2005 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier, ist von der Buch CD:

BlitzBasic: [AUSKLAPPEN]

; PAC4.BB
Graphics 640,480
SetBuffer BackBuffer()
timer = CreateTimer(15)
tiles = LoadImage(\"blocks1.bmp\")
tiles2 = LoadImage(\"pickups.bmp\")
figuren = LoadImage(\"invader2.bmp\")
todsound = LoadSound(\"soundfx16.wav\")

; Level von Festplatte lesen

Dim Level$(15,20)
leveldatei = ReadFile(\"pac2.dat\")
For Zeile=0 To 14
A$ = ReadLine(leveldatei)
For Spalte=0 To 19
Level$(Zeile,Spalte) = Mid$(A$,Spalte+1,1)

If Level$(Zeile,Spalte) = \"S\" Then
SpielerStartS = Spalte
SpielerStartZ = Zeile
EndIf
If Level$(Zeile,Spalte) = \"G\" Then
GegnerStartS = Spalte
GegnerStartZ = Zeile
EndIf

Next
Next
CloseFile leveldatei
leben = 5

Repeat

; Level zeichnen

For Zeile=0 To 14
For Spalte=0 To 19
Select Level$(Zeile,Spalte)
Case \" \"
DrawImageRect tiles, Spalte*32, Zeile*32, 36, 36, 32, 32
Case \"1\"
DrawImageRect tiles, Spalte*32, Zeile*32, 70, 274, 32, 32
Case \"S\"
DrawImageRect tiles, Spalte*32, Zeile*32, 36, 36, 32, 32
DrawImageRect figuren, Spalte*32, Zeile*32, 481,142,32,26
SpielerS = Spalte
SpielerZ = Zeile
Case \"G\"
DrawImageRect tiles, Spalte*32, Zeile*32, 36, 36, 32, 32
DrawImageRect figuren, Spalte*32, Zeile*32, 379,140,32,28
GegnerS = Spalte
GegnerZ = Zeile
End Select
Next
Next

; Lebensherzen zeichnen

For I=0 To Leben-1
DrawImageRect tiles2, I*25,0, 178,19, 22,20
Next

Flip

; Zusammenstoß prüfen

If (GegnerZ = SpielerZ) And (GegnerS = SpielerS) Then
DrawImageRect tiles2, SpielerS*32, SpielerZ*32, 428,231, 50,40
Flip
PlaySound todsound
Delay 3000
Leben = Leben - 1
If Leben = 0 Then Leben = 5 ; normalerweise: Spielende
Level$(GegnerZ, GegnerS) = \" \"
GegnerZ = GegnerStartZ
GegnerS = GegnerStartS
Level$(GegnerZ, GegnerS) = \"G\"
SpielerZ = SpielerStartZ
SpielerS = SpielerStartS
Level$(SpielerZ, SpielerS) = \"S\"
EndIf

; Spielfigur bewegen

If KeyDown(203) And ( Level$(SpielerZ,SpielerS-1) <> \"1\" ) Then
Level$(SpielerZ, SpielerS) = \" \"
SpielerS = SpielerS - 1
Level$(SpielerZ, SpielerS) = \"S\"
EndIf

If KeyDown(205) And ( Level$(SpielerZ,SpielerS+1) <> \"1\" ) Then
Level$(SpielerZ, SpielerS) = \" \"
SpielerS = SpielerS + 1
Level$(SpielerZ, SpielerS) = \"S\"
EndIf

If KeyDown(200) And ( Level$(SpielerZ-1,SpielerS) <> \"1\" ) Then
Level$(SpielerZ, SpielerS) = \" \"
SpielerZ = SpielerZ - 1
Level$(SpielerZ, SpielerS) = \"S\"
EndIf

If KeyDown(208) And ( Level$(SpielerZ+1,SpielerS) <> \"1\" ) Then
Level$(SpielerZ, SpielerS) = \" \"
SpielerZ = SpielerZ + 1
Level$(SpielerZ, SpielerS) = \"S\"
EndIf

; Gegner bewegen

Wahl = 0
If Level$(GegnerZ, GegnerS-1) = \" \" Then Wahl = Wahl +1
If Level$(GegnerZ, GegnerS+1) = \" \" Then Wahl = Wahl +1
If Level$(GegnerZ-1, GegnerS) = \" \" Then Wahl = Wahl +1
If Level$(GegnerZ+1, GegnerS) = \" \" Then Wahl = Wahl +1
If ( Wahl > 2 ) Or ( Richtung = 0 ) Then Richtung = Rand(4)

Select Richtung
Case 1 ; Links
If Level$(GegnerZ,GegnerS-1) <> \"1\" Then
Level$(GegnerZ,GegnerS) = \" \"
GegnerS = GegnerS - 1
Level$(GegnerZ,GegnerS) = \"G\"
Else
Richtung = 0
EndIf
Case 2 ; Rechts
If Level$(GegnerZ,GegnerS+1) <> \"1\" Then
Level$(GegnerZ,GegnerS) = \" \"
GegnerS = GegnerS + 1
Level$(GegnerZ,GegnerS) = \"G\"
Else
Richtung = 0
EndIf
Case 3 ; Hoch
If Level$(GegnerZ-1,GegnerS) <> \"1\" Then
Level$(GegnerZ,GegnerS) = \" \"
GegnerZ = GegnerZ - 1
Level$(GegnerZ,GegnerS) = \"G\"
Else
Richtung = 0
EndIf
Case 4 ; Runter
If Level$(GegnerZ+1,GegnerS) <> \"1\" Then
Level$(GegnerZ,GegnerS) = \" \"
GegnerZ = GegnerZ + 1
Level$(GegnerZ,GegnerS) = \"G\"
Else
Richtung = 0
EndIf
End Select

; Cheat

If KeyDown(46) Then Leben = 10 ; [C]

; Screenshot

If KeyHit(88) Then ; [F12]
SaveBuffer(FrontBuffer(),\"shot\" + Str$(Shot) + \".bmp\")
Shot = Shot + 1
EndIf

; Pause

If KeyDown(197) Or KeyHit(25) Then ; [P]
font = LoadFont(\"Times New Roman\",80,0,0,0)
SetFont font
Text 150,200, \"P A U S E\"
Flip
FlushKeys
WaitKey
FreeFont font
EndIf

WaitTimer timer
Until KeyHit(1)


un das in ne txt file:



Code: [AUSKLAPPEN]

11111111111111111111
1S   11        1   1
1 11 11 11 1 111 1 1
1 11 11    1 111 1 1
1       11         1
1 11 11    1 11 11 1
1 11 11 11 1 11 1  1
1               1 11
1 11 11 1111 1111  1
1111 11 1111    11 1
1            11    1
1111 11 1 11 11 11 1
1 11 11 1 11 11 11G1
1                  1
11111111111111111111


Schaus dir mal an.
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium
 

black_hunter

BeitragDi, Dez 20, 2005 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ich danke euch vielmals,
ich habe was versucht, und zwar der gegner bewegt sich jetzt nach links, und wenn eine mauer kommt, dann bleibt er stehen:

BlitzBasic: [AUSKLAPPEN]
If map(GegnerFeld_x-1,GegnerFeld_y) < 1
gegner_pixel = gegner_pixel + 1
gegner_x = gegner_x - 1
If gegner_pixel = 40 Then
GegnerFeld_x = GegnerFeld_x - 1
gegner_pixel = 0
EndIf
EndIf


ist es so richtig wie ich das bis jetzt gemacht habe? Wink
danke schonmal Very Happy

markus
 

black_hunter

BeitragDi, Dez 20, 2005 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
danke dir, ich habe das Buch, aber wenn ich das Pac man auf der Buch CD Starte, dann ist der Spieler gleich tot und dann kommt eine Meldung Array Index out of bounds, sobald ich das Spiel dann starte, dann wird ein Sound abgespielt das der Spieler getroffen wird, da ist ein fehler im programm, deshalb bringt mir das nicht viel, keine ahnung wo der fehler liegt Crying or Very sad

ich werde es mal anders ausprobieren, aber trotzdem vielen dank für eure hilfen Very Happy

markus
 

Omenaton_2

BeitragMi, Dez 21, 2005 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt viele Möglichkeiten. Zum Beispiel könntest du auf deiner Map jedes Feld, daß eine Kreuzung darstellt, intern extra kennzeichnen. (Oder immer aufs Neue Bewerten, das spielt keine große Rolle).
Beim Start startet das Monster in eine der 2 freien Richtungen per Zufall.
Dann jedes Mal, wenn das Monster die Mitte eines als Kreuzung markierten Feldes erreicht, springst du zu einer Wegauswahl-Rutine.
Darin machst du Folgendes:
Wenn die X Koordinate des Aufenthaltsfeldes des Spielers kleiner ist, als die X Koordinate des Monsters (also der Spieler befindet sich links von Monster), dann ist die horizontale Wunschrichtung -1 (du kannst so eine Variable machen).
Genauso für rechts, nach unten und nach oben machen.

Dann mußt du überprüfen, ob der Weg in die Wunschrichtung frei ist. Wenn ja, dann lenkst du das Monster in diese Richtung.
Der Schlüßel ist Variablen wie "Horizontale_Wunschrichtung" und "Vertikale_Wunschrichtung" zu haben und (nur) bei Wegverzweigungen diese sinnvoll anpassen.
Der Wert dieser Variable (-1 für nach Links, +1 für nach Rechts beom Horizontalen) ist die Zahl, mit der die Koordinaten der Monster bei Bewegung kontinuierlich modifiziert werden.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group