Was soll man als Neuling lernen bzw. wo ??

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

TimBo

BeitragMo, März 29, 2010 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst als Vergleichsoperator auch < und > benutzen bzw. <= und >=
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Stani

BeitragMo, März 29, 2010 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok die einzigsten Problemm sind im Moment:

-Die Ball Grenze
-Die Ballbewegung

hier ist nochmal der auktuele Code:Code: [AUSKLAPPEN]
Graphics 1024,768,32,1
SetBuffer BackBuffer()

Local timer = CreateTimer(200)
Global brett1 = LoadImage("brett.bmp")
MidHandle brett1
Global brett2 = LoadImage("brett.bmp")
MidHandle brett2
Global ball   = LoadImage("ball.bmp")
MidHandle ball

Global x1%,y1%,x2%,y2%,xpos%,ypos%


Type Spieler
Field name$
Field leben%
Field Punkte%
End Type

Global Spieler1.Spieler
Global Spieler2.Spieler

Spieler1 = New Spieler
Spieler2 = New Spieler

xpos = 512
ypos = 384
x1=10
y1=350
x2=1000
y2=350

Spieler1\name$ = Input("Spieler1 Name : ")
Spieler2\name$ = Input("Spieler2 Name : ")

Spieler1\leben% = 3
Spieler1\Punkte% = 0
Spieler2\leben% = 3
Spieler2\Punkte% = 0

Repeat
Cls

Text 380,0 ,"Spieler1 Name: " + Spieler1\name$
Text 380,10, "Leben : " + Spieler1\leben%
Text 380,20, "Punkte: " + Spieler1\Punkte%
Text 380,728,"Spieler2 Name: "+ Spieler2\name$
Text 380,748,"Leben : "+ Spieler2\leben%
Text 380,738,"Punkte: " + Spieler2\Punkte%


Steuerung() ;Steuerfunktion für Bretter
Grenze()    ;Grenze für Grafiken
Ballmove()
DrawImage brett1,x1,y1
DrawImage brett2,x2,y2
DrawImage ball,xpos,ypos
Flip

Until KeyDown(1)

End

;Functionen
Function Steuerung()

If KeyDown(17) = 1 Then
   y1 = y1-3
End If
If KeyDown(31) = 1 Then
   y1 = y1+3
End If

If KeyDown(200) = 1 Then
   y2 = y2 -3
End If

If KeyDown(208) = 1 Then
   y2 = y2 +3
End If

End Function

Function Grenze()
If y1 > 726 Then
y1 = 726

End If
If y1 < 42 Then
y1 = 42

End If
If y2 > 726 Then
y2 = 726

End If
If y2 < 42 Then
y2 = 42



End If

End Function

TimBo

BeitragMo, März 29, 2010 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
in wiefern ist die Ballgrenze noch ein Problem ?
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Stani

BeitragMo, März 29, 2010 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß ja nicht.Bei den Brettern gab es ja keine x Achse(die war immer gleich) d.h man musste nur sagen wenn das beim 42Pixel ist(Beispiel) so das 42 sein aber bei dem Ball müste ich ja für den einzelnen Pixel ein if clause machen oder ich mach sone line und mach das mit collide aber ich weiß ja nicht wie das mit dem abpralwinkel ist.

Jo0oker

BeitragMo, März 29, 2010 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Für so eine Grenze würde ich trotzdem IMMER eine Variable empfehle.

Weil was machst du, wenn du die "Grenze" verschieben willst?
Genau, du musst alle 42 in deinem Quellcode suchen, und was ist, wenn du auf einmal eine falsche Zahl verändert hast?

Also, trotzdem eine Variable nehmen. Von mir aus auch eine Konstante!

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!
 

Stani

BeitragDi, März 30, 2010 10:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie soll ich die den machen???
Ich weiß nicht wie ich das zusammenfassen soll.ich kann ja nicht 1024x768 If befehle machen.

Xeres

Moderator

BeitragDi, März 30, 2010 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst nicht einzelne Pixel auf Kollision mit irgendwas prüfen - nur die Koordinaten auf die du den Ball zeichnest. Sieht in deinem letzten Code doch gut aus. Du könntest halt nur eben Konstanten für Grafikbreite, -höhe und die 42 Einsetzen um das ganze Les- und änderbarer zu machen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Jo0oker

BeitragDi, März 30, 2010 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach doch einfach:

Code: [AUSKLAPPEN]

Global iGrenze% = 42


Und überall wo du die Grenze brauchst, nimmst du jetzt nicht mehr 42 sondern iGrenze.
Und wenn du jetzt die Grenze nämlich änderst willst, zum Beispiel auf Grund einer neuen/anderen Auflösung, musst du die 42 nur einmal ändern, und das ist bei der zuweisung von iGrenze% = 42!

Verstehste?

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Hubsi

BeitragDi, März 30, 2010 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit den anderen Vergleichsoperatoren wie z.B. < und > sind das nur ein paar wenige Zeilen. Beispiel ungetestet:

BlitzBasic: [AUSKLAPPEN]
If xpos>irgendwas Then bewegungsrichtung umkehren


So kann der Ball/das Brett schonmal nicht weiter als die von Dir definierte Grenze und dreht um.

Edit: Etwas langsam heute Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Stani

BeitragDi, März 30, 2010 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
joa jetzt hab ichs langsam verstanden:D

Ah ja das mit den 42 ist nur bei den Brettern,weil ich den bezugspunkt in die mitte gelegt habe und ich die halbieren muss um zu wissen wo die Grenze ist.


Ich hab ja schon xpos und ypos für den Ball und x1,x2.,... für die "Schläger"
Könnt ihr ein Beispiel machen??Währe nett.

Das Problemm ist ,dass ich auch garnicht weiß wie ich den Ball bewegen soll.Er muss ja immer neu gezeichnet werden und wenn ich eine Schleife machen geht das ja nicht wenn ich immer xpos =xpos +1 mach.Bitte gehbt mir ein Beispiel oder ein kleines Programm wo ein ball rumflliegt.

Danke
 

Stani

BeitragDi, März 30, 2010 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
So hab das mal jetzt fertig gemacht.Aber irgendwie geht das mit der Collision nicht.

Code: [AUSKLAPPEN]

Global xmax=1024,ymax=768
Graphics xmax,ymax,32,1
SetBuffer BackBuffer()

AppTitle "Ping Pong Stani"
Local timer = CreateTimer(200)
Global brett1 = LoadImage("brett.bmp") ;Spieler1brett
MidHandle brett1
Global brett2 = LoadImage("brett.bmp") ;Spieler2brett
MidHandle brett2
Global ball   = LoadImage("ball.bmp")  ;ball
MidHandle ball
Global x1%,y1%,x2%,y2%    ;Die ganzen x,y Koordinaten
Global bg=LoadImage("bg.bmp")

Type Spieler                           ;Erzeuge Spieler
Field name$
Field leben%
Field Punkte%
End Type

Global Spieler1.Spieler                 ;Erzeuge Spieler1,Spieler2
Global Spieler2.Spieler
Global treffer1 =25
Global treffer2 =999


Spieler1 = New Spieler
Spieler2 = New Spieler

x1=10                                  ;Position der Bretter
y1=350
x2=1014
y2=350

Spieler1\name$ = Input("Spieler1 Name : ") ;Namensabfrage
Spieler2\name$ = Input("Spieler2 Name : ")

Spieler1\leben% = 3                         ;Leben und punkte
Spieler1\Punkte% = 0
Spieler2\leben% = 3
Spieler2\Punkte% = 0

Type Balldaten
   Field xpos#   
   Field ypos#
   Field movex#
   Field movey#   
   Field speed#
   End Type




For a=1 To    1   
      balls.Balldaten=New Balldaten   
      balls\xpos#=Rand(600)+12      
      balls\ypos#=Rand(400)+12      
      balls\movex#=Rnd(2)-1            
      balls\movey#=Rnd(2)-1                  
      balls\speed#=Rnd(2)+4         

Next

Repeat            ;Mainloop
Cls

For  balls.Balldaten =Each Balldaten
         balls\xpos#=balls\xpos#+(balls\movex#*balls\speed#)
         balls\ypos#=balls\ypos#+(balls\movey#*balls\speed#)
         ; check for screen limits
         If balls\ypos#<0    Then balls\movey#=1
         If balls\ypos#>768-25 Then balls\movey#=-1
         If balls\xpos#<25     Then balls\movex#=1
         If balls\xpos#>1024-25 Then balls\movex#=-1
         ; check for colisions with other balls
         
         
                  DrawImage ball,balls\xpos#,balls\ypos#,0
         Next
         




Text 10,0 ,"Spieler1 Name: " + Spieler1\name$  ;Abfrage
Text 10,10, "Leben : " + Spieler1\leben%
Text 10,20, "Punkte: " + Spieler1\Punkte%
Text 750,728,"Spieler2 Name: "+ Spieler2\name$
Text 750,748,"Leben : "+ Spieler2\leben%
Text 750,738,"Punkte: " + Spieler2\Punkte%


Steuerung() ;Steuerfunktion für Bretter       
Grenzebretter()    ;Grenze für Bretter
Daneben1()
Daneben2()
DrawImage brett1,x1,y1 ;Bilder zeichen
DrawImage brett2,x2,y2


If Spieler1\leben% = 0
Gameover()
If Spieler2\leben% = 0
Gameover()

End If
End If






Flip

Until KeyDown(1)

End

;Functionen
Function Steuerung() ;Steuerfunction

If KeyDown(17) = 1 Then
   y1 = y1-7
End If
If KeyDown(31) = 1 Then
   y1 = y1+7
End If

If KeyDown(200) = 1 Then
   y2 = y2 -7
End If

If KeyDown(208) = 1 Then
   y2 = y2 +7
End If

End Function

Function Grenzebretter() ;Grenze der bretter
If y1 > 726 Then
y1 = 726

End If
If y1 < 42 Then
y1 = 42

End If
If y2 > 726 Then
y2 = 726

End If
If y2 < 42 Then
y2 = 42



End If

End Function


Function Daneben2()

If Not ImagesOverlap(brett1,x2,y2,ball,xpos#,ypos#) And  xpos# = treffer2 =1 Then  ;Wenn Spieler2 den ball durchlässt
Spieler1 \Punkte% = Spieler1\Punkte% +2
Spieler2\leben% = Spieler2\leben% -1
End If

End Function

Function Daneben1()

If Not ImagesOverlap(ball,xpos#,ypos#,brett1,x1,y1)  And  xpos# =treffer1 =1 Then ;Wenn Spieler1 den ball durchlässt
Spieler1\leben% = Spieler1\leben% -1
Spieler2\Punkte% = Spieler2\Punkte% + 2
End If

End Function

Function Gameover()
Text xmax/2,ymax/2, " Das Spiel ist vorbei"

End

End Function
   

   
         
       
      











Edit:Man ich kann viel besser denken wenn ich was geschreiben hab:D

Also ich hab das mal mit Overlap versucht.Nur ich brauch noch diesen befehl(bei C++ ist das &&),der wenn beidens geschieht irgendwas macht.

count-doku

BeitragDi, März 30, 2010 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

-erstmal ein Tipp zu LoadImage, du musst das Bild nicht 2mal laden!
Du kannst es viel Speicherschonender mit CopyImage kopieren.
-Wenn du schon Types machst, dann mach auch die Koordinaten mit rein.
-Das mit Overlap müsste eigentlich funzen.

Probiers mal so:BlitzBasic: [AUSKLAPPEN]
Global xmax=1024,ymax=768
Graphics xmax,ymax,32,1
SetBuffer BackBuffer()

AppTitle "Ping Pong Stani"
Local timer = CreateTimer(200)
Global brett1 = LoadImage("brett.bmp") ;Spieler1brett
MidHandle brett1
Global brett2 = CopyImage(brett1) ;Spieler2brett
MidHandle brett2
Global ball = LoadImage("ball.bmp") ;ball
MidHandle ball
Global bg=LoadImage("bg.bmp")

Type Spieler ;Erzeuge Spieler
Field name$
Field leben%
Field Punkte%
Field x,y
End Type

Global Spieler1.Spieler ;Erzeuge Spieler1,Spieler2
Global Spieler2.Spieler

Spieler1 = New Spieler
Spieler2 = New Spieler

Spieler1\x=10 ;Position der Bretter
Spieler1\y=350
Spieler2\x=1014
Spieler2\y=350

Spieler1\name$ = Input("Spieler1 Name : ") ;Namensabfrage
Spieler2\name$ = Input("Spieler2 Name : ")

Spieler1\leben% = 3 ;Leben und punkte
Spieler1\Punkte% = 0
Spieler2\leben% = 3
Spieler2\Punkte% = 0

Type Balldaten
Field xpos#
Field ypos#
Field movex#
Field movey#
Field speed#
End Type




For a=1 To 1
balls.Balldaten=New Balldaten
balls\xpos#=Rand(600)+12
balls\ypos#=Rand(400)+12
balls\movex#=Rnd(2)-1
balls\movey#=Rnd(2)-1
balls\speed#=Rnd(2)+4

Next

Repeat ;Mainloop
Cls

For balls.Balldaten =Each Balldaten
balls\xpos#=balls\xpos#+(balls\movex#*balls\speed#)
balls\ypos#=balls\ypos#+(balls\movey#*balls\speed#)
; check for screen limits
If balls\ypos#<0 Then balls\movey#=1
If balls\ypos#>768 Then balls\movey#=-1
If balls\xpos#<25 Then balls\movex#=1
If balls\xpos#>1024-25 Then balls\movex#=-1
; check for colisions with other balls


DrawImage ball,balls\xpos#,balls\ypos#,0
Next





Text 10,0 ,"Spieler1 Name: " + Spieler1\name$ ;Abfrage
Text 10,10, "Leben : " + Spieler1\leben%
Text 10,20, "Punkte: " + Spieler1\Punkte%
Text 750,728,"Spieler2 Name: "+ Spieler2\name$
Text 750,748,"Leben : "+ Spieler2\leben%
Text 750,738,"Punkte: " + Spieler2\Punkte%


Steuerung() ;Steuerfunktion für Bretter
Grenzebretter() ;Grenze für Bretter
Daneben1()
Daneben2()
DrawImage brett1,Spieler1\x,Spieler1\y ;Bilder zeichen
DrawImage brett2,Spieler2\x,Spieler2\y







Flip

Until KeyDown(1)

End

;Functionen
Function Steuerung() ;Steuerfunction

If KeyDown(17) = 1 Then
Spieler1\y = Spieler1\y-7
End If
If KeyDown(31) = 1 Then
Spieler1\y = Spieler1\y+7
End If

If KeyDown(200) = 1 Then
Spieler2\y = Spieler2\y -7
End If

If KeyDown(208) = 1 Then
Spieler2\y=Spieler2\y+7
End If

End Function

Function Grenzebretter() ;Grenze der bretter
If Spieler1\y > 726 Then
Spieler1\y = 726

End If
If Spieler1\y < 42 Then
Spieler1\y = 42

End If
If Spieler2\y > 726 Then
Spieler2\y = 726

End If
If Spieler2\y < 42 Then
Spieler2\y = 42
End If

End Function


Function Daneben2()

If ImagesCollide(ball,xpos#,ypos#,0,brett2,Spieler2\x,Spieler2\y,0) = 0 And xpos# => 1005 Then ;Wenn Spieler2 den ball durchlässt
Spieler1 \Punkte% = Spieler1\Punkte% +2
Spieler2\leben% = Spieler2\leben% -1
End If


End Function

Function Daneben1()

If ImagesCollide(ball,xpos#,ypos#,0,brett1,Spieler1\x,Spieler1\y,0) = 0 And xpos#<= 20 Then ;Wenn Spieler1 den ball durchlässt
Spieler1\leben% = Spieler1\leben% -1
Spieler2\Punkte% = Spieler2\Punkte% + 2
End If


End Function

Dein Problem war, dass die Bedingung in Daneben1 und Daneben2 nur wahr wird, wenn der Ball genau auf pos. 20 / 1005 ist.


mfg,
count-doku
 

Stani

BeitragDi, März 30, 2010 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht nicht.Er zählt einfach.Irgendwas mit dem And xpos# = 25.....stimmt nicht.Den da steht ja wenn er nicht collidirt und ... also muss das der Fehler sein...

Xeres

Moderator

BeitragDi, März 30, 2010 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn an dem Bild keine Veränderungen vorgenommen werden, muss man das Bild nicht mal kopieren... einfach zwei mal das gleiche Bild an verschiedenen Positionen zeichnen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

TimBo

BeitragMi, März 31, 2010 2:06
Antworten mit Zitat
Benutzer-Profile anzeigen
CopyImage ist speicherschonender als LoadImage ? eh ned . Wink
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Hubsi

BeitragMi, März 31, 2010 6:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowie ich den Code jetzt überflogen habe werden die Brettbilder nicht verändert, von daher reicht schon ein übergeben des Handles. brett2 = brett1 oder ähnlich. So wird kein Grakaspeicher sinnlos verbraten.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Stani

BeitragMi, März 31, 2010 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber was ist den jetzt mit der Collisions abfrage.Die geht nicht und ich verzweifle irgendwie ,weil das eigendlich ales richtig aussieht.
 

Stani

BeitragSo, Apr 04, 2010 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Also hallo erstmal.Ich war im Urlaub und konnte nichts schreiben bzw. machen.

Ich hab noch eine Frage aber jetzt zu was anderem.Ich versuch jetzt die ersten 3D Sachen.Dabei hab ich mir ein Terain gemacht mit einer Textur(Grass),einem Würfel der da wie ein Lawastein steht und ein Baum.Jetzt hab ich das mal mit einer Hightmap gemacht.Ich ja die Y Achse begrenzen ,damit man nicht irgendwie unter den Boden geht.

So jetzt will ich aber auf diesen "Bergen" laufen können.Wie geht das??

Und noch was.In allen spielen kann man die Maus zur Umsiht benutzen.Aber bei mir ist es so,dass ich entweder mit den Pfeiltasten mich drehen,nach vor und nach hinten gehen kan oder wieder mit der maus,aber man kann wie der überall hin(oben,unten........).Wie mach ich das,dass ich mit der Maus gleichzeitig umschauen und "gehen" kann(ein bischen unverstädnlich)

Ah ja ich wünsche allen frohe Ostertage:D



Danke

das wurgel

BeitragSo, Apr 04, 2010 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls es dich noch interessiert, ich habe den Pong mal zum laufen gebracht und kommentiert.
Code: [AUSKLAPPEN]
Const xmax=1024,ymax=768 ; Können Konstant sein, werden im weiteren Programmverlauf nicht mehr verändert

Graphics xmax,ymax,32,2 ; 1
SetBuffer BackBuffer()

AppTitle "Ping Pong Stani"
Local timer = CreateTimer(60);(200) 60 reicht aus, da der Bildschirm im Normalfall eh nur 60 Bilder/sec anzeigt

Global brett1 = LoadImage("brett.bmp") ;Spieler1brett
MidHandle brett1
Global brett2 = brett1 ;Spieler2brett ist das selbe bild, wie Spieler1brett.
;Beide variablen verweisen nun auf das selbe bild im Speicher

Global ball   = LoadImage("ball.bmp")  ;ball
MidHandle ball

Global bg=LoadImage("bg.bmp")

Global spielerbreite=ImageWidth(brett1) ; Spielerbreite ermitteln für späteren Gebrauch

 ;Erzeuge Spieler
Global Spieler1.Spieler = New Spieler  ;Erzeuge Spieler1
Global Spieler2.Spieler = New Spieler  ;Erzeuge Spieler2

Spieler1\x=spielerbreite/2                                  ;Die Positionen kann man mit in den Type nehmen
Spieler1\y=ymax/2
Spieler2\x=ymax-spielerbreite/2
Spieler2\y=ymax/2

Spieler1\name$ = Input("Spieler1 Name : ") ;Namensabfrage
Spieler2\name$ = Input("Spieler2 Name : ")

Spieler1\leben% = 3                         ;Leben und punkte
Spieler1\Punkte% = 0
Spieler2\leben% = 3
Spieler2\Punkte% = 0

For a=1 To 1   
   balls.Balldaten=New Balldaten   
   balls\xpos#=Rand(600)+12     
   balls\ypos#=Rand(400)+12     
   balls\movex=Rand(1)*2-1 ; So ist es entweder 1 oder -1           
   balls\movey=Rand(1)*2-1                 
   balls\speed#=Rand(2)+4         
Next

Repeat            ;Mainloop
   Cls
   
   DrawBlock bg, 0,0 ; Ich nehme an, dass bg der Hintergrund sein soll
   
   For  balls.Balldaten =Each Balldaten
      balls\xpos#=balls\xpos#+(balls\movex*balls\speed#)
      balls\ypos#=balls\ypos#+(balls\movey*balls\speed#)
         ; check for screen limits
      If balls\ypos#<25    Then balls\movey=1
      If balls\ypos#>768-25 Then balls\movey=-1
      
      If balls\ypos#>Spieler1\y-42 And balls\ypos#<Spieler1\y+42 ; Prüfen ob der Ball auf der Höhe des Spieler 1 ist
         If balls\xpos#<25+spielerbreite Then balls\movex=1 ; Wenn ja prallt wer ab
      EndIf
      If balls\ypos#>Spieler2\y-42 And balls\ypos#<Spieler2\y+42 ; Das gleiche nochmal mit der anderen Seite
         If balls\xpos#>1024-25-spielerbreite Then balls\movex=-1
      EndIf
      
      ; check for colisions with other balls
      
      DrawImage ball,balls\xpos#,balls\ypos#,0
      
   Next
   
   Text 10,0 ,"Spieler1 Name: " + Spieler1\name$  ;Abfrage
   Text 10,10, "Leben : " + Spieler1\leben%
   Text 10,20, "Punkte: " + Spieler1\Punkte%
   Text 750,728,"Spieler2 Name: "+ Spieler2\name$
   Text 750,748,"Leben : "+ Spieler2\leben%
   Text 750,738,"Punkte: " + Spieler2\Punkte%
   
   
   
   Steuerung() ;Steuerfunktion für Bretter       
   Grenzebretter()    ;Grenze für Bretter
   Daneben() ;Prüffunktion ob Ball aus dem Bildschirm geflogen ist
   
   DrawImage brett1,Spieler1\x,Spieler1\y ;Bilder zeichen
   DrawImage brett2,Spieler2\x,Spieler2\y
   
;   So wird Spieler2\leben nur abgefragt, wenn Spieler1\leben auch 0 ist.
;   If Spieler1\leben = 0
;      Gameover()
;      If Spieler2\leben% = 0
;         Gameover()
;         
;      End If
;   End If
   
   ; Spieler Leben abfragen
   If Spieler1\leben = 0
      Gameover()
   End If
   If Spieler2\leben = 0
      Gameover()
   End If
      
   
   WaitTimer timer ; Ohne Waittimer bringt dir der timer nichts
   Flip 0 ; 0, damit Flip nicht das warten übernimmt.
   
Until KeyDown(1)

End

; Die Types kannst du überall hinschreiben. Ich hab sie mal hierhin getan.

Type Spieler                         
   Field name$
   Field leben%
   Field Punkte%
   Field x, y
End Type

Type Balldaten
   Field xpos#   
   Field ypos#
   Field movex;# Da hier nur +1 und -1 reinkommt, braucht man keine Floats
   Field movey;#
   Field speed#
End Type

;Functionen
Function Steuerung() ;Steuerfunction
   
   If KeyDown(17) = 1 Then
      Spieler1\y = Spieler1\y-7
   End If
   If KeyDown(31) = 1 Then
      Spieler1\y = Spieler1\y+7
   End If
   
   If KeyDown(200) = 1 Then
      Spieler2\y = Spieler2\y -7
   End If
   
   If KeyDown(208) = 1 Then
      Spieler2\y = Spieler2\y +7
   End If
   
End Function


Function Grenzebretter() ;Grenze der bretter
   If Spieler1\y > ymax-42 Then
      Spieler1\y = ymax-42
   End If
   If Spieler1\y < 42 Then
      Spieler1\y = 42
   End If
   If Spieler2\y > ymax-42  Then
      Spieler2\y = ymax-42
   End If
   If Spieler2\y < 42 Then
      Spieler2\y = 42
   End If
End Function

Function Daneben()
   For  balls.Balldaten =Each Balldaten
      If balls\xpos < -25 ; Ball ist links aus dem Bild geflogen
         Spieler1\leben=Spieler1\leben-1 ; Leben abziehen
         ; Ball reinitialisieren
         balls\xpos#=Rand(600)+12     
         balls\ypos#=Rand(400)+12     
         balls\movex=Rand(1)*2-1   
         balls\movey=Rand(1)*2-1                 
         balls\speed#=Rand(2)+4   
      EndIf
      If balls\xpos > 1024+25 ; Ball ist rechts aus dem Bild geflogen
         Spieler2\leben=Spieler2\leben-1 ; Leben abziehen
         ; Ball reinitialisieren
         balls\xpos#=Rand(600)+12     
         balls\ypos#=Rand(400)+12     
         balls\movex=Rand(1)*2-1   
         balls\movey=Rand(1)*2-1                 
         balls\speed#=Rand(2)+4   
      EndIf
   Next
End Function

Function Gameover()
   Cls
   FlushKeys() ; Damit vorherige Tastendrücke nicht mehr von Waitkey() registriert werden
   Text xmax/2,ymax/2, " Das Spiel ist vorbei", 1, 1 ; 1,1 um den text zu zentrieren
   Flip ; Damit man den text auch sieht
   WaitKey() ; Auf Tastendruck warten; Wenn das Programm direkt dannach zuende ist, sieht man ihn nicht mehr.
   
   End
   
End Function

Lies dir das ganze nochmal durch und versuche es zu verstehen.

Für die zweite Frage mach lieber nen neuen Thread auf, denn sie hat mit diesem hier nichts mehr zu tun. Gib dem neuen Thread diesmal einen Sinvollen Namen, damit man schonmal weis worum es geht.
1 ist ungefähr 3
 

Stani

BeitragMo, Apr 05, 2010 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke sehr ich habs mir mal durchgelesen und weiß jetzt wo der fehler lag.

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group