首页>代码>java swing开发小游戏俄罗斯方块>/tetris1.4/src/sdu/edu/entities/Ground.java
package sdu.edu.entities;

import java.awt.Color;
import java.awt.Graphics;

import sdu.edu.util.Global;

public class Ground {

	int[][] obstacles = new int [Global.GAME_WIDTH][Global.GAME_HEIGHT];
	public void accept(Shap shap) {
		System.out.println("Ground's accept");
		for(int x = 0; x < 4; x++) {
			for(int y = 0; y < 4; y++) {
				if(shap.isMember(x, y, false)){
					obstacles[shap.getLeft() + x][shap.getTop() + y] = 1;
				}
			}
		}
		deleteFullLine();
	}
	
	private void deleteFullLine() {//删除所有行
		int y = Global.GAME_HEIGHT - 1;
		for(y = Global.GAME_HEIGHT - 1; y >= 0; y--) {
			boolean full = true;
			for(int x = 0; x < Global.GAME_WIDTH; x++) {
				if(obstacles[x][y] == 0){
					full = false;
				}
			}
			if(full){//
				deleteLine(y);
				y = Global.GAME_HEIGHT;//次句相当重要,不然只会消掉一行
			}
		}
	}
	
	private void deleteLine(int line) {//删除第y行
		for(int y = line; y > 0; y--) {
			for(int x = 0; x < Global.GAME_WIDTH; x++) {
				obstacles[x][y] = obstacles[x][y - 1];
			}
		}
		for(int x = 0; x < Global.GAME_WIDTH; x ++) {
			obstacles[x][0] = 0;
		}
	}
	
	public boolean isFull() {
		for(int x = 0; x < Global.GAME_WIDTH; x++) {
			if(obstacles[x][0] == 1)
				return true;
		}
		return false;
	}

	public void drawMe(Graphics g) {
		Color c = g.getColor();
		g.setColor(Color.BLUE);
		System.out.println("Ground's drawMe");
		for(int i = 0; i < Global.GAME_WIDTH; i++) {
			for(int j = 0; j < Global.GAME_HEIGHT; j++){
				if(obstacles[i][j] == 1)
				g.fill3DRect(i * Global.CELL_WIDTH, j * Global.CELL_HEIGHT, Global.CELL_WIDTH,
						Global.CELL_HEIGHT, true);
			}
		}
		g.setColor(c);
	}
	
	public boolean isShapMove(Shap shap, int action) {
		int top = shap.getTop();
		int left = shap.getLeft();
		switch (action) {
		case Shap.LEFT:
			left --;
			break;
		case Shap.RIGHT:
			left ++;
			break;
		case Shap.DOWN:
			top ++;
			break;
		}
		for(int x = 0; x < 4; x++) {
			for(int y = 0; y < 4; y++) {
				if(shap.isMember(x, y, action == Shap.RARTE)){
					if(top + y >= Global.GAME_HEIGHT ||
							left < 0 || left + x >= Global.GAME_WIDTH ||
							obstacles[left + x][top + y] == 1)
						return false;
				}
			}
		}
		return true;
	}
}
最近下载更多
1112WHQ  LV7 2023年11月3日
郭佩泽  LV12 2019年8月20日
wasdfg  LV2 2019年6月5日
renshuao0822  LV2 2018年10月31日
120130140  LV7 2018年2月24日
大侠woaini  LV2 2017年12月26日
1357zhanghuan9  LV2 2017年6月28日
13956441640  LV2 2017年6月6日
solargen  LV7 2017年6月6日
sahdhasdi  LV2 2017年6月4日
最近浏览更多
hainabian1977  LV2 6月24日
ClydeSon  LV5 2023年12月27日
1112WHQ  LV7 2023年11月3日
微信网友_6699076084797440  LV7 2023年10月30日
wangjialiang1  LV17 2023年8月20日
sdyawd 2023年6月14日
暂无贡献等级
小安同学  LV7 2023年5月11日
tx1121  LV14 2023年4月9日
insane1  LV1 2022年12月6日
tree1112666  LV1 2022年8月19日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友