La Red de Conocimientos Pedagógicos - Currículum vitae - tetris java

tetris java

importar java.awt.*;

importar java.awt.event.*;

//clase Tetris

clase pública Mytest extiende Frame{

público estático booleano isPlay=false;

público estático int nivel=1, puntuación=0

público estático TextField ScoreField, LevelField;

temporizador MyTimer estático público;

GameCanvas gameScr;

public static void main(String[] argus){

Mytesters = new Mytest("Juego de Tetris");

WindowListener win_listener = new WinListener();

ers.addWindowListener(win_listener);

}

p>

//Método de construcción de la clase Tetris

Mytest(String title){

super(title);

setSize(600, 480 )

setLayout(new GridLayout(1, 2));

gameScr = new GameCanvas();

gameScr.addKeyListener(gameScr); >

p>

temporizador = nuevo MyTimer(gameScr);

timer.setDaemon(true

timer.start(); > timer.suspend ();

add(gameScr);

Panel rightScr = nuevo Panel();

rightScr.setLayout(new GridLayout(2, 1, 0, 30));

rightScr.setSize(120, 500);

add(rightScr);

//Diseño de la información correcta. formulario

MyPanel infoScr = new MyPanel();

infoScr.setLayout(new GridLayout(4, 1, 0, 5)); (120, 300 );

rightScr.add(infoScr);

//Definir etiqueta y valor inicial

Puntuación de etiquetap = new Etiqueta("Puntuación: ", Etiqueta. IZQUIERDA);

Nivel de etiquetap = nueva Etiqueta("Nivel:", Etiqueta.LEFT);

puntajeField = nuevo Campo de texto(8);

camponivel=nuevo

TextField(8);

coreField.setEditable(false);

levelField.setEditable(false);

infoScr.add(puntuación); >

infoScr.add(scoreField);

infoScr.add(levelp);

infoScr.add(levelField);

scorep.setSize( nueva Dimensión(20,60));

scoreField.setSize(nueva Dimensión(20,60));

levelp.setSize(nueva Dimensión(20,60));

levelField.setSize(nueva dimensión(20, 60));

scoreField.setText("0");

levelField.setText("1") ;

//Diseño del formulario del botón de control derecho

MyPanel controlScr = new MyPanel();

controlScr.setLayout(new GridLayout(5, 1, 0, 5));

rightScr.add(controlScr);

//Definir botón de reproducción

Botón play_b = new Botón("Iniciar juego") ;

play_b.setSize(new Dimension(50, 200));

play_b.addActionListener(new Command(Command.button_play, gameScr)); //Definir botón Nivel ARRIBA

Botón nivel_up_b = nuevo Botón("Aumentar nivel");

nivel_up_b.setSize(nueva Dimensión(50, 200));

level_up_b.addActionListener(new Command(Command.button_levelup, gameScr));

//Definir botón Nivel hacia abajo

Botón level_down_b =new Botón("Nivel inferior") ;

level_down_b.setSize(new Dimension(50, 200));

level_down_b.addActionListener(new Command(Command.button_leveldown, gameScr)); Definir botón Nivel Pausa

Botón pausa_b =nuevo Botón("Pausa del juego");

pausa_b.setSize(nueva Dimensión(50, 200));

pausa_b.addActionListener (nuevo comando (C

ommand.button_pause, gameScr));

//Definir botón Salir

Botón quit_b = new Botón("Salir del juego");

quit_b.setSize( nueva Dimensión(50, 200));

quit_b.addActionListener(new Command(Command.button_quit, gameScr));

controlScr.add(play_b); p> controlScr.add(level_up_b);

controlScr.add(level_down_b);

controlScr.add(pause_b);

controlScr.add(quit_b); ;

setVisible(true);

gameScr.requestFocus();

}

}

/ /Reescribe la clase MyPanel para dejar espacio alrededor del Panel

clase MyPanel extends Panel{

public Insets getInsets(){

return new Insets(30, 50 , 30, 50);

}

}

//Clase de lienzo de juego

clase GameCanvas extiende Canvas implementa KeyListener{< / p>

final int unitSize = 30; //Longitud del lado del cuadrado pequeño

int rowNum; //Número de filas cuadradas

int columnNum; //Square El número de columnas en la cuadrícula

int maxAllowRowNum; //Cuántas filas se permiten sin cortar

int blockInitRow //La coordenada de fila inicial del nuevo bloque

int blockInitCol; // Coordenadas de la columna de inicio del nuevo bloque

int [][] scrArr; //Matriz de pantalla

Bloque b //Referencia a la otra parte

//Método de construcción de la clase canvas

GameCanvas(){

rowNum = 15

columnNum = 10; > maxAllowRowNum = número de fila - 2;

b = nuevo bloque (este);

blockInitRow = número de fila - 1

blockInitCol = número de columna/2 - 2;

scrArr = new int [32][32];

}

// Método para inicializar la pantalla y borrar la matriz de pantalla

void initScr(){

for (int i=0; ilt; rowNum; i )

for (int j=0; jlt; columnNum; j )

scrArr[i][j]=0;

b.r

eset();

repaint();

}

//Actualizar método de lienzo

public void paint(Gráficos g) {

for(int i = 0; i lt; rowNum; i )

for(int j = 0; j lt; columnNum; j )

drawUnit (i,j,scrArr[i][j]);

}

//Método para dibujar cuadrados

public void drawUnit(int row, int col, int tipo){

scrArr[row][col] = tipo;

Gráficos g = getGraphics()

switch(tipo){ / /Método que expresa la velocidad de dibujo

caso 0: g.setColor(Color.black); //Usa el fondo como color para dibujar

caso 1: g .setColor( Color.blue); //Dibuja el bloque que cae

caso 2: g.setColor(Color.magenta); }

g.fill3DRect(col*unitSize, getSize().height-(fila 1)*unitSize, unitSize, unitSize, true

g.dispose(); /p>

p>

}

public Block getBlock(){

return b; //Devuelve una referencia a la instancia del bloque

}

//Devuelve el valor del atributo en la posición (fila, columna) en la matriz de pantalla

public int getScrArrXY(int fila, int col){

if (fila lt; 0 || fila gt;= númerofila || col lt; 0 || col gt;= númerocolumna)

return(-1);

else

return(scrArr[ fila][col]);

}

// Devuelve el método de coordenadas de fila inicial del nuevo bloque

public int getInitRow(){

return(blockInitRow); //Devuelve las coordenadas de la fila inicial del nuevo bloque

}

//Devuelve el coordenadas de columna inicial del nuevo bloque

public int getInitCol(){

return(blockInitCol // Devuelve las coordenadas de columna inicial del nuevo bloque

}

// Método de eliminación de fila completa

void deleteFullLine(){

int full_line_num = 0

int k = 0;

for (int i=0; ilt; rowNum; i ){

booleano isfull = true;

L1: for(int j=0; jlt; columnNum; j )

if(scrArr[i][j] == 0){

k ;

isfull = false;

romper L1;

}

if(isfull) full_line_num

if(k!=0 amp; amp; k-1!=i ​​amp; !isfull)

for(int j = 0; j lt; columnNum; j){

si ( scrArr[ i][j] == 0)

drawUnit(k-1, j, 0

else

drawUnit(k-1, j, 2);

scrArr[k-1][j] = scrArr[i][j];

}

}

for(int i = k-1; i lt; rowNum; i){

for(int j = 0; j lt; columnNum; j){

drawUnit (i , j, 0);

scrArr[i][j]=0;

}

}

Mi prueba. score = full_line_num;

Mytest.scoreField.setText("" Mytest.score);

}

// Método para determinar si el juego ha terminado

booleano isGameEnd(){

for (int col = 0; col lt; columnNum; col){

if(scrArr[maxAllowRowNum][col] ! =0)

devuelve verdadero;

}

devuelve falso

}

clave nula pública escrita ( KeyEvent e){

}

public void keyReleased(KeyEvent e){

}

// Método para procesar la entrada del teclado

public void keyPressed(KeyEvent e){

if(!Mytest.isPlay)

return;

switch(e.getKeyCode( )){

caso KeyEvent.VK_DOWN: b.fallDown(); descanso

caso KeyEvent.VK_LEFT: b.leftMove(); caso KeyEvent.VK_RIGHT: b.rightMove(); descanso;

caso KeyEvent.VK_SPACE: b.leftTurn(); /pag

>

}

//Clase de control de procesamiento

class El comando implementa ActionListener{

static final int button_play = 1 //Asigna un número al botón

static final int button_levelup = 2

static final int button_leveldown = 3

static final int button_quit = 4; static final int button_pause = 5;

static boolean pause_resume = true;

int curButton; //Botón actual

GameCanvas scr; >/ /Método de construcción de la clase de botón de control

Command(int button, GameCanvas scr){

curButton = button;

this.scr=scr;

}

//Método de ejecución del botón

public void actionPerformed (ActionEvent e){

switch(curButton){

case button_play: if(!Mytest.isPlay){

scr.initScr();

Mytest.isPlay = true; = 0 ;

Mytest.scoreField.setText("0");

Mytest.timer.resume();

}

scr .requestFocus();

break;

case button_levelup: if(Mytest.level lt; 10){

Mytest.level;

Mytest.levelField.setText("" Mytest.level);

Mytest.score = 0;

Mytest.scoreField.setText("" Mytest.score);

p>

}

scr.requestFocus();

break;

caso button_leveldown: if (Mytest.level gt; 1){

Mytest.level--;

Mytest.levelField.setText("" Mytest.level);

Mytest.score = 0 ;

Mytest.scoreField.setText("" Mytest.score

}

scr.requestFocus()

break); ;

caso bu

tton_pause: if(pause_resume){

Mytest.timer.suspend();

pausa_resume = false

}else{

Mytest.timer.resume();

pausa_resume = true;

}

scr.requestFocus(); /p>

caso button_quit: System.exit(0);

}

}

}

//bloque Clase

clase Bloque {

static int[][] patrón = {

{0x0f00, 0x4444, 0x0f00, 0x4444}, //Usar hexadecimal para significa , esta línea representa cuatro estados de barras largas

{0x04e0, 0x0464, 0x00e4, 0x04c4},

{0x4620, 0x6c00, 0x4620, 0x6c00},

{0x2640, 0xc600, 0x2640, 0xc600},

{0x6220, 0x1700, 0x2230, 0x0740},

{0x6440, 0x0e20, 0x44c0, 0x8e00},

{0x0660, 0x0660, 0x0660, 0x0660}

};

int blockType; //Número de modo del bloque (0-6)

int turnState ; // El estado de volteo del bloque (0-3)

int blockState; // Estado de caída rápida

int row, col // Las coordenadas del bloque en el canvas

GameCanvas scr;

//Método de construcción de la clase de bloque

Block(GameCanvas scr){

this.scr = scr ;

tipo de bloque = (int)(Math.random() * 1000)7

turnState = (int)(Math.random() * 1000)4; >

blockState = 1;

fila = scr.getInitRow();

col = scr.getInitCol()

}

//Reinicializa el bloque y muestra el nuevo bloque

public void reset(){

blockType = (int)(Math.random() * 1000)7;

turnState = (int)(Math.random() * 1000)4;

blockState = 1

fila = scr.getInitRow(); p>

col = scr.getInitCol();

dispBlock(1);

}

// Método para implementar el cambio de "bloque"

público vacío giro a la izquierda

(){

if(assertValid(blockType, (turnState 1)4, fila, col)){

dispBlock(0);

turnState = ( turnState 1)4;

dispBlock(1);

}

}

// Implementar el desplazamiento hacia la izquierda de "bloque" Método

public void leftMove(){

if(assertValid(blockType, turnState, fila, col-1)){

dispBlock(0);

col--;

dispBlock(1);

}

}

// Bloque de implemento Mover derecha

public void rightMove(){

if(assertValid(blockType, turnState, fila, col 1)){

dispBlock(0);< / p>

col;

dispBlock(1);

}

}

// Implementar el método de operación de eliminación de bloques

public boolean fallDown(){

if(blockState == 2)

return(false);

if(asserValid(blockType) , turnState, fila-1, columna)){

dispBlock(0);

fila--;

dispBlock(1);

return(verdadero);

}else{

blockState = 2;

dispBlock(2); false);

}

}

//Método para determinar si es correcto

booleano afirmarValid(int t, int s , int fila, int col){

int k = 0x8000

for(int i = 0; i lt; 4; i){

for (int j = 0; j lt; 4; j ){

if((int)(patrón[t][s]amp;k) != 0){

int temp = scr.getScrArrXY(fila-i, col j);

if (templt;0||temp==2)

devuelve falso;

}

k = k gt;

}

}

devuelve verdadero; > }

//Método de visualización sincronizado

público sincronizado void dispBlock(int s){

int

k = 0x8000;

para (int i = 0; i lt; 4; i ){

para (int j = 0; j lt; 4; j ){

if(((int)pattern[blockType][turnState]amp;k) != 0){

scr.drawUnit(row-i,col j,s); p>

}

k=kgt;

}

}

}

}

//Hilo de sincronización

clase MyTimer extiende Thread{

GameCanvas scr;

public MyTimer(GameCanvas scr ){

this.scr = scr;

}

public void run(){

while(true){

intentar{

dormir((10-Mytest.level 1)*100);

}

capturar(InterruptedException e){}

if(!scr.getBlock().fallDown()){

scr.deleteFullLine();

if(scr.isGameEnd()){

Mytest.isPlay = false

suspender();

}else

scr.getBlock().reset();

p>

}

}

}

}

clase WinListener extiende WindowAdapter{

cierre de ventana vacía pública (WindowEvent l){

System.exit(0);

}

}