2 Probleme mit KI und Gegnern

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Blitzard

Betreff: 2 Probleme mit KI und Gegnern

BeitragMo, Jul 11, 2005 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jul 12, 2005 9:23
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Ich hab das Prob bisher nicht gefunden, bin aber dabei!

Aber hier ein paar Tipps:
Arrow Rück den Code ein!
Arrow Nimm Variablen, die Aussagen wofür sie da sind!

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

BeitragDi, Jul 12, 2005 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt kommt immer der Fehgler Object not found

Alfadur

BeitragDi, Jul 12, 2005 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group