Vous utilisez un navigateur obsolète, veuillez le mettre à jour.
En poursuivant votre navigation sur le site, vous acceptez l’utilisation de cookies par OpenClassrooms pour vous proposer des services et offres adaptées à vos centres d’intérêts. Notre politique de cookies.
Accepter
Cette semaine, nous vous proposons de réaliser à l'aide de la SDL, le jeu de la vie. Ne vous inquiétez pas si vous ne savez pas ce que c'est, le principe et les règles vous seront expliqués.
Si vous souhaitez plus de renseignements sur les défis, rendez vous sur le topic de recensement des défis, vous y trouverez également les règles principales.
Jeu de la vie
Cet exercice a été écrit par _Fender_ et GuilOooo, un grand merci à eux !
Le jeu de la vie... c'est quoi ?
Le jeu de la vie n'est pas un jeu au sens ludique du terme, car le "joueur" reste passif une fois l'animation lancée. C'est en réalité un automate cellulaire qui passione les mathématiciens depuis son invention en 1970 par John Horton Conway.
Un automate cellulaire se base sur une grille de cases (cellules) qui sont chacune dans un certain état, à un certain instant. Un tel automate comporte des règles qui disent comment les états des cellules évoluent dans le temps. Dans le cas du jeu de la vie, les cellules peuvent être dans 2 états différents : vivantes ou mortes.
Les règles sont plutôt simples :
Si une cellule morte à exactement trois voisines vivantes, elle devient alors vivante à son tour.
Si une cellule vivante à deux ou trois voisines vivantes, elle le reste. Elle meurt dans tous les autres cas.
Une image vaudra mieux que tout discours, alors voici un lien qui vous permettra de voir a quoi ressemble une simulation du jeu de la vie. Il est également possible de faire des choses encore plus fascinantes, comme ce canon, qui fonctionne uniquement avec les règles citées plus haut.
Notre fenêtre sera donc une grille 2D de cellules. Au départ, certaines seront vivantes, et d'autres mortes.
Notre objectif sera donc de réaliser un simulateur du jeu de la vie.
Vous pouvez, par exemple, représenter les cellules vivantes par des cases noires et les cellules mortes par des cases blanches. Au lancement du jeu, l'utilisateur doit pouvoir changer l'état de chaque cellule en cliquant dessus pour la faire vivre/mourir. Une fois le jeu lancé, la grille évolue selon les règles définies plus haut.
Objectifs
Premier contact avec le monde des automates cellulaires.
Application pratique de l'apprentissage de la SDL.
Manipulation des tableaux à deux dimensions.
Enoncé
Niveau 1
Mettre en place les fonctionnalités de base : choisir les cellules mortes/vivantes en début d'animation et lancer l'animation à l'appui d'une touche.
Niveau 2
Pouvoir mettre en pause/relancer l'animation et changer l'état de cellules pendant la pause.
Niveau 3
Vous avez trouvé une belle séquence et vous voulez l'envoyer à vos amis ? Mettez donc en place un système de sauvegarde dans des fichiers, ou vous pouvez charger/sauvegarder une disposition de cellules.
Et après... ?
Si ce jeu vous passionne autant que moi, pourquoi ne pas vous amuser à changer les règles ?
Modifiez les conditions de naissance et de mort, ajoutez des couleurs, etc... Encore une fois, laissez parler votre imagination et votre créativité !
Bon courage.
S'il y a quelque chose que vous ne comprenez pas, n'hésitez pas à poser vos questions sur ce sujet, nous vous répondrons avec plaisir !
Si quelqu'un à soif d'un niveau 4, j'trouve que ça serait trop énorme de mettre dans le programme deux molettes pour accélérer; ralentir; mettre en arrière l'animation.
La molette permet de se déplacer dans l'anim avant arrière à la vitesse qu'on veut, et le bouton juste au dessus permet de fixer la vitesse pour de bon sans que nous ayons a garder le bouton enfoncé.
Bon finalement c'est peut être niveau 7 ou 8 là du coup, mais si ça n'a pas déjà été fait sur le net, ça serait géant de tester
bon sujet par contre je crois que je vais pas avoir la motivation de le coder la sdl me rebute un peu xd. Je vais peut etre le faire en console. Enfin a voir.... On sait jamais si je m'ennuis vraiment.
ouai en fait je crois que c'est le mode graphique que j'aime pas ca me gonfle, j'arrive pas a avoir un code propre. On ma pas appris à coder correctement, et tout seul j'arrive pas a mettre en place un MVC.
Il a dit "normalement". Après, oui tout le monde est libre de faire ce qu'il veut, c'est pas une corvée, c'est un entrainement.
Sinon, pas de débat SDL/SFML ici. C'est SDL et pis c'est tout. Merci.
dark-lord -> Un MVC ? Tu fais un jeu de la vie hin.
"If debbugging is the process of removing bugs, then programming must be the process of putting them in." (Edsger Dijkstra)
Je sais que c'est une jeu de la vie mais je parle pour d'autre projet. Pfff et la je commence à coder le jeu de la vie en C on dirait que je fais de la POO Oo, je suis pervertis
Mais pourquoi tu mets une licence sur un code bourrin non optimisé et personnel ? Qui aurait envie de le copier ? Bienvenue dans le monde de la pop-programmation.
"If debbugging is the process of removing bugs, then programming must be the process of putting them in." (Edsger Dijkstra)
@lucas-84 : Je suis d'accord, mais pour moi une fonction est quelque chose qui doit être appelée plusieurs fois dans le code, or ici aucun morceau de code ne se répéte plusieurs fois...
128 lignes le main quand même. (enfin je dis ça, je dis rien... :-°)
+1
Moi, c'est ce qui est avant la boucle principale qui me dérange un peu plus que le reste, c'est trop lourd.
En fait, en utilisant juste une fonction d'initialisation et de libération; ça irait déjà mieux.
@lucas-84 : Je suis d'accord, mais pour moi une fonction est quelque chose qui doit être appelée plusieurs fois dans le code, or ici aucun morceau de code ne se répéte plusieurs fois...
Pas pour moi.
Si tu as une fonction de 10 000 lignes sans répétition, tu ne divises pas ?
J'avoue , je pourrais faire comme paraze "en utilisant juste une fonction d'initialisation et de libération" mais ma fonction main ne fait pas 10000 lignes, juste 128
Loadware > Un code à trou comme ça avec une license ? alalalala, le monde est tombé bien bas. Je vais poster un code whil(i++) et je vais mettre une licence tiens !
Mais pourquoi tu mets une licence sur un code bourrin non optimisé et personnel ? Qui aurait envie de le copier ? Bienvenue dans le monde de la pop-programmation.
Citation : Pouet_forever
Loadware > Un code à trou comme ça avec une license ? alalalala, le monde est tombé bien bas. Je vais poster un code whil(i++) et je vais mettre une licence tiens !
Il me semble que le but de ce topic c'est de donner des réponses constructives non?
Alors déjà une fonction n'est pas censé faire plus de 30 lignes.
Et de deux on ne code pas dans le main, parce que si tu veux intégrer ce mini projet à un autre programme tu fais comment?
Y'aura deux main() du coup?
Un programme avec deux main() à du mal à compiler.
Loadware, peut être que ton code marche bien mais ils ont raison, il est pas propre...
Alors déjà une fonction n'est pas censé faire plus de 30 lignes.
Mais lol ! Mais ce n'est pas le sujet. Juste pour dire qu'en plus le nombre de lignes n'est pas significatif, ça dépend de l'indentation toussa. On continue sur un autre topic.
"If debbugging is the process of removing bugs, then programming must be the process of putting them in." (Edsger Dijkstra)
lucas-84> C'est marrant il y a eu un sujet à ce propos, il y a quelques jours. Tu devrais jeter un coup d'oeil à la réponse de Renault.
Oui, justement j'avais suivi de loin le sujet en question. C'est peut-être une question subjective, mais de manière générale, vous ne pouvez nier que voir une fonction main de 128 lignes, c'est pas trop agréable. On s'y perd vite.
Citation : schadocalex
Citation : Mr21
Alors déjà une fonction n'est pas censé faire plus de 30 lignes.
Mais lol ! Mais ce n'est pas le sujet. Juste pour dire qu'en plus le nombre de lignes n'est pas significatif, ça dépend de l'indentation toussa. On continue sur un autre topic.
Bah si on est dans le sujet, on essaie de débattre sur l'optimisation d'un code...
Ah, en fait, après avoir regardé ci-dessus, je viens de remarquer que l'auteur du code a supprimé ce dernier. Là, effectivement, on est dans le hors sujet...
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.