Placer aleatoirement un caractere C++

Résolu
cs_spitzer Messages postés 16 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 21 octobre 2006 - 24 juin 2006 à 22:48
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 25 juin 2006 à 12:05
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  

16 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 juin 2006 à 12:05
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
24 juin 2006 à 23:01
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
24 juin 2006 à 23:09
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
0
cs_spitzer Messages postés 16 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 21 octobre 2006
24 juin 2006 à 23:26
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 ) ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_spitzer Messages postés 16 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 21 octobre 2006
24 juin 2006 à 23:29
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 ...
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
24 juin 2006 à 23:30
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
0
cs_spitzer Messages postés 16 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 21 octobre 2006
24 juin 2006 à 23:33
bon je retélécharge dev C++, cette fois la 5.0
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
24 juin 2006 à 23:34
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
0
cs_spitzer Messages postés 16 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 21 octobre 2006
24 juin 2006 à 23:36
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
24 juin 2006 à 23:39
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
0
cs_spitzer Messages postés 16 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 21 octobre 2006
24 juin 2006 à 23:40
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
0
cs_spitzer Messages postés 16 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 21 octobre 2006
24 juin 2006 à 23:42
ok jte remercie bcp ^^ je termine mon premier code C++ ^^ et ej ten fait part dès que possible ..;
merci encore !!
Spitzer
0
cs_spitzer Messages postés 16 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 21 octobre 2006
24 juin 2006 à 23:46
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 !
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
24 juin 2006 à 23:53
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 juin 2006 à 00:12
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++
0
cs_spitzer Messages postés 16 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 21 octobre 2006
25 juin 2006 à 11:31
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
0
Rejoignez-nous