un petit jeu de course de vaisseau spatiaux. la map et générer aléatoirement. il y a un petit générateur de particule. il charge des model au format md2.
j'ai utiliser seulement openGL pour la 3D, SFML pour le fenêtrage(je l'affection pas mal).
note:
attention il y a un bug avec les texture!
par manque de place je n'ai pas pus mettre l'executable
Source / Exemple :
#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>
#include <fstream>
#include "track.h"
#include "player.h"
void runMap(sf::RenderWindow* App)
{
track map;
map.spead=2;
player p;
time_t start;
time (&start);
float score=0;
bool gameOver=false;
App->SetCursorPosition(333,300);
sf::Clock time;
time.Reset();
sf::Image IGameOver;
IGameOver.LoadFromFile("data/game over.png");
sf::Sprite SGameOver;
SGameOver.SetImage(IGameOver);
// Start game loop
while (App->IsOpened())
{
// Process events
sf::Event Event;
while (App->GetEvent(Event))
{
// Close window : exit
if (Event.Type == sf::Event::Closed)
App->Close();
// Escape key : exit
if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
App->Close();
// Adjust the viewport when the window is resized
if (Event.Type == sf::Event::Resized)
glViewport(0, 0, Event.Size.Width, Event.Size.Height);
}
p.mPos=(800-App->GetInput().GetMouseX())/3;
glClearColor(0.5f,0.5f,0.5f,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if(!gameOver)
{
map.afficher();
p.afficher();
score=time.GetElapsedTime();
string temp="score: "+floatToString(score);
sf::String temp2;
temp2.SetText(temp);
App->Draw(temp2);
}
else
{
App->Draw(SGameOver);
string temp=floatToString(score);
sf::String temp2;
temp2.SetText(temp);
temp2.SetPosition(400,180);
temp2.Scale(2,2);
App->Draw(temp2);
}
//dificulter
map.spead=2+time.GetElapsedTime()*0.5;
App->Display();
if(map.test(p.mPos) && time.GetElapsedTime()>0.1&& gameOver==false)
{
gameOver=true;
}
}
}
int main()
{
// Create main window
sf::RenderWindow App(sf::VideoMode(800, 600), "spead racer");
App.PreserveOpenGLStates(true);
App.SetFramerateLimit(50);
sf::Image IMenu;
IMenu.LoadFromFile("data/menu.png");
sf::Sprite SMenu;
SMenu.SetImage(IMenu);
while (App.IsOpened())
{
// Process events
sf::Event Event;
while (App.GetEvent(Event))
{
// Close window : exit
if (Event.Type == sf::Event::Closed)
App.Close();
// Escape key : exit
if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
App.Close();
// Adjust the viewport when the window is resized
if (Event.Type == sf::Event::Resized)
glViewport(0, 0, Event.Size.Width, Event.Size.Height);
}
if(App.GetInput().IsKeyDown(sf::Key::G))
{
runMap(&App);
}
App.Draw(SMenu);
if(App.GetInput().GetMouseX()<600 && App.GetInput().GetMouseX()>200)
{
if(App.GetInput().GetMouseY()<295 && App.GetInput().GetMouseY()>235 && App.GetInput().IsMouseButtonDown(sf::Mouse::Left))
{
runMap(&App);
}
else if(App.GetInput().GetMouseY()>316 && App.GetInput().GetMouseY()<376 && App.GetInput().IsMouseButtonDown(sf::Mouse::Left))
{
cout<<"!:il n'y a pas pour l'instans d'option"<<endl;
}
else if(App.GetInput().GetMouseY()>395 && App.GetInput().GetMouseY()<456 && App.GetInput().IsMouseButtonDown(sf::Mouse::Left))
{
App.Close();
}
}
App.Display();
}
return EXIT_SUCCESS;
}
Conclusion :
salut
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.