Vous êtes sur la page 1sur 5

Peas e partes: Tetris tem vrios componentes que podem ser expressas como objetos Java: - As peas de Tetris

- O tabuleiro de Tetris que detm as peas - O jogo que controla as peas no tabuleiro, conseguir marcar pontos, e assim por diante. As peas: Classe TetrisPeca Os elementos-chave de uma pea de Tetris Cada Cada Cada Cada pea composta por exatamente quatro blocos. bloco da pea tem um (x, y) de coordenadas no tabuleiro de Tetris. pea tem um elemento de rotao de 0, 2 ou 4. pea pode ser uma forma de L, J, S, O, I, Z, ou T.

Quatro elementos so necessrios para cada pea de Tetris: blocos, um (x, y) de coord enadas, um fator de rotao, e sua forma. - bloco central para cada pea - guardar os seus (x, y) de posio blocos relativos em torno de uma pea central - armazenar o resto dos blocos no tabuleiro como coordenadas relativas sua volta .( blocos relativos em torno de uma pea central) O ponto central armazenado como um java.awt.Point e as coordenadas relativas em um java.awt.Point matriz. Para tornar mais fcil para coordenar os clculos. -----------------------------------------------------------------------------------------------------------------------------------Peas de giro Usando manipulao de matrizes simples voc pode girar uma pea em 90 graus no sentido h orrio, basta trocar a coordenada y, com a coordenada x. Desde que estejamos usando coordenadas relativas em torno de um ponto central, podemos fazer o mesmo aqui: temp = x, x =-y, y = tem p; Voc tambm pode girar uma pea em 90 graus sentido anti-horrio , aplicando trs rotaes sentido horrio. Nem todas as peas tm a mesma quantidade de fator de rotao, de modo algum controle ter de ser implement ada no mtodo de rotao para compensar isso. ------------------------------------------------------------------------------------------------------------------------------------Me d uma peca A classe TetrisPea representa todos os tipos de peas, precisamos distinguir elas. Para isso, usamos constantes para representar os diferentes tipos e tem uma varivel local para arma zenar parte do tipo. Exemplo de uma das constantes:

public static final int L_PIECE = 0; ------------------------------------------------------------------------------------------------------------------------------------Movendo peas Para mover as peas no tabuleiro, precisamos fornecer um mtodo de movimento que nos permite fazer isso. Assim, a partir do construtor de TetrisPeca ter dois parmetros: o primeiro o tipo de pea criada, e uma segunda referncia para board (TetrisTabuleiro) . No construtor tambm chamado um mtodo de ut ilidade privada denominada initalizeBlocks(), que ir definir os valores das peas em relao as coordenadas para o tipo de pea em questo. A queda desta pea significa que a pea ser imediatamente suspensa a sua posio mais bai xa no tabuleiro. Para isso esxiste um tempo de loop que vai continuar se movendo para baixo at que a pea no possa move r-se adiante. A pea ser colocada nessa posio. Para diferenciar os vrios movimentos que podem ser aplicadas a uma pea, vamos usar algumas constantes, conforme mostrado no exemplo a seguir: public static final int ESQUERD A = 10; O willFit () mtodo para verificar se uma pea se encaixa implementado na classe Te trisTabuleiro. --------------------------------------------------------------------------------------------------------------------------------Finalizando - TetrisPea Finalmente, para encerrar a classe TetrisPeca temos getters e setters para algum as variveis como o ponto central e as coordenadas relativas, e um mtodo esttico chamado getRandomPiece () que retornar um a instncia de TetrisPeca do tipo aleatrio. ---------------------------------------------------------------------------------------------------------------------------------O Tabuleiro de Tetris: Classe TetrisTabuleiro Um tabuleiro de Tetris uma grade/plataforma 2D contendo blocos vazios e blocos c oloridos. Devido aos diversos tipos de peas de Tetris so diferenciados constantes, tudo o que precisou ser feito foi definir um valor para um bloco vazio e armazenar o tabuleiro como uma matriz inteira 2D. Usando essa abordagem, um bl oco vazio no tabuleiro ser representado por: public static final int EMPTY_BLOCK = -1; O construtor aceita dois ints que representam o nmero de linhas e colunas. Ela ir ento chamar um () mtodo resetBoard () que ser o padro de todos os valores na matriz 2D para o bloco vazio. ----------------------------------------------------------------------------------------------------------------------------------Adio e remoo de peas

As peas so adicionados e removidos do tabuleiro, mtodos addPiece () e removePiece ( ). O addPiece () funciona toma um TetrisPea () e defini os valores de todas as posies no tabuleiro que ocupa de seu t ipo. O removePiece () semelhante, exceto os valores de tabuleiro so definidas ao bloco vazio. ---------------------------------------------------------------------------------------------------------------------------------Eventos Notificao de usurios Para manter os usurios atualizados quando acontece alguma coisa na placa, um Boar dEvent ser acionado quando as peas so adicionados ou movidos. Precisamos de uma interface TabuleiroListener, para ouvi r esse evento, boardChange () chamado quando o evento disparado. Esses eventos so usados para ser notificado qu ando a tela precisa ser atualizada. Para armazenar os ouvintes, foi usado java.util.Vector e mtodos para adicionare remover os ouvintes disparando eventos. Neste caso, um evento s solicitado quando a pea atinge o fundo. Para isso foi cria do o mtodo addPiece() para que ele receba um parmetro booleano, que far com que os eventos sejam acionado somente se o valor verdadeiro. ----------------------------------------------------------------------------------------------------------------------------------Removendo linhas completadas Um fator importante no jogo de Tetris que quando uma linha completada ele desapa rece e todas as linhas acima, suspensas. Para fazer isso, foi proporcionado um mtodo RemoveRow (), que aceita o ndice da li nha para remover como um parmetro. Aps a linha tenha sido removido, um TabuleiroEvento despedido. ---------------------------------------------------------------------------------------------------------------------------------Finalizando TetrisTabuleiro Alm dos getters e setters necessrios para acessar variveis privadas, precisamos de mais um mtodo: willFit(). Este mtodo leva TetrisPeca como um parmetro e retorna um valor booleano para determinar se a pea s e encaixa neste no tabuleiro. Verifica se os limites do tabuleiro e os blocos no tabuleiro correspondente ao local cabem onde a pea vai estar. ---------------------------------------------------------------------------------------------------------------------------------O modelo de jogo Tetris: Classe TetrisJogo Criou-se as duas classes principais utilizados em um jogo de Tetris. Agora s jun tar com um pouco de lgica do jogo. -----------------------------------------------------------------------------------------------------------------------------A classe GameThread Classe interna que estende java.lang.Thread. Uma vantagem que podemos adicionar velocidade na thread para controlar o jogo.

A lgica implementado dentro de um tempo,loop, dentro do mtodo run (). O loop conti nuar a criar peas e deix-los dentro do tabuleiro at que no caiba mais peas. Neste ponto, uma varivel boolean loca l chamado fPlaying ser definido como false, encerrando o ciclo e disparar JogoEvento para indicar o final do jogo. Dentro d o tempo um loop verifica o valor do boolean fPaused. Se true, o loop continuar funcionando, mas todo o jogo e a lgica sero ignorados. Qu ando o boolean alterado para false, o jogo continuar. Quando uma pea cai em um momento, temos que criar uma varivel fCurrPiece que ir armazenar uma referncia a ele. Se esta varivel for definida como nula, isso significa que a pea anterior no pode d escer e foi deixado em sua posio final sobre o tabuleiro e dar um sleep no segmento para um determinado perodo de temp o. Para determinar vrias linhas ao mesmo tempo guardado uma contagem das linhas conc ludas e um incremento de pontuao, respectivamente. Quanto mais linhas forem concludas as peas caem mais rpido . classe interna EventHandler: carga de eventos disparados que por sua vez, exigir ouvintes a serem armazenados. --------------------------------------------------------------------------------------------------------------------------------A classe interna EventHandler Esta classe ir armazenar referncias para os ouvintes que esto interessados nos even tos. Alm de fornecer adicionar e remover os mtodos para os ouvintes, tambm haver mtodos de utilidade para disparar os eventos . Essa classe cuida dos seguintes tipos de eventos: - JogoEvento, acionado sempre que um jogo iniciado ou parado. Tem um valor para indicar um jogo START ou END. - TabuleiroEvento, acionado sempre que alguma coisa mudou no Tabuleiro. - PontuaoEvento, acionado sempre que a mudanas de pontuao. ----------------------------------------------------------------------------------------------------------------------------------Finalizando TetrisJogo Neste construtor vamos criar uma instncia da classe EventHandler e uma instncia d a classe TetrisTabuleiro. A classe TetrisTabuleiro ter um tamanho padro de 10x20. O mtodo startGame () ir repo r todas as variveis do jogo tanto PontuaoEvento (zero) e um JogoEvento (com um tipo de parmetro START). Tambm ir criar e lanar um GameThread. O mtodo StopGame () ir alterar a varivel fPlaying para falso, fazendo com que o jogo pare. Para alm de todos os getters e setters necessrios, h apenas mais um mtodo para imple mentar, que o mtodo move (). Este mtodo tem como parmetro a direo do movimento, que uma constante da classe Tetri sPeca. Supondo que um jogo est em jogo e no parou, o move () tenta fazer a jogada. Se o movimento uma solicitao de c air e se no for bem sucedida, ento fCurrPeca definida como nula e a pea deixado em sua posio atual. O GameThread

uida ento de criar uma pea nova para ns. Interface grfica. Esta uma classe muito simples que usa uma classe interna para d esenhar o tabuleiro Tetris e contm uma lgica de coordenao das teclas. A interface grfica em si exibido em um javax.swing.JFrame, embora possa ser uma alternativa . ---------------------------------------------------------------------------------------------------------------------------------Interface JogoListener public interface JogoListener Esta interface permite que um objeto escute JogoEvento, que so gerados por Tetris Jogo Toda vez que um jogo iniciado ou parado. ------Interface TabuleiroListener public interface TabuleiroListener Esta interface permite que um objeto escute TabuleiroEvento, que so gerados por u m TetrisJogo Toda vez que a mudanas no tabuleiro. ------Interface PontuacaoListener public interface PontuacaoListener Esta interface permite que um objeto escute PontuacaoEvento, que so gerados por T etrisJogo Toda vez que seu valor muda pontuao.

Vous aimerez peut-être aussi