Pong

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Elrohir

Betreff: Pong

BeitragSa, Apr 04, 2009 8:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo Moin Leute!
Habe nach diesem Tutorial: https://www.blitzforum.de/foru...hp?t=26185
mein erstes Pong-Spiel programmiert...
Natürlich nicht Ctrl C + Ctrl V, nee abgeschrieben und versucht was dabei zu lernen...
Nun aber meine Frage:
Der KI (Computer) blockt all meine Bälle ab...
Kann ich nun so machen, dass der Ball pro Schlag schneller wrid? Welchen Code muss ich dafür benutzen? (Ich gehe auch noch mich hier umschauen, in der Code-Ecke.)
Acuh würde ich gerne so einen Coundown machen am Anfang... 3... 2... 1.. GO! aber die Zahlen sollten verschwinden:

(kommt) 3... (verschwindet)
(kommt) 2... (verschwindet)
(kommt) 1... (verschwindet)
(kommt) GO! (verschwindet)
Spiel fängt an...

Hoffe ihr versteht meine Frage etwas...

mfg
GerTiger

PS: Wie kann man die Schriftgrösse verändern, welche dann im SPiel angezeigt wird? Mödchte den Countdown zum Beispiel ganz gross machen, also die Schrift... Und wo genau muss ich diese einsetzen? Hier gibt es den Code:

https://www.blitzforum.de/help/FontHeight

Und hier noch das Programm, benötigt keine Bilder:

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()

y1=280
y2=280
x=783
y=305
rx=-5
ry=0

While Not KeyHit(1)
Cls
 
Line 10,y1,10,y1+50
Line 790,y2,790,y2+50
Oval x,y,5,5
Rect 2,2,798,598,0

;-Hauptschleife-;

If KeyDown(208) And y1=<540 Then
     y1=y1+4
EndIf
If KeyDown(200) And y1=>10 Then
     y1=y1-4
EndIf

If x<=10 Then
    If y1+25=y Then
       rx=7
    EndIf
    If y1+25>y And y1=<y Then
       rx=6
       ry=ry-1
    EndIf
    If y1+25<y And y1+50>y Then
       rx=6
       ry=ry+1
    EndIf
EndIf

If x>=790 Then
    If y2+25=y Then
       rx=-7
    EndIf
    If y2+25>y And y2=<y Then
       rx=-6
       ry=ry-1
    EndIf
    If y2+25<y And y2+50>y Then
       rx=-6
       ry=ry+1
    EndIf
EndIf

If y>y2+25 And rx>0 Then
  y2=y2+4
EndIf
If y<y2+25 And rx>0 Then
  y2=y2-4
EndIf

If x<=0 Then
  p2=p2+1
  x=790
  ry=0
  y=y2+25
EndIf
If x=>800 Then
  p1=p1+1
  x=10
  ry=0
  y=y1+25
EndIf

If y<=2 Then
  ry=+1
EndIf
If y>=598 Then
  ry=-1
EndIf

x=x+rx
y=y+ry

Text 400,20,p1+" : "+p2

Flip
Wend
End
[/code]
Le melin Nessa Sáralondë

TimBo

BeitragSa, Apr 04, 2009 10:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

ich löse das immer so , dass ich mein Game in " Kapitel " unterteile.
Ich nehme eine select amweisung und führe je nach wert der Anweisung nur ein Bestimmten teil des Codes aus.

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()
timer=CreateTimer(60)

Global y1=280
Global y2=280
Global x=783
Global y=305
Global rx=-5
Global ry=0
Global p1,p2

Global gamepos=0
start_time = MilliSecs()

While Not KeyHit(1)
   Cls
   
   Select gamepos ;es wird NUR EINE der Optionen gemacht
      Case 0;countdown
         countdown(start_time)
         
      Case 1;game
         game()
         
      Case 3;z.b. Highscore
         
         
         
   End Select
   
   
   WaitTimer(timer)
   Flip (0)
Wend
End

Function countdown(zeit)
   If MilliSecs()-zeit<500 Then Text 50,50,"3":Goto fertig
   If MilliSecs()-zeit<1000 Then Text 50,50,"2":Goto fertig
   If MilliSecs()-zeit<1500 Then Text 50,50,"1":Goto fertig
   If MilliSecs()-zeit<2000 Then Text 50,50,"GO":Goto fertig
   If MilliSecs()-zeit>2000 Then gamepos=1
   
   .fertig
End Function

Function game()
   Line 10,y1,10,y1+50
   Line 790,y2,790,y2+50
   Oval x,y,5,5
   Rect 2,2,798,598,0
   
;-Hauptschleife-;
   
   If KeyDown(208) And y1=<540 Then
      y1=y1+4
   EndIf
   If KeyDown(200) And y1=>10 Then
      y1=y1-4
   EndIf
   
   If x<=10 Then
      If y1+25=y Then
         rx=7
      EndIf
      If y1+25>y And y1=<y Then
         rx=6
         ry=ry-1
      EndIf
      If y1+25<y And y1+50>y Then
         rx=6
         ry=ry+1
      EndIf
   EndIf
   
   If x>=790 Then
      If y2+25=y Then
         rx=-7
      EndIf
      If y2+25>y And y2=<y Then
         rx=-6
         ry=ry-1
      EndIf
      If y2+25<y And y2+50>y Then
         rx=-6
         ry=ry+1
      EndIf
   EndIf
   
   If y>y2+25 And rx>0 Then
      y2=y2+4
   EndIf
   If y<y2+25 And rx>0 Then
      y2=y2-4
   EndIf
   
   If x<=0 Then
      p2=p2+1
      x=790
      ry=0
      y=y2+25
   EndIf
   If x=>800 Then
      p1=p1+1
      x=10
      ry=0
      y=y1+25
   EndIf
   
   If y<=2 Then
      ry=+1
   EndIf
   If y>=598 Then
      ry=-1
   EndIf
   
   x=x+rx
   y=y+ry
   
   Text 400,20,p1+" : "+p2
End Function



Schau dir mal den Code an , es geht nicht darum das du ihn übernimmst , nur das du creativer wirst.

mfg
TimBo
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.

ozzi789

BeitragSa, Apr 04, 2009 10:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum Schriftproblem
Loadfont da kannst du einen belibigen Schriftyp auswählen und die grösse setzen


Zum schneller werden
multipliziere einfach zum X und Y einen float speed, welcher jeden schleifen durchgang ein ganz klein wenig grösser wird

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()

y1=280
y2=280
x=783
y=305
rx=-5
ry=0
speed#=1
While Not KeyHit(1)
Cls
 
Line 10,y1,10,y1+50
Line 790,y2,790,y2+50
Oval x,y,5,5
Rect 2,2,798,598,0

;-Hauptschleife-;

If KeyDown(208) And y1=<540 Then
     y1=y1+4
EndIf
If KeyDown(200) And y1=>10 Then
     y1=y1-4
EndIf

If x<=10 Then
    If y1+25=y Then
       rx=7
    EndIf
    If y1+25>y And y1=<y Then
       rx=6
       ry=ry-1
    EndIf
    If y1+25<y And y1+50>y Then
       rx=6
       ry=ry+1
    EndIf
EndIf

If x>=790 Then
    If y2+25=y Then
       rx=-7
    EndIf
    If y2+25>y And y2=<y Then
       rx=-6
       ry=ry-1
    EndIf
    If y2+25<y And y2+50>y Then
       rx=-6
       ry=ry+1
    EndIf
EndIf

If y>y2+25 And rx>0 Then
  y2=y2+4
EndIf
If y<y2+25 And rx>0 Then
  y2=y2-4
EndIf

If x<=0 Then
  p2=p2+1
  x=790
  ry=0
  y=y2+25
EndIf
If x=>800 Then
  p1=p1+1
  x=10
  ry=0
  y=y1+25
EndIf

If y<=2 Then
  ry=+1
EndIf
If y>=598 Then
  ry=-1
EndIf

x=x+rx*speed#
y=y+ry*speed#

speed#=speed#*1.0005


Text 400,20,p1+" : "+p2+" speed:"+speed

Flip
Wend
End



Das mit dem 1,2,3
Könnte man mit Types lösen, um noch nen schönen effekt hinzubekommen, zmb das die 1 rauffliegt und die farbe ändert, genauso mit 2 und 3 usw
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Elrohir

BeitragSa, Apr 04, 2009 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool klasse von euren super Antworten! Bin erst jetzt nach Hause gekommen, war heute morgen auf Axe, sorry für die späte Antwort!

Werd gleich Mal ein bisschen mit den Codes herumspielen, wie ne kleine Mitze mit nem Ball. ^^


mfg
GerTiger

Edit: Einen Haken hat der Speed aber...
Spiel es mal durch, sobald er die 2er-Marke erreicht hat, sieht man den Balkl nicht mehr und es gibt unentlich viele "erzielte" Tore...
Mit dem Countdown hat geklappt!
Ich versuche mal mit dem Hightscore...
Nur eine Frage...
Wenn ich jetzt dem Spiel sagen will, wenn der KI oder der Spieler 10 Punkte erzielt haben, ist das Spiel vorbei und es wird in die Highscore eingetragen...
Wo müsste ich da den Code einbauen? in die If-Schleife oder? Ich suche gerade, wie der COde heissen würde...

Achja... ein Menü wollte ich noch erstellen...

Code: [AUSKLAPPEN]
Pong
------

[1] Start
[2] Hightscore
[3] Exit


Ich google mal danach...
Le melin Nessa Sáralondë

ozzi789

BeitragSa, Apr 04, 2009 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm was ist eine IF schleife? xDD


Aaaalso
wenn du nicht willst das der Speed zu gross wird, machst du einen begrenzer rein

Code: [AUSKLAPPEN]
If speed#<1.55
speed#=speed#*1.0005
EndIf

Tadaaa
also speed soll nur erhöht werden wenn speed nicht grösser als 1.55 ist Wink
So funktioniert es

Das mit den Punkten ist doch ganz einfach, du hast ja eine Variable die die Punkte zählt.
Wenn diese nun grösser ist als 10 dann was du willst Smile

Dazu brauchst du wie oben schon gesehen < oder > (kleiner grösser als)
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Elrohir

BeitragSa, Apr 04, 2009 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Könntest du mir noch zeigen, in welcher Zeile das wäre, mit den 10 Punkten?
Sorry, ich kenn mich da noch net so aus...
Le melin Nessa Sáralondë

ozzi789

BeitragSa, Apr 04, 2009 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Es tut mir Leid aber wenn du nicht selber draufkommst, fehlt dir gewisses Grundwissen ..
Hast du Robsite Tutorial schon durch?

Falls nein umbedingt nachholen Wink



Zeige Eigeninitative, probiere rum, das ist Programmieren
sonst haben die Leute das Gefühl du willst nur fertigen Code


Da ich aber nicht herzlos bin, helfe ich dir auf die Sprünge Wink
mfg


p.s schaue die Codetags an

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()

y1=280
y2=280
x=783
y=305
rx=-5
ry=0
speed#=1
While Not KeyHit(1)
Cls
 
Line 10,y1,10,y1+50
Line 790,y2,790,y2+50
Oval x,y,5,5
Rect 2,2,798,598,0

;-Hauptschleife-;

If KeyDown(208) And y1=<540 Then
     y1=y1+4
EndIf
If KeyDown(200) And y1=>10 Then
     y1=y1-4
EndIf

If x<=10 Then
    If y1+25=y Then
       rx=7
    EndIf
    If y1+25>y And y1=<y Then
       rx=6
       ry=ry-1
    EndIf
    If y1+25<y And y1+50>y Then
       rx=6
       ry=ry+1
    EndIf
EndIf

If x>=790 Then
    If y2+25=y Then
       rx=-7
    EndIf
    If y2+25>y And y2=<y Then
       rx=-6
       ry=ry-1
    EndIf
    If y2+25<y And y2+50>y Then
       rx=-6
       ry=ry+1
    EndIf
EndIf

If y>y2+25 And rx>0 Then
  y2=y2+4
EndIf
If y<y2+25 And rx>0 Then
  y2=y2-4
EndIf

If x<=0 Then
  p2=p2+1
  speed#=1 ;bei nem goal wird der ball ja neu gespawnt, also den speed wieder auf 1 setzen
  x=790
  ry=0
  y=y2+25
EndIf
If x=>800 Then
  p1=p1+1
  speed#=1 ;bei nem goal wird der ball ja neu gespawnt, also den speed wieder auf 1 setzen

  x=10
  ry=0
  y=y1+25
EndIf

If y<=2 Then
  ry=+1
EndIf
If y>=598 Then
  ry=-1
EndIf

x=x+rx*speed#
y=y+ry*speed#
speed#=1.55

If speed#<1.55
speed#=speed#*1.0005
EndIf

Text 400,20,p1+" : "+p2+" speed:"+speed

; Im grunde genommen ist es egal wo das einbaust^^
;beachte, winner ist beim spielanfang "0", falls also ein neuer Match beginnen sollte
;müsstest du alles zurücksetzen (x/y/p1/p2/winner usw), am besten machst du das in einer Funktion, das must du selber können ;)


If p1>10 ;wenn player1 mehr als 10 punkte hat
winner=1 ;Variable winner auf 1 setzten (spieler 1),
EndIf
If p2>10 ;wenn player2 mehr als 10 punkte hat
winner=2 ;Variable winner auf 2 setzen (spieler 2)
EndIf

If winner<>0 ;wenn winner nicht "0" ist
Cls
Repeat
Text 0,0,"Player"+winner+" hat gewonnen!!!11"
Text 0,20,"Player 1 schoss "+p1+" toore, Player 2 schoss "+p2+" toore"
Flip
Until KeyHit(1)
;hier müsste man nun alles wieder zurück setzen
EndIf



Flip
Wend
End
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Elrohir

BeitragSa, Apr 04, 2009 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Programmieren = Ausprobieren = Spass haben = Grübeln!
Oke merk ich mir! Wink

Nee, die Robsite Tutorials habe ich noch net ganz durch...
Ich verstehe das mit den Schleifen net so ganz, dies wollte ich hier an diesem Beispiel etwas genau kennen lernen auch, warum da plötzlich 708 oder 200 oder mal 280 steht...
Mit Linien Zeichnen, Rechteck usw. habe ich keine Probleme, da weiss ich, das sind Pixel, der Strich wird so lang usw...

naja Programmieren ist ein langer und harter weg!


*Bücher schnappen gehen, lernen und in eine Ecke hinhocken*


mfg
GerTiger
Le melin Nessa Sáralondë

ozzi789

BeitragSa, Apr 04, 2009 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
708 oder 200 oder mal 280

von was redest du genau?


auch ich (wahrscheinlich jeder) hatte am Anfang schwierigkeiten zu verstehen wie das Ganze funktioniert, das kommt mit der Zeit

fragen mit den schleifen?
frage ruihg ^^
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Elrohir

BeitragSa, Apr 04, 2009 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich arbeite gerade das von Robsite durch...
Bin jetzt bei den Schleifen, wenn ich fragen habe, melde ich mich!

Bitte diesen Thread nicht schliessen, weil ich meine Fragen auf Bezug des Pong-Projektes einbeziehe!

Danke im Vorraus!
GerTiger

PS: Zum Beispiel diesen verwirrenden Code verstehe ich net:

Code: [AUSKLAPPEN]
If x<=10 Then
    If y1+25=y Then
       rx=7
    EndIf
    If y1+25>y And y1=<y Then
       rx=6
       ry=ry-1
    EndIf
    If y1+25<y And y1+50>y Then
       rx=6
       ry=ry+1
    EndIf
EndIf


Ich weiss zwar, dass es sich um eine If-Funktion handelt habe was bedeutet die Zah unten bei
Code: [AUSKLAPPEN]
rx=6

Auf was bezieht sich diese?
Le melin Nessa Sáralondë
 

da_poller

BeitragSa, Apr 04, 2009 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ist dir bewust was die variable rx bewirken soll? fals nciht versuch zu verstehen wofür die vaiable gedacht ist (rx ist in meinen augen keine vernünftige bezeichnung für eine variable..)

Elrohir

BeitragSa, Apr 04, 2009 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnte es der Ball sein?
Le melin Nessa Sáralondë
 

da_poller

BeitragSa, Apr 04, 2009 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab mir den quellcode nciht angesehen aber wenn DU als die person die den quellcode bearbeitet nicht weißt wofür die variable gedacht ist soltle deine direkte nächste aufgabe klar sein: raus finden wofür die variable da ist.. anschließend ergibt sich alles von allein..

nur wenn dir hier jeder sagt was was ist und du nie dein kopf mal selber anstrengst wird das nix werden.

Elrohir

BeitragSa, Apr 04, 2009 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Jaja schon klar, bin ja auch schon mitten dabei. *gg*
Le melin Nessa Sáralondë

M0rgenstern

BeitragMi, Apr 08, 2009 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Wegen deinem Problem den Ball schneller zu machen.
Ich würde da keine Begrenzung für die Geschwindigkeit reinbauen.
An deiner Stelle würde ich das einfach so machen dass der Ball wieder eine "normale" Geschwindigkeit bekommt wenn ein Tor erzielt wurde.
Ich hab auch in den letzten tagen ein Tutorial durchgeackert um wieder den Einstieg zu finden und hab auchs ein Pong geschrieben.
Bei mir wird der Ball alle 4 Sekunden schneller da ich das Problem mit dem unbesiegbaren PC auch hatte^^

Und wegen dem Anfang dass das Spiel halt direkt anfängt.. Ich hab VOR der Hauptschleife einfach schon die Pausefunktion gestartet.

Lg M0rgenstern.

Edit:
Entschuldige aber ich muss da poller recht geben.
Die einzige vernünftige Variable die ich in deinem Code finden konnte war Speed.
Mit allen anderen (y,x,rx,ry) kann ich beim besten Willen nichts anfangen, tschuldigung.
Und ganz nebenbei: Wie wärs wenn du deinen Code mal richtig kommentierst.. Vor allem da du ja scheinbar selbst nicht weißt welche Variable wofür ist.

Elrohir

BeitragMo, Apr 13, 2009 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, danke für die TIps mit dem kommentieren,w erde mir das nun angewöhnen!
Le melin Nessa Sáralondë

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group