Java 俄罗斯方块

游戏规则

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

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

小方块类: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
 

你可能感兴趣的:(java,算法,开发语言)