2D Gegner soll flüchten!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

2D Gegner soll flüchten!

Beitrag von Kaisky007 »

Ich habe ein Fangenspiel gemacht, für 2 Spieler. Irgendwann wollte ich dann auch ein Computer gegner machen. Wenn der Computer Fänger ist ist es ja leicht zu programmieren.
Nur wenn er Flüchten muss, habe ich kein Plan.....
Ein Boost habe ich geschafft, also wie Nitro in einem Auto Spiel. Und auch der Computer kann mit den Boost umgehen :) .
Einigermaßen habe ich es schon mit der Flucht hinbekommen.... aber noch nicht so ganz.
Hat wer vielleicht ne Idee?

PS1: Wundert euch nicht wegen den Namen der Variablen, es ist in dem Style meiner Lieblingsserie gemacht^^xD

PS2: ich habe noch kein Code reingemacht........

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"Vollbild")
InitMovie()
LoadMovie(0,"F:\Kai´s Spiel\Sounds\Agni Kai Avatar.mp3")
PlayMovie(0,0)
LoadSprite(0,"F:\Kai´s Spiel\Pics\LandKarte.bmp",0)
LoadSprite(1,"F:\Kai´s Spiel\Pics\GrüneBalken.bmp",0)
LoadSprite(2,"F:\Kai´s Spiel\Pics\Aang.bmp",0)
LoadSprite(3,"F:\Kai´s Spiel\Pics\Zuko.bmp",0)
LoadSprite(4,"F:\Kai´s Spiel\Pics\ButtonBlau.bmp",0)
LoadSprite(5,"F:\Kai´s Spiel\Pics\ButtonRot.bmp",0)
LoadSprite(6,"F:\Kai´s Spiel\Pics\GrenzeX.bmp",0)
LoadSprite(7,"F:\Kai´s Spiel\Pics\GrenzeY.bmp",0)
AangX = 390
AangY = 2
ZukoX = 390
ZukoY = 523
DranIstA = 0
DranIstB = 0
LadenAX = 0
LadenAY = 550
LadenBX = 0
LadenBY = 575
GrenzeAX = 0
GrenzeAY = 543
GrenzeBX = 0
GrenzeBY = 0
GrenzeCX = 0
GrenzeCY = 0
GrenzeDX = 798
GrenzeDY = 0
LandKarteX = 0
LandKarteY = 0
GrueneBalkenX = 0
GrueneBalkenY = 545
Compi = 0
WartenA = 0
WartenB = 0
Dauer = 0
Repeat
If DranIstA = 1 And WartenB = 0 And WartenA < 100
WartenA + 3
EndIf
If WartenA > 98 And WartenB = 0
WartenB = 1
WartenA = 0
EndIf
If WartenB = 1 And DranIstA = 0
WartenB = 0
EndIf
If Compi = 1 And (ZukoX > AangX + 70 Or ZukoX + 70 < AangX Or ZukoY > AangY + 70 Or ZukoY + 70 < AangY)
Boost2 = 2
EndIf
If Compi = 1 And DranIstA = 1 And WartenB = 1
If ZukoX > AangX
ZukoX - (Boost2)
EndIf
If ZukoX < AangX
ZukoX + (Boost2)
EndIf
If ZukoY > AangY
ZukoY - (Boost2)
EndIf
If ZukoY < AangY
ZukoY + (Boost2)
EndIf
EndIf
If LadenAX > 788
LadenAX = 788
EndIf
If LadenBX > 788
LadenBX = 788
EndIf
If Compi = 1 And DranIstA = 0 And (ZukoX + 220 < AangX Or ZukoY + 220 < AangY Or ZukoX > AangX - 220 Or ZukoY > AangY - 220)
If ZukoX < AangX And ZukoX > 100
ZukoX - (Boost2)
EndIf
If ZukoY < AangY And ZukoY > 80
ZukoY - (Boost2)
EndIf
If ZukoX > AangX And ZukoX < 681
ZukoX + (Boost2)
EndIf
If ZukoY > AangY And ZukoY < 451
ZukoY + (Boost2)
EndIf
If ZukoX < 101 And ZukoY < AangY And ZukoY < 80
ZukoY - (Boost2)
EndIf
If ZukoX < 101 And ZukoY > AangY And ZukoY < 465
ZukoY + (Boost2)
EndIf
If ZukoX > 680 And ZukoY < AangY And ZukoY < 80
ZukoY - (Boost2)
EndIf
If ZukoX > 680 And ZukoY > AangY And ZukoY > 465
ZukoY + (Boost2)
EndIf
If ZukoY < 81 And ZukoX < AangX And ZukoX > 100
ZukoX - (Boost2)
EndIf
If ZukoY < 81 And ZukoX > AangX And ZukoX > 681
ZukoX + (Boost2)
EndIf
If ZukoY > 450 And ZukoX < AangX And ZukoX > 100
ZukoX - (Boost2)
EndIf
If ZukoY > 450 And ZukoX > AangX And ZukoX > 681
ZukoX + (Boost2)
EndIf
EndIf
LadenAX + 1
LadenBX + 1
Boost1 = 3
Boost2 = 3
If DranIstA = 0
WerIstDran = 0+256*0+256*256*255
EndIf
If DranIstA = 1
WerIstDran = 255+256*0+256*256*0
EndIf
FlipBuffers()
ClearScreen((WerIstDran))
DisplayTransparentSprite(0,LandKarteX,LandKarteY)
DisplayTransparentSprite(1,GrueneBalkenX,GrueneBalkenY)
DisplayTransparentSprite(2,AangX,AangY)
DisplayTransparentSprite(3,ZukoX,ZukoY)
DisplayTransparentSprite(4,LadenAX,LadenAY)
DisplayTransparentSprite(5,LadenBX,LadenBY)
DisplayTransparentSprite(6,GrenzeAX,GrenzeAY)
DisplayTransparentSprite(6,GrenzeBX,GrenzeBY)
DisplayTransparentSprite(7,GrenzeCX,GrenzeCY)
DisplayTransparentSprite(7,GrenzeDX,GrenzeDY)
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Space) And Compi = 0
Compi = 1
EndIf
If KeyboardReleased(#PB_Key_Space) And Compi = 1
Compi = 0
EndIf
If KeyboardPushed(#PB_Key_Return) And LadenAX > 0 And (KeyboardPushed(#PB_Key_Up) Or KeyboardPushed(#PB_Key_Down) Or KeyboardPushed(#PB_Key_Left) Or KeyboardPushed(#PB_Key_Right))
Boost1 = 5
LadenAX - 5
EndIf
If (KeyboardPushed(#PB_Key_Tab) And LadenBX > 0 And KeyboardPushed(#PB_Key_W) Or KeyboardPushed(#PB_Key_S) Or KeyboardPushed(#PB_Key_D) Or KeyboardPushed(#PB_Key_A)) And Compi = 0
Boost2 = 5
LadenBX - 5
EndIf
If (Compi = 1 And DranIstA = 1 And ZukoX < AangX + 70 And ZukoX + 70 > AangX And ZukoY < AangY + 70 And ZukoY + 70 > AangY And LadenBX > 0) Or (Compi = 1 And (LadenBX > 760 Or Dauer = 1))
Boost2 = 4
LadenBX - 5
EndIf
If Compi = 1 And (LadenBX > 760 Or Dauer = 1)
Dauer = 1
EndIf
If LadenBX < 410 And Compi = 1 And Dauer = 1
Dauer = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
AangY - (Boost1)
If AangY < 2
AangY = 2
EndIf
EndIf
If KeyboardPushed(#PB_Key_Down)
AangY + (Boost1)
If AangY > 523
AangY = 523
EndIf
EndIf
If KeyboardPushed(#PB_Key_Right)
AangX + (Boost1)
If AangX > 778
AangX = 778
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left)
AangX - (Boost1)
If AangX < 2
AangX = 2
EndIf
EndIf
If KeyboardPushed(#PB_Key_W) And Compi = 0
ZukoY - (Boost2)
EndIf
If KeyboardPushed(#PB_Key_S) And Compi = 0
ZukoY + (Boost2)
EndIf
If KeyboardPushed(#PB_Key_D) And Compi = 0
ZukoX + (Boost2)
EndIf
If KeyboardPushed(#PB_Key_A) And Compi = 0
ZukoX - (Boost2)
EndIf
If ZukoY < 2
ZukoY = 2
EndIf
If ZukoY > 523
ZukoY = 523
EndIf
If ZukoX > 778
ZukoX = 778
EndIf
If ZukoX < 2
ZukoX = 2
EndIf
If AangX > ZukoX + 20 Or AangX + 20 < ZukoX Or AangY > ZukoY + 20 Or AangY + 20 < ZukoY
DranIstB = 0
EndIf
If DranIstA = 0 And AangX < ZukoX + 20 And AangX + 20 > ZukoX And AangY < ZukoY + 20 And AangY + 20 > ZukoY And DranIstB = 0
DranIstA = 1
DranIstB = 1
EndIf
If DranIstA = 1 And AangX < ZukoX + 20 And AangX + 20 > ZukoX And AangY < ZukoY + 20 And AangY + 20 > ZukoY And DranIstB = 0
DranIstA = 0
DranIstB = 1
EndIf
Until KeyboardPushed(1)
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Code anpassen, Titel netter gestalten, weniger oft die selben Zeichen hintereinander setzten (-> "???", ".........").
Nur so als Tipp, wenn du wirklich Hilfe willst.
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

Beitrag von Kaisky007 »

okokok...
Das mit den Code mache ich.
Ist aber ziemlich viel...
10 min schätze ich.
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

Beitrag von Kaisky007 »

Wow, 301 Zeilen
So, hier der Code:

Code: Alles auswählen

InitSprite()

InitKeyboard()

OpenScreen(800,600,32,"Vollbild")

InitMovie()

LoadMovie(0,"F:\Kai´s Spiel\Sounds\Agni Kai Avatar.mp3")

PlayMovie(0,0)

LoadSprite(0,"F:\Kai´s Spiel\Pics\LandKarte.bmp",0)
LoadSprite(1,"F:\Kai´s Spiel\Pics\GrüneBalken.bmp",0)
LoadSprite(2,"F:\Kai´s Spiel\Pics\Aang.bmp",0)
LoadSprite(3,"F:\Kai´s Spiel\Pics\Zuko.bmp",0)
LoadSprite(4,"F:\Kai´s Spiel\Pics\ButtonBlau.bmp",0)
LoadSprite(5,"F:\Kai´s Spiel\Pics\ButtonRot.bmp",0)
LoadSprite(6,"F:\Kai´s Spiel\Pics\GrenzeX.bmp",0)
LoadSprite(7,"F:\Kai´s Spiel\Pics\GrenzeY.bmp",0)

AangX = 390
AangY = 2

ZukoX = 390
ZukoY = 523

DranIstA = 0
DranIstB = 0

LadenAX = 0
LadenAY = 550
LadenBX = 0
LadenBY = 575

GrenzeAX = 0
GrenzeAY = 543
GrenzeBX = 0
GrenzeBY = 0
GrenzeCX = 0
GrenzeCY = 0
GrenzeDX = 798
GrenzeDY = 0

LandKarteX = 0
LandKarteY = 0

GrueneBalkenX = 0
GrueneBalkenY = 545

Compi = 0

WartenA = 0
WartenB = 0

Dauer = 0



Repeat



If DranIstA = 1 And WartenB = 0 And WartenA < 100
  WartenA + 3
EndIf

If WartenA > 98 And WartenB = 0
  WartenB = 1
  WartenA = 0
EndIf

If WartenB = 1 And DranIstA = 0
  WartenB = 0
EndIf

If Compi = 1 And (ZukoX > AangX + 70 Or ZukoX + 70 < AangX Or ZukoY > AangY + 70 Or ZukoY + 70 < AangY)
  Boost2 = 2
EndIf

If Compi = 1 And DranIstA = 1 And WartenB = 1

  If ZukoX > AangX
    ZukoX - (Boost2)
  EndIf
  
  If ZukoX < AangX
    ZukoX + (Boost2)
  EndIf
  
  If ZukoY > AangY
    ZukoY - (Boost2)
  EndIf
  
  If ZukoY < AangY
    ZukoY + (Boost2)
  EndIf
  
EndIf

If LadenAX > 788
  LadenAX = 788
EndIf

If LadenBX > 788
  LadenBX = 788
EndIf

If Compi = 1 And DranIstA = 0 And (ZukoX + 220 < AangX Or ZukoY + 220 < AangY Or ZukoX > AangX - 220 Or ZukoY > AangY - 220)

  If ZukoX < AangX And ZukoX > 100
    ZukoX - (Boost2)
  EndIf

  If ZukoY < AangY And ZukoY > 80
    ZukoY - (Boost2)
  EndIf

  If ZukoX > AangX And ZukoX < 681
    ZukoX + (Boost2)
  EndIf

  If ZukoY > AangY And ZukoY < 451
    ZukoY + (Boost2)
  EndIf

  If ZukoX < 101 And ZukoY < AangY And ZukoY < 80
    ZukoY - (Boost2)
  EndIf

  If ZukoX < 101 And ZukoY > AangY And ZukoY < 465
    ZukoY + (Boost2)
  EndIf

  If ZukoX > 680 And ZukoY < AangY And ZukoY < 80
    ZukoY - (Boost2)
  EndIf

  If ZukoX > 680 And ZukoY > AangY And ZukoY > 465
    ZukoY + (Boost2)
  EndIf

  If ZukoY < 81 And ZukoX < AangX And ZukoX > 100
    ZukoX - (Boost2)
  EndIf

  If ZukoY < 81 And ZukoX > AangX And ZukoX > 681
    ZukoX + (Boost2)
  EndIf

  If ZukoY > 450 And ZukoX < AangX And ZukoX > 100
    ZukoX - (Boost2)
  EndIf

  If ZukoY > 450 And ZukoX > AangX And ZukoX > 681
    ZukoX + (Boost2)
  EndIf

EndIf

LadenAX + 1
LadenBX + 1

Boost1 = 3
Boost2 = 3

If DranIstA = 0
  WerIstDran = 0+256*0+256*256*255
EndIf

If DranIstA = 1
  WerIstDran = 255+256*0+256*256*0
EndIf

FlipBuffers()

ClearScreen((WerIstDran))

DisplayTransparentSprite(0,LandKarteX,LandKarteY)
DisplayTransparentSprite(1,GrueneBalkenX,GrueneBalkenY)
DisplayTransparentSprite(2,AangX,AangY)
DisplayTransparentSprite(3,ZukoX,ZukoY)
DisplayTransparentSprite(4,LadenAX,LadenAY)
DisplayTransparentSprite(5,LadenBX,LadenBY)
DisplayTransparentSprite(6,GrenzeAX,GrenzeAY)
DisplayTransparentSprite(6,GrenzeBX,GrenzeBY)
DisplayTransparentSprite(7,GrenzeCX,GrenzeCY)
DisplayTransparentSprite(7,GrenzeDX,GrenzeDY)

ExamineKeyboard()

If KeyboardReleased(#PB_Key_Space) And Compi = 0
  Compi = 1
EndIf

If KeyboardReleased(#PB_Key_Space) And Compi = 1
  Compi = 0
EndIf

If KeyboardPushed(#PB_Key_Return) And LadenAX > 0 And (KeyboardPushed(#PB_Key_Up) Or KeyboardPushed(#PB_Key_Down) Or KeyboardPushed(#PB_Key_Left) Or KeyboardPushed(#PB_Key_Right))
  Boost1 = 5
  LadenAX - 5
EndIf

If (KeyboardPushed(#PB_Key_Tab) And LadenBX > 0 And KeyboardPushed(#PB_Key_W) Or KeyboardPushed(#PB_Key_S) Or KeyboardPushed(#PB_Key_D) Or KeyboardPushed(#PB_Key_A)) And Compi = 0
  Boost2 = 5
  LadenBX - 5
EndIf

If (Compi = 1 And DranIstA = 1 And ZukoX < AangX + 70 And ZukoX + 70 > AangX And ZukoY < AangY + 70 And ZukoY + 70 > AangY And LadenBX > 0) Or (Compi = 1 And (LadenBX > 760 Or Dauer = 1))
  Boost2 = 4
  LadenBX - 5
EndIf

If Compi = 1 And (LadenBX > 760 Or Dauer = 1)
  Dauer = 1
EndIf

If LadenBX < 410 And Compi = 1 And Dauer = 1
  Dauer = 0
EndIf

If KeyboardPushed(#PB_Key_Up)
  AangY - (Boost1)
  If AangY < 2
    AangY = 2
  EndIf
  
EndIf

If KeyboardPushed(#PB_Key_Down)
  AangY + (Boost1)
  If AangY > 523
    AangY = 523
  EndIf

EndIf

If KeyboardPushed(#PB_Key_Right)
  AangX + (Boost1)
    If AangX > 778
  AangX = 778
EndIf

EndIf

If KeyboardPushed(#PB_Key_Left)
  AangX - (Boost1)
  If AangX < 2
    AangX = 2
EndIf

EndIf

If KeyboardPushed(#PB_Key_W) And Compi = 0
  ZukoY - (Boost2)
EndIf

If KeyboardPushed(#PB_Key_S) And Compi = 0
  ZukoY + (Boost2)
EndIf

If KeyboardPushed(#PB_Key_D) And Compi = 0
  ZukoX + (Boost2)
EndIf

If KeyboardPushed(#PB_Key_A) And Compi = 0
  ZukoX - (Boost2)
EndIf

If ZukoY < 2
  ZukoY = 2
EndIf

If ZukoY > 523
  ZukoY = 523
EndIf

If ZukoX > 778
  ZukoX = 778
EndIf

If ZukoX < 2
  ZukoX = 2
EndIf

If AangX > ZukoX + 20 Or AangX + 20 < ZukoX Or AangY > ZukoY + 20 Or AangY + 20 < ZukoY
  DranIstB = 0
EndIf

If DranIstA = 0 And AangX < ZukoX + 20 And AangX + 20 > ZukoX And AangY < ZukoY + 20 And AangY + 20 > ZukoY And DranIstB = 0
  DranIstA = 1
  DranIstB = 1
EndIf

If DranIstA = 1 And AangX < ZukoX + 20 And AangX + 20 > ZukoX And AangY < ZukoY + 20 And AangY + 20 > ZukoY And DranIstB = 0
  DranIstA = 0
  DranIstB = 1
EndIf

Until KeyboardPushed(1)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Ähh was erwartest du jetzt als antwort ?

genauso wie du in deinem Anderen Thema gefragt hast wie ein Schuss genau die Maus trifft, kannst du das gleiche mit "weglaufen" machen, einfach mal 180° und schon rennt das Objekt nicht zur Maus sondern immer weg von ihr
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

Beitrag von Kaisky007 »

Das habe ich auch schon alleine hingekrickt, aber der läuft ja gegen die Wand , genau darin liegt ja das problem....
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Wenn er gegen die Wandläuft, wird "er" es ja merken. Nun könnte er entweder zufällig, oder vom Winkel zur Wand abhängig, an dieser entlang laufen.
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

Beitrag von Kaisky007 »

Es ist ja ein Kasten.
Wenn er daran entlang läuft landet er in der ecke
und ich weiß nicht wie ich programmieren kann das er daraus geht...
Und wenn ich es einfach programmiere läuft er genau gegen ein.
Er soll ja garnicht erst in die Ecke gehen.
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

Beitrag von Kaisky007 »

Aaaaaalsooooo:
Das Spielfeldt ist ein Der Bildschirm, also ein simpler aus den man niht rauskann.
Wenn ich programmiere das er immer von mir Wegläuft, läuft er gegen die Wand. Bei der Wand läuft er dann entlang, bis er an einer anderen Wand stost, also wenn er in der Ecke ist. Es ist immer noch programmiert das er weiter in der richtung läuft, und ich kann ich problemlos fangen.

So schwer kann das doch nicht sein! Bitte, helft mir, ich bin mit meinen Ideen am Ende, habe das Problem schon seit einen Monat... :cry:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

na dann musst du eben zusätzlich prüfen, ob er sich dort überhaupt bewegen kann,
und wenn nicht, dann muss er eben auch mal näher an den player dran um ihn zu umgehen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten