Bonjour!
Je suis assez heureux car je viens de finir mon premier programme : un Tetris! Je sais que c'est pas grand chose, mais comme je partais de zéro tant pour la SFML que pour la programmation en général... J'ai vraiment galéré
Il ne fonctionne pas trop mal, seulement j'ai parfois des bug avec les évènements, notamment lorsque je ferme la fenêtre en cours de jeu. De plus j'ai l'impression que tous mes quads ne s'affichent pas exactement au même moment lorsqu'une forme descend...
Voici la boucle de jeu :
while(fenetre.isOpen())
{
while(fenetre.pollEvent(evenement))
{
if(evenement.type == sf::Event::Closed) fenetre.close();
if(evenement.type == sf::Event::KeyPressed)
{
if(evenement.key.code == sf::Keyboard::Down ) F.deplacer(bas);
if(evenement.key.code == sf::Keyboard::Left ) F.deplacer(gauche);
if(evenement.key.code == sf::Keyboard::Right) F.deplacer(droite);
if(evenement.key.code == sf::Keyboard::Up ) F.tourner();
}
}
if (!perdu)
{
chrono += horloge.restart();
if(chrono.asMilliseconds() > VitesseJeu.asMilliseconds())
{
chrono = sf::seconds(0);
bool dormir=false;
if(F.stop()) // Si la forme actuelle est stoppée dans sa descente
{
F.liberer();
score += supligne(map); // Supprimer les lignes complètes et faire descendre tous les carrés supérieurs
S_score = std::to_string(score);
LeScore.setString("Score : " + S_score);
VitesseJeu = sf::milliseconds(600 - score);
F = forme(map, VA); // créer une nouvelle forme qui remplace l'ancienne
if(F.chevauche()) perdu =true; // Si elle chevauche un carré existant, fin du jeu
F.afficher();
dormir =true;
}
if(!dormir) F.deplacer(bas);
}
}
fenetre.clear();
fenetre.draw(VA); //Afficher le VertexArray contenant tous les carrés
fenetre.draw(LeScore);
if(perdu)fenetre.draw(T_perdu);
fenetre.display();
}
Est-ce que ma boucle d'évènements est correcte selon vous?