TETRIS JEU AVEC OPENGL/GLUT

Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 - 22 juin 2003 à 14:57
GUF20 Messages postés 1 Date d'inscription jeudi 22 décembre 2011 Statut Membre Dernière intervention 23 décembre 2011 - 23 déc. 2011 à 01:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10969-tetris-jeu-avec-opengl-glut

GUF20 Messages postés 1 Date d'inscription jeudi 22 décembre 2011 Statut Membre Dernière intervention 23 décembre 2011
23 déc. 2011 à 01:04
Bonne nuit
J'ai ouvert votre code dans Microsoft Visual stdio 2010 et ne fonctionne pas. Parce que vous savez?
cs_hamrouni Messages postés 1 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 13 septembre 2005
13 sept. 2005 à 21:11
pas mal
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
1 juil. 2003 à 15:12
"autant pour moi" --> Kirua m'a appris sur ce site qu'on écrivait "au temps pour moi" et non "autant pour moi", et qu'il tenait ses sources de l'académie française.
Quand j'ai appris un truc, je le resors :)
twxs256 Messages postés 7 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 22 juillet 2003
1 juil. 2003 à 12:18
autant pour moi, le "par defaut" ete sous entendu...
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
1 juil. 2003 à 10:39
Correction : tout est public dans une struct _par défaut_ alors que tout est private dans une class _par défaut_; si tu fais:
struct UnClasse
{
private:
// ce que tu veux...
};

tu as l'équivalent d'une class.
twxs256 Messages postés 7 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 22 juillet 2003
1 juil. 2003 à 09:38
"Pour faire de la POO il ne sufffit pas de remplacer struct par class..."
juste au passage : rien ne t'empeche de faire du C++ avec des struct.
les struct, en c++, supportent methode, heritage, ctor, ... la seul difference avec une classe c'est que tout est public. Donc si tu n'a pas besoin de membres prives ou protected, struct == class!!
twxs256 Messages postés 7 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 22 juillet 2003
1 juil. 2003 à 09:38
"Pour faire de la POO il ne sufffit pas de remplacer struct par class..."
juste au passage : rien ne t'empeche de faire du C++ avec des struct.
les struct, en c++, supportent methode, heritage, ctor, ... la seul difference avec une classe c'est que tout est public. Donc si tu n'a pas besoin de membres prives ou protected, struct == class!!
twxs256 Messages postés 7 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 22 juillet 2003
1 juil. 2003 à 09:37
"Pour faire de la POO il ne sufffit pas de remplacer struct par class..."
juste au passage : rien ne t'empeche de faire du C++ avec des struct.
les struct, en c++, supportent methode, heritage, ctor, ... la seul difference avec une classe c'est que tout est public. Donc si tu n'a pas besoin de membres prives ou protected, struct == class!!
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
26 juin 2003 à 10:43
De toutes façons, beaucoup des sources de ce site ne sont pas terminées ! Allez trinitacs, s'il te plaît ... :)
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
24 juin 2003 à 19:18
Je n'y avais jamais pensé et la plus part du temps je ne termine pas mes sources :)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
24 juin 2003 à 14:31
C'est un point de vue, on en a déjà discuté, j'arrête :)
trinitacs, pourquoi t'as mis aucun de tes progs en OpenGL sur le site ?
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
24 juin 2003 à 13:38
"Je comprends toujours pas ce que tu as contre les fonctions C standard dans la POO... Tu utilises bien OpenGL et GLFW qui sont écrites en C dans un programme en C++, non ?"
Pour lire des fichiers, le C++ propose ses propres classe de flux, alors pourquoi utiliser des fonctions C quand il y a les même souvent bien mieux en C++ ?
Si tu programmes en C, utilise les fonctions C; si tu programmes en C++ utilises les fonctions C++. Tu n'est pas obligé de le faire mais ça fait porcos sinon.
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
24 juin 2003 à 12:22
Je suis allé faire un tour sur le site de GLFW par curiosité.
Et là je vois que la dernière new date du 27 janvier 2003.
Dommage... :(

"GLUT n'est plus développpé depuis 1997, donc tu ne tire pas profit de t'as dernière Gforce."
De toutes façons j'ai une vieille carte pourrie :)
Mais je vois pas trop ce que tu veux dire : GLUT et GLFW servent à gérer les fenêtres et l'input clavier et souris, donc à quoi sert la dernière GeForce ? A moins que tu ne fasses allusion aux fonctions du style glutSolidSphere()...etc
Par contre un truc qui est intéressant avec GLFW que j'ai vu sur le site : chargement de TGAs :) Mais comme j'utilise DevIL, ça me servira pas beaucoup.
Je comprends toujours pas ce que tu as contre les fonctions C standard dans la POO... Tu utilises bien OpenGL et GLFW qui sont écrites en C dans un programme en C++, non ?
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
24 juin 2003 à 11:21
GLUT n'est plus développpé depuis 1997, donc tu ne tire pas profit de t'as dernière Gforce.
GLFW est encore développé et est dispponible sur plusieurs platformes.
GLUT propose plus de fonctions que GLFW.

Je préfère utiliser GLFW à GLUT car c'est moins contraignant: pas obligé de faire certaines fonctions etc...
En plus GLFW est léger.

Pour faire de la POO il ne sufffit pas de remplacer struct par class. Ca apporte une autre logique de fonnctionnement comme l'héritage par exemple. En même temps son code utilises des fonctions C. Donc pour faire vraiment un code objet il doit tout le recommncer pratiquement.
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
23 juin 2003 à 19:41
merci pour vos commentaire tout le monde
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
23 juin 2003 à 17:42
badrbadr, un tout dernier truc : tu as oublié de choisir la catégorie "Jeux" quand tu as ajouté ta source; il suffit que tu ailles à "Modifier une source"

trinitacs>> Pour ce qui est de la POO, je trouve qu'il n'en est pas tellement loin; il a une structure "jeu" et des fonctions globales qui concernent le déroulement du jeu, il lui suffirait juste d'encapsuler ces fonctions dans une class "jeu". Aussi, une question; GLFW est meilleur que GLUT et encore développé ou pas ?
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
23 juin 2003 à 10:11
J'ai remarqué qu'il y avait énormément de boucles for dans ton code. Revoie ton algo et pour limiter lle nombre de for et tu optimises les boucles qui te restent. Tu peux "dérouler" tes boucles et améliorer ton code en suprrimant ce qui est inutil.
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
23 juin 2003 à 10:05
"connaissez-vous des trucs pour améliorer la vitesse des jeux 2d."
- Tu peux désactiver certaines options d'OpenGl qui ne te sont pas nécessaire.
- Améliorer l'envoie des vertex, couleurs à OpenGl. Car à chaqque fois tu fais glVertex*( ... ) Utilise plutot les ffonctions glVertexPointer, glColorPointer etc...
- Ensuite tu devrais créer plussieurs fichiiers soources

Pour ce qui est de C++ je trouve qu'il en esst encore loin. Les fonctions fprintf et cie et son code procédurale c'est loin d'être du C. En C++ l'unité de programmation c'est la classe et non la foonction comme en C.

Sinon tu devraais remplacer tes //*************************** par une brève description de tes fonctions :)

badrbadr: "j'avoue que la programmation Linux me fait peur", " Je tiens d'abord à maitriser un peu la programmation sur windows"
Tu sais je ne connais ni la prog windows, ni la prog linux. Je me contente de faaire des codes portables en utilisant des bibliothèques. Ainsi j'utillise glfw pour OpenGl: http://hem.passagen.se/opengl/glfw/
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
22 juin 2003 à 21:13
Pour porter ton programme sous Linux, y'a que quelques modifs à faire, qui consistent à supprimer le code qui utilise windows.h, comme PlaySound, que tu pourrais remplacer par FMOD.
Un bon site sur fmod : http://fmod-fr.apinc.org
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
22 juin 2003 à 19:37
Que de bonnes idées Funto.
merci pour la technique sous vc++, elle drolement interressante et même utile.
j'avoue que la programmation Linux me fait peur. mais si j'ai la derniere version de Mandrake(la plus facie). Je tiens d'abord à maitriser un peu la programmation sur windows.
merci encore pour ta technique sur vc++
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
22 juin 2003 à 18:24
Ah oui, j'ai oublié un dernier truc; pour les sons, tu devrais utiliser FMOD; c'est une librairie vachement puissante (plusieurs sons à la fois, sons 3D...) qui est gratuite et portable : www.fmod.org
Tu pourrais porter ton Tetris sous Linux :)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
22 juin 2003 à 18:21
Re-salut badrbadr !
Pour se passer des FreeConsole sous Visual C++ :
-Ouvre le menu Project->Settings
-Onglet Link
-Dans la zone de texte du bas "Project Options", tu cherches où est marqué "/subsystem:console" et tu le remplaces par "/subsystem:windows" (sans les guillemets)
-Ensuite, tu dois indiquer que ton programme commence avec main(); dans la liste "Category", tu choisis "Output", et dans "Entry-point symbol", tu tapes exactement "mainCRTStartup" (sans les guillemets).

Pour ce qui est de l'optimisation de ton jeu, je vois pas trop où y'en aurait besoin à part ce que je t'ai dis dans le premier post à propos du déplacement contrôlé par le joueur, qui ne doit pas dépendre de la descente de la pièce.
Tiens, en re-survolant ton code, je viens de voir glutTimerFunc; connaissait pas, on en apprend tous les jours :) Merde, moi je m'étais fait chier avec les <sys/timeb.h> et compagnie pour contrôler le rythme !!

Ben voilà :)
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
22 juin 2003 à 17:44
MERCI BEAUCOUP FUNTO66
en passant:
connaissez-vous des trucs pour améliorer la vitesse des jeux 2d.
merci encore
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
22 juin 2003 à 17:29
en passant allez voir mon autre programme.
une belle animation.
quoi qu'il faut un puissant ordinateur.
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
22 juin 2003 à 17:28
salut funto66,
j utilise Visual C++ 6, et j'aimerai savoir le moyen de me passer des "FreeConsole". tu connais le moyen?
merci
cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 1
22 juin 2003 à 17:08
tiens voila 10/10 :)
merci qui?
gogo.prog Messages postés 5 Date d'inscription lundi 21 février 2000 Statut Membre Dernière intervention 11 mai 2003
22 juin 2003 à 15:29
tous ces gens qui debutent et qui font des jeux utilisable...
moi je debute vraiment, je ne comprend pas cmt ca marche glut en c++ :/
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
22 juin 2003 à 14:57
Salut badrbadr !
Ton Tétris est pas mal; il n'y en n'a que 2 sur le site le tien et le mien :) q (en tous cas j'en n'ai pas trouvé d'autres) que tu peux trouver à :
http://www.cppfrance.com/article.aspx?ID=1958

Ton Tétris est plus abouti que le mien :) avec la gestion des meilleurs scores, une texture en fond, des sons, des boutons...
J'ai vu que pour les différentes figures, ça tenait dans un fichier fichier.fig; en + on peut rajouter de nouvelles figures sans toucher au code ?? Aussi, bravo pour le chargement de texture sans utiliser de librairie comme Glaux ou DevIL !

Donc voilà pour les points positifs, maintenant je trouve que le jeu est un peu lent (en tous cas sur ma bécane, 600 Mhz et ATI Rage Pro...)
Aussi, je sais pas si c'est normal, mais la musique s'arrête dès que l'on appuie sur la flèche du haut :(
Aussi, tu aurais peut-être dû mettre ton jeu totalement en orienté objet C++; tu n'en n'est pas loin avec tes structures.
Aussi, au niveau du code, au leiu de faire un FreeConsole() au début du main, tu aurais pu changer les paramètres de ton projet à la compilation; dis-moi quel compilo tu utilises et je te dirai comment il faut faire.
Aussi, c'est + gênant, au niveau des déplacements des pièces, je pense que ce serait mieux de pouvoir déplacer les pièces sans devoir attendre que ce soit le moment où la pièce descend d'un cran, enfin je sais pas si j'ai été clair... :)

Et ce Tetris, tu l'as fait en 2002, et pourquoi tu l'as pas mis sur le site avant ?

Bon, c'était long, mais j'ai plus rien à dire :)
Rejoignez-nous