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();
}
}
}
...
} |
Partager