Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercices] Venez vous entraîner !

(v2)

17 août 2011 à 15:41:19

Citation : germino

Ben en fait, il vont bien être obligé de faire du pathfinding ^^
edit: c'est pas très dur à faire en console, hein !


Non, ca sera plutot l'un OU l'autre !
Et pour la console, il faut gerer les deux couleurs...

Citation : lmghs

Pas forcément car j'ai l'impression que les premiers coups ne servent à rien -- hormis remplir la grille pour permettre des supers sauts par la suite.




La, j'ai représenté un début de partie simple. En fait, on se rend rapidement compte que le joueur qui rebondira en premier sur le mur sera le moins avantagé. Un joueur un peu expérimenté essayera donc d'obliger son adversaire à rebondir.
Au lieu de faire ca :
<code type = "autre">
/\/\/\/\
/
</code>
Le joueur essayera d'arriver à ca :
<code type = "autre">
\
/\/\/|/\/
</code>




Citation : germino

Le premier objectif est de se retrouver le premier à rebondir sur le mur d'en face.


C'est exactement le contraire !!! :lol:

Image utilisateur
La, on voit que le joueur rouge, le premier à rebondir, se fait avoir par la technique dite "de la maison", puis par celle "du moulin".
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 15:51:59

Pour ton dernier point : oups, erare humanum est.
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 15:53:21

Et pour la console ? Explique moi comment tu veux faire, ca simplifierait beaucoup le projet.
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 16:30:35

Je suis en train de réaliser ça ;)
En fait, il faut différencier les données de l'affichage. Après, c'est simple d'afficher que ce soit en console ou en fenêtre.

Si on veut faire du code portable, faut oublier la couleur (ça n'influence pas le jeu d'ailleurs !).
Perso je colore un peu parce que c'est triste sinon. (bon, suffirait de trouver le code analogue pour les linuxiens pour que ce soit portable hein...)
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 16:32:29

1) C'est peut être une remarque totalement stupide, mais tu arrives à colorer la console ???
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 16:40:29

Citation : pie3636

1) C'est peut être une remarque totalement stupide, mais tu arrives à colorer la console ???


De maniere portable, NON. Mais en se documentant un peu sur l'API des OS, c'est facilement faisable ^^ (System("color 0A"); par exemple)
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 16:46:06

Ah... En effet, ca facilite le sujet... Enfin, pas tant que ca. Mais dans ce cas on peut le faire en console
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 17:01:13

Couleurs portables en console ? => (n)curses/PDCurses.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
17 août 2011 à 17:01:43

(n|pd)curses

edit : damn, le temps de répondre et lmghs était passer par là, saleté de forum qui permet pas de supprimer ses posts.
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 17:09:15

Le system colore rien du tout à part le fond et le texte. Je me sers de la petite fonction "magique" sous windows...
#include <Windows.h>

void Color(int t,int f)
{
	HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(H,f*16+t);
}


Et oui, j'avais pensé à curses, mais c'est pas le propos de l'exo et de toute façon, on peut faire le programme sans les couleurs, le tout réside dans les transformation entre les données et l'affichage.
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 17:16:02

Citation : germino

et de toute façon, on peut faire le programme sans les couleurs, le tout réside dans les transformation entre les données et l'affichage.


Alors comment tu différencies les deux joueurs ??? Ca fait trois fois que tu dis ca, explique-toi !!! >_<
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 17:37:17

Tout ce qu'un joueur a besoin pour jouer, c'est de savoir où il est, et quelles sont les lignes déjà utilisées. La preuve : sur papier, on peut jouer avec le même crayon de papier, on ne voit pas la différence entre les deux joueurs.
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 17:42:15

Oui, c'est vrai, mais il faut indiquer au joueur de quel côté est son but, parce que déja qu'avec les couleurs, on se perd facilement...
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2011 à 18:13:00

Ben ça, tu peux l'écrire en toutes lettres...
  • Partager sur Facebook
  • Partager sur Twitter
18 août 2011 à 19:40:29

Bon, alors j'ai fini le niveau 3 en console.
ça marche au poil !
Petit sceenshot pour le plaisir :
screenshot console


Je vais peut-être ajouter un module pour jouer en réseau...
  • Partager sur Facebook
  • Partager sur Twitter
21 août 2011 à 11:13:20

Ca m'a l'air très bien ^^
A quoi sert le Player 1 : 7 en bas ??? Bon, player 1 pour signaler que c'est au tour du joueur 1, mais le 7 ???
  • Partager sur Facebook
  • Partager sur Twitter
21 août 2011 à 12:01:00

Le 7, c'est parce que le mec en question (moi) a tapé '7' dans la console et s'apprête à appuyer sur 'Entrée' pour jouer dans la diagonale en haut à gauche ;)
  • Partager sur Facebook
  • Partager sur Twitter
21 août 2011 à 12:04:46

Ah. D'accord. Ca serait pas une mauvaise idée de mettre un module réseau... Ca pourrait être le niveau 6, mais je pense qu'il y a assez de niveaux comme ca. Sinon, si tu t'es débrouillé pour que ta console prenne en charge les caractères spéciaux, utilise les caractères graphiques pour les murs : Alt+186 ║, Alt+205 ═, Alt+187 ╗, Alt+188 ╝, Alt+200 ╚ et Alt+201 ╔
Pour le quadrillage, tu peux remplacer les étoiles par Alt+250 ·, c'est un point mais centré verticalement.
  • Partager sur Facebook
  • Partager sur Twitter
21 août 2011 à 14:32:02

Mauvaise idée. Pas portable. Et indéchiffrable.
Sous linux, mac, et cygwin, cela donnerait n'importe quoi.
Faut en rester au pur ASCII. Ou utiliser (n)curses/PDCurses.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
21 août 2011 à 16:26:45

Après pas mal de temps, je poste une nouvelle correction pour mon propre exercice, le Tic-Tac-Toe. Cette fois-ci, j'ai tiré partie de la POO et écris un code assez lisible. Le code utilise aussi la norme C++0x (il suffit juste de modifier l'initialisation du tableau de char dans le constructeur pour sans passer)

Voilà la correction :

main.cpp
#include <iostream>
#include <string>
#include "Grille.h"

using namespace std;

int main()
{
    string recommencer;
    do
    {
        Grille grille;
        cout << endl << grille.jouer() << "a gagne !" << endl;
        cout << "Veux-tu recommencer ? (oui/non)" << endl;
        cin >> recommencer;
    }while(recommencer != "non");
    return 0;
}


Grille.h
#ifndef GRILLE_H_INCLUDED
#define GRILLE_H_INCLUDED

#include <string>

class Grille
{
    public:

        Grille(); // génère la grille par défaut
        bool verifier(); // vérifie si le jeu est terminé
        void afficher() const; // affiche la grille
        std::string jouer(); // fonction principal renvoyant le vainqueur à la fin
        bool remplie() const; // vérifie si la grille est remplie

    private:

        char grille[3][3];
        char symboleJoueur;
        bool egalite;
};

#endif // GRILLE_H_INCLUDED


Grille.cpp
#include <iostream>
#include "Grille.h"

using namespace std;

Grille::Grille() : grille{{'1','2','3'},{'4','5','6'},{'7','8','9'}}, symboleJoueur('X'), egalite(false) {}

bool Grille::verifier()
{
        if((grille[0][0] == grille[1][1] && grille[2][2] == grille[1][1]) ||
           (grille[0][1] == grille[1][1] && grille[2][1] == grille[1][1]) ||
           (grille[0][2] == grille[1][1] && grille[2][0] == grille[1][1]) ||
           (grille[1][0] == grille[1][1] && grille[1][2] == grille[1][1]) ||
           (grille[1][0] == grille[0][0] && grille[2][0] == grille[0][0]) ||
           (grille[0][1] == grille[0][0] && grille[0][2] == grille[0][0]) ||
           (grille[2][0] == grille[2][2] && grille[2][1] == grille[2][2]) ||
           (grille[0][2] == grille[2][2] && grille[1][2] == grille[2][2]))
            return false;
    if(remplie())
    {
        egalite = true;
        return false;
    }
    return true;
}

void Grille::afficher() const
{
    cout << "     |     |" << endl
         << "  " << grille[2][0] << "  |  " << grille[2][1] << "  |  " << grille[2][2] << endl
         << "_____|_____|_____" << endl
         << "     |     |" << endl
         << "  " << grille[1][0] << "  |  " << grille[1][1] << "  |  " << grille[1][2] << endl
         << "_____|_____|_____" << endl
         << "     |     |" << endl
         << "  " << grille[0][0] << "  |  " << grille[0][1] << "  |  " << grille[0][2] << endl
         << "     |     |" << endl;
}

string Grille::jouer()
{
    do
    {
        afficher();
        cout << "C'est au Joueur " << 1 + (symboleJoueur == 'O') << " de jouer." << endl;
        int choix;
        do
        {
            cout << "Choisis l'emplacement : ";
            cin >> choix;
            choix--;
        }while(grille[choix / 3][choix % 3] == 'X' || grille[choix / 3][choix % 3] == 'O');
        grille[choix / 3][choix % 3] = symboleJoueur;
        symboleJoueur = (symboleJoueur == 'X')? 'O' : 'X';
    }while(verifier());
    afficher();
    return (egalite)? "Personne n'" : (symboleJoueur == 'O')? "Joueur 1 " : "Joueur 2 ";
}

bool Grille::remplie() const
{
    for(int i = 0 ; i < 9 ; i++)
        {
            if(grille[i/3][i%3] != 'X' && grille[i/3][i%3] != 'O')
                return false;
        }
        return true;
}


N'hésitez pas à commenter mon code.
  • Partager sur Facebook
  • Partager sur Twitter
21 août 2011 à 18:18:27

Citation : pie3636

Ah. D'accord. Ca serait pas une mauvaise idée de mettre un module réseau... Ca pourrait être le niveau 6, mais je pense qu'il y a assez de niveaux comme ca. Sinon, si tu t'es débrouillé pour que ta console prenne en charge les caractères spéciaux, utilise les caractères graphiques pour les murs : Alt+186 ║, Alt+205 ═, Alt+187 ╗, Alt+188 ╝, Alt+200 ╚ et Alt+201 ╔
Pour le quadrillage, tu peux remplacer les étoiles par Alt+250 ·, c'est un point mais centré verticalement.


Euh, j'ai mis aucun caractère spécial :euh:
En fait, pour le réseau, c'est ce qu'on peut mettre dans "aller plus loin"...
  • Partager sur Facebook
  • Partager sur Twitter
22 août 2011 à 12:16:48

D'ailleurs, vous devriez upper le post, et ajouter l'exercice.
  • Partager sur Facebook
  • Partager sur Twitter
22 août 2011 à 18:20:11

Oui. Pour l'exo des lettres, on le met dans quelle section à votre avis ?
  • Partager sur Facebook
  • Partager sur Twitter
22 août 2011 à 19:05:28

euh, ça n'a pas beaucoup de rapport...
  • Partager sur Facebook
  • Partager sur Twitter
23 août 2011 à 10:55:26

Je dirais algorithmie ou réalisation d'un jeu. Plutôt le deuxième. Mais c'est vrai qu'on peut le ranger dans plusieurs catégories. A vous de voir.
  • Partager sur Facebook
  • Partager sur Twitter
23 août 2011 à 11:29:51

Citation : pie3636

Je dirais algorithmie ou réalisation d'un jeu. Plutôt le deuxième. Mais c'est vrai qu'on peut le ranger dans plusieurs catégories. A vous de voir.


On parlait de l'exercice "En Lettres!" (cf. page precedente) :p
  • Partager sur Facebook
  • Partager sur Twitter
23 août 2011 à 11:34:30

L'auteur le plaçait lui même dans les catégories chaînes de caractères et algorithmie. Après, il faut voir entre les deux (pile ou face :D ).
  • Partager sur Facebook
  • Partager sur Twitter
23 août 2011 à 16:27:17

Citation : TrackOut

Citation : pie3636

Je dirais algorithmie ou réalisation d'un jeu. Plutôt le deuxième. Mais c'est vrai qu'on peut le ranger dans plusieurs catégories. A vous de voir.


On parlait de l'exercice "En Lettres!" (cf. page precedente) :p


Oups :-°
Alors, je dirais chaînes de caractères plutot.
  • Partager sur Facebook
  • Partager sur Twitter
23 août 2011 à 18:34:28

Je pense pour ma part que ça tient plus des chaînes de caractère. Donc c'est ok.
  • Partager sur Facebook
  • Partager sur Twitter

[Exercices] Venez vous entraîner !

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown