Placer aleatoirement un caractere C++ [Résolu]

Signaler
Messages postés
16
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
21 octobre 2006
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Salut à tous voilà je débute en C++ et j'aurai besoin d'un conseil : je voudrais placer un caractere au hasard dans la fenetre, sachant que je suis en mode DOS. Je sait qu'une ligne fait 80 de caractere envorion et je voudrais donc les placer aleatoriement sur cette lignes ... J'ai entendu parler de la fonction gotoxy, mais je n'ai pas tout compris, si vous pouviez m'eclaircir ...
Merci a tous   !!
Spitzer  
A voir également:

16 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Si tu travaille sous devcpp, tu peut encore aller télécharger la librairire conio en allant dans:

Aide->À propos de Dev-C++->Nouvelle versions. Sinon voici la fonction:


void gotoxy(int x, int y)

{

    COORD c;


    c.X = x - 1;

    c.Y = y - 1;

    SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);

}


Pour une lettre aléatoire sur une ligne tu peut par exemple faire:


//dans ta fonction main

srand(time(NULL)); //Pour initialiser le randomiser au début de ton programme


// dans une autre fonction ou la même

#define MAX 80

#define MIN 1


int Result = ((rand() % (int)(((MAX) + 1) - (MIN))) + (MIN));


gotoxy(Result, 1);


putchar('a');

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Petit exemple de programme qui fonctionne très bien

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void gotoxy(int x, int y)
{
    COORD c;

    c.X = x - 1;
    c.Y = y - 1;
    SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}

#define MAX 80
#define MIN 1

int main()
{
    int count = 10;
    srand(time(NULL));

    while(count > 0)
    {
        int Result = ((rand() % (int)(((MAX) + 1) - (MIN))) + (MIN));
        gotoxy(Result, count);
        putchar('a');
        count--;
    }

    gotoxy(1, 11);
    return 0;
}

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
16
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
21 octobre 2006

Ouai je travaille sous dev C++ oui donc pour repondre a tout cela  j'ai des ptit s blem, en fait je n'arrive pas a telecharger les mise a jours... sinon le code tu vien de me donner ne fonctionne pas, il ne reconnait ni COORD ( function no decalred) et aussi a la ligne 9 et 11 ... mon dev C++ il est bizard ^^ o passage il ne reconanit pas conio.h ( ni conio.c ) ...
Messages postés
16
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
21 octobre 2006

et donc dans une nouvelel page j'ai mis :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main()
{
#define MAX 80
#define MIN 1


int Result = ((rand() % (int)(((MAX) + 1) - (MIN))) + (MIN));


gotoxy(Result, 1);


putchar('a');
system("pause>nul");
}
il ne reconnai pa gotoxy ...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Petite erreure de ma part. Il faut rajouter #include <windows.h> pour COORD. Ensuite, si tu n'a besoin que de la fonction gotoxy, pas besoin de télécharger la librairie juste à prendre la fonction que je tes donné.

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
16
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
21 octobre 2006

bon je retélécharge dev C++, cette fois la 5.0
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Pas besoin. Recopie exactement ceci dans un nouveau projet console et tout devrais bien aller:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

void gotoxy(int x, int y)
{
    COORD c;

    c.X = x - 1;
    c.Y = y - 1;
    SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}

#define MAX 80
#define MIN 1

int main()
{
    int count = 10;
    srand(time(NULL));

    while(count > 0)
    {
        int Result = ((rand() % (int)(((MAX) + 1) - (MIN))) + (MIN));
        gotoxy(Result, count);
        putchar('a');
        count--;
    }

    gotoxy(1, 11);
    return 0;
}

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
16
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
21 octobre 2006

Super ca amrche cette fois ci !!! merci mtn reste plus qu'à me débrouiler ^^ mais tu pourrais pas me faire un ptit cours rapide sur la fonction gotoxy, parc e que je  ne la comrpend pas tres bien ...
merci d'avance
Spitzer
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
gotoxy te permet d'écrire à un endroit bien précis dans la console.

x représente la colone où tu veut commencer à écrire. La valeur minimal est 1.
y représente la ligne où tu veut commencer à écrire. La valeur minimal est encore 1.

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
16
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
21 octobre 2006

Ok ba je te remercie beaucoup ^^ je termine mon ptit code et je t'en fait part de suite ^^ merci encore ca merite un 20/20 ca

Spitzer
Messages postés
16
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
21 octobre 2006

ok jte remercie bcp ^^ je termine mon premier code C++ ^^ et ej ten fait part dès que possible ..;
merci encore !!
Spitzer
Messages postés
16
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
21 octobre 2006

Par contre je ne comprend pas cette fonction :
void gotoxy(int x, int y)
{
    COORD c;

    c.X = x - 1;
    c.Y = y - 1;
    SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
 Si tu pouvais m'expliquer brievement ... ^^
Et oui je l'ai dit que je suis une noob en C++ ^^ je débute quoi !
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
COORD est une structure dans laquel on rentre les positions x-1 et y-1 qui vienne des paramètres de gotoxy. Pourquoi -1 ? Et bien parceque la premiere colone et la premiere ligne de la console sont enfait situer à 0 mais pour rendre le code un peu plus humain, on écrie 1. Ensuite SetConsoleCursorPosition place la tête d'écriture de la console à l'endroit x y prédéfinie dans la structure COORD. GetStdHandle retourne l'ID (si je peut dire) de la console utiliser par le programme appellant GetStdHandle (je crois).

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Très bien si tu es content avec ce gotoxy mais je doute fort de son utilité, une console se passe fort bien de toute fioriture. Contente toi de 'cin cout' pour qlqs tests consoliens et passe le plus vite possible au mode fenêtré, rester en console ne serait que pure perte de temps vu que ça ne s'utilise plus depuis des lustres.

ciao...
BruNews, MVP VC++
Messages postés
16
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
21 octobre 2006

Soit, mais le mode fenetre c'est beaucoup plus compliqué... Si vous trouvez un tutorial sur le mode fenetré en C++, je le veux bien !! parce que le mode MS-DOS, c'est bien, mais bon j'ai envie de dire qu'il y a d'autres languages pour ca comme le Batch ...
Merci vous pour toutes ces réponses, et j'attends avec impatience un tutorial sur le mode fenetré C++ ...
Spitzer