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

Algorithmes et structures de données Discussion :

Question pour un jeu de plateau : Solitaire en C++


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Points : 167
    Points
    167
    Par défaut Question pour un jeu de plateau : Solitaire en C++
    Bonjour tout le monde :

    J'espère être au bon endroit pour poser mes questions.

    Je dois réaliser pour mon examen une application qui doit posséder certaine compétence. Dans ce cadre l'on m'avais conseillé le space-invaders malheureusement ce n'est pas mon style et je n'ai pas eu la motivation de le réaliser convenablement, j'ai donc décidé de créer une nouvelle application me ressemblant plus j'ai donc choisis un jeu de réflexion mon temps étant assez limité (j'espère réussir à le réaliser pendant ma semaine de vacance qui arrive), j'ai décidé un jeu qui me semble facilement réalisable car n'ayant pas trop de contrainte comparé à un jeu d'échec ou autre.

    Le jeu en question est donc le jeu du solitaire version plateau (pas carte).
    Petite explication rapide du jeu pour ceux qui ne connaissent pas : le plateau classique est en forme de croix, chaque branche fait 2 ligne de 3 et le centre 3 ligne de 3 soit en tout (2x3 = 6, 6x4 = 24, 3x3 = 9, 24 + 9 =) 33, on a au centre un espace vide et le reste est constitué de bille soit 32 billes. Le principe est de retirer toutes les billes du jeu (sauf 1). Pour cela il faut faire passer une bille au dessus d'une autre.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      XXX       XXX
      XXX       XXX
    XXXXXXX   XXXXXXX
    XxXOXXX   XOOxXXX
    XXXXXXX   XXXXXXX
      XXX       XXX
      XXX       XXX
     
    X = Pion
    O = Expace vide
     
    Ici on a fait passer le petit x au dessus du grand X qui se trouve entre x et O.
    Voila pour les explication ^^.

    Pour ce qui est des obligations de développement il me faudrait :
    - 1 classe mère
    - 2 classes filles (/!\ classe fille rattaché à une classe mère créer par mes soins, mais les deux ne doivent pas hérité obligatoirement de la même classe)
    - Du polymorphisme
    - Une méthode abstraite
    - Des attributs et méthodes dans toutes les classes.

    Comme cela va être mon premier développement objet j'ai pas mal de difficulté à trouver mes classes filles et ma fonction polymorphe. Sans oublié que j'ai du mal avec les classes abstraites, ce sont bien des classes qui vont servir aux classes filles ?

    J'aimerai donc savoir si vous pensez que ce projet est réalisable dans ces délais et si il peut contenir tous les près requis.

    Je vous remercie par avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Tout ça c'est de la théorie , c'est juste pour voir si tu as compris comment ça marche. Techniquement tu n'as pas grand chose pour illustrer tous les points que tu cites. Tu as des billes, des cases et un plateau. Si tu n'extrapoles pas un peu tu n'en tireras rien.

    Moi je ferai une classe abstraite bille, qui sera ta classe mère.
    Deux classes filles de bille, l'une avec un état en place, l'autre avec un état retiré. Au niveau des attributs tu as son emplacement par exemple.
    Quand tu retires une bille tu détruits l'objet en place et tu créé une nouvelle bille avec un état retiré avec son emplacement précédent.
    Avec ça tu peux construire une méthode polymorphe sur tes deux classes filles qui donne par exemple l'état de la bille ou une méthode bouger par exemple.

    C'est un peu artificiel de créer et détruire les billes, mais tu n'as pas trop le choix si tu veux respecter tes contraintes.

    Au niveau de ton plateau tu as de quoi faire un objet qui contient un ensemble de bille pour pouvoir gérer ta partie et savoir si une bille a été retiré ou pas.

    Bref a toi d'extrapoler ensuite.

    Par contre une semaine, c'est limite si tu ne maitrises pas tout ces concepts.

    Bon courage,

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Jimmy_ Voir le message
    Moi je ferai une classe abstraite bille, qui sera ta classe mère.
    Deux classes filles de bille, l'une avec un état en place, l'autre avec un état retiré. Au niveau des attributs tu as son emplacement par exemple.
    Quand tu retires une bille tu détruits l'objet en place et tu créé une nouvelle bille avec un état retiré avec son emplacement précédent.
    hum... C'est vraiment très louche. L'héritage doit être un enrichissement de responsabilité, pas juste une discrimination d'état : pour ce dernier point, il y a les valeurs des attributs (qui justement définissent ce qu'on appelle l'état de l'objet).

    L'idée de la classe abstraite est pas mal. Mais je l'appliquerai plutot sur le plateau :

    Mere (abstraite) : Plateau
    Fille 1 (concrete) : PlateauCroix
    Fille 2 (concrete) : PlateauOctogonal
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Oui c'est louche, mais l'exemple est simpliste alors bon il n'y pas trop de choix pour présenter des mécanismes objets comme une méthode polymorphe.

    De toute façon le but est de prouver que tu as compris, on s'en moque du fond. Sur cet exercice c'est la forme qui compte.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Points : 167
    Points
    167
    Par défaut
    @ Jimmy : Je penses que tu connais bien ce genre d'épreuve ^^.

    En effet le but ici est juste de montrer que l'on a comprit le principe et non de créer quelque chose qui est utile. Par exemple je pourrai faire un niveau de difficulté normal ou facile et si facile je démarre avec x billes en moins. Donc je pourrai faire une classe mère plateau et une classe fille débutant.

    Même si je suis d'accord avec le fait que la classe fille est censée apporter un complément d'information à la classe mère, je me vois mal trouver un projet qui m'intéresse à partir de contrainte ^^ surtout vue les délais, il vaut mieux avoir un projet qui m'intéresse pour passer 10-12 heures par jour dessus (ouai j'ai que ça à faire ^^).

    Mere (abstraite) : Plateau
    Fille 1 (concrete) : PlateauCroix
    Fille 2 (concrete) : PlateauOctogonal
    Hmm là je vois pas trop. Pour moi l'un comme l'autre vont me donner les mêmes informations et donc être présent dans plateau.

    J'ai déjà fait un Othello et mon plateau était un tableau à deux dimensions de la taille de mon plateau de jeu comme cela les coordonnées du plateau étaient = aux coordonnées du tableau et il me retournait soit rien, soit un pion blanc, soit un pion noir.

    Pensant faire la même chose ici, je ne vois pas comment utiliser les classes filles.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Oui j'ai eu la même chose à faire il y a très longtemps,
    J'avais fait une bataille navale, c'est ultra simple avec des bateaux différents.
    Tu as ta classe mère bateau. Et tes classes filles pour les différents types ...
    Et plein de méthodes polymorphes pour gérer les bateaux.

    Tu peux aussi faire un jeu d'echec sans IA qui se joue à deux, c'est pas si compliqué. Bref trouver un jeu avec des pions qui sont différent simplifie les choses.

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Shr3ck Voir le message
    Hmm là je vois pas trop. Pour moi l'un comme l'autre vont me donner les mêmes informations et donc être présent dans plateau.
    Je n'ai pas vraiment le temps de réfléchir au codage d'un solitaire, mais je vois les choses comme ca:

    La classe abstraite qui définit les responsabilités d'un plateau de jeu
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public abstract class Plateau {
    	// retourne le plateau sous forme d'un tableau 2D
    	// 0: case vide, 1: case occupée, -1:en dehors du plateau
    	abstract int[][] asArray();
     
    	// retourne l'occupation d'une case donnée
    	// 0: case vide, 1: case occupée, -1:en dehors du plateau
    	abstract int getCellValue(int x,int y);
     
    	// change la valeur d'occupation (0 ou 1) d'une case donnée
    	abstract void setCellValue(int x, int y, int value) throws Exception;
    }

    Et des classes filles, concrêtes, qui représentent des implémentations de plateaux (différentes tailles, formes, ...). Par exemple:

    Code java : 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
    public class PlateauStandard extends Plateau {
     
    	private int[][] cases = new int[7][7];
     
    	public PlateauStandard() {
    		for(int y=0;y<=6;y++) {
    			for(int x=0;x<=6;x++) {
    				if ( (x>=2 && x<=4) || (y>=2 && y<=4) ) 
    					cases[x][y]=1;
    				else 
    					cases[x][y]=-1;
    			}
    		}
    		cases[3][3]=0;
    	}
     
    	// renvoie true si la case est en dehors du plateau
    	private boolean isOutOfRange(int x, int y) {
    		if (x<0 || x>6 || y<0 || y>6) return true;
    		if (cases[x][y] == -1) return true;
    		return false;
    	}
     
    	int[][] asArray() {
    		return cases;
    	}
     
    	int getCellValue(int x,int y) {
    		if (isOutOfRange(x,y)) return -1;
    		return cases[x][y];
    	}
     
    	void setCellValue(int x, int y, int value) throws Exception {
    		if (isOutOfRange(x,y)) throw new Exception("invalid coords "+x+","+y);
    		if (value!=0 && value!=1) throw new Exception("invalid value : "+value);
    		cases[x][y] = value;
    	}
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Points : 167
    Points
    167
    Par défaut
    En fait à la place de mon Othello je voulais faire un jeu de dame mais gérer les déplacement ou plutôt les prises pour l'IA était assez gênant pour moi à l'époque car je n'avais jamais réalisé de programme de ce genre à l'époque.

    Sans oublié que je pensais que la "règle souffler n'est pas jouer" existait encore et donc sonder le plateau après chaque tour me semblait monstrueux. Maintenant je ne trouve plus de difficulté et en plus la règle n'existe plus d'après les règles officielles.

    Donc si c'est plus simple à réaliser avec mes conditions pourquoi, ça ne me dérangerai pas. Les échecs je n'y ai jamais joué, donc je me vois mal faire un jeu auquel je n'est pas joué dans ce délai.

    Edit :

    @ pseudocode :
    Hmmm vue comme cela c'est en effet pas bête du tout !

Discussions similaires

  1. Besoin d'aide pour projet ISN: jeu de plateau
    Par Stilishh dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 17/05/2014, 07h39
  2. Application pour championnat de jeu de plateau
    Par willnisko dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/03/2013, 07h53
  3. [Recrutement] Petit jeu de plateau pour portable
    Par Von Flex dans le forum Projets
    Réponses: 0
    Dernier message: 18/05/2010, 17h19
  4. Question de structure pour un jeu de type Bomberman
    Par FabaCoeur dans le forum Développement 2D, 3D et Jeux
    Réponses: 29
    Dernier message: 19/04/2007, 13h33
  5. Quel style de DirectX pour un jeu 2D ?
    Par delire8 dans le forum DirectX
    Réponses: 34
    Dernier message: 31/07/2003, 00h47

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