CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

J´aide les personne en C/C++

JeanYvesYves
JeanYvesYves
Niveau 10
14 février 2005 à 17:53:31

clair ! Evite au maximum le pixel par pixel.
Une raison supplémentaire a ce que dit LGV :
les cartes graphiques sont optimisées pour le blitting : elles contiennent des accelérations matérielles, qui sont efficaces quand elles travaillent " en pipe-line" c´est a dire, entre autres, qu´elles peuvent bosser toutes seules a fond, sans avoir a faire des tests et aller demander des trucs au processeur.

Tu peux faire le test : tu mets une grosse image en VRAM, tu lui demandes de se blitter 50000 fois, tu chronometres.
Puis tu mets ton image en RAM, déja, chronometre : tu vas voir la perte...
Puis, si tu t´amuse a faire des modifs de pixels ( on parle de lock de surface) et de blitter, tu morphles severement au niveau du temps :)

jejej
jejej
Niveau 9
14 février 2005 à 18:41:47

Merci , en plus ca tombe bien , j´ai deja dessiné les briques ^^

jejej
jejej
Niveau 9
14 février 2005 à 19:33:52

Bon , aujourd´hui je suis en mode noob , j´arrive à rien ^^

Je voudrais réaliser un petit casse brique , mais qui lirait le niveau dans un fichier texte composé par exemple de 0 et 1 .

et mon programme afficherait une brique si il rencontre un " 1" .

j´ai ecrit ceci :
http://rafb.net/paste/results/VKd49c34.html
ca , ca marche bien , mais ca ne fait que me recopier à l´écran le contenu de mon fichier texte .

donc , naïvement , j´initialise la SDL etc : et je fais ceci :
int i;
for ( i=0 ; i<310 ; i++ )
{
if ( Briques[i] == 1 )
{
Affichagebrique( Bleue , 0 , 0 ) ;
}
}

bon , ce code ci devrait m´afficher au moins une brique bleue dans un coin , mais le programme plante misérablement .
je ne pense pas que l´erreur vienne de ma focntion Affichagebrique ou de l´initialisation de SDL , vu qu´il s´agit de copies-collés , mais plutot de ce bout de code ci dessus .

Vous pourriez m´expliquer les grandes lignes de création d´un niveau à partir d´un fichier texte oO
:merci: beaucoup :p)

Perdu_de_linfo
Perdu_de_linfo
Niveau 9
14 février 2005 à 19:52:24

< <La nuit porte conseil>>
Celui qui à dit ca est un géni! :p)
Je sais pas pourquoi, mais lorsque je faisait compile > execute ca plantait avec un écran noir...
et lorsque je vais dans mes documents, je voi un fichier.... qui est en fait l´application créée en compilant. Et la... l´image apparait, et je peu quitter!
Bizarre bizarre lol.
Merci JYY!
++

Rikkuman4
Rikkuman4
Niveau 10
14 février 2005 à 19:57:26

J´ai besoin d´aide y´a un truck que je pige pas sur un des tuto a jyy XD

Je m´explique, en fait c´est telement tout con que je capte pas X-D :

  1. include < stdlib.h>
  2. include < iostream.h>

int main()
{
int r=50;
int i;
for(i=0;i<=100;i++)
{
r=r+i;
}
cout < < " résultat :" < < r<< endl;
system("pause");
return 0;
}

pk sa me fait un chiffre comme 1050 alors que sa pourais faire 150, helm me pour que je puisse passer à l´etape suivante :-S

Perdu_de_linfo
Perdu_de_linfo
Niveau 9
14 février 2005 à 20:05:09

Premier passage de la boucle :
i = o
r = 50 + 0
Second passage :
i = 1
r = 51 + 1
Troisieme passage :
i = 2
r = 52 + 2
4e passage :
i = 3
r = 54 + 1
Cinquieme passage:
i = 4
r = 55 + 4
sixieme passage :
i = 5
r = 59 + 5
septieme passage :
i = 6
r = 64 + 6
huitieme passage :
i = 7
r = 70 + 7
neuvieme passage :
i = 8
r = 77 + 8
Dixieme passage :
i = 9
r = 85 + 9

Donc déja rien quau dixieme passage, tu est déja à un total de 94.
Si tu te représente ca graphiquement, ca te fais une courbe, qui monte de plus en plus vite ( on dit pas exponentielle?)
Donc tu dois y arriver facilement a tes 1050.
J´espere que chui pas a coté de la plaque^^

Rikkuman4
Rikkuman4
Niveau 10
14 février 2005 à 20:08:51

tinquette po ^^ merci je pence revenir, les tuto de jyy son super classe trop bien expliqué !
si je poste c´est parce que je n´aimerais pas trop passé à l´étape suivante sans avoir rien compris aux précédents ! :/

clad87
clad87
Niveau 5
14 février 2005 à 20:30:08

Moi c´est un problème particuler, je ne sais pas prog en C++, mais en VB. Et ont m´as filé les source d´un prog en c++ seulement il y a une petite chose que je voulais ajouter, si quelqu´un aurait la gentilesse de m´aider, je lui en serait reconaissant.

Mon MSN: youlcdk@hotmail.com

Rikkuman4
Rikkuman4
Niveau 10
14 février 2005 à 21:00:03

Re-soir !

il dois il avoir un probleme avec mon code, le mot de passe ne veux pas accépté, savez vous pourquoi ?

  1. include < stdlib.h>
  2. include < iostream.h>

int main()
{
int code=0;
cout<<"le code s´il vous plait"<<endl;
while(code=222)
{
cout<<"Le code ? !"<<endl;
cin>>code;
}
cout<<"bon code"<<endl;
system("pause");
return 0;
}

Perdu_de_linfo
Perdu_de_linfo
Niveau 9
14 février 2005 à 21:05:34

Lol, tu vien de dire, " tant que le code est égal a 222, refaire un tour.
Met donc
while(code!=222)
et ca devrais marcher.;)

Rikkuman4
Rikkuman4
Niveau 10
14 février 2005 à 21:07:39

oué voila la petite ! ! ! :(

thx

dnob700
dnob700
Niveau 10
14 février 2005 à 22:17:45

jyy : j´ai commencé à dev la lib d´affichage dont on parlait, pour l´instant j´affiche des chaine de caractères et je choisis leur position.

bientôt d´autres type et des couleurs !

JeanYvesYves
JeanYvesYves
Niveau 10
14 février 2005 à 22:33:14

dnob700 > Impec :) je serai preneur si tu le veux bien !

rikkuman4 > oui, en effet, dans ton cas, c´est ! =
dans le while, mais ATTENTION ! !
tu as mis UN SEUL = dans le while : il faut bien en mettre 2.
le == permet de tester
le = permet d´assigner
Ne te trompe pas ! Résultats inattendus et longue nuit de debug aux malheureux qui se trompent la dessus :)

clad87 > mail moi.

rikkuman4 > il est vrai que le résultat n´est pas intuitif :) mais bon,
1 + 2 + 3 + 4 + . ... + 99 + 100 = 1050 :)
essayez, si vous etes courageux, de calculer ça !

jejej > ta façon de lire le fichier que je vois n´est pas bonne :

fait un for pour lire :)

dnob700
dnob700
Niveau 10
14 février 2005 à 23:00:12

j´était en train décrire la procédure pour lire les données entrée au clavier quand je me suis demandé comment est ce que cin fait pour savoir la taille du buffer qui lui est passé ?

alors j´essaye, et à ma grande stupeur il plante affreusement si le texte qu´on tape sur une instruction cin dépasse la taille du buffer ( en fait il ne plante pas, il continue bêtement et c´est au dessus que ça plante).

enfin, est ce qu´il y a une méthode propre pour faire ça ?

JeanYvesYves
JeanYvesYves
Niveau 10
14 février 2005 à 23:11:07

en effet, cin natif n´a aucune sécurité, donc si ça dépasse le buffer : 2 possibilités :
- tu restes dans le segment, et tu écrases les données placées apres
- tu sors du segment courant, et la, c´est l´OS qui t´arrete avec son message légendaire " ce programme va etre arreté..."

sinon, tu as la méthode :
cin.getline(buffer,50);
ici, 50 est la limite ( tu mets ce que tu veux bien sur) : tout caractere écrit apres est purement ignoré.
donc ça ne plante plus :)

Apres, pour la reconnaissance, c´est tordu, et pas intuitif : c´est intuitif.

En fait, comme tu as vu, cin et cout ne sont pas des fontions, car sinon, ce serait de la forme cin() et cout()

Ce sont des instances !
Quelque part est écrit :

ios cin;
ios cout;

ios est une classe, et cin et cout sont des instances, au meme titre que dans :
int a;
a est une variable, ( ou une instance de int)

quand tu manipules cin ou cout, c´est comme si tu manipulais a

apres, < < et > > sont des opérateurs ( a la base SHL et SHR) surchargés. Faut voir l´équivalence :

cout < < " plouf";
< =>
cout.operator<<("plouf");

Apres, ça va encore plus loin, comme tu le sais, cout ( ou cin) peuvent prendre un char*, un int, un char, un float, ou meme un " ma_classe"
tout simplement parce que le prototype est générique ( template)
Le prototype est de la forme :

template < class T>
ios::operator<<(T&);

( je ne suis pas sur a 100% que la classe porteuse soit ios ou une fille de ios, mais bon, ça ne change rien)

Et donc pour en venir a ta question ( ouf ! )
la taille du parametre passé est simplement :

sizeof(T); avec T générique :)

dnob700
dnob700
Niveau 10
14 février 2005 à 23:32:21

oui je vois.

de toute manière, je fait une implémentation copié sur cout, c´est a dire a base de surcharge de < < et > > ( sauf que j´ai qu´un objet de base et on peut lire et écrire sur le même objet).

donc pour la taille du buffer je crois que ça sera dans le style de cin ( avec pourquoi pas une fonction getline().

en attendant, je viens à l´instant de voir que ça servais à rien parce que je peut manipuler la console puis écrire et lire dedans avec cin et cout.

donc je crois que je vais juste écrire de quoi modifier les attribut du texte et laisser le reste au fonction standart, c´est quand même plus simple.

moralité une petite bibliothèque sympa pour afficher du texte de manière un peu plus joli que la base très bientot. mais ce soir je vais me coucher, j´ai un DS de chimie demain au aurore.

pouky10
pouky10
Niveau 6
14 février 2005 à 23:36:24

Salut jeanyvesyves, tu dit souvent de mettre les image en vram à la place d´en ram, comment on fais cela?(peut-être que je le fais s´en le savoir lol) et à quoi correspond la vram, es-ce a la mé de la carte graphique? Aussi, j´ai lu dans un livre de mettre le mot clé REGITER devant une variable pour qu´elle soie plus rapide, la encore combien d´espace possède-t-on à quoi cela correspond

pouky10
pouky10
Niveau 6
14 février 2005 à 23:43:18

Pour mes question sur la vram jutilise SDL

Koyo-K
Koyo-K
Niveau 9
15 février 2005 à 00:01:20

Mon projet compile ( rappel : je suis sur FMOD) mais c´est quand l´exe se lance qu´il foire.
Pour vérifier si x = NULL, c´est moi qui suis censé l´avoir déclaré NULL ? Si oui, ben non je l´ai pas mis NULL...

J´ai aussi un problème avec mes cin.get() : ils fonctionnent plus lol ! Sur un autre projet, je les utilise, ils compilent mais ça fait comme si j´avais rien mis ( le truc classique de la fenêtre qui s´ouvre/ferme).

Ca y est le PC repart en couille. Ca sent le formatage ça...

JeanYvesYves
JeanYvesYves
Niveau 10
15 février 2005 à 00:02:22

dnob700 > bon courage pour ton DS ! :)

pouky10 >
en ce qui concerne register, ça demande au compilo de mettre ci possible la variable dans les registres internes du pross, pour un acces tres rapide. Combien de place ? moins de 50 octets ! ! meme pas kilooctets !
Par contre, tu peux d´emblée oublier " register" : les compilos sont optimisés pour choisir au mieux cela, une mauvaise utilisation les perturbera, et tu risques, au contraire, de perdre en vitesse :)
Donc a mon avis, ne t´embete pas avec register

en ce qui concerne la VRAM = Video RAM = mémoire carte graphique, bingo :)
pour mettre une surface avec SDL, c´est le flag : SDL_HWSURFACE que tu as du voir plusieurs fois dans les codes : SDL HARDWARE SURFACE.
A contrario tu as donc :
SDL_SWSURFACE pour mettre en RAM.

Les surfaces en VRAM sont blittées considérablement plus vites que celles en RAM, car le GPU ( processeur de la carte graphique) est optimisé pour les copier TRES rapidement ( processeur 256 bits sur une GE Force 5 : copie par paquets de 32 octets, accélérés matériellement, alors qu´une image en RAM est montée sur la carte, via le bus ( lent) et traitée par le CPU ( pross central : 32 bits = copie par paquets de 4 octets) : de plus, ça squatte le CPU qui, du coup, est plus lent pour le reste du programme...)
tout cela explique l´avantage de mettre une image en VRAM pour la blitter.
Regarde mon tuto, paragraphe § 2.1.2 RAM ou VRAM pour un exemple.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware