space shooter

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

zirri

Betreff: space shooter

BeitragDo, Aug 19, 2004 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute
Ich bin neu im Forum und bin dabei einen (einfachen) Space Shooter zu erstellen. Ich habe aber ein Problem immer wenn ich eine Rakete auf einen gegner feuer und sie trifft, passiert gar nichts und wenn ich mit einem Gegner kollidiere bin ich wieder im Blitz basic menü. D.H. kein Spielbildschirm mehr. Sad (Weiß jemand wie man aus Spaß die Raketen dazu bringt den gegnern zu folgen. d.h. Zielsuchraketen?)

AppTitle "Shooter"
Graphics 640, 480
SetBuffer BackBuffer()

Global monster = LoadImage("player2.bmp")
Global player = LoadImage("spaceship3.bmp")
Global schussbild = LoadImage("bullet.bmp")
Global background = LoadImage("stars.bmp")

Dim rakete(20,2)
Global treffer = 0
Global hoehe = 200
Global schuss = 0
Global punkte = 0
Global pos_y = 10
Global sin_x = 0
Global x = 300
Global y = 300
Global bg = 0
Global i = 0

Repeat
Cls

hintergrund()
steuerung()
schiesen()
gegner()
kollisionen()
spieler()
punkte()

Flip
Until KeyDown(1)

Function hintergrund()
bg = bg + 1
If bg = 200 Then bg = 0
TileBlock background, 0, bg
End Function

Function steuerung()
If KeyDown(205) Then x = x + 4
If KeyDown(203) Then x = x - 4
If KeyDown(200) Then y = y - 4
If KeyDown(208) Then y = y + 4

If x > 600 Then x = 600
If x < 0 Then x = 0
If y > 440 Then y = 440
If y < 0 Then y = 0
End Function

Function schiesen()
If KeyHit(57) Then
schuss = schuss + 1
If schuss = 21 Then schuss = 1
rakete(schuss,0) = 1
rakete(schuss,1) = x + 8
rakete(schuss,2) = y - 16
EndIf

For l = 1 To 20
If rakete(l,0) = 1 Then
DrawImage schussbild, rakete(l,1), rakete(l,2)
rakete(l,2) = rakete(l,2) - 5
EndIf
Next
End Function

Function gegner()
i = i + 1
pos_y = pos_y + 3
sin_x = Sin(i) * hoehe
sin_x = sin_x + 300
DrawImage monster, sin_x, pos_y
If pos_y > 641 Then
punkte = punkte - 10
pos_y = 0
hoehe = Rnd(200,300)
EndIf
End Function

Function kollisionen()
For k = 1 To 20
If rakete(k,0) = 1 And ImagesOverlap(monster, sin_x, pos_y, schussbild, rakete(k,1), rakete(k,2)) Then
rakete(k,0) = 0
treffer = treffer + 1
EndIf
Next

If treffer = 3 Then
treffer = 0
punkte = punkte + 10
hoehe = Rnd(200,300)
pos_y = -10
EndIf

If ImagesOverlap(monster, sin_x, pos_y, player, x, y) Then
End
EndIf
End Function

Function spieler()
DrawImage player, x, y
End Function

Function punkte()
Text 400,10, "Du hast "+punkte+" Punkte"
End Function

simi

BeitragDo, Aug 19, 2004 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, willkommen.

Dass die Gegner nicht verschwinden ist eigentlic klar, weil du ja gar nichts machst, dass sie verschwinden. Du setzt ihn dann am besten wieder zurück an die Startposition:
Code: [AUSKLAPPEN]

For k = 1 To 20
  If rakete(k,0) = 1 And ImagesOverlap(monster, sin_x, pos_y, schussbild, rakete(k,1), rakete(k,2)) Then
    rakete(k,0) = 0
    treffer = treffer + 1

    Sin_x=0:Pos_y=10

  EndIf
Next


Dass du wenn du in das Gegnerschiff reingeflogen bist, wieder auf der BB-Oberfläche bist, liegt daran, dass du das Programm mit end beendest.
Du müsstes irgendwie ein Gameover Bildschirm anzeigen, und dann fragen, ob man noch einmal spielen möchte.

Zu den Zielsuchenden Raketen:
Such mal nach ATan2 und schei dir das Beispiel in der Onlinehilfe an.

cu simi

zirri

BeitragDo, Aug 19, 2004 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi simi. Danke es funktioniert. Eine frage ich programmiere noch nicht lange . Weißt du oder jemand anders wie man so einen Game Over Bildschirm ins Spiel bringt? oder überhaupt ein Menü Question
cu Tim

Bfox

BeitragFr, Aug 20, 2004 8:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Wilkommen!

Bitte benutz die Forum-Suche! Rolling Eyes

Es gibt schon genügent solche Fragen!

z.B.: Wie erstelle ich ein Menü und viele mehr! Ich glaub du findest bestimmt was!
Glauben ist Mangel an Wissen!

DivineDominion

BeitragFr, Aug 20, 2004 8:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, habe da mal Nachsicht Smile Ein Menü programmierst du eigentlich wie ein Spiel.
Wie du es in den Code einbindest ist jetzt deine Sache, dazu komm ich am Ende noch mal. Das Prinzip von einem Menü ist es ja, auf Eingabe vom User zu warten, egal in welcher Form. Wenn du ein hochauflösendes Spiel machst, bietet sich die Maus wohl an. Dann prüfst du eben, ob der Mauszeiger in bestimmten Bereichen ist. Diese Bereiche stellen dann die Knöpfe im Menü dar.
Code: [AUSKLAPPEN]
If MouseDown( 1 )
  mx = MouseX()
  my = MouseY()
  If mx > 10 and mx < 20
    if my > 10 and my < 20
      end ;Beenden-Knopf z.B. :)
    endif
  endif
endif

Das meine ich mit BEreichen prüfen. Du checkst einfach ob die Maus zwischen zwei Korrdinaten ( P1(10,10) und P2(20,20) ) ist, wenn die Taste gedrückt wurde. Damit kannst du dann "Knöpfe" machen. Musst natürlich wissen wo die Menüpunkte stehen und wie breit & hoch sie sind, sonst macht das keinen Sinn Smile Hier wäre der Menüpunkt 10x10 Pixel groß und befände sich an Position 10,10.


Naja, bei einem Menü das mit den Pfeiltasten gesteuert wird bewegst du einen Cursor, ne Hand z.B. oder du lässt die Menüpunkte blinken, sobald man den hoch/runter Pfeil benutzt. Hier musst du rumprobieren ob du nach Nummern abfragst (0 = Neues Spiel, 1 = Laden, 2 = Ende oder so) oder die Position des Cursors checkst. Das ist aber dann nur Formsache.

Naja und einbinden kannst du das ganze indem du eine globale variale benutzt, z.B. Spielmodus%, und der einen Wert für den Modus Menü gibst (z.b. 0, weil das beim erstellen von variablen der standartwert ist) und einen anderen für das Spiel zuweist (z.b. 1). Dann prüfst du eben den Modus und wenn er 0 ist zeigst du das Menü an. Wenn nicht das Spiel.
Dabei ist es wichtig das du mit Funktionen umgehen kannst um deinen Code sinnvoll aufzuteilen, sonst hast du den ganzen Schmarrn in der Hauptschleife und blcikst nicht mehr durch Smile
christian.tietze@gmail.com - https://christiantietze.de
macOS

zirri

BeitragFr, Aug 20, 2004 12:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Entschuldigung wird nicht wieder vorkommen. danke jedenfals DivineDominion. Smile

Bfox

BeitragFr, Aug 20, 2004 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte es nicht böse! Ich wollte dich nur darauf hinweißen!

Denn viele antworten auf solche Fragen nicht mehr weil es solche Fragen
schon zu genüge gibt!

Und oft hilft es dir mehr in einem anderem Thread nachzuschauen als selbst einen zu machen!
Glauben ist Mangel an Wissen!
 

-BB Noob-

BeitragSa, Aug 21, 2004 10:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier sind ganz einfache Verfolgungsraketen:

If Schussx > Gegnerx then Schussx = Schussx - 3
If Schussx < Gegnerx then Schussx = Schussx + 3
(Passt nicht zu deinem Spiel,ist auch in keinem Dim feld, aber ich glaub
das Prinzip is klar)

mfg noob

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group