Pong

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Xenowa

Betreff: Pong

BeitragDo, Apr 08, 2004 11:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.
Ich bin neu hier und habe vor kurzem angefangen, mit BB zu programmieren. Ich hab schon einige Tuts angeschaut und versuche jetzt ein Pong zu programmieren. Allerdings stehe ich jetzt vor dem folgenden Problem:
Der Ball muss ja an jeder Mauer und Pad abprallen. Wie berechnet man da den Winkel? Muss man da Sinus und Cosinus anwenden? (ich hatte Sin und Cos noch nicht in der Schule...) Ausserdem muss man da ja noch berechnen, dass wenn man das Pad in diesem Moment bewegt wenn der Ball aufprallt, dass der Ball dann mehr schub hat und in einem Flächeren Winkel abprallt...
Also meine konkreten Fragen:
1. Muss ich da noch mehr tuts anschauen bevor ich ein Pong progge?
2. Wenn ja, wo bekomme ich gute Tutorials für Anfänger wo man das grundlegendste lernt, um nacher selbst weiterzuproggen? (Das grosse Tut von Rob hab ich schon angeschaut, aber ich finde immer noch dass ich viel zu wenig wissen habe...)
Danke im Voraus an alle die mir Tipps geben können Very Happy

mfG

Xenowa

Unplugged

BeitragDo, Apr 08, 2004 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Kauf dir Réne Meyers Buch, dann mach Tutorials. Wenn du das Buch nicht kennst, es ist sehr ausführlich und so gut wie alles was du brauchst wird beschrieben Wink
User posted image
 

Xenowa

BeitragDo, Apr 08, 2004 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Welches Buch meinst du jetzt? Hack'n Play oder Jetzt lerne ich spiele programmieren mit Blitzbasic?
 

x.Force

BeitragDo, Apr 08, 2004 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
zweiteres. ich habs mir auch gekauft das ist wirklich gut und kann ich jedem empfehlen Smile

AMD Athlon XP 2000+ | 1024mb DDR-Ram | Asus Radeon 9600XT | BENQ FP757 17°Zoll TFT

Was kümmert mich mein Geschwätz von gestern? (Konrad Adenauer) -.-

Jan_

Ehemaliger Admin

BeitragDo, Apr 08, 2004 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, genau, wenn du es noch nicht hasst, kauf es dir, wenn du es schon hasst, lies es nochmal, oder kaufe es dir nochmal! Smile

Am einfachsten verständlich für dich ist, das du wissen musst, an welcher wand du ist, und dann drehst du die geschwindigkeit von X/Y um, kommt drauf an, an welcher wand!
between angels and insects

Ctuchik

BeitragDo, Apr 08, 2004 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das Abprallen an der Wand folgt dem Prinzip Einfallwinkel = Ausfallwinkel!
Es reicht also einfach die x, bzw. y-Geschwindigkeit umzukehren!
Beispiel:
Code: [AUSKLAPPEN]

If Ball_x < 0
  Ball_x = 0
  Ball_xspeed = -1 * Ball_xspeed
End If
If Ball_y < 0
  Ball_y = 0
  Ball_yspeed = -1 * Ball_yspeed
End If

Das ganze auch noch für die anderen Wände! (Wobei 2 Wände ja sowieso die Torlinien sind, da prallt dann auch nix ab)
Beim stehenden Pad funktioniert es eigentlich genauso, wenn du kein spezielles Abprallverhalten willst! Das bewegte Pad kannst du einfach so machen! (Ausgehend von vertikalen Pads rechts bzw. links)
Code: [AUSKLAPPEN]

If Ball kollidiert mit Pad
  Ball_xspeed = -1 * Ball_xspeed
  Ball_yspeed = Ball_yspeed + Pad_yspeed
End If



mfG Ctuchik

Travis

BeitragDo, Apr 08, 2004 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal ein lauffähiges Beispiel dazu. Es ist allerings nur ein simples Pong, da der Ball einfach vom Panel abprallt und die Bewegungsrichtung und der Aufprallpunkt nicht berücksichtigt wird.

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()
AppTitle "Pongfake"

SeedRnd MilliSecs()

Type ball
 Field x#, y#, sx#, sy#, winkel, speed
End Type

Type panel
 Field x#, y#, speed#, id
End Type

Font1 = LoadFont("Arial", 24,1,0,0)

 
 b.ball = New ball ; Ball erzeugen
 b\x# = 400
 b\y# = 300
 b\winkel = 30
 b\speed# = 6
 b\sx# = Cos(b\winkel) * b\speed#
 b\sy# = Sin(b\winkel) * b\speed#

 p.panel = New panel ; Spieler
 p\x# = 50
 p\y# = 300
 p\speed = 5
 p\id = 1

 p.panel = New panel ; Gegner
 p\x# = 750
 p\y# = 300
 p\speed = 5
 p\id = 2



Repeat
 Cls

  SetFont Font1
  Text 200,0, p1p
  Text 600,0, p2p

  Line 400,0,400,600

  For p.panel = Each panel
   Rect p\x#-10,p\y#-50,20,100,1 ; Panels anzeigen

   If p\id = 2 Then
    If b\y => p\y# Then p\y# = p\y# + p\speed#  ; Computer steuern
    If b\y =< p\y# Then p\y# = p\y# - p\speed#
   
    If b\x > 795  Then
     p1p = p1p + 1: b\x = 300                   ; Punkt für Spieler
     b\sx# = Cos(Rnd(0,360)) * b\speed#         ; Ball reset
     b\sy# = Sin(Rnd(0,360)) * b\speed#                   
    EndIf
   EndIf

   If p\id = 1 Then                             ; Spieler steuern
    If KeyDown(208) And p\y < 550 Then p\y# = p\y# + p\speed# ; Ball reset
    If KeyDown(200) And p\y > 50 Then p\y# = p\y# - p\speed#
    If b\x < 5 Then
     p2p = p2p + 1: b\x = 300                   ; Punkt für Gegner
     b\sx# = Cos(Rnd(0,360)) * b\speed#
     b\sy# = Sin(Rnd(0,360)) * b\speed#
    EndIf
   EndIf

   If RectsOverlap(p\x#-10, p\y#-50, 20, 100, b\x#-5, b\y#-5, 10, 10) Then ; Kollision prüfen
    b\sx# = -b\sx#
   EndIf
  Next
 
   b\x# = b\x# + b\sx# ; Ball bewegen
   b\y# = b\y# + b\sy#

   If b\x < 5 Or b\x > 795 Then b\sx = -b\sx ; Ball abprallen
   If b\y < 5 Or b\y > 595 Then b\sy = -b\sy

   Color 255,0,0: Oval b\x-5, b\y-5, 10, 10, 1 ; Ball anzeigen

 Flip
Until KeyHit(1)
End
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Michi1988

BeitragDo, Apr 08, 2004 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt lerne ich Spiele programmieren mit Blitz Basic habe ich bekommen und noch am darauffolgenden Tag durch gehabt. Es ist ein spitzen Buch.
Konnte zwar schon vorher den ganzen Kram bis auf 3d aber für einen Einsteiger ist es perfekt. Wie man ein Pong programmiert wird da übrigens nicht besprochen. Egal. Viele nette Leute haben ja was gepostet.

Michi
 

Xenowa

BeitragDo, Apr 08, 2004 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke an alle die geholfen haben Very Happy

bye

Xenowa

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group