Ping Pong Tutorial?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

stoertebecker

Betreff: Ping Pong Tutorial?

BeitragDo, Sep 14, 2006 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Ich wollte das Ping Pong Spiel aus dem tutorial nachprogrammieren!
Nur wollte ich dass die Spieler links und rechts sind und eben hoch und runter fahren können!

Theoretisch habe ich alles verstanden mit Kollision und so aber das Spiel startet nicht!
Wie kann ich das in gang setzen?
Wenn ich für irgendeinen Spieler Maussteuerung nehme dann kann ich den Spieler bewegen!Aber mehr auch nicht!

Code: [AUSKLAPPEN]

xmax# = 1024
ymax# = 768
Graphics xmax,ymax,32,2
;Vars
Global kugel = LoadImage("gfx\kugel.bmp")
MidHandle kugel
Global spieler1 = LoadImage("gfx\player.bmp")
MidHandle spieler1
Global spieler2 = LoadImage("gfx\player2.bmp")
MidHandle spieler2
Global begrenzung = LoadImage("gfx\rand.bmp")
Global sp1st ;bedeutet: Spieler 1 Steuerung
Global sp2st
Global ysp1 ;für die Y-Position des 1. Spielers
Global ysp2 ;für die Y-Position des 2. Spielers
Global xkugel# ;X-Pos. der Kugel als Kommazahl
Global ykugel# ;Y-Pos. der Kugel als Kommazahl
Global winkel  ;gibt den Flugwinkel der Kugel an
Global geschwindigkeit ;die Fluggeschwindgikeit der Kugel

Function resetkugel()
xkugel=xmax/2:ykugel=ymax/2
If Rand(0,1)=1 Then winkel=Rand(105,45) Else winkel=Rand(315,225);der Winkel wird durch Zufall ermittelt
End Function

SetBuffer BackBuffer()
Global frametimer = CreateTimer(60)
SeedRnd MilliSecs()
Repeat
 WaitTimer (frametimer)
   For z2=0 To 1
    If z2=1 Then y=ymax-20 Else y=0
   For z= 0 To xmax/20
    DrawImage begrenzung,z*20,y
 Next
Next

;Steuerung
;Welche Art
If KeyHit(2) Then sp1st=sp1st+1;die Zahlentaste 1
If KeyHit(3) Then sp2st=sp2st+1;die Zahlentaste 2
;keyboard
If KeyDown(208) And sp1st=1 Then ysp1=ysp1-beweglichkeit;linke Pfeiltaste
If KeyDown(200) And sp1st=1 Then ysp1=ysp1+beweglichkeit;rechte Pfeiltaste
If KeyDown(17) And sp2st=1 Then ysp2=ysp2-beweglichkeit;linke Pfeiltaste
If KeyDown(31) And sp2st=1 Then ysp2=ysp2+beweglichkeit;rechte Pfeiltaste

;Maus
If sp1st=2 Then ysp1=ysp1+MouseYSpeed()
If sp2st=2 Then ysp2=ysp2+MouseYSpeed()

;Computer
If ysp1>ykugel And sp1st=0 Then ysp1=ysp1-beweglichkeit
If ysp1<ykugel And sp1st=0 Then ysp1=ysp1+beweglichkeit
If ysp2>ykugel And sp2st=0 Then ysp2=ysp2-beweglichkeit
If ysp2<ykugel And sp2st=0 Then ysp2=ysp2+beweglichkeit

;begrenzung
If ysp1<60 Then ysp1=60
If ysp1>ymax-60 Then ysp1=ymax-60
If ysp2<60 Then ysp2=60
If ysp2>ymax-60 Then ysp2=ymax-60
;;
;;
If ykugel<30 Then
 winkel=180-winkel ;damit prallt die Kugel ab
EndIf

If ykugel>ymax-30 Then
 winkel=180-winkel
EndIf

;;Collision
If ImagesCollide(spieler1,ysp1,ymax-10,0,kugel,xkugel,ykugel,0) Then;wenn eine Kollision ist
 winkel=360-winkel ;prallt die Kugel ab
 abweichung=2*(ysp1-xkugel) ;damit kannst du die Richtung der Kugel steuern
 winkel=winkel+abweichung
EndIf

If ImagesCollide(spieler2,ysp2,10,0,kugel,xkugel,ykugel,0) Then
 winkel=360-winkel
 abweichung=2*(ysp2-xkugel)
 winkel=winkel-abweichung
EndIf

If winkel>360 Then winkel=winkel-360
If winkel<0 Then winkel=winkel+360

If xkugel<-10 Then ;oben
  fehlersp2=fehlersp2+1 ;der Obere bekommt einen Fehlerpunkt dazu
  resetkugel ;ein Funktionsaufruf
EndIf

If xkugel>xmax+10 Then ;unten
  fehlersp1=fehlersp1+1 ;der Untere bekommt einen Fehlerpunkt dazu
  resetkugel ;ein Funktionsaufruf
EndIf
;einige Informationen werden auf den Bildschirm gemalt
Text 200,300,"Geschwindigkeit:" + geschwindigkeit
Text 500,300,"Spielstand:  "+fehlersp2 + "       :       " + fehlersp1
;damit du die Steuerungsart sehen kannst
Text xmax-300,ymax-(ymax-25),"Spieler1"
If sp1st>0 Then
        If sp1st=2 Then Text xmax-200,ymax-(ymax-25),"Maussteuerung" Else Text xmax-200,ymax-(ymax-25),"Tastatursteuerung"
        Else Text xmax-200,ymax-(ymax-25),"Computer"
EndIf
;If spieler1man>0 Then Text 250,ymax-25,scorep1

Text xmax-(xmax-25),ymax-(ymax-25),"Spieler2"
If sp2st>0 Then
 If sp2st=2 Then
  Text xmax-(xmax-125),ymax-(ymax-25),"Maussteuerung"
 Else
  Text xmax-(xmax-125),ymax-(ymax-25),"Tastatursteuerung"
 EndIf
Else
  Text xmax-(xmax-125),ymax-(ymax-25),"Computer"
EndIf

resetkugel


DrawImage kugel,xkugel,ykugel;nur damit man sieht, das sie existiert
DrawImage spieler1,xmax-10,ysp1
DrawImage spieler2,10,ysp2

 Flip
 Cls
Until KeyHit(1)
End ;


Wo liegt mein Fehler?

Danke schon im Vorraus!
mfg
stoertebecker

JustTheBest

BeitragDo, Sep 14, 2006 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Wie meinst du das? Kommt ne Fehlermeldung, bewegt sich der Ball nicht, klappt irgendwas mit der Steureung nicht, kommt nur schwarz?
Bitte genauere angaben!

mfg JTB
www.mas-online.de.gg
__________

Liegt der Camper tot im Keller war der Rusher wieder schneller. Liegt der Rusher tot daneben hat der Camper nen Kollegen!

d-bug

BeitragDo, Sep 14, 2006 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo definierst du denn die Variable Beweglichkeit ? Bin nur mal schnell durch
den Code gehuscht, aber konnte das nicht finden. Theoretisch bleibt also
jede Position immer gleich, da du immer 0 addierst bzw subtrahierst!

cheers
 

stoertebecker

BeitragDo, Sep 14, 2006 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ähm ja es wird alles angezeigt nur der ball bewegt sich nicht!
eigentlcih logisch dass es mit der variable zu tun haben muss! Shocked

nur habe ich jetzt den code um die fehlenden stücke ergänzt:
Code: [AUSKLAPPEN]


xmax# = 1024
ymax# = 768
Graphics xmax,ymax,32,2
;Vars
Global kugel = LoadImage("gfx\kugel.bmp")
MidHandle kugel
Global spieler1 = LoadImage("gfx\player.bmp")
MidHandle spieler1
Global spieler2 = LoadImage("gfx\player2.bmp")
MidHandle spieler2
Global begrenzung = LoadImage("gfx\rand.bmp")
Global sp1st ;bedeutet: Spieler 1 Steuerung
Global sp2st
Global ysp1 ;für die Y-Position des 1. Spielers
Global ysp2 ;für die Y-Position des 2. Spielers
Global xkugel# ;X-Pos. der Kugel als Kommazahl
Global ykugel# ;Y-Pos. der Kugel als Kommazahl
Global winkel  ;gibt den Flugwinkel der Kugel an
Global geschwindigkeit=5 ;die Fluggeschwindgikeit der Kugel

Function resetkugel()
xkugel=xmax/2:ykugel=ymax/2
If Rand(0,1)=1 Then winkel=Rand(105,45) Else winkel=Rand(315,225);der Winkel wird durch Zufall ermittelt
End Function

SetBuffer BackBuffer()
Global frametimer = CreateTimer(60)
SeedRnd MilliSecs()
Repeat
 WaitTimer (frametimer)
beweglichkeit=geschwindigkeit
   For z2=0 To 1
    If z2=1 Then y=ymax-20 Else y=0
   For z= 0 To xmax/20
    DrawImage begrenzung,z*20,y
 Next
Next

;Steuerung
;Welche Art
If KeyHit(2) Then sp1st=sp1st+1;die Zahlentaste 1
If KeyHit(3) Then sp2st=sp2st+1;die Zahlentaste 2
;keyboard
If KeyDown(208) And sp1st=1 Then ysp1=ysp1-beweglichkeit;linke Pfeiltaste
If KeyDown(200) And sp1st=1 Then ysp1=ysp1+beweglichkeit;rechte Pfeiltaste
If KeyDown(17) And sp2st=1 Then ysp2=ysp2-beweglichkeit;linke Pfeiltaste
If KeyDown(31) And sp2st=1 Then ysp2=ysp2+beweglichkeit;rechte Pfeiltaste

;Maus
If sp1st=2 Then ysp1=ysp1+MouseYSpeed()
If sp2st=2 Then ysp2=ysp2+MouseYSpeed()

;Computer
If ysp1>ykugel And sp1st=0 Then ysp1=ysp1-beweglichkeit
If ysp1<ykugel And sp1st=0 Then ysp1=ysp1+beweglichkeit
If ysp2>ykugel And sp2st=0 Then ysp2=ysp2-beweglichkeit
If ysp2<ykugel And sp2st=0 Then ysp2=ysp2+beweglichkeit

;begrenzung
If ysp1<60 Then ysp1=60
If ysp1>ymax-60 Then ysp1=ymax-60
If ysp2<60 Then ysp2=60
If ysp2>ymax-60 Then ysp2=ymax-60
;;
;;
If ykugel<30 Then
 winkel=180-winkel ;damit prallt die Kugel ab
EndIf

If ykugel>ymax-30 Then
 winkel=180-winkel
EndIf

;;Collision
If ImagesCollide(spieler1,ysp1,ymax-10,0,kugel,xkugel,ykugel,0) Then;wenn eine Kollision ist
 winkel=360-winkel ;prallt die Kugel ab
 abweichung=2*(ysp1-xkugel) ;damit kannst du die Richtung der Kugel steuern
 winkel=winkel+abweichung
EndIf

If ImagesCollide(spieler2,ysp2,10,0,kugel,xkugel,ykugel,0) Then
 winkel=360-winkel
 abweichung=2*(ysp2-xkugel)
 winkel=winkel-abweichung
EndIf

If winkel>360 Then winkel=winkel-360
If winkel<0 Then winkel=winkel+360

If xkugel<-10 Then ;oben
  fehlersp2=fehlersp2+1 ;der Obere bekommt einen Fehlerpunkt dazu
  resetkugel ;ein Funktionsaufruf
EndIf

If xkugel>xmax+10 Then ;unten
  fehlersp1=fehlersp1+1 ;der Untere bekommt einen Fehlerpunkt dazu
  resetkugel ;ein Funktionsaufruf
EndIf
;einige Informationen werden auf den Bildschirm gemalt
Text 200,300,"Geschwindigkeit:" + geschwindigkeit
Text 500,300,"Spielstand:  "+fehlersp2 + "       :       " + fehlersp1
;damit du die Steuerungsart sehen kannst
Text xmax-300,ymax-(ymax-25),"Spieler1"
If sp1st>0 Then
        If sp1st=2 Then Text xmax-200,ymax-(ymax-25),"Maussteuerung" Else Text xmax-200,ymax-(ymax-25),"Tastatursteuerung"
        Else Text xmax-200,ymax-(ymax-25),"Computer"
EndIf
;If spieler1man>0 Then Text 250,ymax-25,scorep1

Text xmax-(xmax-25),ymax-(ymax-25),"Spieler2"
If sp2st>0 Then
 If sp2st=2 Then
  Text xmax-(xmax-125),ymax-(ymax-25),"Maussteuerung"
 Else
  Text xmax-(xmax-125),ymax-(ymax-25),"Tastatursteuerung"
 EndIf
Else
  Text xmax-(xmax-125),ymax-(ymax-25),"Computer"
EndIf

xkugel=xkugel+Cos(winkel)*geschwindigkeit
ykugel=ykugel-Sin(winkel)*geschwindigkeit

resetkugel


DrawImage kugel,xkugel,ykugel;nur damit man sieht, das sie existiert
DrawImage spieler1,xmax-10,ysp1
DrawImage spieler2,10,ysp2

 Flip
 Cls
Until KeyHit(1)
End ;



Nur ich kann jetzt zwar die Spieler bewegen aber der Ball fliegt noch nicht los...es fehlt im glaub der "startschuss"

mfg
stoertebecker
 

0penguin0

BeitragSa, Sep 16, 2006 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
stoertebecker hat Folgendes geschrieben:

Code: [AUSKLAPPEN]


...

Repeat
     WaitTimer (frametimer)
     
     ...

     Flip
     Cls
Until KeyHit(1)
End ;




geht das überhautp???

er wartet, zeigt alles an, löscht es sofort wieder und wartet...

versteh ich nicht Question

der fehler ist da:

stoertebecker hat Folgendes geschrieben:

Code: [AUSKLAPPEN]


...

Repeat
     WaitTimer (frametimer)
     
     ...

     xkugel=xkugel+Cos(winkel)*geschwindigkeit
     ykugel=ykugel-Sin(winkel)*geschwindigkeit

     resetkugel ; <- !!!!!!!!!!!!!!!!!!!!!!!!!!!! WEG DAMIT!


     DrawImage kugel,xkugel,ykugel;nur damit man sieht, das sie existiert
     DrawImage spieler1,xmax-10,ysp1
     DrawImage spieler2,10,ysp2

     Flip
     Cls
Until KeyHit(1)
End ;




du bewegts die kugel und setzt sie geleich danach wieder auf den ausgangspunkt!
i never finish anyth

Kryan

BeitragSa, Sep 16, 2006 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
er wartet, zeigt alles an, löscht es sofort wieder und wartet...


Ehm...hier liegt eines seiner Probleme: er hat nirgendswo SetBuffer BackBuffer() stehen....
Aber wenn er das hinschreibt, dann ist dein Einwand falsch, Pinguin.

Denn er wartet, zeigt alles auf dem FrontBuffer und löscht alles in dem BackBuffer.

@stoertebecker: also einfach nur ein
Code: [AUSKLAPPEN]
SetBuffer BackBuffer()

nach Graphics hinschreiben...
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

stoertebecker

BeitragSo, Sep 17, 2006 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
doch ich hab doch ein SetBuffer Backbuffer() nach graphics stehen..
nach den ganzen variablen!
oder muss ich das direkt danach?
oder in die repeat schleife?

mfg
stoertebecker

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group