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++

dynoplasmma
dynoplasmma
Niveau 9
21 juin 2006 à 12:24:14

Ok, mon projet est en C, c´est donc normal que ca ne fonctionne pas. Merci pour ta reponse :)

PS : pour l´instant je vais rester en C, je passerais surement au C++, mais plus tard :)

Fvirtman
Fvirtman
Niveau 10
21 juin 2006 à 12:26:45

rien ne t´empeche de faire hybride : de garder une philosophie procédurale, et de profiter de méthodes pour des structures, et de passage par référence :)

dynoplasmma
dynoplasmma
Niveau 9
21 juin 2006 à 12:33:49

En effet c´est possible, si je trouve une fonction a mettre dans une fonction qui me serais tres utile, je pense faire cela.

Mais sinon, les classes en C++, je ne vois pas l´interet de mettre des menbres privées, on a pas le droit d´y toucher c´est bien ca ?
Et bien on peut les mettre en public sans les toucher...

dnob700
dnob700
Niveau 10
22 juin 2006 à 00:26:34

oui, tu peut. Mais si tu diffuse ta classe (dans une bibliothèque logiciel par exemple), tu veux que les utilisateurs ne puisse faire que ce qui a été prévu pour. Donc par exemple, il ne doivent pas pouvoir modifier certaines données interne à la classe. Et bien celles-là, tu les rend privée, et il n´y a plus de risque. C´est à la fois plus propre et plus clair.

jojo____
jojo____
Niveau 9
22 juin 2006 à 08:11:41

Bon, j´ai toujours rien compris aux fonctions et au prototypes^^. Alors je me suis dit que j´alai vous demander un exemple qui pourrait d´ailleur m´être utile pour mon jeu ^^. Je voudrais que plusieurs nom saffiche et que le testeur du jeu puisse choisir entre ´lun d´eux: printf ("1)Silvie\n2)Marc......");
if 1 alors silvie
if 2 alors marc avec le scanf et tt. Peut être que je comprendrai mieux car j´ai tester de faire cela avec un prototypes: long prenomjoueur (long prenom);
dans presentation.h. Au debut de presentation.c , j´ai mit #include "presentation.h" et g mit le scanf et tt comme je l´avais expliquer au debut et ......................... message derreur. ^^
Aider moi stp, merci beaucoup^^.

Sinon vous dites tous le temps que je ne peux pas avancer si je ne connais pas le debut, mais je l´ai relu 10 000 fois, c que je ne comprend pas comment c écrit sur siteduzero et les autres nn plus. Faudrait mexpliquer facilement ^^.

godrik
godrik
Niveau 30
22 juin 2006 à 10:14:36

jojo, essaye d´écrire un peu mieux.
Si tu as des messages d´erreur fournit les
mieux, fournit le code + les messages d´erreur.
Tu peux les déposer sur le wall de jv.com.

Sinon, qu´est ce que tu n´as pas compris dans les explications fournis sur le site du zero ?

dynoplasmma
dynoplasmma
Niveau 9
22 juin 2006 à 13:24:30

Merci bien dnob,
J´y vois mieux l´interet :)

jojo____
jojo____
Niveau 9
22 juin 2006 à 14:43:51

Dit moi juste le code que tu mettrais pour faire ce que j´ai dit en haut stp.

Qosimo
Qosimo
Niveau 37
22 juin 2006 à 14:48:27

hello,
j´ai reçu un message d´erreur que je ne comprend pas* :

´for´ loop initial declaration used outside C99 mode

Voici la partie du code concernée :

for(int i=0;i<=56;i++)
{
game->caseEtat[i]=0;
}
for (i;i<=+63;i++)
{
game->caseEtat[i]=1;
}

Pour finir, mon projet est séparé en plusieurs fichiers :

main.c (structure de mon jeu, appel à main.c)
main.h (déclaration des fonctions, instructions pré-processeur)
main_fonctions.h (contient les fonctions directement appelée par main.c)
fonction.h (contient les autres fonctions)

  • (j´utilise l´IDE Dev C++).

Savez vous de quoi il s´agit ?

Fvirtman
Fvirtman
Niveau 10
22 juin 2006 à 14:51:41

Essaie de mettre ton int i a l´extérieur du for. Car il n´existe plus dans le 2e for si tu fais ça.

Qosimo
Qosimo
Niveau 37
22 juin 2006 à 14:55:21

Olé, ça marche ! :ok:

Qosimo
Qosimo
Niveau 37
22 juin 2006 à 15:14:41

Dans le cadre de mon projet, je dois connaître, en fonction d´une coordonnée (p.e. 25;33) dans quelle "case" je me trouve. En effet, ma surface de jeu est divisée en un ensemble de case toute de de 18x18 px.
Que pensez vous de mon algorithme :

"Cette algorithme est particuliérement simple et très utile : il retourne, en fonction des coordonnées
la « case » das laquel on se trouve.
Partons du principe que la première case est affichée à (0;0) et que chaque case soit de 32x32px.
Donc, pour que la souris se trouve dans la première case, il faut que sa coordonnée x soit entre 0 et
32 (se dernier n´étant pas compris, ce qui fait enfait de 0 à 31). Même chose pour y.
Si maintenant nous prenons le problème inverse : partir d´une coordonnée et retrouver la case. La
technique consiste à se retrouver avec un multiple de 32. Ensuite, il suffit de diviser ce nombre par
32 et nous avons la case. Prenons : x=35 et y=72.

35/32 = un nombre décimal // ce n´est pas ce que n
ous voulons...

A cette étape, nous rencontrons un problème : comment savoir si le résultat d´une division est entier
ou non? Nous allons utiliser le modulo, couplé avec une opération d´incrémentation. Ainsi, tant que
le résultat de la division est décimale on l´incrémente de 1. Ainsi, en 31 essaies au maximum, nous
nous retrouvons avec un nombre multiple de 32. On le divise par 32 et on optient la case dans laquel
on se trouve.
Jusquelà
voilà un petit de code qui pourrait résumer ce principe :

création d´une variable coord x = la position de la souris actuelle
création d´une variable coord y = la position de la souris actuelle
boucle : tant que (coord x de la souris modulo 32 est différent de 0)
{
incrémentation de coord x
}
numéro de la case = coord x/32
boucle : tant que (coord y de la souris modulo 32 est différent de 0)
{
incrémentation de coord y
}
numéro de la case = coord y/32

On peut faire encore mieux. Nous somme parti du principe que la première case avait son coin
haut/gauche à la coordonnée 0. Mais dans certains cas ce n´est pas le cas. Il faut donc rajouter un
décalage, ou offset en anglais. Voila la correction à apporter si votre damier commence aux
coordonnées(18;13).

création d´une variable coord x = la position de la souris actuelle
création d´une variable coord y = la position de la souris actuelle

boucle : tant que ((coord x de la souris18) modulo
32 est différent de 0) // correction 1
{
incrémentation de coord x
}
numéro de la case = coord x/32
boucle : tant que ((coord y de la souris13) modulo
32 est différent de 0) // correction 2
{
incrémentation de coord y
}
numéro de la case = coord y/32

La technique que j´utilise ici consiste simplement à soustraire le décalage à la coord de la souris."

guyver2
guyver2
Niveau 10
22 juin 2006 à 15:27:10

pour jojo

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <string.h>

void choixPerso();// le prototype

void choixPerso(char **nom) // la fonction
{
int num = 0; // déclaration de l variable num

  • nom = malloc(50*sizeof(char)); // allocation de m

emoire pour la chaine de caractere
printf("choisir un nom:\n1)Sylvie\n2)Marc\n-> ");
// question
scanf("%d",&num);// récup du num
switch (num)
{
case 1:
printf("choix 1\n");
strcpy((*nom), "Sylvie");
break;
case 2:
printf("choix 2\n");
strcpy((*nom),"Marc");
break;
default :
printf("choix autre\n");
strcpy((*nom),"Mauvais choix !" );
}
}

// le main OBLIGATOIRE (en plus c´est une fonction
)
int main(int argc, char* argv[])
{
char* perso; // nom du perso
choixPerso(&perso); // appel a la fonction
printf("vous avez choisi : %s\n",perso); // verif
si le nom est bien enregisté
//system("pause"); // a mettre si tu es sous windo
ws
return 0;
}

    1. #####################

si tu ne comprends pas le site du zero, c´est que tu n´es peut-etre pas pres a apprendre la programmation...
Les cours de ce site sont tout de meme tres tres simples a comprendre (sans vouloir dire qu´ils sont bas niveau loin de là)

godrik
godrik
Niveau 30
22 juin 2006 à 15:56:32

qosimo: bien joué, tu as résolu le problème:
trouver k tel que:
alpha*k+beta <= x < alpha(k+1)+beta

Qosimo
Qosimo
Niveau 37
22 juin 2006 à 16:00:23

merci d´avoir tout lu :)
Euh... tu pourrais juste précisé ce que tu entends par alpha, bêta, k... ? Autrement tu pense que c´est obtimisé comme algo ou qu´il y a mieux ?

godrik
godrik
Niveau 30
22 juin 2006 à 16:05:27

alpha: taille de tes cases, beta marge d´affichage.
Note que si beta est négatif, cela revient a dire que ta premiere case est de coordonée négative. Typiquement, si tu as utilisé une scroll bar.

disons que (x-beta)%alpha me semble relativement rapide...

godrik
godrik
Niveau 30
22 juin 2006 à 16:05:59

(x-beta)/alpha arrondi a l´inférieur.

Qosimo
Qosimo
Niveau 37
22 juin 2006 à 16:13:42

Ok, alors je vais utiliser mon algorithme pour l´instant. Si c´est trop lent j´essayerai ta méthode (bien que je n´aie pas tout compris...). Allez, merci pour tout, je retourne à mon code !

Qosimo
Qosimo
Niveau 37
22 juin 2006 à 16:41:52

Voici la fin de l´algorithme. Cette partie se charge de convertir les données obtenues précédemment, soit la ligne et la colonne d´une case en le numéro de la case (les numéros de cases étant donnés de gauche à droite et de haut en bas. La première case du tableau est donc 1 et celle à sa droite 2).

Assez parlé, voici donc l´algo :

(l-1)*6+k

où :

l = n°de la ligne
k = n°de la colonne

Je fais une petite compilation... Done. Tout est OK pour le moment.

dnob700
dnob700
Niveau 10
22 juin 2006 à 18:49:15

Qosimo : l´astuce est que si tu travaille avec des entier,

38/32 ou 32/32 ou 52/32, tout revient au même (la division est toujours tronquée).

Donc ton pixel (x,y) est dans la case (x/32,y/32), et tu n´a pas besoin de plus t´embeter.

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