Erstmal ein Lob für die Aufgabe ! Ich hoffe wirklich, dass sich für solche Aufgabenstellungen ein größeres Teilnehmerfeld wird begeistern können. Ich jedenfalls werde mir wohl mal wieder die Zeit nehmen
Mir sind jedoch zwei Fehler im Framework aufgefallen.
Zum einen reflektierst du zwar den Geschwindigkeitsvektor des Balls an der Bande, wenn dieser das Spielfeld verlässt, der Ball selbst verbleibt aber außerhalb (bewegt sich in der Folge natürlich wieder hinein).
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
// Ball bewegen
gs.ball_x += gs.ball_vx;
gs.ball_y += gs.ball_vy;
//if(gs.ball_y < 0.0f || gs.ball_y > FIELD_HEIGHT) gs.ball_vy = -gs.ball_vy;
if (gs.ball_y < 0.0f)
{
gs.ball_y = -gs.ball_y;
gs.ball_vy = -gs.ball_vy;
} else if (gs.ball_y > FIELD_HEIGHT) {
gs.ball_y = 2.0f*FIELD_HEIGHT - gs.ball_y;
gs.ball_vy = -gs.ball_vy;
}
|
Der andere Fehler ist in der Initialisierung der X11 Visualisierung. Dort überschreibst du die von pthread_create() in message_thread abgelegte ThreadID mit dem Rückgabewert der Methode (was - zumindest bei pthread-Implementierungen, die pthread_t als Zeiger definieren - bei pthread_join() zu einem segfault führt).
|
C-/C++-Quelltext
|
1
2
|
//message_thread = pthread_create(&message_thread, 0, &thread_proc, 0);
pthread_create(&message_thread, 0, &thread_proc, 0);
|
EDIT: hab nach Helmuts Edit die Reflektionsberechnung am Paddel nochmal nachgeschaut, verstanden und daher meine voreilige "Anregung" zurückgenommen (soll heißen: gelöscht).