import javax.microedition.lcdui.*;
import java.util.*;
public class Man100Canvas extends Canvas implements Runnable {
/** **设定游戏状态****** */
private int state = 0;
/** 游戏学院LOGO */
private final static int LOGO = 0;
/** 游戏LOGO */
private final static int LOGO1 = 1;
/** 游戏主菜单 */
private final static int MENU = 2;
/** 游戏界面 */
private final static int GAME = 3;
/** 游戏帮助界面 */
private final static int GAMEHELP = 4;
/** 关于游戏界面 */
private final static int ABOUTGAME = 5;
/** *获取屏幕属性** */
// 获取宽
private int w = getWidth();
// 获取高
private int h = getHeight();
/** isPause游戏暂停,true代表暂停,false代表不暂停 */
boolean isPause = false;
/** isNew游戏初始化,true代表需要,false代表不需要 */
boolean isNew = false;
/** ***游戏中各种图片声明******* */
// 游戏学院LOGO图片
private Image imgGameCollegeLOGO;
// 自己的LOGO
private Image imgLOGO1;
// 游戏背景图片
private Image imgBackGround;
// 游戏背景顶端
private Image imgTop;
// 游戏背景左右两端
private Image imgSide;
// 游戏中人物
private Image imgMan;
// 游戏中台阶
private Image imgObj;
// 游戏结束天使的图片
private Image imgAngel1;
// 游戏失败图片
private Image imgLose;
// 游戏层数图片
private Image imgStep;
// 人物生命图片
private Image imgHead;
/** 是否允许继续游戏,true代表允许,false代表不允许 */
boolean isCon = false;
/** **********主菜单各种数据************* */
/** 菜单书写内容 */
String[] sMENU = { "新的冒险", "旧的旅程", "游戏帮助", "关于游戏" };
/** 菜单索引对象 */
int indexMENU = 0;
/** 游戏帮助书写内容 */
String[] sHELP = { "游戏帮助", "左软键和按键4控制人物向左移动", "右软键和按键6控制人物向右移动", "注意事项",
"人物人数减少到零时或者", "人物掉落到最下面时游戏结束" };
/** 关于游戏书写内容 */
String[] sABOUT = { "软件名称:是男人就下100层", "程序版本:V1.0.0", "作者姓名:杨钰哲",
"Email:yangyuzhe@sina.com" };
/** 关于游戏索引对象 */
int indexABOUT = 0;
/** *****游戏中各种坐标的声明******************** */
// 台阶的坐标
// 创建台阶的数组,屏幕每次出现6组,每组包括 台阶的种类,台阶的x坐标和y坐标,检测是否碰撞0代表没有碰撞,1代表碰撞
// 0:带刺的台阶 1:一般的台阶 2:向右滚的台阶 3:向左滚的台阶 4:可以翻滚的台阶 5:可以蹦的台阶
private int positionObj[][] = new int[6][4];
private int positionObj1[][] = new int[6][4];
private int positionObjNew[][] = { { 0, 20, 0, 0 }, { 1, 50, 30, 0 },
{ 1, 30, 60, 0 }, { 3, 100, 90, 0 }, { 4, 80, 120, 0 },
{ 5, 110, 150, 0 } };
// 人物的坐标
private int positionMan[] = { 30, 50 };
private int positionMan1[] = { 30 - 128, 50 };
// 层数图片的坐标
private int positionStepNew[][] = { { 48, 50 }, { 78, 50 }, { 108, 50 } };
private int positionStep[][] = new int[3][2];
private int positionStep1[][] = new int[3][2];
// 人物移动状态
private int moveMan = 0;
// 绘制人物动画的图片计数器
private int num = 0;
private int num1 = 0;
// 绘制台阶动画的图片计数器
int num2 = 0;
// 各种台阶出现的随机数
private Random rObj;
// 记录碰撞台阶
int type = -1;
// 当绘制可以翻滚的台阶时所需的图片偏移量
int pianYi4 = 0;
// 当绘制可以蹦的台阶时所需的图片偏移量
int pianYi5 = 0;
// 可以翻滚的台阶的延时计数器
int count4 = 0;
// 可以蹦的台阶的延时计数器
int count5 = 0;
/** 控制线程的变量 */
boolean bThread = true;
/** ***************字体**************************** */
// 设定字体
/** 定义LOGO字体 */
Font fLOGO;
/** 定义MENU字体类型 */
Font fMENU1;
Font fMENU2;
/** 定义ABOUTGAME字体类型 */
Font fABOUT;
// 是否绘制天使,true代表绘制,false代表不绘制
private boolean isPaintAngal = false;
// 绘制天使图片的初始y坐标
private int YAngal = h;
// 绘制游戏结束画面的y坐标
private int YLose = h;
// 人物下台阶数的计数器
private int countStep = 0;
int a = 1;
// 人物生命值数的计数器
private int countHead = 4;
private int pianyiHeadY = 0;
// 如果碰到带刺的板子或者屏幕顶端,次计数器开始计时,当等于10时人物的生命值减少1
int count = 0;
// 控制台阶线程的变量,当游戏结束时,此变量变为false
boolean b = true;
// 控制游戏结束后自动切换到主菜单的变量
private int countOver = 0;
/** **************************构造方法************************* */
/** 来电话时暂停方法* */
public void hideNotify() {
isPause = true;
}
public Man100Canvas() {
try {
imgGameCollegeLOGO = Image.createImage("/imgGameCollegeLOGO.png");
imgLOGO1 = Image.createImage("/startLOGO.png");
imgBackGround = Image.createImage("/imgBackGround.png");
imgTop = Image.createImage("/imgTop.png");
imgSide = Image.createImage("/imgSide.png");
imgMan = Image.createImage("/imgMan.png");
imgObj = Image.createImage("/imgObj.png");
imgAngel1 = Image.createImage("/1.png");
imgLose = Image.createImage("/lose.png");
imgStep = Image.createImage("/step.png");
imgHead = Image.createImage("/head.png");
} catch (Exception e) {
}
// 启动线程
Thread th = new Thread(this);
th.start();
// 台阶出现的随机数的创建
rObj = new Random();
// 台阶随机出现的种类
for (int i = 0; i < 6; i++) {
if (i == 2) {
positionObj[i][0] = 1;
} else {
positionObj[i][0] = appearObjKind();
}
}
positionObj[0][1] = appearObjPlaceX();
positionObj1[0][1] = positionObj[0][1];
positionObj[0][2] = h;
positionObj1[0][2] = positionObj[0][2];
// LOGO字体的设定
fLOGO = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD
| Font.STYLE_ITALIC, Font.SIZE_MEDIUM);
// MENU字体的设定
fMENU1 = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
Font.SIZE_LARGE);
fMENU2 = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
Font.SIZE_MEDIUM);
// 关于游戏字体的设定
fABOUT = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
Font.SIZE_MEDIUM);
}
/** **台阶位置随机出现的方法****** */
private int appearObjPlaceX() {
// 台阶左上角的X坐标
return (Math.abs(rObj.nextInt() % 91)) + 20;
}
/** **台阶种类随机出现的方法****** */
private int appearObjKind() {
return Math.abs(rObj.nextInt() % 6);
}
/** *********************************游戏中的paint方法********************************************** */
protected void paint(Graphics g) {
switch (state) {
// 游戏学院LOGO状态
case LOGO:
paintGameCollegeLOGO(g);
break;
// 绘制LOGO
case LOGO1:
paintLOGO1(g);
break;
// 游戏主菜单状态
case MENU:
paintMENU(g);
break;
// 游戏状态
case GAME:
paintPlayGame(g);
break;
// 游戏帮助的绘制
case GAMEHELP:
help_paint(g);
break;
// 关于游戏的绘制
case ABOUTGAME:
about_paint(g);
break;
}
}
/** *绘制游戏学院LOGO*** */
private void paintGameCollegeLOGO(Graphics g) {
g.drawImage(imgGameCollegeLOGO, 0, 0, Graphics.TOP | Graphics.LEFT);
}
/** LOGO的绘制方法 */
public void paintLOGO1(Graphics g) {
// 设置背景图片
g.drawImage(imgLOGO1, 0, 0, Graphics.TOP | Graphics.LEFT);
// 设置颜色
g.setColor(0x008cef55);
// 设置字体
g.setFont(fLOGO);
g.drawString("正在进入游戏,请稍候......", 20, 160, Graphics.TOP | Graphics.LEFT);
}
/** 主菜单的绘制方法 */
public void paintMENU(Graphics g) {
// 绘制背景色
g.setColor(0x002750e8);
g.fillRect(0, 0, w, h);
// 选择菜单内容绘制区域初始坐标
// 横坐标
int x = 55;
// 纵坐标
int y = 40;
for (int i = 0; i < sMENU.length; i++) {
if (i == indexMENU) {
g.setColor(0xff0000);
g.setFont(fMENU1);
} else {
g.setColor(0);
g.setFont(Font.getDefaultFont());
}
g.setClip(x, y, w, h);
g.drawString(sMENU[i], x, y, Graphics.TOP | Graphics.LEFT);
y += 20;
}
g.setColor(0);
g.setFont(Font.getDefaultFont());
// 绘制确定和退出按钮
g.setFont(fMENU2);
g.setClip(10, 157, 30, 20);
g.drawString("确定", 10, 157, Graphics.TOP | Graphics.LEFT);
g.setClip(150, 157, 40, 20);
g.drawString("退出", 150, 157, Graphics.TOP | Graphics.LEFT);
}
/** *绘制游戏画面*** */
pri