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
 

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值