2 Probleme mit KI und Gegnern
Übersicht

![]() |
BlitzardBetreff: 2 Probleme mit KI und Gegnern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hab 2 Probleme mit meinem Game.
1. Die KI funktioniert nicht die Gegner bewegen sich einfach net. 2. Ich muss meine Gegner immer in einer bestimmten reihenfolge besiegen z z.B Schiff 1 muss immer als erstes zerstört werden. Wenn Schiff 1 noch nicht zerstört wurde gehen die schüsse von meinem schiff durch Schiff 2 und 3 durch. Hier ist mein Code Code: [AUSKLAPPEN] Graphics 800, 600, 32, 2 Global sterne=CreateImage(800, 600) ;Globale Variable für den Hintergrund SetBuffer ImageBuffer(sterne) ;Imagebuffer Setzen For zaehler = 1 To 1000 ;Anzahl der Sterne x = Rnd(0, 800) ;Verteilen der Sterne auf der X-Achse y = Rnd(0, 600) ;Verteilen der Sterne auf der Y-Achse Plot x, y ;"Sterne" zeichnen Next max_x=GraphicsWidth();Begrenzung x-Achse max_y=GraphicsHeight();Begrenzung y-Achse SetBuffer BackBuffer() ;Bild Buffer Setzen Type schuss ;Type Schuss Field x Field y End Type ;Type beenden Type Gegner Field gegner Field x Field y Field Gegnerenergie End Type Type Spieler Field Spieler End Type Const schussspeed = -5 ;Schuss Geschwindigkeit Schiff = LoadImage ("Schiff.bmp") ;Spielerschiff laden schussbild = LoadImage ("Schuss.bmp") ;Schuss laden Gegner = LoadImage ("GegnerSchiff.bmp") ;GegnerSchiff laden Global Gegnerenergie = 100 Global Spielerenergie = 200 MaskImage Schiff ,255,0,255 ;Schiff maskieren MaskImage schussbild ,255,0,255 MaskImage Gegner ,255,0,255 NewEnemy(500,300,100) NewEnemy(300,200,100) NewEnemy(300,300,100) ;Hauptschleife Repeat Cls ;Bildschirm löschen ; >>>>>>>>>>Bitmaps laden<<<<<<<<<< DrawImage sterne, 0, 0 ;Hintergrund zeichnen DrawImage Schiff ,x,y,0 ;Bild zeichnen ; >>>>>>>>>>Steuerung<<<<<<<<<< If KeyDown(200) = 1 Then y = y - 4 ;Steuerung nach OBEN If KeyDown(208) = 1 Then y = y + 2 ;Steuerung nach UNTEN If KeyDown(205) = 1 Then x = x + 3 ;Steuerung nach RECHTS If KeyDown(203) = 1 Then x = x - 3 ;Steuerung nach LINKS ; >>>>>>>>>>Begrenzung<<<<<<<<<< If x>GraphicsWidth()-50 Then x=GraphicsWidth()-50 If x<0 Then x=0 If y>GraphicsHeight()-50 Then y=GraphicsHeight()-50 If y<0 Then y=0 ; >>>>>>>>>>Schussfunktion Player<<<<<<<<<< If KeyHit (57) Then s.schuss = New schuss ;Laden von neuem Schuss wenn Leertaste gedrückt wird. s\x = x + 10 ;X-Achse s\y = y ;Y-Achse EndIf For ein.gegner=Each gegner DrawImage Gegner ,ein.gegner\x ,ein.gegner\y Next For s.schuss = Each schuss s\y = s\y + schussspeed Color 255,0,0 DrawImage schussbild ,s\x,s\y,0 For ein.gegner=Each gegner If ImagesCollide(schussbild, s\x, s\y, 0, Gegner, ein.gegner\x, ein.gegner\y, 0) Then Delete s.schuss ein.gegner\Gegnerenergie = ein.gegner\Gegnerenergie-30 If ein.gegner\Gegnerenergie<=0 Then Delete ein.gegner EndIf Goto nimmercheckfordelete Next If s\y > 605 Then Delete s.schuss EndIf .nimmercheckfordelete Next ; >>>>>>>>>>Gegner<<<<<<<<<< If x<fxposi Then fxposi=fxposi-1 EndIf If x>fxposi Then fxposi=fxposi+1 EndIf ;>>>>>>>>>>Ende Programm<<<<<<<<<< Flip ;Bild wechseln Until KeyHit(1) ;Fenster schließen End Function NewEnemy(fxposi,fyposi,fenergie) ein.gegner=New gegner ein.gegner\x=fxposi ein.gegner\y=fyposi ein.gegner\Gegnerenergie=fenergie End Function |
||
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Ich hab das Prob bisher nicht gefunden, bin aber dabei!
Aber hier ein paar Tipps: ![]() ![]() EDIT: Hier eingerückt!! Dein Fehler war das goto!! das muss weg und dann müsste das funktionieren!! und wegen der gegnerbewegung, dann musst du auch einfügen, dass sich die gegner bewegen! Code: [AUSKLAPPEN] Graphics 800, 600, 32, 2
Global sterne=CreateImage(800, 600) ;Globale Variable für den Hintergrund SetBuffer ImageBuffer(sterne) ;Imagebuffer Setzen For zaehler = 1 To 1000 ;Anzahl der Sterne x = Rnd(0, 800) ;Verteilen der Sterne auf der X-Achse y = Rnd(0, 600) ;Verteilen der Sterne auf der Y-Achse Plot x, y ;"Sterne" zeichnen Next max_x=GraphicsWidth();Begrenzung x-Achse max_y=GraphicsHeight();Begrenzung y-Achse SetBuffer BackBuffer() ;Bild Buffer Setzen Type schuss ;Type Schuss Field x Field y End Type ;Type beenden Type Gegner Field gegner Field x Field y Field Gegnerenergie End Type Type Spieler Field Spieler End Type Const schussspeed = -5 ;Schuss Geschwindigkeit Schiff = LoadImage ("Schiff.bmp") ;Spielerschiff laden schussbild = LoadImage ("Schuss.bmp") ;Schuss laden Gegner = LoadImage ("GegnerSchiff.bmp") ;GegnerSchiff laden Global Gegnerenergie = 100 Global Spielerenergie = 200 MaskImage Schiff ,255,0,255 ;Schiff maskieren MaskImage schussbild ,255,0,255 MaskImage Gegner ,255,0,255 NewEnemy(500,300,100) NewEnemy(300,200,100) NewEnemy(300,300,100) Repeat Cls DrawImage sterne, 0, 0 ;Hintergrund zeichnen DrawImage Schiff ,x,y,0 ;Bild zeichnen If KeyDown(200) = 1 Then y = y - 4 ;Steuerung nach OBEN If KeyDown(208) = 1 Then y = y + 2 ;Steuerung nach UNTEN If KeyDown(205) = 1 Then x = x + 3 ;Steuerung nach RECHTS If KeyDown(203) = 1 Then x = x - 3 ;Steuerung nach LINKS If x>GraphicsWidth()-50 Then x=GraphicsWidth()-50 If x<0 Then x=0 If y>GraphicsHeight()-50 Then y=GraphicsHeight()-50 If y<0 Then y=0 If KeyHit (57) Then s.schuss = New schuss ;Laden von neuem Schuss wenn Leertaste gedrückt wird. s\x = x + 10 ;X-Achse s\y = y ;Y-Achse EndIf For ein.gegner=Each gegner DrawImage Gegner ,ein.gegner\x ,ein.gegner\y Next For s.schuss = Each schuss s\y = s\y + schussspeed Color 255,0,0 DrawImage schussbild ,s\x,s\y,0 For ein.gegner=Each gegner If ImagesCollide(schussbild, s\x, s\y, 0, Gegner, ein.gegner\x, ein.gegner\y, 0) Then Delete s.schuss ein.gegner\Gegnerenergie = ein.gegner\Gegnerenergie-30 If ein.gegner\Gegnerenergie<=0 Then Delete ein.gegner EndIf Next If s\y > 605 Then Delete s.schuss Next If x<fxposi Then fxposi=fxposi-1 If x>fxposi Then fxposi=fxposi+1 Flip ;Bild wechseln Until KeyHit(1) ;Fenster schließen End Function NewEnemy(fxposi,fyposi,fenergie) ein.gegner=New gegner ein.gegner\x=fxposi ein.gegner\y=fyposi ein.gegner\Gegnerenergie=fenergie End Function |
||
![]() |
Blitzard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt kommt immer der Fehgler Object not found | ||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
is ja auch klar ... schalt mal den debugger ein, dann weißte wo und solltest auch wissen warum ...
ich vermute mal an dieser stelle : If s\y > 605 Then Delete s.schuss tja, und woran liegts!? s existiert bereits nicht mehr... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group