Java_俄罗斯方块游戏的设计_01

俄罗斯方块

背景:《俄罗斯方块》(Tetris, 俄文:Тетрис)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。

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

一.先定义俄罗斯方块中最小单位:方块    Cell类

我们将整个游戏界面视为一个二维的坐标系,用横纵坐标(即行、列)来显示方块的位置信息,并为每种四个方块提供不同的方块颜色:

I        O        S        Z        T        L        J    

方格属性(私有):行号    row(int)    列号    col(int)    图片    image(BUfferImage)并提供相关get/set方法

public class Cell {
	private int row;		//行
	private int col;		//列
	private BufferedImage image;		//图片
	public Cell(int row, int col, BufferedImage image) {
		super();
		this.row = row;
		this.col = col;
		this.image = image;
	}
	
	public Cell() {
	}
	
	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;
	}
}

提供方格的行为方法:向左移动—left()    向右移动—right()    向下移动—drop()

public void left() {
		col--;
	}
	public void right() {
		col++;
	}
	public void drop() {
		row++;
	}

二.四格方块共有的行为模式    Tetromino类

俄罗斯方块中出现的七种不同形状的四格方块均由四个小方块组成,并且七种四格方块都具有:左移、右移、软下落,三种行为模式。

另外,由于Tetromino类为七种四格方块共有行为模式的提供者,需要被作为父类继承,所以其中属性的访问修饰符为protected(受保护的)

1)我们将四个小方块(cell)作为一个整体放入数组当中进行统一操作:

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

2)对作为整体的四格方块提供相应的行为方法,即四格方块左移/右移/软下落,其中的每个小方块都左移/右移/软下落,使用for循环对每个小方块都实现left()/right()/drop()方法,并提供toString方法:

	public void moveLeft() {				//四个方块向左移动
		for(int i = 0;i<cells.length;i++) {
			cells[i].left();
		}
	}
	
	public void moveRight() {				//四个方块向右移动
		for(Cell c:cells) {		//增强for循环
			c.right();
		}
	}
	
	public void softDrop() {				//四个方块向下移动
		for(int i = 0;i<cells.length;i++) {
			cells[i].drop();
		}
	}

	@Override
	public String toString() {
		return "[" + Arrays.toString(cells) + "]";
	}

3)定义一个静态方法randomOne(),实现四格方块的随机生成能力,期间用到Math.random()方法生成随机数,根据生成的不同随机数利用switch_case语句对不同的方块生成进行选择:

public static Tetromino randomOne() {
		Tetromino t = null;
		int num = (int)(Math.random()*7);
		switch(num){
			case 0:
				t = new T();
				break;
			case 1:
				t = new I();
				break;
			case 2:
				t = new O();
				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;
	}


  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值