Gegnerische Schüsse

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Flori-D

Betreff: Gegnerische Schüsse

BeitragSa, Dez 20, 2003 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Halo. Ich hab ein kleines Problem.
Ich weis nicht wie ich es anstelle das meine Gegner zurückschiesen.
Das so zu proggen das mein Männchen schiest ist kein prob. aber bei meinen Gegner siehts anders aus.
Wie mach ich das,das meine Gegner zurückschiesen?
Ich geb euch mal den jetigen Code:
Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()
hinter = LoadImage("stars.bmp")
schiff = LoadImage("spaceship2.bmp")
alienbild = LoadImage("player.bmp")
rakete = LoadImage("bullet.bmp")
explosion = LoadAnimImage("kaboom.bmp", 60,46, 0,6)
schusston = LoadSound("soundfx11.wav")
trefferton = LoadSound("soundfx16.wav")

Dim Rak(100,2)
Dim Alien(5,2)
Dim AlienExplodiert(5,1)
X = 305
Y = 420
;
; Hauptschleife
;

Repeat
 Cls
 H = H+1
 If H=200 Then H=0
 TileBlock hinter,0,H
 DrawImage schiff, X,Y


; Schuß-Test
 If KeyHit(57) Then
 Schuss = Schuss + 1
 If Schuss = 101 Then Schuss = 1
 Rak(Schuss,0) = 1
 Rak(Schuss,1) = X+10
 Rak(Schuss,2) = Y-19
 PlaySound(schusston)
EndIf

; ggf. Raketen zeichnen
 For I=1 To 100
  If Rak(I,0) = 1 Then
   DrawImage rakete, Rak(I,1), Rak(I,2)
   Rak(I,2) = Rak(I,2) - 10
 EndIf
Next

; Pfeiltasten abfragen
 If KeyDown(200) = 1 Then Y = Y - 1
 If KeyDown(208) = 1 Then Y = Y + 1
 If KeyDown(205) = 1 Then X = X + 2
 If KeyDown(203) = 1 Then X = X - 2


; Rand-Überschreitung verhindern
 If X < 0 Then X = 0
 If X > 609 Then X = 609
 If Y < 0 Then Y = 0
 If Y > 449 Then Y = 449

; Kollision testen
 For I=1 To 100
  If Rak(I,0) <> 0 Then
   For J=1 To 5
    If ImagesOverlap(alienbild, Alien(J,1), Alien(J,2), rakete,Rak(I,1),Rak(I,2)) Then
     PlaySound(trefferton)
     Alien(J,0) = -1
    EndIf
   Next
  EndIf
 Next


; Explosion Alien zeichnen
  For I=1 To 5
   If Alien(I,0) = -1 Then
    If AlienExplodiert(I,1) + 100 < MilliSecs() Then
     AlienExplodiert(I,0) = AlienExplodiert(I,0) + 1
     AlienExplodiert(I,1) = MilliSecs()

If AlienExplodiert(I,0) = 6 Then
   AlienExplodiert(I,0) = 0
   AlienExplodiert(I,1) = 0
   Alien(I,0) = 0
  EndIf
 EndIf
 DrawImage explosion, Alien(I,1), Alien(I,2), AlienExplodiert(I,0)
 EndIf
Next


; Alien-Steuerung
 For I=1 To 5
  If Alien(I,0) = 0 Then
   Alien(I,0) = Rand(100,400)
   Alien(I,1) = Rand(-20,640)
   Alien(I,2) = Rand(-100,0)
  EndIf
 
If Alien(I,0) <> -1 Then
  Alien(I,2) = Alien(I,2) + 1
  Alien(I,1) = 320 + Sin( Alien(I,2) ) * Alien(I,0)
EndIf
 
 If Alien(I,2) > 480 Then Alien(I,0) = 0

 If Alien(I,0) <> -1 Then DrawImage alienbild, Alien(I,1), Alien(I,2)
Next

 Flip
Until KeyDown(1)

Valio

BeitragSa, Dez 20, 2003 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst z.B. ein zweidimensionales Dimfeld Alienschuss(x,y) machen, wobei x und y so gross wie die Anzahl der Aliens sein muss (5 oder?). Jedes Alien kann auf sein jeweiliges Schussfeld zugreifen (Alien 3 kann also z.B. auf Alienschuss(3,3) zugreifen). Wenn die Werte des Dimfelds Alienschuss ausserhalb des Bildschirms liegen feuert das Alien (evtl. mit gewisser Wahrscheinlichkeit -> Zufallgenerator) einen Schuss ab (die Koordinaten des Schusses werden auf die Koordinaten des Aliens gesetzt). In der Schleife müssen die Werte aller Alienschüsse dann natürlich noch erhöht werden, damit sich der Schuss überhaupt bewegt. Es versteht sich von selbst, dass dann noch jeder Schuss gezeichnet werden muss. Wenn du willst, dass ein Alien mehr als einen Schuss abfeuern kann, kannst du das Dimfeld auch 3dimensional machen: Dim Alienschuss(x,y,z), wobei das Alien 3 dann auf alle Alienschuss(3,3,j) für 0<=j<z zugreifen kann.
Es gibt noch andere Alternativen mit Dimfeldern, aber die hier zu erklären wäre wohl doch ein wenig zu kompliziert...
Programming today is a race between software engineers striving to build better and bigger idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook
Gegen TCPA || Stoppt RFID || Tux user #361946 || User posted image

Flori-D

BeitragSa, Dez 20, 2003 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Für mich war das gerade chinesisch rückwerts.Kannst du mir einen Code geben?Würde ich nähmlich schneller begreifen.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Dez 20, 2003 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
im prinzip wie das schiessen deines Schiffes
Mach ein Dim Feld für 20 Raketen

Dim Feind_Rakete(20)

zusätzlich benötigt man die aktuelle Position des schusses
Also x und y
Die packen wir gleich mit in die Feind_Rakete

Dim Feind_Rakete(20,2)

bis jetzt haben wir ( x= welche rakete)
Feind_Rakete(x,0) ; in ,0 steht drin ob diese Aktiv ist oder nicht
Feind_Rakete(x,1) ; in ,1 steht Die aktuelle X position
Feind_Rakete(x,2) ; in ,2 steht ie aktuelle Y position


so in etwa hast du das ja auch schon gemacht mit deinen
du aktiviert einen schuss von deinem Schiff mit der SpaceTaste
bei deinem gegnern muß das ja zufällig geschen

da gibt es mehrere sachen die mann machen kann
eine wäre durch Zufall welche aktivieren
schreiben wir auch in das dim Feld
For zahl = 0 to 20
Feind_Rakete(x,3) = RAND(100,1000)
next
jetzt haben wir eine zufallszahl und die zählen wir dann bei jedem durchlauf eins runter
wenn diese 0 ist dann schiessen
so muß aber jetzt erst weg...
sonst hätt ich noch mehr geschrieben
Das dim Feld nicht vergessen zu erhöhen
  • Zuletzt bearbeitet von Rallimen am Sa, Dez 20, 2003 18:50, insgesamt einmal bearbeitet

Flori-D

BeitragSa, Dez 20, 2003 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werds versuchen! Very Happy

Valio

BeitragSa, Dez 20, 2003 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Flori-D hat Folgendes geschrieben:
Für mich war das gerade chinesisch rückwerts.Kannst du mir einen Code geben?Würde ich nähmlich schneller begreifen.


Schon gut, hier hast du Code:
Code: [AUSKLAPPEN]
Dim Alienschuss(5,2)
...
Repeat
...
; Alien-Schusssteuerung
For I=1 To 5
   Alienschuss(I,1)=Alienschuss(I,1)+2
   Drawimage alienshot,Alienschuss(I,0),Alienschuss(I,1)
Next

; Alien-Steuerung
 For I=1 To 5
  If Alien(I,0) = 0 Then
   Alien(I,0) = Rand(100,400)
   Alien(I,1) = Rand(-20,640)
   Alien(I,2) = Rand(-100,0)
  EndIf
 
If Alien(I,0) <> -1 Then
  Alien(I,2) = Alien(I,2) + 1
  Alien(I,1) = 320 + Sin( Alien(I,2) ) * Alien(I,0)
  If Alienschuss(I,1)>480 then
     If Rand(2)=1 Then
         Alienschuss(I,0)=Alien(I,1)
         Alienschuss(I,1)=Alien(I,2)+2
     Endif
  Endif
EndIf
 
 If Alien(I,2) > 480 Then Alien(I,0) = 0

 If Alien(I,0) <> -1 Then DrawImage alienbild, Alien(I,1), Alien(I,2)
Next
Flip
Until Keydown(1)
Programming today is a race between software engineers striving to build better and bigger idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook
Gegen TCPA || Stoppt RFID || Tux user #361946 || User posted image

Flori-D

BeitragSa, Dez 20, 2003 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen Dank!!!!!!!!!!!!!!!!!!!!!
jetzt gehts.

Flori-D

BeitragSa, Dez 20, 2003 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne,noch nicht soganz. Crying or Very sad
Probier mal einer den folgenden Code.
Irgendwas stimmt da nicht.
Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()
hinter = LoadImage("stars.bmp")
schiff = LoadImage("spaceship2.bmp")
alienbild = LoadImage("player.bmp")
rakete = LoadImage("bullet.bmp")
explosion = LoadAnimImage("kaboom.bmp", 60,46, 0,6)
schusston = LoadSound("soundfx11.wav")
trefferton = LoadSound("soundfx16.wav")
alienshot = LoadImage("bullet_mask.bmp")
Dim Rak(100,2)
Dim Alien(5,2)
Dim AlienExplodiert(5,1)
X = 305
Y = 420
;
; Hauptschleife
;

Repeat
 Cls
 H = H+1
 If H=200 Then H=0
 TileBlock hinter,0,H
 DrawImage schiff, X,Y

Text 400,10, "Du hast "+punkte+" Punkte

; Schuß-Test
 If KeyHit(57) Then
 Schuss = Schuss + 1
 If Schuss = 101 Then Schuss = 1
 Rak(Schuss,0) = 1
 Rak(Schuss,1) = X+10
 Rak(Schuss,2) = Y-19
 PlaySound(schusston)
EndIf

; ggf. Raketen zeichnen
 For I=1 To 100
  If Rak(I,0) = 1 Then
   DrawImage rakete, Rak(I,1), Rak(I,2)
   Rak(I,2) = Rak(I,2) - 10
 EndIf
Next

; Pfeiltasten abfragen
 If KeyDown(200) = 1 Then Y = Y - 1
 If KeyDown(208) = 1 Then Y = Y + 1
 If KeyDown(205) = 1 Then X = X + 2
 If KeyDown(203) = 1 Then X = X - 2


; Rand-Überschreitung verhindern
 If X < 0 Then X = 0
 If X > 609 Then X = 609
 If Y < 0 Then Y = 0
 If Y > 449 Then Y = 449

; Kollision testen
 For I=1 To 100
  If Rak(I,0) <> 0 Then
   For J=1 To 5
    If ImagesOverlap(alienbild, Alien(J,1), Alien(J,2), rakete,Rak(I,1),Rak(I,2)) Then
     PlaySound(trefferton)
     Alien(J,0) = -1
    EndIf
   Next
  EndIf
 Next


; Explosion Alien zeichnen
  For I=1 To 5
   If Alien(I,0) = -1 Then
    If AlienExplodiert(I,1) + 100 < MilliSecs() Then
     AlienExplodiert(I,0) = AlienExplodiert(I,0) + 1
     AlienExplodiert(I,1) = MilliSecs()

If AlienExplodiert(I,0) = 6 Then
   AlienExplodiert(I,0) = 0
   AlienExplodiert(I,1) = 0
   Alien(I,0) = 0
  EndIf
 EndIf
 DrawImage explosion, Alien(I,1), Alien(I,2), AlienExplodiert(I,0)
 EndIf
Next



 

; Alien-Steuerung
 For I=1 To 5
  If Alien(I,0) = 0 Then
   Alien(I,0) = Rand(100,400)
   Alien(I,1) = Rand(-20,640)
   Alien(I,2) = Rand(-100,0)
  EndIf
 
If Alien(I,0) <> -1 Then
  Punkte = punkte + 10 
Alien(I,2) = Alien(I,2) + 1
  Alien(I,1) = 320 + Sin( Alien(I,2) ) * Alien(I,0)
 EndIf

 If Alien(I,2) > 480 Then Alien(I,0) = 0

 If Alien(I,0) <> -1 Then DrawImage alienbild, Alien(I,1), Alien(I,2)
Next

;Aliens -Schiesen
Dim Alienschuss(5,2)
 
Repeat
 
; Alien-Schusssteuerung
For I=1 To 5
Alienschuss(I,1)=Alienschuss(I,1)+2
DrawImage alienshot,Alienschuss(I,0),Alienschuss(I,1)
Next

; Alien-Steuerung
For I=1 To 5
If Alien(I,0) = 0 Then
Alien(I,0) = Rand(100,400)
Alien(I,1) = Rand(-20,640)
Alien(I,2) = Rand(-100,0)
EndIf

If Alien(I,0) <> -1 Then
Alien(I,2) = Alien(I,2) + 1
Alien(I,1) = 320 + Sin( Alien(I,2) ) * Alien(I,0)
If Alienschuss(I,1)>480 Then
If Rand(2)=1 Then
Alienschuss(I,0)=Alien(I,1)
Alienschuss(I,1)=Alien(I,2)+2
EndIf
EndIf
EndIf

If Alien(I,2) > 480 Then Alien(I,0) = 0

If Alien(I,0) <> -1 Then DrawImage alienbild, Alien(I,1), Alien(I,2)
Next
Flip
Forever
Until KeyHit(1)
 

graythread

BeitragSa, Dez 20, 2003 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
und noch so ein "Ich hab jetzt aus Rene's Buch den Shooter Code kopiert, kann mir den einer erweitern?"
Gott, ich bin selbst kein guter Progger, aber mh, versuchts doch mal selbst?
 

Alu-Folie

Gast

BeitragSa, Dez 20, 2003 17:03
Antworten mit Zitat
GrayThread: Wie proggst du denn? In dem du deinen Code zusammenklauft? Laughing
 

graythread

BeitragSa, Dez 20, 2003 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
mh, das war ein schlechter Witz, da ich selbst gesagt habe
Zitat:
Gott, ich bin selbst kein guter Progger, aber mh, versuchts doch mal selbst?
´
aber nein, ich hab natürlich auch Sachen übernommen, aber dannach es durch meinen eigenen Code ersetzt.

Flori-D

BeitragSa, Dez 20, 2003 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab zwar das was drinnstand übernommen aber ich will jetzt ein richtige Game draus machen.Und ich weis nunmal nicht wie ich meine Gegner schiesen lasse.
Auserdem progge ich noch nicht so lange.
Man wird doch mal was fragen können,oder?

Valio

BeitragSa, Dez 20, 2003 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Flori-D hat Folgendes geschrieben:
Ich hab zwar das was drinnstand übernommen aber ich will jetzt ein richtige Game draus machen.Und ich weis nunmal nicht wie ich meine Gegner schiesen lasse.
Auserdem progge ich noch nicht so lange.
Man wird doch mal was fragen können,oder?

Sicher, aber besser du lernst mit kleinen Sachen mal programmieren und kannst selber Ideen entwickeln und umsetzen anstatt andauernd jemanden zu fragen. Ich möchte dich ja nicht enttäuschen, aber mit "Ich habe das Buch gelesen, jetzt programmier ich gleich ein Game" kommt man nicht weit...probier' doch bitte erst mal ganz kleine Sachen...ein vorgefertigter Code für eine Spieleengine würde ich eher selten vorziehen.
Programming today is a race between software engineers striving to build better and bigger idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook
Gegen TCPA || Stoppt RFID || Tux user #361946 || User posted image
 

René Meyer

BeitragSa, Dez 20, 2003 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, aber so macht das keinen Sinn. :)

"Sie sollten mit diesem Kapitel nicht zu früh beginnen. Sammeln Sie erst Erfahrungen mit kleinen Programmen und Beispielen, ehe Sie sich an ein richtiges Projekt wagen. Die auf den folgenden Seiten vorgestellten Spielegerüste sollen Ihnen helfen, ein Verständnis zu erlangen, wie Spiele funktionieren. Sie sollten nicht als Grundlage für Ihre Spiele dienen. Einen vorhandenen Quelltext zu nehmen und leicht abzuändern, das ist kein Programmieren. Arbeiten Sie mit dem Kapitel, ändern Sie getrost Zeilen – und beginnen Sie dann mit einem leeren Editorfenster. So sammeln Sie am besten Erfahrung."
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb
 

Alu-Folie

Gast

BeitragSo, Dez 21, 2003 11:18
Antworten mit Zitat
lol, rene :thumbs up: Wink

Flori-D

BeitragSo, Dez 21, 2003 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab schon viele kleine Dinge gemacht.
Ich hab bsp. aus dem Buch abgewandelt,was dazu gemacht,komplett alleine was neues geproggt. .
Aber ich weis nicht mit was man am besten anfängt.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group