Skip to content

Commit

Permalink
Merge pull request #94 from ericdouglas/master
Browse files Browse the repository at this point in the history
Revisão cap.15 - o jogo
  • Loading branch information
ericdouglas committed Mar 12, 2015
2 parents deec144 + 84cff2b commit 6b5c10c
Showing 1 changed file with 60 additions and 60 deletions.
120 changes: 60 additions & 60 deletions chapters/15-projeto-plataforma-de-jogo.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ Nosso jogo será mais ou menos baseado em **Dark blue** por Thomas Palef. Eu esc

![Dark blue](../img/darkblue.png)

A caixa escura representa o jogador cuja a tarefa é coletar as caixas amarelas(moedas) evitando o material vermelho(lava). Um `Level` é concluído quando todas as moedas forem recolhidas.
A caixa escura representa o jogador, cuja a tarefa é coletar as caixas amarelas (moedas), evitando o material vermelho (lava). Um nível (*level*) é concluído quando todas as moedas forem recolhidas.

O jogador pode movimentar por aí com as setas do teclado para esquerda, para a direita ou pular com a seta para cima. `Jumping` é uma especialidade deste personagem do jogo. Ela pode atingir várias vezes sua própria altura e é capaz de mudar de direção em pleno ar. Isto pode não ser inteiramente realista mas ajuda a dar ao jogador a sensação de estar no controle do avatar na tela.
O jogador pode movimentar o personagem com as setas do teclado para a esquerda, para a direita, ou pular com a seta para cima. *Jumping* é uma especialidade deste personagem do jogo. Ela pode atingir várias vezes sua própria altura e é capaz de mudar de direção em pleno ar. Isto pode não ser inteiramente realista mas ajuda a dar ao jogador a sensação de estar no controle do avatar na tela.

O jogo consiste em um fundo fixo como uma grade e com os elementos que se deslocam sobreposto ao fundo. Cada campo na grade pode estar vazio, sólido ou ser uma lava. Os elementos móveis são os jogadores, moedas e alguns pedaços de lava. Ao contrário da simulação de vida artificial a partir do Capítulo 7 as posições destes elementos não são limitados a `grid` de suas coordenadas e pode ser fracionada; permitindo movimento suave.
O jogo consiste em um fundo fixo como uma grade e com os elementos que se deslocam, sobrepostos ao fundo. Cada campo na grade pode estar vazio, sólido ou ser uma lava. Os elementos móveis são os jogadores, moedas e alguns pedaços de lava. Ao contrário da simulação de vida artificial no Capítulo 7, as posições destes elementos não estão limitadas a grade - suas coordenadas podem ser fracionadas, permitindo movimentos suaves.

## A tecnologia

Expand All @@ -42,15 +42,15 @@ Um `Level` simples ficaria assim:

````js
var simpleLevelPlan = [
" ",
" ",
" x = x ",
" x o o x ",
" x @ xxxxx x ",
" xxxxx x ",
" x!!!!!!!!!!!!x ",
" xxxxxxxxxxxxxx ",
" "
" ",
" ",
" x = x ",
" x o o x ",
" x @ xxxxx x ",
" xxxxx x ",
" x!!!!!!!!!!!!x ",
" xxxxxxxxxxxxxx ",
" "
];
````

Expand All @@ -68,31 +68,31 @@ O construtor a seguir cria um objeto de `Level`. Seu argumento deve ser uma matr

````js
function Level(plan) {
this.width = plan[0].length;
this.height = plan.length;
this.grid = [];
this.actors = [];

for (var y = 0; y < this.height; y++) {
var line = plan[y], gridLine = [];
for (var x = 0; x < this.width; x++) {
var ch = line[x], fieldType = null;
var Actor = actorChars[ch];
if (Actor)
this.actors.push(new Actor(new Vector(x, y), ch));
else if (ch == "x")
fieldType = "wall";
else if (ch == "!")
fieldType = "lava";
gridLine.push(fieldType);
}
this.grid.push(gridLine);
}

this.player = this.actors.filter(function(actor) {
return actor.type == "player";
})[0];
this.status = this.finishDelay = null;
this.width = plan[0].length;
this.height = plan.length;
this.grid = [];
this.actors = [];

for (var y = 0; y < this.height; y++) {
var line = plan[y], gridLine = [];
for (var x = 0; x < this.width; x++) {
var ch = line[x], fieldType = null;
var Actor = actorChars[ch];
if (Actor)
this.actors.push(new Actor(new Vector(x, y), ch));
else if (ch == "x")
fieldType = "wall";
else if (ch == "!")
fieldType = "lava";
gridLine.push(fieldType);
}
this.grid.push(gridLine);
}

this.player = this.actors.filter(function(actor) {
return actor.type == "player";
})[0];
this.status = this.finishDelay = null;
}
````

Expand All @@ -106,7 +106,7 @@ Depois de construir a `grid` usaremos o método de filtro para encontrar o objet

````js
Level.prototype.isFinished = function() {
return this.status != null && this.finishDelay < 0;
return this.status != null && this.finishDelay < 0;
};
````

Expand All @@ -116,13 +116,13 @@ Para armazenar a posição e o tamanho de um ator vamos voltar para o nosso tipo

````js
function Vector(x, y) {
this.x = x; this.y = y;
this.x = x; this.y = y;
}
Vector.prototype.plus = function(other) {
return new Vector(this.x + other.x, this.y + other.y);
return new Vector(this.x + other.x, this.y + other.y);
};
Vector.prototype.times = function(factor) {
return new Vector(this.x * factor, this.y * factor);
return new Vector(this.x * factor, this.y * factor);
};
````

Expand All @@ -132,9 +132,9 @@ Na seção anterior o objeto `actorChars` foi usado pelo construtor `Level` para

````js
var actorChars = {
"@": Player,
"o": Coin,
"=": Lava, "|": Lava, "v": Lava
"@": Player,
"o": Coin,
"=": Lava, "|": Lava, "v": Lava
};
````

Expand All @@ -144,9 +144,9 @@ O tipo de jogador é construído da seguinte forma. A velocidade esta sendo arma

````js
function Player(pos) {
this.pos = pos.plus(new Vector(0, -0.5));
this.size = new Vector(0.8, 1.5);
this.speed = new Vector(0, 0);
this.pos = pos.plus(new Vector(0, -0.5));
this.size = new Vector(0.8, 1.5);
this.speed = new Vector(0, 0);
}
Player.prototype.type = "player";
````
Expand All @@ -157,16 +157,16 @@ Ao construir um objeto `Lava` dinâmicamente é preciso inicializar o objeto de

````js
function Lava(pos, ch) {
this.pos = pos;
this.size = new Vector(1, 1);
if (ch == "=") {
this.speed = new Vector(2, 0);
} else if (ch == "|") {
this.speed = new Vector(0, 2);
} else if (ch == "v") {
this.speed = new Vector(0, 3);
this.repeatPos = pos;
}
this.pos = pos;
this.size = new Vector(1, 1);
if (ch == "=") {
this.speed = new Vector(2, 0);
} else if (ch == "|") {
this.speed = new Vector(0, 2);
} else if (ch == "v") {
this.speed = new Vector(0, 3);
this.repeatPos = pos;
}
}
Lava.prototype.type = "lava";
````
Expand All @@ -176,9 +176,9 @@ Coin são atores simples. A maioria dos blocos simplesmente esperam em seus luga

````js
function Coin(pos) {
this.basePos = this.pos = pos.plus(new Vector(0.2, 0.1));
this.size = new Vector(0.6, 0.6);
this.wobble = Math.random() * Math.PI * 2;
this.basePos = this.pos = pos.plus(new Vector(0.2, 0.1));
this.size = new Vector(0.6, 0.6);
this.wobble = Math.random() * Math.PI * 2;
}
Coin.prototype.type = "coin";
````
Expand Down

0 comments on commit 6b5c10c

Please sign in to comment.