Pong KI Problem
Übersicht

tobias185Betreff: Pong KI Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo mache gerade ein Pong klone aber irgendwie komme ich bei dem gegner schläger nicht weiter das er hinter den ball hergeht das er ihn auch trift habe auch schon mehreres probiert mit If und mit der Repeat until schleife aber hat beides nicht funktioniert, wie würdet ihr das lösen. Ich habe auch schon die suchfunktion probiert und habe zu diesem thema nichts richtiges gefunden.
Code: [AUSKLAPPEN] Global Gfx_x = 800 Global Gfx_y = 600 Graphics Gfx_x,Gfx_y,16,2 SetBuffer BackBuffer() Player = LoadImage("Player.bmp") MaskImage Player,255,0,255 Gegner = LoadImage("Gegner.bmp") MaskImage Gegner,255,0,255 Balken = LoadImage("Balken.bmp") MaskImage Balken,255,0,255 Balken2 = LoadImage("Balken2.bmp") MaskImage Balken2,255,0,255 Ball = LoadImage("Ball.bmp") MaskImage Ball,255,0,255 Type Gegner Field gegnerx Field gegnery Field speed End Type speed = 3 gegnerx = 780 gegnery = 300 Balkenx = 0 Balkeny = 594 Balken2x = 0 Balken2y = -3 Ballx = 400 Bally = 300 SpeedBallx = 2 SpeedBally = 2 Repeat Cls gegnery = gegnery + speed Bally = Bally + SpeedBally Ballx = Ballx + SpeedBallx If ImagesCollide(Gegner,Gegnerx,Gegnery,0,Balken,Balkenx,Balkeny,0) Then speed = -speed EndIf If ImagesCollide(Gegner,Gegnerx,Gegnery,0,Balken2,Balkenx2,Balkeny2,0) Then speed = -speed EndIf If ImagesCollide(Ball,Ballx,Bally,0,Balken,Balkenx,Balkeny,0) Then SpeedBally = -SpeedBally -1 EndIf If ImagesCollide(Ball,Ballx,Bally,0,Balken2,Balkenx2,Balkeny2,0) Then SpeedBally = -SpeedBally -1 EndIf If ImagesCollide(Gegner,gegnerx,gegnery,0,Ball,Ballx,Bally,0) Then SpeedBallx = -SpeedBallx -1 EndIf DrawImage Gegner,gegnerx,gegnery DrawImage Balken,Balkenx,Balkeny DrawImage Balken2,Balken2x,Balken2y DrawImage Ball,Ballx,Bally Flip Until KeyDown(1) End |
||
http://gncboard.gn.funpic.de/index.php |
![]() |
Cardonic |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, ich würde das etwa so machen:
Code: [AUSKLAPPEN] GegnerX = GegnerX + (BallX-GegnerX) / 3 GegnerY = GegnerY + (BallY-GegnerY) / 3 Bei diesem code bewegt sich der Schläger des Gegners in Richtung des Balles (mit ein wenig verzögerung, oder wie man das nennen will) mfg Cardonic |
||
If you should go skating on the thin ice of modern life, dragging behind you the silent reproach of a million tear-stained eyes, don't be surprised when a crack in the ice appears under your feet. |
tobias185 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es funktioniert zwar aber irgendwie geht aber nichts mehr richtig mit der Imagecollide am rand vom bildschirm wo ich zwei balken hingesetzt habe da geht der schläger einfach durch. | ||
http://gncboard.gn.funpic.de/index.php |
![]() |
Spikespine |
![]() Antworten mit Zitat ![]() |
---|---|---|
Cardonic hat Folgendes geschrieben: Hi, ich würde das etwa so machen:
Code: [AUSKLAPPEN] GegnerX = GegnerX + (BallX-GegnerX) / 3 GegnerY = GegnerY + (BallY-GegnerY) / 3 Bei diesem code bewegt sich der Schläger des Gegners in Richtung des Balles (mit ein wenig verzögerung, oder wie man das nennen will) mfg Cardonic Eine solche KI ist langweilig. Spielspaß kommt auf, wenn ich der KI eine Reaktionszeit gebe, die manchmal in einem kleinen Bereich zufällig variiert, so dass der Gegner etwas menschenähnlicher wird. |
||
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax |
tobias185 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast du ein Tip dafür? | ||
http://gncboard.gn.funpic.de/index.php |
![]() |
Cardonic |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Man kann z.B. eine Variabel für die Ungenauigkeit erstellen, die sich fortan ändert. Dann kann man noch machen, dass der Schläger des Gegners sich erst bewegt, wenn der Ball schon über der Hälfte ist und sonst nur ein wenig auf und ab wippt. Man kann die Gegner-KI beliebig ausbauen. Ich habe auch mal so etwas geproggt: Es sieht am besten aus, wenn mehrere Faktoren die gegnerische Bewegungen beeinflussen. mfg Cardonic |
||
If you should go skating on the thin ice of modern life, dragging behind you the silent reproach of a million tear-stained eyes, don't be surprised when a crack in the ice appears under your feet. |
tobias185 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jetzt funktioniert alles ausser das der Ball irgendwie nicht schneller wird udn wenn der Bally und y = 400 ist geht der schläger nur nach unten aber reagiert nicht auf mein imagescollide.
Hier der code: Code: [AUSKLAPPEN] Global Gfx_x = 800
Global Gfx_y = 600 Graphics Gfx_x,Gfx_y,16,2 SetBuffer BackBuffer() Player = LoadImage("Player.bmp") MaskImage Player,255,0,255 Gegner = LoadImage("Gegner.bmp") MaskImage Gegner,255,0,255 Balken = LoadImage("Balken.bmp") MaskImage Balken,255,0,255 Balken2 = LoadImage("Balken2.bmp") MaskImage Balken2,255,0,255 Ball = LoadImage("Ball.bmp") MaskImage Ball,255,0,255 Const Rauf = 200, Runter = 208 Type Gegner Field gegnerx Field gegnery Field speed End Type Type Bally Field Ballx Field Bally Field SpeedBallx$ Field SpeedBally$ End Type Playerx = 3 Playery = 300 speed = 5 gegnerx = 780 gegnery = 300 Balkenx = 0 Balkeny = 594 Balken2x = 0 Balken2y = -4 Ballx = 400 Bally = 300 SpeedBallx = 2 SpeedBally = 2 Repeat Cls If KeyDown(Rauf) Then Playery = Playery - 3 EndIf If KeyDown(Runter) Then Playery = Playery + 3 EndIf If Ballx < 400 Then gegnery = gegnery + speed EndIf If ballx > 400 Then If bally - gegnery > 4 Then gegnery = gegnery + speed EndIf If bally - gegnery < -4 Then gegnery = gegnery - speed EndIf EndIf Bally = Bally + SpeedBally Ballx = Ballx + SpeedBallx If ImagesCollide(Gegner,gegnerx,gegnery,0,Balken2,Balkenx2,Balkeny2,0) Then gegnery = gegnery - speed EndIf If ImagesCollide(Gegner,gegnerx,gegnery,0,Balken,Balkenx,Balkeny,0) Then gegnery = gegnery - speed EndIf If ImagesCollide(Ball,Ballx,Bally,0,Balken,Balkenx,Balkeny,0) Then SpeedBally = -SpeedBally - 0.1 EndIf If ImagesCollide(Ball,Ballx,Bally,0,Balken2,Balkenx2,Balkeny2,0) Then SpeedBally = -SpeedBally -0.1 EndIf If ImagesCollide(Gegner,gegnerx,gegnery,0,Ball,Ballx,Bally,0) Then SpeedBallx = -SpeedBallx -0.1 EndIf If ImagesCollide(Player,Playerx,Playery,0,Ball,Ballx,Bally,0) Then SpeedBallx = -SpeedBallx -0.1 EndIf DrawImage Player,Playerx,Playery DrawImage Gegner,gegnerx,gegnery DrawImage Balken,Balkenx,Balkeny DrawImage Balken2,Balken2x,Balken2y DrawImage Ball,Ballx,Bally Flip Until KeyDown(1) End Ich habe probier auch die ganzen geschwindigkeiten auf das bild zu bringen aber das geht irgendwie nicht. Print "Speedgegner = " speed Print "Ballspeedx = " SpeedBallx# Print "Ballspeedy = " SpeedBally# |
||
http://gncboard.gn.funpic.de/index.php |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group