📄 boxesworker.java
字号:
{
return true;
}
}
return false;
}
/**
* 移动人
* @param key 方向
* @return
*/
private void move(int key)
{
int r = man_row; //定义一个参数r来存储man_row
int c = man_col; //定义一个参数c来存储man_col
int r1 = man_row; //定义一个参数r1来存储特殊man_row
int c1 = man_col; //定义一个参数c1来存储特殊man_col
switch(key) //判断按键
{
case LEFT_PRESSED:c--;c1--;c1--;break; //当按下左键时
case UP_PRESSED:r--;r1--;r1--;break; //当按下上键时
case RIGHT_PRESSED:c++;c1++;c1++;break; //当按下右键时
case DOWN_PRESSED:r++;r1++;r1++;break; //当按下下键时
}
//人的前进方向是地板或目标位置
if (map[r][c]==5||map[r][c]==2)
{
//移动人到地板
if (map[r][c]==5)
{
map[r][c]=4;
}
else
//移动人到目标位置
{
map[r][c]=11;
}
//人原来的位置如果是普通人,还原成地板
if (map[man_row][man_col]==4)
{
map[man_row][man_col]=5;
}
//人原来的位置如果是目标位置上的人,还原成目标位置
else
{
map[man_row][man_col]=2;
}
//更新全局变量人的位置
man_row = r;
man_col = c;
}
//人前进方向是箱子或在目标位置上的特殊箱子
if (map[r][c]==3 ||map[r][c]==10)
{
//箱子前进方向是地板
if(map[r1][c1]==5)
{
map[r1][c1] = 3; //则把箱子移动到这格上
if (map[r][c]==3) //把箱子向前移动一格
{
map[r][c] = 4; //人站到这格上
}
else
{
map[r][c] = 11;
}
//人离开的位置如果是地板,还原成地板
if (map[man_row][man_col]==4)
{
map[man_row][man_col]=5;
}
//人离开的位置如果是目标位置,还原成目标位置
else
{
map[man_row][man_col]=2;
}
//更新人的位置,类的属性(全局变量)
man_row = r;
man_col = c;
}
//箱子前进方向是目标位置
if(map[r1][c1]==2)
{
map[r1][c1] = 10;
//箱子原来的位置如果是普通位置,人上来也是普通人
if (map[r][c]==3)
{
map[r][c] = 4;
}
//箱子原来的位置如果是目标位置,人上来之后,变成特殊的人,人在目标位置上
else
{
map[r][c] = 11;
}
//人离开的时候,如果人在普通位置上,还原成地板
if (map[man_row][man_col]==4)
{
map[man_row][man_col]=5;
}
//人离开的时候,如果人在目标位置上,还原成目标位置
else
{
map[man_row][man_col]=2;
}
man_row = r;
man_col = c;
}
}
}
private int MainScreenIndex=0;
//开始界面
private void DrawScreenMain(Graphics g)
{
/**
* 清除背景
*/
g.setColor(0x000000); //设置背景色为黑色
g.fillRect(0,0,screenWidth,screenHeight); //填充整个背景
Font font = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_LARGE);
g.setFont(font);
g.setColor(0x00FFF0); //设置游戏标题的颜色
g.drawString("仓库世家", 85, 50, 0); //设置游戏标题文字和位置
String caption[]={"开始","版本", "帮助","退出"}; //设置各个选项的名称
for(int i=0;i<4;i++) //设置各个选项的状态,是否被选中
{
if (MainScreenIndex==i) //被选中则变为蓝色
{
g.setColor(0x0F00F0);
}
else //未被选中的选项全为紫红色
{
g.setColor(0xFF00FF);
}
g.drawString(caption[i], 100, 80+i*20, 0); //设置各个选项的位置
}
}
private void onKeyDownMain(int key) //在主界面时的按键控制
{
switch(key)
{
case LEFT_PRESSED:MainScreenIndex--;break; //当按下左键时选项向上移动
case RIGHT_PRESSED:MainScreenIndex++;break; //当按下右键时选项向下移动
case UP_PRESSED:MainScreenIndex--;break; //当按下上键时选项向上移动
case DOWN_PRESSED:MainScreenIndex++;break; //当按下下键时选项向下移动
case FIRE_PRESSED:ScreenIndex = MainScreenIndex+1;break;//当按下确定键时进入相应界面
}
if (MainScreenIndex==-1) MainScreenIndex = 3; //当选中第一项并按下上键时选中第四项
if (MainScreenIndex==4) MainScreenIndex = 0; //当选中第四项并按下下键时选中第一项
}
//帮助
private void DrawScreenHelp(Graphics g) //绘制帮助文档
{
/**
* 清除背景
*/
g.setColor(0x000000); //设置背景色为黑色
g.fillRect(0,0,screenWidth,screenHeight); //填充整个背景
/**
* 显示帮助文档
*/
g.setColor(0xFFFFFF); //设置帮助文档的文字颜色
String str1,str2,str3; //要输出3句话
str1 = "游戏玩法:按“上”、“下”、“左”、" ; //第一句
str2 ="“右”键控制工人推动箱子到"; //第二句
str3 ="指定地点。"; //第三句
g.drawString(str1,0,0,0); //输出第一句话,并设置它的位置
g.drawString(str2,60,20,0); //输出第二句话,并设置它的位置
g.drawString(str3,70,40,0); //输出第三句话,并设置它的位置
}
private void onKeyDownHelp(int key) //当选中帮助选项并按下确认键时
{
ScreenIndex = 0;
}
//版本
private void DrawScreenAbout(Graphics g) //绘制版本文档
{
/**
* 清除背景
*/
g.setColor(0x000000); //设置背景色为黑色
g.fillRect(0,0,screenWidth,screenHeight); //填充整个背景
/**
* 显示版本文档
*/
g.setColor(0xFFFFFF); //设置版本文档的文字颜色
String str1,str2; //要输出2句话
str1="制作人:**"; //第一句
str2="制作时间:2008-8-8"; //第二句
g.drawString(str1,0,0,0); //输出第一句话,并设置它的位置
g.drawString(str2,0,20,0); //输出第二句话,并设置它的位置
}
private void onKeyDownAbout(int key) //当选中版本选项并按下确认键时
{
ScreenIndex = 0;
}
//游戏界面
private void DrawScreenPlay(Graphics g) //绘制开始界面
{
/**
* 清除背景
*/
g.setColor(0x000000); //设置背景色为黑色
g.fillRect(0,0,screenWidth,screenHeight); //填充整个背景
for(int i=0;i<map_row;i++) //定义一个参数i
for(int j=0;j<map_col;j++) //定义一个参数j
{
if (map[i][j]==0)continue; //当地图位置为0时
int index=0; //索引为0
switch(map[i][j])
{
case 5:index=0;break; //事件5发生是索引为0
case 11:index=4;break; //事件11发生是索引为4
default:
index = map[i][j];
}
if (index == 4) //当索引为4时
{
index = index + man_way; //索引位置为当前索引位置家上人的移动
}
mapImage.setFrame(index);
mapImage.setPosition(map_x+j*cell_width, map_y+i*cell_height);
mapImage.paint(g);
}
g.setColor(0xFFFFFF); //设置文字颜色为白色
String str; //定义文字
if (levelOver()) //判断本关结束
{
str = "Mission Complane"; //显示“Mission Complane”
g.drawString(str,0,20,0); //设置文字的显示位置
}
}
private void onKeyDownPlay(int key)
{
//改变人的方向
switch(key)
{
case LEFT_PRESSED:man_way = 1;break; //当按下左键时人的移动情况为1
case RIGHT_PRESSED:man_way = 2;break; //当按下右键时人的移动情况为2
case UP_PRESSED:man_way = 3;break; //当按下上键时人的移动情况为3
case DOWN_PRESSED:man_way = 4;break; //当按下下键时人的移动情况为4
case FIRE_PRESSED:ScreenIndex = 0;break; //当按下确定键时游戏回到开始画面
}
//判断是否能够移动
/*
if (canMove(key))
{
move(key);
}
*/
move(key);
//stop();
}
private int ScreenIndex=0;
private void onKeyDown(int key) //当按键被按下再抬起时才产生事件
{
switch(ScreenIndex) //在开始界面时
{
case 0: onKeyDownMain(key);break; //进入和退出主界面设为事件0
case 1: onKeyDownPlay(key);break; //当选中开始并按下确定为事件1
case 2: onKeyDownAbout(key);break; //当选中版本并按下确定为事件2
case 3: onKeyDownHelp(key);break; //当选中帮助并按下确定为事件3
case 4: exit();break; //当选中退出并按下确定为事件4
}
}
int color = 1;
private void drawScreen(Graphics g) //进入各个界面
{
switch(ScreenIndex) //在开始界面时
{
case 0: DrawScreenMain(g);break; //绘制主界面
case 1: DrawScreenPlay(g);break; //绘制游戏界面
case 2: DrawScreenAbout(g);break; //绘制版本界面
case 3: DrawScreenHelp(g);break; //绘制帮界面
case 4: exit();break; //退出程序
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -