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

Langage PHP Discussion :

[POO] Méthode de choix de la classe


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut [POO] Méthode de choix de la classe
    Bonjour à tous,

    Alors, c'est une question plutôt généraliste, mais qui va tourner sur PHP5 et le web en général. Donc j'le poste là.

    Comment sait-on quand on doit faire de quelque chose un "objet" ?

    Par exemple, je programme un jeu depuis 2ans.
    Au départ, je faisais dans le purement procédural... j'en suis venu à la POO.

    Pour mon jeu, par exemple, j'ai une classe pour la gestion des personnages, une classe pour la gestion des "joueurs", une classe pour ma gestion de bdd, une classe pour la messagerie, les news, les sorts magiques....

    Mais j'me dis que c'est pas "optimal"
    - est-ce que j'ai fais des classes pour des choses qui ne devraient pas l'être
    - est ce que j'aurais pas fait des classes trop grosses (certaine dépassent les 1500 lignes)

    Alors, j'voulais savoir comment vous vous déterminez quand quelque chose doit être un "objet".

    Par exemple, pour l'inscription au jeu :
    Devrais-je avoir une classe "comptejoueur" avec des méthodes genre
    ->AjouterCompte()
    ->SupprimerCompte

    ou alors, est-ce que vous appelez votre classe de gestion SQL qui fait dans le script d'inscription la requête "INSERT..." ?

    J'ai l'impression que j'ne fais pas encore de l'objet à 100%.... et j'ai beau lire des cours, voir des codes, j'me dis "est-ce que j'suis vraiment dans l'truc, ou à l'ouest"?

    Alors par exemple, voici mon script d'inscription (j'vous mets pas les classes... appelés, ça serait vraiment trop long). Que pourrait-on y faire ?

    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
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
     
    <?php
    /*
    Fichier : inscription.php
    Date : 04/06/2007 00:01:36
    Description :
      - fichier d'inscription
    ----------
    
    */
     
    /******************************************************/
    /***** Anti-hacking / Insclusion / Instanciations *****/
    /******************************************************/
     
    define('INC_OK',true); 
     
    //les inclusions
    require("libs/template.class.php");
    require("libs/drsql.class.php");
    require("libs/Joueur.class.php");
    require("libs/config.inc.php");
     
    //instanciation des objets
    $TPL = new template();
    $DB = new DrSql($host,$user,$pass,$bdd);
    $Joueur = new Joueur($DB,$TPL);
     
    /*************************/
    /***** les variables *****/
    /*************************/
     
    $message_error = NULL;
    $Affichage = false;
    $titrePage = 'Page d\'Inscription sur le jeu Pen Arvin';
     
    /*****************/
    /***** DEBUT *****/
    /*****************/
     
    /*******************************/
    /***** actions de sessions *****/
    /*******************************/
     
    $Joueur->EtrePageSecurisee(false);
     
    //j'assigne le nom de la page
    $TPL->assign('titrePage',$titrePage);
    //j'assigne mon footer
    $TPL->assign('version',$version);
     
    /***************************/
    /***** Traitement POST *****/
    /***************************/
     
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {
      extract($_POST);
      if (isset($mail) && isset($pwd) && isset($c_pwd))
      {
        if (!empty($mail) && !empty($pwd) && !empty($c_pwd))
        {
          $form = true;
     
          if ($pwd != $c_pwd)
          {
            $message_error .= 'Vos mots de passes ne sont pas les mêmes<br />';   
            $form = false;
        }
     
        if ($form == true)
        {
          if ($Joueur->EtreMailValide($mail))
            $form=true;
          else
          {
          $form = false;
          $message_error .= 'cette adresse mail n\'est valide.<br />';
          }
        }
     
        if ($form == true)
        {
          //compte existant ?
          $Requete = $DB->query("SELECT * FROM CompteJoueur WHERE CJ_Mail='{$mail}'");
          if($Requete->num_rows <= 0 )
          {
            //non : insertion
            $DB->query("INSERT INTO CompteJoueur VALUES ('','{$mail}','".md5($pwd)."','0','".$Joueur->DonnerIp()."')");
     
            //envoi d'un email             
            $from_email = "rwkpocketjedi@hotmail.com";   
            $entetedate = date("D, j M Y H:i:s -0600"); // avec offset horaire   
            $entetemail = "From: $from_email \n"; // Adresse expéditeur  
            $entetemail .= "Cc: \n";  
            $entetemail .= "Bcc: \n"; // Copies cachées   
            $entetemail .= "Reply-To: $from_email \n"; // Adresse de retour   
            $entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
            $entetemail .= "Date: $entetedate"; 
     
            $texte ='Bonjour, vous venez de vous enregistrer sur Pen Arvin avec l\'adresse e-mail suivante '.$mail.'
                     Veuillez confirmer votre inscription en cliquant sur le lien suivant :
                     '.$adresseSite.'valid.php
    
                     Ne répondez pas à cet e-mail.
                     Bon jeu.
                     ';
     
            if($mailEnvoi)
              mail(
                $mail,
                'Insciption sur Pen Arvin',
                $texte,
                $entetemail
              );
            else
              $contenu .=  '<p>Pour valider votre compte, <a href="valid.php">CLIQUEZ ICI</a></p>';
     
            $contenu .= '<p>Votre inscription est un succès.</p>';
     
            //assignation
            $TPL->assign(
                    array(
                      'form' => true,
                      'message_error' => NULL,
                      'mail' => NULL,
                      'contenu' => $contenu
                    )
            );
     
            //affichage page
            $TPL->parse('inscription.tpl');
     
          }
          else
          {//oui : compte existant
              $message_error .= 'Ce compte existe déjà. Veuillez utiliser une autre adresse mail<br />';
              $form = false;
          }
        }
      }
      else
      {
        $message_error .= 'Veuillez remplir tous les champs<br />';
        $form = false;
      }
    }
    }
     
    /*********************************/
    /***** Gestion post/pré POST *****/
    /*********************************/
     
    if ($Affichage == false)
    {
      if(empty($message_error))
      {
        //page invoquée pour la 1ere fois 
        $TPL->assign(
                array(
                  'form' => false,
                  'message_error' => NULL,
                  'mail' => NULL,
                  'contenu' => NULL
                )
        );
      }
      else
      {
        //page invoquée suite a une erreur
        $TPL->assign(
                array(
                  'form' => false,
                  'message_error' => $message_error,
                  'mail' => $mail,
                  'contenu' => NULL
                )
        );
      }
      //affichage
      $TPL->parse('inscription.tpl');
    }
     
    /***************/
    /***** FIN *****/
    /***************/
    ?>

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 354
    Points : 15 700
    Points
    15 700
    Par défaut
    Citation Envoyé par Lost In Translation Voir le message
    J'ai l'impression que j'ne fais pas encore de l'objet à 100%....
    personne ne fait de l'objet à 100 % c'est pour ça qu'on appelle ça de la Programmation Orienté Objet et non de la Programmation Objet

    la POO est juste une façon de présenter le code pour en faciliter la maintenance, pour éviter d'avoir du code en double, etc.

    Personnellement je pense que c'est avec l'expérience que tu apprendras à organiser tes classes de mieux en mieux. Si tu as des questions sur un point précis d'un bout de code, tu peux toujours venir sur le forum mais tout ce que les autres développeurs pourront t'apporter ce sont des conseils que tu devras adapter et appliquer à ta propre façon de créer des classes

  3. #3
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Bah par exemple :

    Les instructions SQL genre requete, vaut il mieux créer une méthode spécifique... du genre, CreerCompte / SupprimerCompte, CreerPersonnage / SupprimerPersonnage ou alors les utiliser quand on en a besoin...

    En gros

    blabla
    $Objet->CreerCompte();


    OU

    Blabla
    //je créé mon compte
    $Db->query("INSERT...");

    Pour commencer en terme de conseil ça peut m'aider.

    Quand je code, j'ai :
    1- fichier de template (que du JS/HTML)
    2- fichier php avec les instructions (appels de classes, instructions)
    3- fichier de classes

    Ca se rapproche plus ou moins du MVC. En gros j'veux savoir si la totalité de mes requetes doit plutôt se trouver dans les classes ou alors, on s'en fout et si ça se trouve dans le "script d'appel"... et bah c'est pas grave ^^

  4. #4
    mon_nom_est_personne
    Invité(e)
    Par défaut
    concernant ta derniere question je te recommanderais la chose suivante

    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
     
    class db
    {
    private $dbConn;
     
    public function __construc()
    {
    //cree ta connection etc... et on va suppose que ta connection est stockee dans la variable $dbConn
     
    $this->dbConn = connection a ta base de donnee;
    }
     
    public function CreerCompte()
    {
    //ca depend de ce que ta utilise pour effectuer ta connection , on va supose que c'est un objet de type pdo
    $this->dbConn->query('insert.....');
    }
    }
     
     
    $db = new db();
    $db->CreerCompte();
    c'est une facon de faire, mais si comme moi t'es un vrai feign... dev qui aime la poo des requetes de type 'INSERT INTO table(champ1, etc..) VALUES(vasleur1, etc..) WHERE condition1 AND condition2 etc..' tu vas en ecrire des milliers donc pk pas faire une requete a troux (attention cette methode est a gros risque d'injection sql donc penser aussi a assainnir la requete mais j'eluderais la question pour un souci de generalite).

    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
     
    class db
    {
    private $dbConn;
     
    public function __construc()
    {
    //cree ta connection etc... et on va suppose que ta connection est stockee dans la variable $dbConn
     
    $this->dbConn = connection a ta base de donnee;
    }
     
    //conditionSimple est une variable non obligatoire car on peu inserer sans condition et un champ de type string pour les trucs en tout genre de type ON DUPLICATE KEY UPDATE etc...
     
    public function insert($tableName, array $fieldName, array $newValues, array $conditionSimple = array(), $options = '')
    {
    // on va dire que c'est une function qui retourne un tableau associatif dont les indexs sont les noms des variables
    $listOfVar = $this->sanitize(func_get_args());
    $insertSql = "INSERT INTO ".$listOfVar['tableName'];
    $insertSql .= "(";
    foreach($listOfVar['fieldName'] as $field)
    {
      $insertSql .= $field.", ";
    }
    //retir la derniere virgule qui sert a rien
    rtrim($insertSql, ',');
    $insertSql .= ") VALUES (";
    foreach($listOfVar['fieldName'] as $field)
    {
      $insertSql .= $field.", ";
    }
    foreach($listOfVar['newValues'] as $val)
    {
      $insertSql .= $val.", ";
    }
    rtrim($insertSql, ',');
    $insertSql .= ")";
     
    // pour les where c'est le meme que precedant sauf que t'au un if avant pour voir si c'est null ou pas 
     
    ....
     
    $inserSql .= $listOfVar['option'];
     
    $dbConn->query($insertSql);
    }
     
    protected function sanitize(array $arg)
    {
    // assainit les arguments
    return array("arg1" => valeur1, etc...);
    }
    }
     
    $truc = new db();
    $truc->insert('table', array('champ1','champ2'),array(15,'papa'),array('champ2 in (papa, maman)'));
    Ca a l'air gros etc... mais c'est pedagogique, et n'ecoute pas les gens qui vont te dire que superMeilleurFramwork2000 le fait deja, car la seul chose que tu vas apprendre c'est utilise superMeilleurFramwork2000 et le jour ou pour x raison t'auras un truc a faire a la main tu sauras pas ce qui se passe derriere.

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Pas d'accord avec mon_nom_est_personne (comme quoi les facons de faire ^^ ).

    Pourquoi mettre des méthodes qui concerne les utilisateurs dans une classe qui concerne sql ?

    Pour généraliser c'est comme si tu faisais
    $voiture->laver() // Depuis quand une voiture peut elle se laver seule ?
    au lieu de $elephantbleu->laver($voiture).

    Bref, perso je préfère faire une classe utilisateur par exemple dans laquelle se trouverons les méthodes ajouter / supprimer / editer ....

    L'avantage par rapport au requête directement dans le code , c'est que tu auras une seule requête dans ta classe pour peut être plusieurs utilisations.
    Du coup si tu viens a modifier ta base par exemple , tu auras juste une modif à faire dans ta classe et c'est tout.

  6. #6
    mon_nom_est_personne
    Invité(e)
    Par défaut
    si tu veux tu peu l'appeller insertMoiUnUtilisateur ($db->insertMoiUnUtilisateur)
    Bref ca c'est de la nomenclature. le truc c'est que cette methode ne fait que traiter de la requete sql et p-e formater le resultat. Je suis d'accord que si cette methode commence a envoyer des email etc... c'est un gros erreur de conception. Ici elle fait qu'executer une requete

  7. #7
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Aune époque, c'est c'que je faisais : toutes les requetes dans la classe SQL...
    Le soucis, c'ets que sur une appli comme un jeu, tu te retrouves avec 300 ou 400 requetes différentes...

    C'est un bordel total...

    Bref, perso je préfère faire une classe utilisateur par exemple dans laquelle se trouverons les méthodes ajouter / supprimer / editer ....
    C'est aussi c'que j'voudrais faire, mais j'me dis ... mais quitte à le faire bien, ne faut-il pas faire tout avec des setMachin, getMachin ?

    Partons sur un truc un peu "rapide" du genre (en gros, j'considère qu'un utilisateur, c'est un mot de passe et un mail

    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
     
    class Utilisateur
    {
      private $mail;
      private $mdp;
      private $compteId;
     
      public function __construct($db, $id = false)
      {
        $this->db = $db;
     
        if($id)
         {
           $InfosCompte = getInfos(blblabla);
         }
      }
     
      public function setMail($email)
      {
        if(isMail($email))
          $this->mail = $email;
      }
     
      public function getMail()
      {
        if(isset($this->mail) && !empty($this->mail))
          return $this->mail;
      }
     
      //pareil avec mdp
     
    //on part du principe qu'on set les variables dans le script genre $mail = setMail($_POST['newmail']) comme ça on a rien à transmettre aux méthodes
     
     
      public function CreerCompte()
      {
        $this->db->query("insert...{$this->mail},{$this->mdp}"); //écrit à l'arrache
      }
     
      public function ModifierCompte()
      {
        $this->db->query("update...{$this->mail},{$this->mdp}"); //écrit à l'arrache
      }
     
      public function SupprimerCompte()
      {
        $this->....
      }
     
    }
    Est-ce que c'est ça réellement de faire de l'orienté objet, c'est à dire faire des setTruc, getMachin...

    Parce qu'en fait, dans mon jeu, (et je suis persuadé que même si ça marche, même si c'est super facile à modifier), j'ai l'impression de coder n'importe comment...

    genre, j'ai une classe personnage...
    Dans laquelle on va aussi bien trouver...
    -> comment lancer un sort
    -> comment générer la carte
    -> toutes les compétences

    Par exemple, j'ai une 30 aine de compétences.
    Dois-je faire une classe par compétence, ou une méthode dans ma classe personnage (c'est ce que j'ai fais, c'pour ça qu'on arrive à +2000 lignes)...

    du genre...
    Voler extends Personnage...

    Mais sauf que le constructeur du personnage autant j'le vois... mais une compétence n'a pas du tout les mêmes arguments. Une compétence c'est : un id, une description, une action à coder en dur...

    un personnage, c'est bah des caracs, une identité, des méthodes pour bouger, manger...

    Alors dois-je en fait faire une classe compétence et une classe fille pour chaque compétence ?

    Est-ce que la génération d'une carte (prenez un damier d'échec) est quelque chose qui appartient au personnage ou alors... c'est un autre objet ?

  8. #8
    mon_nom_est_personne
    Invité(e)
    Par défaut
    Pour la question des getter/setter c'est juste une pratique "securite" car si tu met directement un valeur dans une variable tu la controle pas alors que passe par une methode te permet de mettre du code de controle.
    Pour ton personnage, on va faire les assamptions suivante:
    - un personnage a un nom, un job ,des caracteristiques (force, magie etc..) et s'est lie a un joueur.
    tu auras bien une classe personnages qui ressemble a ca.
    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
     
    class personnage
    {
         public $nom;
         public $force;
         public $magie;
         private $uid;
         public $job;
     
         public function __construct($usr_id,$char_nom,$char_f, $char_m, $job_nom)
         {
              $this->uid = $usr_id;
              $this->force = $char_f;
              $this->magie = $char_m;
              $this->job = new $job_nom;
          }
     
    }
    Donc on a la un personnage generique. Maintenant on va lui mettre un job.
    Un job c'est quoi au final ? un enssemble de capacite variable en fonction des jobs. On va dire que cependant tout les job on un abilite commune de soin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    abstract class job
    {
        public function soin(personnage $perso)
        {
             $perso->vie = $perso->vie+(50*$perso->magie);
         }
    }
    donc on va prendre l'exemple d'un magicien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class magicien extends job
    {
       public function __construct(){}
       public function feu(){}
       public function glace(){}
    }
    A partir de la tu sais genere un magicien.
    en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new personnage(123,"merlin", 0,300,"magicien");
    Et la on arrive enfin a ta question sur les login. Au final le joueur, tu t'en temponne un peu car un fois loge, il devien le beau et puissant merlin. Et la tu va voir qu'un simple user case diagram (desole je sais pas le dire en francais ) va t'aider :
    - l'utilisateur entre sont login/mdp
    - si le login/mdp est bon alors tu charge sont perso sinon tu reste a l'ecran de login et tu ecrit un message d'erreur.

    Donc au final tu vas pas creer meme une classe login ca sert a rien car au final tu va faire quoi, recup des info dans la bdd affecter un perso etc..
    Il serait plus malin d'avoir une classe "structure de controle" dans laquel tu as les methode peripherique au jeu non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class control
    {
      private $uid;
     
      public function __construct(){}
      public function checkLogin(){// is tout tes select et machin}
      public function affectPerso(){ 
         //ici tu aura p-e encore une connection a la bdd pour les info ou alors lors du login , c'est a toi de voir
         new personnage(123,"merlin", 0,300,"magicien");}
      public function logout(){}
    }
    ok notre utilisateur s'est loge, il a retrouver son perso super. maintenant on va le faire bouger. ton perso au final c'est quoi, c'est un sprite. donc pnj ou pj vont faire les meme choses, bouger, avoir un graphique etc..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    abstract class sprite
    {
       public $graphic;
       public $position = array('x' =>0, 'y' => 0);
       public function up(){
            $this->position['x'] ++;
       }
       public function display(){// on va imprimer a l'ecran le graphique a la bonne position}
    }
    Donc ta classe personnage va changer pour devenir :
    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
     
    class personnage extends sprite
    {
         public $nom;
         public $force;
         public $magie;
         private $uid;
         public $job;
     
         public function __construct($usr_id,$char_nom,$char_f, $char_m, $job_nom)
         {
              $this->uid = $usr_id;
              $this->force = $char_f;
              $this->magie = $char_m;
              $this->job = new $job_nom;
          }
     
    }
    comme le graphique depend du job la classe job va avoir une methode set graphique.

    Donc voila un peu comment tu log un utilisateur et le fait jouer pour les maps faut avoir un peu plus de recul. Tu auras un premier cadre jeu qui contiens tout les activite de controle, en suite un cadre niveau qui lui va contenir la map, les persos, les monstres etc...

    J'avais lu un super article dans la section jeux video ici meme avec un jolie diagramme qui explique les grande ligne de la structure d'un jeu.
    J'espere que ca pourras t'aider.

Discussions similaires

  1. [Débutant] [POO] Définition de Méthodes au sein d'une classe Objet
    Par ghada97 dans le forum MATLAB
    Réponses: 7
    Dernier message: 29/11/2013, 18h31
  2. Choix d'une classe pour appel de méthodes statiques
    Par Antwan76ers dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 05/07/2012, 10h55
  3. [POO] utiliser une méthode présente dans une autre classe
    Par arnaudperfect dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2007, 14h23
  4. Réponses: 4
    Dernier message: 17/03/2007, 01h06
  5. Réponses: 3
    Dernier message: 16/04/2004, 16h51

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