Anfänger Tutorial für einen Pong-Klon
Übersicht

gigiBetreff: Anfänger Tutorial für einen Pong-Klon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nun auch überarbeitet und eingerückt.
Code: [AUSKLAPPEN] ;_____________________________________________________________________________________________________________________
;--------------------------------------------------------------------------------------------------------------------- ;------------------------Anfänger-Tutorial für einen 2D-Pong Klon----------------------------------------------------- ;--------------------------------------------------------------------------------------------------------------------- ;_____________________________________________________________________________________________________________________ ;Mit diesem Tutorial will ich versuchen euch die Grundzüge eines 2D-Spiels und des Programmierens mit BB(Blitzbasic) ;näher zu bringen.Ich werde versuchen alles so gut wie nur möglich zu erklären, sodass es auch jemand versteht der ;wenig mit dem Computer zu tun hat. Wenn ihr dieses Tutorial gemacht habt solltet ihr: ;-wissen was Variablen sind und was man mit ihnen machen kann ;-wissen was und wozu die Hauptschleife da ist ;-wissen warum sich bei diesem Spiel etwas bewegt ;-wissen wie man Tastenabfragen macht. ;Vielleicht lernt ihr auch mehr! ;Fangen wir an.Jedes Spiel in dem Formen,Farben und andere grafische Dinge angezeigt werden sollen beginnen mit dem ;Graphics- Befehl. Die Zahlen dahinter stehen für:800=Entfernung horizental vom Anfang des Fensters bis zum Ende. ;auch x-Achse genannt.600=Entfernung vertikal vom Fensteranfang bis zum Ende,die y-Achse.Zusammen ergeben sie die ;Auflösung,also die gesamte Bildpunktanzahl(hier:800 mal 600=480000 einzelne Bildpunkte).32=die Farb-Bits.2=der ;Fenstermodus.(1=Vollbild,2=großes Fenster,3=skalierbares Fenster). Spiele doch einmal mit diesen Werten rum und siehe was ;passiert. Graphics 800,600,32,2 ;Setbuffer setzt den(erkläre ich gleich)Backbuffer.Den Buffer kann man sich vorstellen wie ein Blatt Papier. ;Mal wird die Vorderseite,mal die Rückseite gezeigt.Backbuffer ist sozusagen die Rückseite und Frontbuffer die ;vordere.Nun wird als erstes auf den Backbuffer gemalt.Der Backbuffer wird zum Frontbuffer und der Frontbuffer zum ;Backbuffer.Nun wird im Hintergrund der neue Backbuffer gemalt(also die ehemalige Vorderseite des Papiers) und der ;neue Frontbuffer(die ehemalige Rückseite) gezeigt.Dann wird das ganze wieder getauscht.Der Frontbuffer wird ;Backbuffer und der Backbuffer Frontbuffer.Der Inhalt des Backbuffers wird gelöscht und er wird neu bemalt.Der ;Frontbuffer wird gezeigt.Und so läuft es immer weiter.Das ganze dient zur Beschleunigung. ;Der Tausch von Front-und Backbuffer geschieht mit Flip, welches in der Hauptschleife(erkläre ich gleich) stehen muss. SetBuffer BackBuffer() ;Kommen wir zu den Variablen.Man kann sie sich wie Schubladen vorstellen, welche entweder Texte,Kommazahen oder ganze ;Zahlen speichern können.Die Variablennamen stehen hier vor dem Gleichzeichen, die Werte dahinter. Will man Text ;in einer Variable speichern setzt man ein $-Zeichen hinter den Variablennamen. Als Variablennamen kann man alles ;nehmen.Will man Kommazahlen speichern setzt man ein #-Zeichen hinter den Namen.Bei ganzen Zahlen muss nichts ;gesetzt werden. y1=280 y2=280 x=783 y=305 rx=-5 ry=0 ;Mit While wird die Hauptschleife eingeleitet. Dahinter steht dann eine Bedingung, hier heißt es dann frei übersetzt: ;Solange nicht die Taste mit dem TASTENCODE(die Nummer die jede Taste hat, einfach mal im Internet nach TASTENCODES ;suchen) 1 gedrückt wird. Weiter unten steht dann der Befehl Wend,welcher wieder bis zu diesem Punkt "zurückspult". ;Was also in der Hauptschleife steht wird immer wiederholt. While Not KeyHit(1) ;Cls löscht den gesamten Bildschirminhalt,enorm wichtig bei 2D-Spielen damit sich die versichdenen Sachen nicht ;übermalen oder einen Schweif hinter sich herziehen. Cls ;Line malt eine Linie,welche von einem zu einem anderem Punkt gezogen wird. Diese Punkte legt man mit den jeweils ;ersten und zweiten Stellen(für Punkt 1) sowie den dritten und vierten Stellen(für Punkt 2) hinter dem Befehl ;fest. Line 10,y1,10,y1+50 Line 790,y2,790,y2+50 ;Oval zeichnet einen Kreis.Die ersten beiden stellen legen die Position des Mittelpunktes fest, die anderen beiden ;die x- und y-Ausdehnung des Kreises. Oval x,y,5,5 ;Rect zeichnet ein Rechteck.Die ersten beiden Stellen legen die erste x- und y-Position fest, die nächsten beiden die ;zweite. Die letzte Zahl steht für 1=gefülltes Rechteck 2=leeres Rechteck. Rect 2,2,798,598,0 ;Jetzt wird es spannend, die If-Abfragen kommen.If +Bedingung +Then wird geschrieben.Zu Deutsch soviel wie "Wenn ;Bedingung erfüllt dann:".Hier ist die Bedingung das eine bestimmte Taste gedrückt wird(Pfeil nach unten) und(=And) ;das die Variable y1 den Wert 540 hat oder kleiner ist.Wenn das der Fall ist dann wird y1 um 4 erhöht.Mit Endif ;wird die If-Abfrage beendet.!!!!!!!!!!!!!!!Auf keinen Fall endif vergessen, ansonsten läuft das Programm nicht!!!!!!! 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 ;Bis hier kanntet ihr alles.Hier steht auch kein Rätsel.In jedem Schleifendurchlauf wird die Varaible x um rx erhöht. x=x+rx y=y+ry ;Mit dem Befehl Text wird wird geschrieben.Erst wird die x-,dann die y-Position angegeben.Danach der Text,welcher in ;Anführungszeichen stehen muss("dein text"). Text 300,20,p1+" : "+p2 ;Mit Flip wird Front- zum Backbuffer und Back- zum Frontbuffer. Flip ;Mit Wend springt das Programm wieder zurück nach While(also zum Anfang der Hauptschleife). Wend ;End beendet das Programm. End ;Natürlich gibt es noch mehr Befehle, diese könnt ihr auf blitzbase.de ansehen. ;Viel Spaß mit Blizbasic wünscht euch euer GIGI ;--------------------------------------------------------------------------------------------------------------------- ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; FERTIG!!! ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;--------------------------------------------------------------------------------------------------------------------- |
||
Anfänger Tut von mir:
http://www.blitzforum.de/forum...hp?t=26185 |
- Zuletzt bearbeitet von gigi am So, Dez 02, 2007 21:50, insgesamt 3-mal bearbeitet
![]() |
kriD |
![]() Antworten mit Zitat ![]() |
---|---|---|
ist es normal, dass sich der schläger nach unten bewegt, wenn man nach oben drückt??
MfG kriD |
||
Wenn ich du wäre, wäre ich lieber ich! |
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
offenbar ja, hab mich beim proggen dran gewöhnt^^. Für den Tut-Text hab ich komischerweise länger gebraucht als für das Spiel an sich. Wie findet ihr es denn? Könnte ein Anfänger daraus schlauer werden? | ||
Anfänger Tut von mir:
http://www.blitzforum.de/forum...hp?t=26185 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pff... warum für einen Befehl nach THEN ne neue Zeile beginnen und wieder mit ENDIF abschließen? Kann man doch gleich kürzer belassen. Und wenn, sollte man doch auch gleich den Code einrücken. | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code ist eingerückt, wenn man sich ihn rauskopiert in nen Editor.
Ich finde aber, dass du ql:Graphics etwas schlecht erklärst. 1.) "Entfernung" würde ich die Fenstergröße nicht nennen 2.) Es gibt noch anderes als 32Bit Farbtiefe, allerdings nur im Vollbildmodus 3.) Der Modus 3 ist nicht "kleines Fenster", sondern skalierbares Fenster Und die Sache mit rauf-runter ist nicht normal ![]() mfG, Christoph |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bei mir ist da nichts eingerückt...
Ach ja, Gigi, kürze bitte deine Signatur. Die ist so viel zu lang. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
sry, stimmt. Das war das Automatisch-Einrücken von meiner IDE ![]() So gesehen solltest du das Tutorial wohl oder übel nochmal überarbeiten, gigi. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
... und du solltest es recht rasch überarbeiten, weil ich es sonst hier entferne. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ist nun eingerückt. Das mit "Entfernung" soll eher veranschaulichen.Rauf-Runter ist geändert. | ||
Anfänger Tut von mir:
http://www.blitzforum.de/forum...hp?t=26185 |
- Zuletzt bearbeitet von gigi am So, Dez 02, 2007 21:49, insgesamt einmal bearbeitet
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
... und trotzdem gehe ich nach unten, wenn ich nach oben drücke ...
Ich würde ausserdem noch eine Framebremse mit Flip 0 einbauen, damit ein Pong nicht 95% CPU frisst. Ausserdem die If - Abfrage für die zukünftige Position ausführen und nicht für die momentane Position, da der Ball sonst erst abprallt, wenn er bereits hinter der Linie ist. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Bassmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sieht nice aus :>
Aber der Bot ist zu gut der kriegt JEDE Kugel ^^ |
||
Johann der 2.Betreff: Danke |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nja mich hat es ein bisschen weiter gebracht ich weiß nähmlich jetzt welchen Fehler ich gemacht hab. | ||
KaDuZa |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du könntest die ganzen if schleifen etwas genauer kommentieren also sagen was jeder einzelnder if sagt , wäre für anfänger ansprechbarer, aber geiles ding | ||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
es gibt keine if schleifen ![]() ich find dein tut für anfänger pädagogisch wertvoll ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group