Se connecter / S'enregistrer
Votre question

Un truc m'échappe pour la création de jeux vidéo...

Tags :
  • Creation
  • Programmation
Dernière réponse : dans Programmation
5 Février 2009 22:27:18

Bonjour,

Je me pose des questions, des questions et beaucoup de questions ! Je me dis "Comment un jeux vidéo peut-il crée seulement à partir d'un langages de programmations ?" Car je voit beaucoup de gens dire qu'il faut apprendre le langage C++ etc...Pour faire des jeux tels que Half Life 2, CS:S etc...Mais que font-ils avec le C++ ? Car j'ai déjà essayer d'apprendre le langage C et je me demande toujours, avec de simples code, font-ils des jeux vidéo 3D voir des FPS !

Alors je me suis dis, qu'en faite ils créent le logiciel qui permet de créer le jeux lui même, mais reste à savoir...

Autres pages sur : truc echappe creation jeux video

5 Février 2009 23:07:08

En informatique il y a un système de couches. Ces couches vont d'un niveau très bas (très proche du matériel comme par exemple des choses permettant de dire que tel pixel doit être rouge ou pour détecter que la souris vient de bouger) vers un niveau de plus en plus haut (ou l'on ne s'occupe plus du matériel).

Je sais que tu ne connais pas encore trop l'informatique ni la programmation donc je vais te faire un exemple très simple.

Tu as un morceau de code qui permet d'afficher un pixel de la couleur que l'on veut. On va ensuite utiliser ce morceau de code pour créer un nouveau morceau de code (qui va utiliser le premier) pour afficher par exemple un carré rouge. Ensuite on va créer une fonction qui va créer un damier par exemple (ou un jeu de dame) avec des cases rouges et blanches. On va donc appeler la fonction qui permet de créer des cases rouges. Mais on n'a du coup plus besoin de savoir comment faire pour afficher juste un pixel rouge puisque la fonction qui affiche le carré rouge la connait déjà.

Du coup pour les jeux (comme pour ton programme) c'est ce principe qui est utilisé. On commence par créer des fonction très basiques qui sont utilisées par des fonction un peu plus évoluées, elles même utilisées par d'autres fonctions, etc.

Au final en informatique, la seule chose qu'un ordinateur arrive à comprendre c'est du binaire (des 0 et des 1). Lorsque tu utilises un langage de programmation, tout ce que tu tapes va au final (après plusieurs étapes) être transformé en des 0 et des 1.

Un jeu c'est un logiciel comme un autre. Quand tu es sur word par exemple et que tu cliques sur un bouton, il t'ouvre un nouveau document. Sur un jeu c'est le même principe (détecter où l'utilisateur à cliquer pour faire l'action correspondante) mais au lieu de t'ouvrir un document il tire une rafale de AK47. Pareil pour les touches du clavier... quand tu tapes un Z sauf qu'au lieu d'écrire la lettre sur la page il va faire avancer le personnage.


Après tu peux bien évidement créer des logiciels qui permettent de créer des jeux (RPG-Maker par exemple).

Mais un ordinateur est quelque chose de très "bête", il faut toujours lui dire ce qu'il doit faire ... et comme ce n'est pas pratique de lui parler avec des 1 et des 0, des langages de programmations on été inventés (plus facile pour nous les humains) pour pouvoir dire aux ordinateurs d'afficher telle chose, de compter tel truc, ... toujours en gardant à l'esprit cette idée de "poupées russes" avec comme plus petite poupée les fonctions qui sont très proche du matériel.
6 Février 2009 01:38:01

L'explication de loic est très bonne, et je suis entièrement d'accord.
J'ajoute deux ou trois trucs, peut-être un peu plus technique.

Dans la plupart des cas (en tout cas sur console), les développeurs de jeux évitent d'avoir trop d'abstractions (trop de couches). Car plus on fait des abstractions, plus on perd en performance. Or lorsqu'on fait un jeu vidéo, on cherche souvent la performance. Par exemple, les jeux sur GameBoy Advance sont écris dans des languages de programmation de bas niveau d'abstraction (C et assembleur). Plus on descend dans les niveaux d'abstractions, plus on se rapproche de la machine, et donc plus c'est difficile pour un humain.

Les abstractions passent en grande partie par le language choisi pour parler avec la machine.

Avec le Java (language de haut niveau), on ignore globalement la machine. On donne au programmeur une machine simple (qui n'est pas la vraie machine physique), et on peut fait abstraction des difficultés. L'avantage est que ce langage est plus facilement compréhensible par des humains.
Avec le C on ne peut généralement pas ignorer la machine : par exemple il faut savoir que la mémoire existe (même si en fait on ne voit pas la vraie mémoire de l'ordinateur !).
Avec l'assembleur, on descend encore d'un niveau, et cette fois on ne peut plus ignorer le processeur. On programme directement avec le langage que le processeur peut interpréter. C'est exactement comme si on écrivait des programmes en binaire (sauf qu'on a donné des noms plus ou moins humains à des nombres). Il faut gérer jusqu'à la retenue des additions et des soustractions !

Si on écrit un programme en C, il sera compilé pour être comprehensible par un ordinateur (c'est à dire en assembleur). Mais comme la compilation est automatique, il se peut que la traduction soit mauvaise, peu efficace. En pratique, pour un programmeur normal, la compilation sera bien meilleure que ce qu'il aurait été capable de faire à la main.
Le cas du Java est particulier, puisqu'il utilise une machine virtuelle : c'est une machine qui s'exécute sur une autre machine virtuelle (le système d'exploitation de notre PC), qui s'exécute elle même sur la vraie machine (le matériel). Ces trois couches peuvent faire baisser les performances. C'est pour cette raison que les jeux ne sont généralement pas écris en Java. Sur certains téléphone c'est pour une question de portabilité que les jeux sont écris en Java. Une autre raison est qu'avec Java on ne peut pas connaître à l'avance la quantité de mémoire que le programme va utiliser. Or pour les applications temps-réel comme les jeux vidéo, la lecture de vidéo, ou d'autres trucs plus critiques (freins d'une voiture, réacteurs de fusées), il faut savoir à l'avance combien de mémoire on utilise, pour être sûr de ne pas dépasser la mémoire disponible.

Mais pour ces trois cas (Java, C, Assembleur), sur un PC traditionnel, il y a encore des abstractions : par exemple, un programme a l'illusion d'être seul. Mais en coulisse, le système d'exploitation sur lequel s'exécute le programme se charge d'être équitable avec tous les programmes qui s'exécutent en même temps, et il partage le temps pour en donner un peu à chacun. Mais chaque programme a l'illusion d'être seul sur la machine ! L'utilisateur va croire que tous ses programmes tournent en même temps, mais en réalité (sur un processeur à un seul coeur), il n'y a qu'un seul programme exécuté à la fois. Il est évident que ce passage d'un programme à l'autre, en étant équitable etc., ça prend des ressources.

Lorsqu'on fait un jeu vidéo, on veut un maximum de performance. Et donc ces abstractions sont généralement mauvaises. C'est pour cette raison que sur une console de jeux, il n'y a en général qu'un seul programme à la fois : le jeu. De même, on utilise des langages de bas niveaux, pour garder un contrôle plus fin sur les ressources matérielles. De fait le système d'exploitation se limite au strict minimum.
Avec des consoles extrêmement puissantes telles que la PS3, on pourrait penser qu'il est possible d'utiliser beaucoup d'abstractions. Mais la spécificité du matériel fait que pour tirer le meilleur parti des 9 coeurs et de la carte graphique, il est nécessaire de souvent descendre proche de la machine. Cela rend le travail plus long et plus difficile.



Mais il est vrai que au sein d'un jeu, de nombreuses abstractions sont faîtes pour ne pas réinventer la roue à chaque fois. Une fois que les développeurs savent afficher du texte et qu'ils savent que ça se fait de manière efficace, alors ils se servent d'une fonction "afficherTexte(un texte)" et font abstraction de la manière dont le texte est affiché.
Avec la programmation orientée objet ça va beaucoup plus loin que ça : par exemple une fois que la notion de "véhicule" est définie par un développeur, il sera possible d'étendre cette notion (en faisant abstraction de la manière dont un véhicule existe), et de créer une moto, ou une voiture, qui héritent tous deux des propriétés communes à tous les véhicules et qui ont déjà été définies. Tout ce qu'il reste à faire c'est d'écrire ce qui est spécifique.


Les développeurs de jeux 3D utilisent généralement un ensemble de fonctions (qu'ils achètent ou qu'ils créent une fois pour toute) et qui leur permettent d'afficher toute sorte de choses de manière efficace (polygones, textures, ombres, etc.). De même ils achètent ou créent un moteur physique pour gérer la physique des objets (comment ils tombent, etc.). Ces deux choses sont très difficiles à créer. Ca demande des connaissances très pointues en math et en informatique.
Dans la plupart des jeux, les développeurs créent deux logiciels : le jeu, et l'éditeur de niveaux. Ce dernier sert à dessiner les niveaux avec la souris, en les visualisant. Idem pour les personnages et tous les objets.
Des programmeurs vont se servir de ces objets pour leur donner une "intelligence", et leur permettre de réagir à des actions, de ne pas passer au travers des murs etc.


Donc en conclusion, n'espère pas faire un jeu vidéo si tu débutes en C. Il faudra du temps pour que tu comprennes les bases, puis que tu puisses utiliser des fonctions écrites par d'autres et qui te permettront d'afficher des choses à l'écran, de le manipuler à la souris, etc.
Personnellement, entre le moment où j'ai commencé le C, et le moment où j'ai affiché mon premier cube que je faisais tourner avec la souris, il s'est passé trois ans et demi. Je n'ai pas fait que ça en trois ans, mais ça donne une idée.
Contenus similaires
6 Février 2009 12:31:18

Je viens de passer le topic en mode "Discussion".

Vos réponses sont intéressante. Je regrette cependant Dr_cube que tu limites la programmation de jeux à C. Tu parles C mais de POO. Mais bon.

Sinon un jeu n'est pas fait que dans un langage de programmation. On peut par exemple développer certaine partie en python (rapide à développer et assez performant) et faire les goulets d'étranglements en C++. Il n'y a aucun problème à faire ce genre de chose.

Sinon très intéressant :) 
6 Février 2009 12:52:20

Je me suis dis un peu la même chose, mais la j'ai la certitude d'avoir bon, merci !
6 Février 2009 14:12:57

Vu l'heure à laquelle j'ai posté, je pense que je n'avais pas trop les idées claires et que mon message doit être incompréhensible ^^. Si j'ai le temps d'ici ce soir je le relirai et je le remanierai légèrement si besoin.

J'ai parlé de l'Assembleur, du C, et de Java. Je ne connais presque rien du C++ (à part SystemC, mais c'est particulier). Je n'ai jamais fait de jeux en C++, mais il est vrai que c'est LE langage principalement utilisé pour les jeux. En tout cas, le langage n'a pas une importance capitale non plus. Faire un jeu vidéo, ce n'est pas uniquement un travail de programmation. Mais comme les questions de lascar concernaient la programmation, j'ai parlé de ça.
6 Février 2009 19:08:04

Sinon, je cherche un tuto sur Internet(Un simple de préférence) qui pourrait m'apprendre le langage "Python"

Ps: J'ai remarquer que c'était un langage facile, mais, je ne sais pas vraiment à quoi il sert, pouvez vous m'expliquez?
a b L Programmation
6 Février 2009 19:39:56

Oui, le python est pour moi le langage le plus simple (mais ça pousse à programmer avec les pieds :)  ).
C'est de l'interprété, c'est à dire que l'on a pas à compiler le source pour le lnacer, il suffit de le lancer directement (mais, du coup, il faut installer l'interpréteur)
Il est utilisé de plusieurs façon:

- faire des programmes plus complexes, car en python, on peu utiliser toutes les bibliothèques (.dll pour windows) il suffit de faire un wrapper (certains sont déjà faits) pour y accéder. Ainsi on a accès à la win32 API, SDL, openGL... Ce cas est finalement peu utilisé pour des projets complexes, mais avec les modules adaptés (comme pyGame pour les jeux), on peut faire des choses complexes avec un langage simple.

- en simple console pour faire des choses rapides comme en batch, mais avec un outil plus puissant. Il est utilise pour faire calculatrice de base (l'avantage de la console est qu'on peut revoir le calcul). C'est un bon outils pour faire de rapides petits algos (sur une liste pour éviter à faire des calculs redondants), faire de la conversion hexa -> decimal rapidement (il suffit de taper par exemple "\x30\x31\x32").

- en script simple, pour faire des programmes simples rapidement. Par exemple, on peut lire un fichier, analyser, zipper, en quelques lignes (le tout ;)  ).

- Exporter une partie d'un programme pour permettre une évolution du programme sans toucher au code source. Disons que le moteur a été programmé par exemple en C++, et bien une bibliothèque (en fait l'interpréteur python) permet d'exécuter des scripts. Par exemples pour les jeux (c'est le cas de certains jeux commerciaux), les scripts python permettent de faire ses propres scripts de statistiques, ou encore de faire du mapping "intelligent" puisqu'on y ajoute des scripts pour modifier l'intéraction avec le moteur du jeu.
6 Février 2009 19:53:54

Je ne doute pas de l'interet de python qui fait de plus en plus parler de lui semble il mais je ne suis pas certain de ce soit le meilleur choix pour commencer. Je partirai plutot sur un langage comme le C. Mais toujours pareil chacun ses gouts et ses façons de voir les choses.
a b L Programmation
6 Février 2009 22:22:24

Pourquoi penses-tu que le python n'est pas un bon choix pour débuter ?
6 Février 2009 22:37:23

Je ne suis pas certain car je n'ai que rapidement survolé python mais il semblerait que le typage des variables soit un peu étrange (pas de typage obligatoire si j'ai bien compris mais possibilité de dire qu'une donnée est de tel ou tel type c'est bien ça ?) alors que quand on débute je pense que c'est important de bien comprendre la différence entre un char, un int, ... notamment pour comprendre la mémoire qui se cache derrière. Mais comme je l'ai dit je ne connais pas beaucoup python donc je peux me tromper.
7 Février 2009 01:05:58

C'est un typage dynamique, ca n'a jamais tué personne et ça a des avantages. En C et en C++ il y a des tonnes de notion à comprendre avant de réellement faire quelques choses de bien. pointeur, gestion de la mémoire etc. C'est du temps de développement souvent perdu pour un gain de performance absolument pas évident chez un débutant.

Pourquoi dans des langages récents on a des garbages collector ? Java, C#, PHP 5.3 ...

Gérer sa mémoire c'est bien, faire une conception correct c'est mieux.
7 Février 2009 01:57:49

Non mais pour comprendre l'informatique c'est pas bon.
Je me répète, mais je suis convaincu que la manière la plus simple de commencer la programmation est de commencer par du développement Web. Et ensuite de passer à C pour comprendre le fonctionnement de la machine. Et ensuite de passer à un langage orienté objet.
a b L Programmation
7 Février 2009 11:07:35

Oui le python a bien du typage dynamique.
Pour comprendre le fonctionnement de l'ordinateur, effectivement ce n'est pas bon, mais pour les débutants qui ne connaissent pas du tout la programmation, ça permet de se lancer dans la programmation de base (au sens algorithmique) sans se soucier du typage.
Je dirais que ça dépend si c'est pour découvrir la programmation ou pour apprendre à programmer.
8 Février 2009 00:30:27

Aucun tuto n'existe pour l'apprendre? :'( 
8 Février 2009 00:32:47

Le python ? il y a un excellent livre que tu peux télécharger à l'adresse suivante : http://www.framasoft.net/article1971.html Tu ne vas pas faire un jeu avec ça mais un excellent tour du langage :) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS