Pong
Übersicht

![]() |
ElrohirBetreff: Pong |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
[/code]
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 |
||
Le melin Nessa Sáralondë |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zum Schriftproblem
Loadfont ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 ![]() Dazu brauchst du wie oben schon gesehen < oder > (kleiner grösser als) |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Elrohir |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es tut mir Leid aber wenn du nicht selber draufkommst, fehlt dir gewisses Grundwissen ..
Hast du Robsite Tutorial schon durch? Falls nein umbedingt nachholen ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Programmieren = Ausprobieren = Spass haben = Grübeln!
Oke merk ich mir! ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könnte es der Ball sein? | ||
Le melin Nessa Sáralondë |
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jaja schon klar, bin ja auch schon mitten dabei. *gg* | ||
Le melin Nessa Sáralondë |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, danke für die TIps mit dem kommentieren,w erde mir das nun angewöhnen! | ||
Le melin Nessa Sáralondë |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group