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

Développement 2D, 3D et Jeux Discussion :

Petit tetris en java


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Petit tetris en java
    Bonjour,

    j'espère être dans le bon forum.
    Donc je dois faire un petit jeu tout simple soit un petit tetris dans un frame (pas un applet) en usant swing (notamment). Soit le truc assez basique seulement je ne sais pas vraiment par où commencer.

    Deja comment afficher le canvas derrière a savoir la grille sur la quelle descendraient les pièces ??

    merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 398
    Points : 710
    Points
    710
    Par défaut
    Citation Envoyé par freeedom Voir le message
    Bonjour,

    j'espère être dans le bon forum.
    Donc je dois faire un petit jeu tout simple soit un petit tetris dans un frame (pas un applet) en usant swing (notamment). Soit le truc assez basique seulement je ne sais pas vraiment par où commencer.

    Deja comment afficher le canvas derrière a savoir la grille sur la quelle descendraient les pièces ??

    merci
    Slt,
    ben si tu fais dans le simple, tu peux avoir un tableau tout simple (21x7 je crois bien), avec un enum par exemple indiquant le type de chaque case (libre, occupee, ...)
    il te suffit alors de parcourir le tableau pour ensuite dessiner dans ton canvas les cases correspondantes
    tu peux definir des classes java pour chacune des pieces, et avoir dans ton jeu une piece courante qui tombe a lecran
    cette piece la, tu la dessines apres avoir dessine les pieces de ton tableau

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Si tu utilises Swing il va te falloir utiliser une JFrame et une classe héritant de JComponent en lieu et place d'une Frame et d'un Canvas qui sont des composants AWT
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par franck06 Voir le message
    Slt,
    ben si tu fais dans le simple, tu peux avoir un tableau tout simple (21x7 je crois bien), avec un enum par exemple indiquant le type de chaque case (libre, occupee, ...)
    il te suffit alors de parcourir le tableau pour ensuite dessiner dans ton canvas les cases correspondantes
    tu peux definir des classes java pour chacune des pieces, et avoir dans ton jeu une piece courante qui tombe a lecran
    cette piece la, tu la dessines apres avoir dessine les pieces de ton tableau
    La solution présentée est correcte, mais je vais la nuancer quand même.

    Tu as principalement 3 objets à gérer:
    1) le monde (Game)
    2) le tableau (GameBoard)
    3) la pièce (Shape).

    Le tableau est un tableau à 2 dimensions avec les méthodes suivantes:

    • boolean hasBlockInDirection(Point p,Direction d) -> vérifie si un bloc se trouve en position (p+vecteur(d)) (vecteur(d) associe un vecteur 2D à une direction; par exemple, à la direction "bas", on associe le vecteur (0,1); à la direction gauche, on associe (-1,0); etc).
    • boolean isLineComplete(y) -> vérifie si la ligne y est pleine
    • removeCompleteLines() -> supprime les lignes qui sont complètes.
    • void pinShape(Shape s, Point p) -> fixe la pièce s sur le point p.


    Il est plus heureux de stocker le tableau sous la forme d'une liste de lignes (List<BoardLine>) plutôt que sous la forme d'un tableau à 2 dimensions. Ca facilite d'autant l'écriture de certaines fonctions (notamment la vérification des complétion de lignes).

    La pièce a une représentation relativement simple; une fonction est plus importantes que les autres:
    • List<Point> getPoints() -> récupère la liste complète des points qui forme la pièce. Dans l'exemple précédent, { (0,0), (0,1), (0,2), (1,2) }. Il n'est pas nécessaire que cette liste soit ordonnée.


    Le monde a pour but de créer le plateau et les pièces, récupérer les entrées utilisateur, bouger les pièces sur la plateau en fonction de celles-ci, et mettre à jour le score du joueur.

    La fonction de mise à jour ressemble à ça:
    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
     
     
    class Game {
     
    ...
     
    public void updateBoard(GameTime time) {
      Shape shape = this.getCurrentShape();
      Point position = this.getCurrentShapePosition();
      Direction direction = Direction.NONE;
      bool canPin = false;
     
      if (input.hasMoved()) {
        // l'utilisateur est libre d'effectuer tous les mouvement 
        // (sauf vers le haut) tant que la pièce n'est pas fixée. 
        direction = input.getMoveDirection();
      } else if (this.checkMustMove(time)) {
        // si le système décide qu'on doit bouger la pièce vers le bas, alors
        // le mouvement risque de fixer la pièce si celle-ci ne peux pas bouger. 
        direction = Direction.DOWN;
        canPin = true;
      }
     
      // si rien ne se passe, on se fait une fleur: on ne fait rien :)
      if (direction == Direction.NONE) {
        return;
      }
     
      // on va tester si on a le droit de bouger la pièce dans cette position. 
      // si la pièce est en train de bouger vers la bas à l'initiative du système, 
      // et qu'il est impossible de la bouger, c'est qu'elle est bloquée par 
      // quelque chose. Dans ce cas, on la fixe sur le tableau. 
     
      List<Point> points = shape.getPoints();
      boolean canMove = true;
     
      for (Point p : points) {
        // si il y a un bloc adjacent à un des point de la pièce 
        // dans la direction du mouvement alors on ne peut pas aller
        // dans cette direction. 
        if (board.hasBlockInDirection(p, direction)) {
          canMove = false;
        }
      }
     
      if (canMove) {
        // nous avons le droit de bouger la pièce - on déplace la position 
        // courante en fonction de la direction.
        this.moveCurrentPosition(direction);
      } else if (canPin) {
        // pas le droit de bouger la pièce, et le système nous avertit qu'il faut
        // la fixer -> on la fixe sur le plateau.
        board.pinShape(shape, position); 
     
        // on gagne le nombre de points lié à la pièce (si le fait de 
        // poser une pièce fait gagner des points). 
        this.score(shape);
     
        // il n'y a plus de pièce en cours, il faut en construire une nouvelle
        this.buildNextShape();
     
        // on vérifie si des lignes sont complètes:
        int consecutiveLines = 0;
        for (int i=0; i<board.getLineCount(); ++i) {
          if (board.isLineComplete(i)) {
            linesToRemove.add(i);
            ++consecutiveLine;
            this.scoreLine();
            if (consecutiveLine == 4) {
              this.scoreTetris();
              consecutiveLine = 0;
            }
          } else {
            consecutiveLine = 0;
          }
        }
     
        // allez, on efface les lignes complètes :)
        board.removeCompleteLines();
     
        // on vérifie aussi si le plateau est plein
        if (board.isFull()) {
          this.gameOver();
        }
      }
    }
     
    ...
     
    }
    A vous de remplir les blancs
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Un petit cryptage avec java et C#
    Par Nechtan dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 19/03/2009, 15h47
  2. petit programme en java = gros souci de programmation
    Par axelandre dans le forum Langage
    Réponses: 1
    Dernier message: 14/11/2007, 08h11
  3. Petit jeu en java
    Par Seth77 dans le forum 2D
    Réponses: 80
    Dernier message: 08/01/2006, 23h01

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