⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thinking.java

📁 一个经典的俄罗斯方块游戏看看吧
💻 JAVA
字号:
/*
 * 创建日期 2005-6-30
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
package game;

import java.util.TimerTask;


import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;

/**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class Thinking extends TimerTask{
	private static final int WHITE = 0x00FFFFFF;
	private static final int BLACK = 0x00000000;
	private int i = 0;
	private int j = 0;
	public GameScreen gameScreen;
	
	public Thinking(GameScreen gamescreen){
		this.gameScreen = gamescreen;		
	}
	
	/* (非 Javadoc)
	 * @see java.util.TimerTask#run()
	 */
	public void run() {
		// 是否不能再往下落了
		for (i = 0; i < 4; i++)
		{
			if (gameScreen.IsFilled[gameScreen.sq.ps_x[i]][gameScreen.sq.ps_y[i]] == true)
			{
				// 游戏结束
				gameScreen.isGameOver = true;
				cancel();
				
				// 状态信息
				String statusMsg = "本局积分:" + String.valueOf(gameScreen.Score);
				
				// 设置字体
				Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
				int strHeight = font.getHeight();
				int strWidth = font.stringWidth(statusMsg);
				
				// 计算字符绘制位置 
				int x = (gameScreen.screenWidth - strWidth) / 2;
				x = x < 0 ? 0 : x;
				int y = (gameScreen.screenHeight - 2 * strHeight) / 2;
				y = y < 0 ? 0 : y;
				
				// 白色清空画布 
				gameScreen.graph.setColor(WHITE);
				gameScreen.graph.fillRect(0, 0, gameScreen.screenWidth, gameScreen.screenHeight);
			
				// 黑色显示信息
				gameScreen.graph.setColor(BLACK);
				gameScreen.graph.drawString(statusMsg, x, y, (Graphics.TOP | Graphics.LEFT));
	
				gameScreen.repaint();		
				return;
			}
			
			if (gameScreen.sq.ps_y[i] == gameScreen.SQUARE_AMOUNT - 1 || gameScreen.IsFilled[gameScreen.sq.ps_x[i]][gameScreen.sq.ps_y[i] + 1] == true)
			{
				// 填充方块所占的区域
				for (j = 0; j < 4; j++)
					gameScreen.IsFilled[gameScreen.sq.ps_x[j]][gameScreen.sq.ps_y[j]] = true;
				cancel();
				
				// 消去方块 
				boolean flag[] = new boolean[16];
				boolean full = false;
				for (i = 0; i < 16; i++)
					flag[i] = false;
				
				int j;
				for (i = gameScreen.SQUARE_AMOUNT - 1; i >= 0; i--) // y shaft
				{
					for (j = 0; j < gameScreen.SQUARE_AMOUNT; j++)	// x shaft
						if (gameScreen.IsFilled[j][i] == false)
							break;
					if (j == gameScreen.SQUARE_AMOUNT )
					{
						flag[i] = true;
						full = true;
					}
				}
				
				// 有行要消掉
				if (full == true)  
				{
					for (i = gameScreen.SQUARE_AMOUNT - 1; i >= 0; i--)
					{
						// 消去这一行
						if (flag[i] == true) 
						{
							gameScreen.Score = gameScreen.Score + 100;
							for (j = 0; j < gameScreen.SQUARE_AMOUNT; j++)
							{
								// 白色清空画布 
								gameScreen.graph.setColor(WHITE);
								gameScreen.graph.fillRect(j * gameScreen.UNIT_SIZE, i * gameScreen.UNIT_SIZE, gameScreen.UNIT_SIZE, gameScreen.UNIT_SIZE);
								gameScreen.IsFilled[j][i] = false;
							}
						}
					}
					
					for (i = gameScreen.SQUARE_AMOUNT - 1; i >= 0; i--)
					{
						// 这行没有消去,进行下落处理
						if (flag[i] == false)
						{
							int temp = i + 1;
							int offset = 0;
							while (temp < gameScreen.SQUARE_AMOUNT)
							{
								if (flag[temp] == true)
									offset++;
								temp++;
							}
							
							for (j = 0; j < gameScreen.SQUARE_AMOUNT; j++)
							{
								if (gameScreen.IsFilled[j][i] == true)
								{
									int ptx = j * gameScreen.UNIT_SIZE;
									int pty = i * gameScreen.UNIT_SIZE;

									// 白色清空画布 
									gameScreen.graph.setColor(WHITE);

									// 擦除上次停留位置
									gameScreen.graph.fillRect(ptx, pty, gameScreen.UNIT_SIZE, gameScreen.UNIT_SIZE);
									gameScreen.graph.drawImage(gameScreen.fangkuai, ptx, pty + offset * gameScreen.UNIT_SIZE, 0);
									                                                                      
									gameScreen.IsFilled[j][i] = false;
									gameScreen.IsFilled[j][i + offset] = true;
								}
							}
						}
					}					
				}
				
				// 产生新的方块组合
				gameScreen.isNextOne = true;
				gameScreen.repaint();	
				return;
			}
		}

		// 擦除背景		
		gameScreen.erasebackground();
		
		// 移动方块  
		for (i = 0; i < 4; i++)	{
			gameScreen.sq.ps_y[i] = gameScreen.sq.ps_y[i] + 1;
			gameScreen.graph.drawImage(gameScreen.fangkuai,gameScreen.sq.ps_x[i] * gameScreen.UNIT_SIZE, gameScreen.sq.ps_y[i] * gameScreen.UNIT_SIZE, 0);	
		}

		// 没有落到底时不产生新的方块组合
		gameScreen.isNextOne = false;
		gameScreen.repaint();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -