Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.11.2011, 13:56

C++ SFML Pong Game

Hey, ich beschäftige mich in letzter Zeit mit C++ und der Bibliothek SFML. Nun würde ich gerne mit einem fertigen "Opensource Pong Game" arbeiten. Allgemein die Struktur, Aufbau usw. "studieren". Leider finde ich kein passendes für mich bearbeitbares Projekt.
Wenn jemand sowetwas kennt, bitte posten. ;)
Only God can judge me.

Forang

Frischling

Beiträge: 23

Wohnort: Wesel

Beruf: Schule

  • Private Nachricht senden

2

04.11.2011, 14:17

Schon mal in die SFML 1.6 Beispiele geschaut :O
Da ist doch ein minimalistischer Pong Klon bei.

3

04.11.2011, 14:35

Erstmal danke für die Antwort,aber wo finde ich diese Beispiele, unter WIKI?
Only God can judge me.

4

04.11.2011, 15:21

Lade dir die FULL SDK herunter, da ist ein Ordner der auf intelligenter Weise zu "examples" benannt wurde. Pong in diesem zu finden ist dann deine Sache.

MfG
Check

5

04.11.2011, 15:45

Danke für die hilfreiche Antwort, da ich mir die SDK nicht runtergeladen hab, wusste ich auch nicht, dass dort ein Ordner namens Examples ist :)
Only God can judge me.

6

04.11.2011, 17:21

Am besten immer gleich alles, genau aus den Gründen.
Aber die SDK hattest du doch? Sonst hättest du ja gar nicht anfangen können. Es ging um die komplette SDK.
Als Tipp: Wenn du dann Pong selbst schreibst, nutze das nur als Inspiration, schreib nichts ab, mach kein Copy&Paste, sonst passiert dir das was mir widerfahren ist. :|

MfG
Check

7

04.11.2011, 18:02

Soo habe angefangen mein Pong Spiel zuschreiben (bis jetzt alles allein), natürlich habe ich mich von dem "ExmaplePong" inspirieren lassen. Nun habe ich Probleme mit den Kollision zwischen dem Ball und dem Balken, sowie zwischen dem Ball und dem Fensterrand.
Ich hätte gerne ein paar Tipps von euch, wie ich es in Kraft treten lassen könnte.

PS: Mir ist bekannt, dass SFML spezielle Funktionen dafür hat, jedoch weiß ich nicht wie ich sie benutzen soll und welches hierzu am besten passt.

Mein bisheriger Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <SFML\Graphics.hpp>
#include <cmath>

using namespace std;

int main()
{
    sf::RenderWindow app(sf::VideoMode(400, 300,32), "Pong");
    sf::Image image;
    sf::Image image2;
    if(!image.LoadFromFile("bar.png"))
    {
        return EXIT_FAILURE;
    }
        if(!image2.LoadFromFile("ball.png"))
    {
        return EXIT_FAILURE;
    }
    sf::Sprite bar(image);
    sf::Sprite bar2(image);
    sf::Sprite ball(image2);
    bar.SetPosition(app.GetWidth() / 2 - bar.GetSize().x / 2,0);
    bar2.SetPosition(app.GetWidth() / 2 - bar2.GetSize().x / 2,app.GetHeight()-bar2.GetSize().y);
    ball.SetPosition(app.GetWidth() / 2 - 5,app.GetHeight() / 2 - 5);
    ball.SetScale(0.45f,0.5f);

while(app.IsOpened())
{
    sf::Event Event;
    while(app.GetEvent(Event))
    {
            if(Event.Type == sf::Event::Closed)
            {
                app.Close();
            }
    }
    float ElapsedTime = app.GetFrameTime();
    if (app.GetInput().IsKeyDown(sf::Key::Left) && (bar2.GetPosition().x > 0))
    {
        bar2.Move(-100 * ElapsedTime, 0);
    }
    if (app.GetInput().IsKeyDown(sf::Key::Right) && (bar2.GetPosition().x < app.GetWidth()-bar2.GetSize().x))
    {
        bar2.Move(+100 * ElapsedTime, 0);
    }
    if (app.GetInput().IsKeyDown(sf::Key::A) && (bar.GetPosition().x > 0))
    {
        bar.Move(-100 * ElapsedTime, 0);
    }
    if (app.GetInput().IsKeyDown(sf::Key::D) && (bar.GetPosition().x < app.GetWidth()-bar.GetSize().x))
    {
        bar.Move(+100 * ElapsedTime, 0);
    }

    app.Clear(sf::Color::Black);
    app.Draw(bar);
    app.Draw(bar2);
    app.Draw(ball);
    app.Display();
}
    return EXIT_SUCCESS;
}
Only God can judge me.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

04.11.2011, 18:04

Für ein simples Pong würde ich erst mal versuchen keine Hilfe zu nehmen. Einen Ball zu programmieren, der sich bewegt und dabei von den Rändern(Bildschirm) abprallt, sollte man denke ich ganz gut hinkriegen. Einen Balken, welchen man mit der Tastatur oder Maus steuern kann sollte auch drin sein. Die Kollision zwischen Balken und Ball wirkt vielleicht etwas komplizierter, ist aber eigentlich nicht groß anders, als mit den Bildschirmrändern. Versuch dich doch vielleicht einfach erst mal ohne Hilfe an dem Spiel. Wenn das nicht ganz so will wie du, kannst du ja immer noch in die Beispiele gucken.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

9

04.11.2011, 18:17

Für ein simples Pong würde ich erst mal versuchen keine Hilfe zu nehmen. Einen Ball zu programmieren, der sich bewegt und dabei von den Rändern(Bildschirm) abprallt, sollte man denke ich ganz gut hinkriegen. Einen Balken, welchen man mit der Tastatur oder Maus steuern kann sollte auch drin sein. Die Kollision zwischen Balken und Ball wirkt vielleicht etwas komplizierter, ist aber eigentlich nicht groß anders, als mit den Bildschirmrändern. Versuch dich doch vielleicht einfach erst mal ohne Hilfe an dem Spiel. Wenn das nicht ganz so will wie du, kannst du ja immer noch in die Beispiele gucken.

Aber zurzeit sieht der Code inordnung aus? Also kann ich ihn so behalten?
Only God can judge me.

10

04.11.2011, 18:49

Schon. Allerdings könnte man es optimieren, sf::Shape-Klasse ist schneller und kann man hier sicherlich verwenden, Pong hat ja keine wirklich hohen Grafikansprüche. xD
sf::Clear() hat einen vordefinierten Operanden, der sagt schon, dass es schwarz sein soll. sf::Color::Black kannst du also weglassen.
iostream und cmath können raus, warum hast du die drin? Du verwendest doch gar nichts was damit zu tun hat. Wenn ich mich nicht täusche dürfte die SFML standardmäßig auch iostream selbst inkludieren.
Ansonsten kannst du ihn natürlich durchaus so lassen.

MfG
Check

Werbeanzeige