Java 俄罗斯方块

发布时间:2023年12月25日

游戏规则

由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。

整体代码分为三个模块:方格模块,七种图形模块,俄罗斯方块主模块。

小方块类:Cell

package com.zhao.demo.block;

import java.awt.image.BufferedImage;

import java.util.Objects;

/**

?* @author xiaoZhao

?* @date 2022/5/7

?* @describe

?* 小方块类

?* 方法: 左移、右移、下落

?*/

public class Cell {

? ? // 行

? ? private int row;

? ? // 列

? ? private int col;

? ? private BufferedImage image;

? ? public Cell() {

? ? }

? ? public Cell(int row, int col, BufferedImage image) {

? ? ? ? this.row = row;

? ? ? ? this.col = col;

? ? ? ? this.image = image;

? ? }

? ? public int getRow() {

? ? ? ? return row;

? ? }

? ? public void setRow(int row) {

? ? ? ? this.row = row;

? ? }

? ? public int getCol() {

? ? ? ? return col;

? ? }

? ? public void setCol(int col) {

? ? ? ? this.col = col;

? ? }

? ? public BufferedImage getImage() {

? ? ? ? return image;

? ? }

? ? public void setImage(BufferedImage image) {

? ? ? ? this.image = image;

? ? }

? ? @Override

? ? public String toString() {

? ? ? ? return "Cell{" +

? ? ? ? ? ? ? ? "row=" + row +

? ? ? ? ? ? ? ? ", col=" + col +

? ? ? ? ? ? ? ? ", image=" + image +

? ? ? ? ? ? ? ? '}';

? ? }

? ? @Override

? ? public boolean equals(Object o) {

? ? ? ? if (this == o) {

? ? ? ? ? ? return true;

? ? ? ? }

? ? ? ? if (!(o instanceof Cell)) {

? ? ? ? ? ? return false;

? ? ? ? }

? ? ? ? Cell cell = (Cell) o;

? ? ? ? return getRow() == cell.getRow() &&

? ? ? ? ? ? ? ? getCol() == cell.getCol() &&

? ? ? ? ? ? ? ? Objects.equals(getImage(), cell.getImage());

? ? }

? ? @Override

? ? public int hashCode() {

? ? ? ? return Objects.hash(getRow(), getCol(), getImage());

? ? }

? ? //左移动一格

? ? public void left(){

? ? ? ? col--;

? ? }

? ? //右移动一格

? ? public void right(){

? ? ? ? col++;

? ? }

? ? //下移动一格

? ? public void down(){

? ? ? ? row++;

? ? }

}

?七种图形类:I、J、L、O、S、T、Z

I

package com.zhao.demo.shape;

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

/**

?* @author xiaoZhao

?* @date 2022/5/11

?* @describe

?*/

public class I extends Tetromino {

? ? public I() {

? ? ? ? cells[0] = new Cell(0,4, Tetris.I);

? ? ? ? cells[1] = new Cell(0,3, Tetris.I);

? ? ? ? cells[2] = new Cell(0,5, Tetris.I);

? ? ? ? cells[3] = new Cell(0,6, Tetris.I);

? ? ? ? //共有两种旋转状态

? ? ? ? states =new State[2];

? ? ? ? //初始化两种状态的相对坐标

? ? ? ? states[0]=new State(0,0,0,-1,0,1,0,2);

? ? ? ? states[1]=new State(0,0,-1,0,1,0,2,0);

? ? }

}

?J

package com.zhao.demo.shape;

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

/**

?* @author xiaoZhao

?* @date 2022/5/11

?* @describe

?*/

public class J extends Tetromino {

? ? public J() {

? ? ? ? cells[0] = new Cell(0,4, Tetris.J);

? ? ? ? cells[1] = new Cell(0,3, Tetris.J);

? ? ? ? cells[2] = new Cell(0,5, Tetris.J);

? ? ? ? cells[3] = new Cell(1,5, Tetris.J);

? ? ? ? states=new State[4];

? ? ? ? states[0]=new State(0,0,0,-1,0,1,1,1);

? ? ? ? states[1]=new State(0,0,-1,0,1,0,1,-1);

? ? ? ? states[2]=new State(0,0,0,1,0,-1,-1,-1);

? ? ? ? states[3]=new State(0,0,1,0,-1,0,-1,1);

? ? }

}

?L

package com.zhao.demo.shape;

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

/**

?* @author xiaoZhao

?* @date 2022/5/11

?* @describe

?*/

public class L extends Tetromino {

? ? public L() {

? ? ? ? cells[0] = new Cell(0,4, Tetris.L);

? ? ? ? cells[1] = new Cell(0,3, Tetris.L);

? ? ? ? cells[2] = new Cell(0,5, Tetris.L);

? ? ? ? cells[3] = new Cell(1,3, Tetris.L);

? ? ? ? states=new State[4];

? ? ? ? states[0]=new State(0,0,0,-1,0,1,1,-1);

? ? ? ? states[1]=new State(0,0,-1,0,1,0,-1,-1);

? ? ? ? states[2]=new State(0,0,0,1,0,-1,-1,1);

? ? ? ? states[3]=new State(0,0,1,0,-1,0,1,1);

? ? }

}

?O

package com.zhao.demo.shape;

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

/**

?* @author xiaoZhao

?* @date 2022/5/11

?* @describe

?*/

public class O extends Tetromino {

? ? public O() {

? ? ? ? cells[0] = new Cell(0, 4, Tetris.O);

? ? ? ? cells[1] = new Cell(0, 5, Tetris.O);

? ? ? ? cells[2] = new Cell(1, 4, Tetris.O);

? ? ? ? cells[3] = new Cell(1, 5, Tetris.O);

? ? ? ? //无旋转状态

? ? ? ? states = new State[0];

? ? }

}

?S

package com.zhao.demo.shape;

import com.zhao.demo.App.Tetris;

import com.zhao.demo.block.Cell;

import com.zhao.demo.block.Tetromino;

/**

?* @author xiaoZhao

?* @date 2022/5/11

?* @describe

?*/

public class S extends Tetromino {

? ? public S() {

? ? ? ? cells[0] = new Cell(0,4, Tetris.S);

? ? ? ? cells[1] = new Cell(0,5, Tetris.S);

? ? ? ? cells[2] = new Cell(1,3, Tetris.S);

? ? ? ? cells[3] = new Cell(1,4, Tetris.S);

? ? ? ? //共有两种旋转状态

? ? ? ? states =new State[2];

? ? ? ? //初始化两种状态的相对坐标

? ? ? ? states[0]=new State(0,0,0,1,1,-1,1,0);

? ? ? ? states[1]=new State(0,0,1,0,-1,-1,0,-1);

? ? }

}

package com.zhao.demo.shape;

import com.zha
?

文章来源:https://blog.csdn.net/2302_76546999/article/details/135183249
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。