OVH Cloud OVH Cloud

c , c++ et les jeu video???

177 réponses
Avatar
elekis
bonjour,

j'ai entendu que les jeux videos de nos jours, sont toujours concu en c
et non en c++,
ma quesiton est POUrquoi??, le c++ a quand meme beaucoup plus d'avantage
que le c non

merci


Ps: ceci n'est pas un troll; je suis en premiere année informatique, et
je commence a apprendre le c++, et les differences du c, et etant
passionné de jeu (c'est la dedans que j'aimerais travailler) je me
posait cette question

merci

a++++

10 réponses

Avatar
Frederic Py
Fred said on 10/06/03 15:02:
"Frederic Py" a écrit dans le message de news:
blrnp6$sra$

Fabien LE LEZ said on 10/06/03 14:33:

On Mon, 6 Oct 2003 13:55:52 +0200, "Fred" wrote:



char* monBeauTableau=new char[2];

C'est du C++



Sans doute. Mais c'est une structure rarement utilisée.
En fait, il m'arrive d'allouer des objets directement par new, mais je
ne sais pas si new[] a réellement une utilité.



Ca permet toutefois de creer un tableau "a la C" et de pouvoir
l'exploiter dans des fonctions "C" et donc offrir une interface C++-C ou
C->C++. Ce qui peut etre utile pour ouvrir une bibliotheque C++ au C ou
exploiter une bibliotheque C en C++ ... Mais en dehors de ca je vois pas
l'interet vu que dans ces deux cas on pourrait se tourner vers calloc
afin d'eviter certains soucis (?)



Tu pourrais preciser?


Si tu parles des soucis :

1) malloc ne fait qu'allouer et n'appele aucun constructeur. De meme
free n'appeles pas le destructeur.

2) si on melang l'utilisation de malloc/free avec celle de new/delete on
a de forte chance de faire un free d'un truc alloue avec new et donc
d'avoir un comportement indefini du programme


--
Frederic Py




Avatar
Laurent DELEPINE
Michaël Monerau wrote:
Fabien SK wrote:


T'as intérêt à aimer les maths :-)


Pourquoi ?



Dans les jeux, il y pas mal de maths, et notamment d'opérations sur les
vecteurs, dans un moteur 3D par exemple... Mais c'est vrai que ce ne sont
pas des maths *très haut niveau*, comme Gaby en a fait ;-)


Moi meme j'ai mis au point un moteur 3D en limitant mes connaissances
mathématiques a ce que l'on apprend dans la filiere biologie (c'est a
dire l'arithmetique et l'algebre, avec un peu de stat qui ne servent pas
dans les jeux).

Mais ma reaction concernait l'informatique en général, pas les jeux en
particulier, ou il est de bon ton de dire que les maths sont
indispensables alors qu'ils ne sont nécessaires que dans quelques cas
particuliers. Ce qui est vraiment nécessaire, c'est la logique.

Pour repondre au post initial, le C++ se prete tres bien a la conception
des jeux, y compris dans la partie moteur graphique 3D.


A+

Dr LD



Avatar
Laurent DELEPINE
Frederic Py wrote:
Fabien LE LEZ said on 10/06/03 14:33:

On Mon, 6 Oct 2003 13:55:52 +0200, "Fred" wrote:


char* monBeauTableau=new char[2];

C'est du C++




Sans doute. Mais c'est une structure rarement utilisée.
En fait, il m'arrive d'allouer des objets directement par new, mais je
ne sais pas si new[] a réellement une utilité.

Ca permet toutefois de creer un tableau "a la C" et de pouvoir

l'exploiter dans des fonctions "C" et donc offrir une interface C++-C ou
C->C++. Ce qui peut etre utile pour ouvrir une bibliotheque C++ au C ou
exploiter une bibliotheque C en C++ ... Mais en dehors de ca je vois pas
l'interet vu que dans ces deux cas on pourrait se tourner vers calloc
afin d'eviter certains soucis (?)


Utiliser new + calloc dans un meme programme, ca conduit pas a un UB ca
? D'autant plus qu'il y a une sacrée différence entre new[] et calloc.
new[] appelle le constructeur par defaut des élements du tableau, pas
calloc.

Il m'arrive de me servir de new[], mais c'est rare, dans 90% des cas, la
STL a tout ce qu'il faut, et je suis sur que la plus grande part des 10%
restant est du a ma méconnaissance des details.


A+

LD



Avatar
Cyrille Karmann
Chewee disait...

Ps: ceci n'est pas un troll; je suis en premiere année informatique,
et je commence a apprendre le c++, et les differences du c, et etant
passionné de jeu (c'est la dedans que j'aimerais travailler) je me
posait cette question

merci

a++++


Le C est plutôt utilisé sur PS2.
Les moteurs les plus performants sont écrits en C, c'est un fait.


Nan. John Carmack (Quake, Doom) programme en C, mais sinon, je ne
connais pas d'autre jeu connu pour avoir été faits en C pur.
Tiens, d'ailleurs: le code source d'un jeu vidéo très attendu, surtout
pour son moteur graphique, a été piraté et rendu disponible librement
sur internet (oui, c'est triste...).
Et il est en C++, vous pouvez me croire.

--
Cyrille


Avatar
Gabriel Dos Reis
Frederic Py writes:

| Fabien LE LEZ said on 10/06/03 14:33:
| > On Mon, 6 Oct 2003 13:55:52 +0200, "Fred" wrote:
| >
| >
| >>char* monBeauTableau=new char[2];
| >>
| >>C'est du C++
| >
| >
| > Sans doute. Mais c'est une structure rarement utilisée.
| > En fait, il m'arrive d'allouer des objets directement par new, mais je
| > ne sais pas si new[] a réellement une utilité.
| >
| Ca permet toutefois de creer un tableau "a la C" et de pouvoir
| l'exploiter dans des fonctions "C" et donc offrir une interface C++-C ou
| C->C++. Ce qui peut etre utile pour ouvrir une bibliotheque C++ au C ou
| exploiter une bibliotheque C en C++ ... Mais en dehors de ca je vois pas
| l'interet vu que dans ces deux cas on pourrait se tourner vers calloc
| afin d'eviter certains soucis (?)

Pourquoi veux-tu te tourner vers calloc ?

-- Gaby
Avatar
Chewee
Cyrille Karmann wrote:
Chewee disait...

Ps: ceci n'est pas un troll; je suis en premiere année informatique,
et je commence a apprendre le c++, et les differences du c, et etant
passionné de jeu (c'est la dedans que j'aimerais travailler) je me
posait cette question

merci

a++++


Le C est plutôt utilisé sur PS2.
Les moteurs les plus performants sont écrits en C, c'est un fait.


Nan. John Carmack (Quake, Doom) programme en C, mais sinon, je ne
connais pas d'autre jeu connu pour avoir été faits en C pur.
Tiens, d'ailleurs: le code source d'un jeu vidéo très attendu, surtout
pour son moteur graphique, a été piraté et rendu disponible librement
sur internet (oui, c'est triste...).
Et il est en C++, vous pouvez me croire.


J'ai parlé de PS2, à ce que je sache John Carmack n'a jamais codé sur PS2...



Avatar
Chewee
Mickael Pointier wrote:
j'ai entendu que les jeux videos de nos jours, sont toujours concu
en c et non en c++,
[...]


Le C est plutôt utilisé sur PS2.
Les moteurs les plus performants sont écrits en C, c'est un fait.


Pourrais tu donner tes sources ?

D'expérience j'aurais tendance à dire l'inverse sur tes deux
affirmations.

Mickael Pointier



Je travaille moi aussi dans le jeu vidéo et c'est ce que j'ai toujours
entendu...



Avatar
Cyrille Karmann
Marc Boyer disait...

Tout comme en activant le rtti
vous allez avoir votre executable grossire d'une facon importante.


Oui, mais pourquoi activer le rtti ?


Pour rien.

Le rtti est très souvent activé par défaut sur les compilateurs. Et le
programmeur débutant qui apprendra bien plus tard ce qu'est le rtti se
retrouve sans comprendre pourquoi avec un exécutable faisant "Hello,
World!" qui est cinquante fois plus gros que son équivalent en C.

Je crois que c'est un peu là le problème: il y a dans C++ un certains
nombres de pièges à performances qu'on apprend à éviter mais dans lequel
tombe systématiquement le programmeur débutant. Il en ressort alors avec
l'impression fausse que "le C++ c'est plus lent".

Par exemple, quelqu'un qui veut faire un moteur 3D fera peut-être une
classe Vector pour représenter les vecteurs. Intuitivement, il fera
quelque chose comme ceci pour les opérations mathématiques:

// operator addition grossier
Vector operator + (Vector const&a, Vector const &b)
{
return Vector(a.x+b.x, a.y+b.y, a.z+b.z);
}

Cette implémentation comporte un piège: la création d'un objet
temporaire qui va être créé et détruit et donc entrainer une perte de
temps. Si ensuite il écrit une ligne du genre:

Vector ret = a+b+c+d;

3 objets temporaires seront construits et détruits et prendront de la
ressource cpu. L'optimisation du compilateur n'y change pas grand chose,
surtout si les fonctions ne sont pas inline.

L'alternative la plus simple est alors d'écrire:
void AdditionneVecteurs(Vector *out, Vector const *in1, Vector const
*in2);
(ou l'équivalent avec des références à la place des pointeurs. Ca change
rien)

Mais ça c'est du pur C. Conclusion rapide: le C est plus rapide que le
C++. Or en fait la bonne conclusion devrait être: le bon C est plus
rapide que le mauvais C++. Le fait que beaucoup de programmeurs ayant à
peine touché le C++ fasse l'amalgame est à mon avis une cause de cette
mauvaise réputation du C++ pour les jeux.

--
Cyrille


Avatar
Cyrille Karmann
Chewee disait...
Cyrille Karmann wrote:

Le C est plutôt utilisé sur PS2.
Les moteurs les plus performants sont écrits en C, c'est un fait.


Nan. John Carmack (Quake, Doom) programme en C, mais sinon, je ne
connais pas d'autre jeu connu pour avoir été faits en C pur.
Tiens, d'ailleurs: le code source d'un jeu vidéo très attendu, surtout
pour son moteur graphique, a été piraté et rendu disponible librement
sur internet (oui, c'est triste...).
Et il est en C++, vous pouvez me croire.


J'ai parlé de PS2, à ce que je sache John Carmack n'a jamais codé sur PS2...


Je pensais que ta deuxième phrase avait un caractère plus général.

--
Cyrille



Avatar
Fred
"Cyrille Karmann" a écrit dans le message de news:


L'alternative la plus simple est alors d'écrire:
void AdditionneVecteurs(Vector *out, Vector const *in1, Vector const
*in2);
(ou l'équivalent avec des références à la place des pointeurs. Ca change
rien)


const est un mot cle C?

Fred