📄 thinking.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 + -