IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Programme de jeux [Bug d'affichage]


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Décembre 2020
    Messages : 1
    Points : 3
    Points
    3
    Par défaut Programme de jeux [Bug d'affichage]
    Bonjour, alors voila j'essaie de coder un petit jeux histoire de m’entraîner mais j'ai un problème quand je fais bouger les emojis il y a des bugs d'affichage savez vous pourquoi ?

    .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #ifndef FONCTIONS_H
    #define FONCTIONS_H
     
     
     
    #include <wchar.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <ncurses.h>
    #include <wchar.h>
    #include <wctype.h>
    #include <locale.h>
    #include <string.h>
     
    #define BLACK    "\033[1;30m"
    #define RED      "\033[1;31m"
    #define GREEN    "\033[1;32m"
    #define YELLOW   "\033[1;33m"
    #define BLUE     "\033[1;34m"
    #define PURPLE   "\033[1;35m"
    #define CYAN     "\033[1;36m"
    #define GREY     "\033[1;37m"
     
    #ifdef __cplusplus
    extern "C" {
    #endif
    #define LARGEUR 70
    #define HAUTEUR 20
        typedef enum {HAUT, BAS, GAUCHE, DROITE} directions;
        typedef struct{
            int x;
            int y;
            int speed;
            wchar_t symbole;
        }typeElement;
     
        void bouger(typeElement *e, directions sens,WINDOW *boite);
     
     
    #ifdef __cplusplus
    }
    #endif
     
    #endif /* FONCTIONS_H */
    .c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #include "fonctions.h"
     
    void bouger(typeElement *e, directions sens, WINDOW *boite) {
     
        mvwprintw(boite, e->y, e->x, " "); // on efface l'element en x,y
        if (e->speed == 1) {
            switch (sens) {
                case HAUT:
                    if (e->y > 1) {
                        e->y = e->y - 1;
                    }
                    break;
                case BAS:
                    if (e->y < HAUTEUR - 2) {
                        e->y = e->y + 1;
                    }
     
                    break;
                case GAUCHE:
                    if (e->x > 1) {
                        e->x = e->x - 1;
                    }
                    break;
                case DROITE:
                    if (e->x < LARGEUR - 3) { //-1 car bord gauche prend un emplacement, -1 car bord droite prend un emplacement, et -1 avant bord droite sinonon ne peut pas alle a droite
                        e->x = e->x + 1;
                    }
                    break;
            }
     
        } else {
            switch (sens) {
                case HAUT:
                    if (e->y > 1) {
                        e->y = e->y - 2;
                    }
                    break;
                case BAS:
                    if (e->y < HAUTEUR - 2) {
                        e->y = e->y + 2;
                    }
     
                    break;
                case GAUCHE:
                    if (e->x > 1) {
                        e->x = e->x - 2;
                    }
                    break;
                case DROITE:
                    if (e->x < LARGEUR - 3) { //-1 car bord gauche prend un emplacement, -1 car bord droite prend un emplacement, et -1 avant bord droite sinonon ne peut pas alle a droite
                        e->x = e->x + 2;
                    }
                    break;
            }
     
        }
     
     
        mvwprintw(boite, e->y, e->x, "%lc", e->symbole); // on affiche l'element en x,y
    }
    .main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    /*
     
    #include "fonctions.h"
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h> 
     
    /*
     * 
     */
    int main(int argc, char** argv) {
     
        typeElement el, el1, el2;
        int touche, rejouer;
        char pseudo[255], pseudo1[255];
        WINDOW *boite;
        time_t depart, arrivee;
        time(&depart);
        int speed = 0;
     
        printf("oooooooooo.    .oooooo.   ooooo      ooo    oooo   .oooooo.   ooooo     ooo ooooooooo.   \n");
        printf("`888'   `Y8b  d8P'  `Y8b  `888b.     `8'    888  d8P'  `Y8b  `888'     `8' `888   `Y88. \n");
        printf("888     888 888      888  8 `88b.    8      888 888      888  888       8   888   .d88' \n");
        printf("888oooo888' 888      888  8   `88b.  8      888 888      888  888       8   888ooo88P'  \n");
        printf("888    `88b 888      888  8     `88b.8      888 888      888  888       8   888`88b.    \n");
        printf("888    .88P `88b    d88'  8       `888      888 `88b    d88'  `88.    .8'   888  `88b.  \n");
        printf("o888bood8P'   `Y8bood8P'  o8o        `8  .o.88P  `Y8bood8P'     `YbodP'    o888o  o888o \n");
        printf("                                        `Y888P                                          \n");
     
        printf("\n");
        printf("8ooooooooo.   oooooooooooo   .oooooo.    ooooo        oooooooooooo    .oooooo..o \n");
        printf("`888   `Y88. `888'     `8  d8P'  `Y8b   `888'        `888'       `8 d8P'    `Y8 \n");
        printf("888   .d88'  888         888            888          888           Y88bo.      \n");
        printf("888ooo88P'   888oooo8    888            888          888oooo8       `Y8888o.  \n");
        printf("888`88b.     888         888     ooooo  888          888               `Y88b \n");
        printf("888  `88b.   888       o `88.    .88'   888       o  888       o oo       .d8P \n");
        printf("o888o  o888o o888ooooood8  `Y8bood8P'   o888ooooood8 o888ooooood8   8""88888P'  \n");
        printf("\n");
        printf("essayez de survivre le plus longtemps possible à l'attaque de l'ovni\n");
        printf("Prenez l'étoile pour aller aussi vite que la lumière !");
        printf("\n");
        printf("controle du multijoueur : ");
     
     
     
        printf("%s Donnez le nom du premier joueur  :", BLUE);
        scanf("%s", pseudo);
        printf("%s Donnez le nom du deuxieme joueur : ", BLUE);
        scanf("%s", pseudo1);
        do {
     
            setlocale(LC_ALL, ""); // mettre la console en compatibilité d'affichage unicode sous linux
            initscr(); // Initialise la structure WINDOW et autres paramètres 
            el.symbole = 0x1F680; // symbole est une flamme 
            el.x = 15;
            el.y = 15;
            el.speed = 1;
            el1.symbole = 0x1F6F8;
            el1.x = 5;
            el1.y = 5;
            el1.speed = 1;
            el2.symbole = 0x2605;
            el2.x = 20;
            el2.y = 5;
            el2.speed = 1;
     
     
     
     
            boite = subwin(stdscr, HAUTEUR, LARGEUR, 1, 1); // boite positionnee en 1,1 avec comme dimension LARGEURxHAUTEUR
            box(boite, ACS_VLINE, ACS_HLINE); // dessiner le contour de la boite
            wrefresh(boite); // mettre a jour l'affichage de la boite
     
     
     
            mvwprintw(boite, el.y, el.x, "%lc", el.symbole); // on affiche l'element en x,y dans la boite
            mvwprintw(boite, el1.y, el1.x, "%lc", el1.symbole);
            mvwprintw(boite, el2.y, el2.x, "%lc", el2.symbole);
            mvprintw(0, 1, " Joueur 1 : %s      Joueur 2 : %s", pseudo, pseudo1);
            mvprintw(21, 2, "SPACE WAR");
            mvprintw(21, 57, "By SpaceXmas");
            curs_set(0); //curseur invisible
            noecho(); // pas d'echo de la touche appuyée
            time(&depart);
            do {
                time(&arrivee);
                mvprintw(0, 40, "Temps : %.0f secondes", difftime(arrivee, depart));
     
                touche = getch(); // recupérer la valeur de la touche appuyée
                if (speed > 0) {
     
                }
                switch (touche) {
                    case '4':bouger(&el, GAUCHE, boite);
     
                        break;
                    case '6':bouger(&el, DROITE, boite);
     
                        break;
                    case '8':bouger(&el, HAUT, boite);
     
                        break;
                    case '2':bouger(&el, BAS, boite);
     
                        break;
                }
                switch (touche) {
                    case 'q':bouger(&el1, GAUCHE, boite);
                        bouger(&el2, DROITE, boite);
     
                        break;
                    case 'd':bouger(&el1, DROITE, boite);
                        bouger(&el2, GAUCHE, boite);
     
                        break;
                    case 'z':bouger(&el1, HAUT, boite);
                        bouger(&el2, BAS, boite);
     
                        break;
                    case 's':bouger(&el1, BAS, boite);
                        bouger(&el2, HAUT, boite);
     
                        break;
                }
                if (el.x == el1.x && el.y == el1.y) {
                    time(&arrivee);
                    mvprintw(0, 40, "Temps : %.0f secondes", difftime(arrivee, depart));
                    touche = 'k';
                }
                if (el.x == el2.x && el.y == el2.y) {
                    el.speed = 2;
                    el2.symbole = NULL;
                }
                if (el.x == el1.x && el.y == el1.y) {
                    el.symbole = 0x1F525;
                }
     
                refresh(); // mise a jour de l'affichage
                wrefresh(boite);
     
            } while (touche != 'k');
            endwin();
            /*for(int i=0;i<LARGEUR;i++){
                for(int i=0;i<HAUTEUR;i++) {
                    mvwprintw(boite, LARGEUR, HAUTEUR,"% ");
                }
            }*/
            printf("%sVoulez vous rejouer (o/n)? ", GREY);
            scanf(" %c", &rejouer);
            wrefresh(boite);
        } while (rejouer != 'n');
     
        endwin(); // remettre le terminal dans son état initial
        printf("La fusée à survecu %.0f secondes\n", difftime(arrivee, depart));
        return (EXIT_SUCCESS);
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pouvez-vous envoyer une capture de votre bug graphique, s'il vous plait.
    Après, je pense que c'est un jeu en console, du coup, je pense qu'il faut que vous passiez la console dans un mode spécial pour faire un affichage correct (ou alors, afficher le jeu page par page (une page correspondant au nombre de lignes de la console)).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/06/2008, 16h41
  2. Réponses: 9
    Dernier message: 12/12/2007, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo