自己的第一个项目--俄罗斯方块(JAVA)

 

一点一点写出来的程序,想跟大家分享一下自己的心得,可能有错误,还请多多包涵~

Cell类:

public class Cell

定义了本游戏最基本的元素:小方块(cell)的基本参数:行,列,小方块图片:

private int row;//行数
private int col;//列数
private BufferedImage image;//图片

     提供无参有参构造器:

public Cell() {}
public Cell(int row, int col, BufferedImage image) {
		super();
		this.row = row;
		this.col = col;
		this.image = image;
	}

提供get/set方法:

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;
	}

定义了本游戏最基本的行为:左移一格;右移一格;下落一格.

public void left() {
		col--;//向左移动,列数减1
	}
	public void right() {
		col++;//向右移动,列数加1
	}
	public void drop() {
		row++;//向下移动,行数+1
	}

Tetromino类,提供方块的各种行为方法:

public class Tetromino{
  

我们将一个四个方块视为一个数组:

protected Cell[] cells = new Cell[4];

将一个四个方块的四种状态也定义为数组:

protected State[] states;

添加一个作为旋转计数器的量:

private int count = 100000;//数值多少都可以

定义cell的各种行为:下落;左移;右移;旋转:

public void moveLeft() {//向左移动
		for(int i=0;i<cells.length;i++) {//for循环遍历整个"方块组"的四格方块
			Cell cell = cells[i];//四格方块都要移动
			cell.left();
		}
	}
	public void moveRight() {//向右移动
		for(Cell c:cells) {//此处使用增强for循环也可以
			c.right();
		}
	}
	public void softDrop() {//下落
		for(Cell c:cells) {
			c.drop();
		}
	}

以及旋转的方法

	public void rotateRight() {//向右旋转
		//旋转有一次,计算器增长1
		count++;//100001
		State s = states[count%states.length];
		Cell c = cells[0];
		int row = c.getRow();
		int col = c.getCol();
		cells[1].setRow(row+s.row1);
		cells[1].setCol(col+s.col1);
		cells[2].setRow(row+s.row2);
		cells[2].setCol(col+s.col2);
		cells[3].setRow(row+s.row3);
		cells[3].setCol(col+s.col3);	
	}
	
	public void rotateLeft() {//向左旋转方法有什么用呢?稍后就会就知道了.
		count--;//100001
		State s = states[count%states.length];
		Cell c = cells[0];
		int row = c.getRow();
		int col = c.getCol();
		cells[1].setRow(row+s.row1);
		cells[1].setCol(col+s.col1);
		cells[2].setRow(row+s.row2);
		cells[2].setCol(col+s.col2);
		cells[3].setRow(row+s.row3);
		cells[3].setCol(col+s.col3);
	}

 以及随机生成七种方块中的一种的方法randomOne()

public static Tetromino randomOne() {
//随机生成方块,七种方块形状分别为O,T,I,J,L,S,Z
		Tetromino  t = null;
		int num = (int)(Math.random()*7);
		switch(num) {
		case 0:t = new O();break;
		case 1:t = new T();break;
		case 2:t = new I();break;
		case 3:t = new J();break;
		case 4:t = new L();break;
		case 5:t = new S();break;
		case 6:t = new Z();break;
		}
		return t;
	}

然后定义内部类state:

public class State{
  

此类用来描述方块旋转的四种状态,首先定义八个整型变量,用来描述四个方块的位置.0,1,2,3分别代表四个方块,我们旋转的时候以方块0为轴,其余三个方块向右旋转:

int row0,col0,row1,col1,row2,col2,row3,col3;

然后提供无参有参构造器:

public State() {}
public State(int row0, int col0, int row1, int col1, int row2, int col2, int row3, int col3) {
			super();
			this.row0 = row0;
			this.col0 = col0;
			this.row1 = 
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值