📄 canvaszhu.java
字号:
package zhu.src;
import java.io.*;
import java.util.Random;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
public class CanvasZhu extends Canvas implements Runnable {
private final byte Logo = -1;
private final byte Nogo = 0;
private final byte Menu = 1;
private final byte Start = 2;
private final byte Continue = 3;
private final byte HelpForm = 4;
private final byte AboutForm = 5;
private final byte QuitApp = 6;
private final byte FirstForm = 7;
private final byte Result = 9;
private final int LANG_ZHU = 25;// 分块图的边长
private final int ZHUX = 200;//FirtForm中猪的x坐标
private final byte YA_Y = 40;//悬崖的y坐标
private final int WIDTH = this.getWidth();
private final int HEIGHT = this.getHeight();
private final String OK = "确定";
private final String BACK = "返回";
private final String FormMenu = "菜单";
private final String FormMenuClose = "关闭菜单";
private final String PAU = "返回";
private final String ALERT = "请按任意键继续...";
private final String GAMEHELP = "游戏规则:";
private final String GAMEABOUT = "关于游戏:";
private final String GAMEHELPTEXT = "游戏操作如下:";
private final String FINALMENU = "重新开始 返回游戏";
private final String[] FormMenuObj = { "退出游戏", "重新开始", "保存游戏" };
private final String[] STRMENU = { "开始游戏", "继续游戏", "游戏帮助", "关于游戏", "退出游戏" };
private final String[] GAMEABOUTTEXT = { "游戏名称:<<猪小弟>>; ", "版本号:1.0; ",
"开发者:杨建锋;", "开发时间:2007年4月;\n\r " };
private final String DEFENS = "现在得分:";
private final String DEFENHIGH = "最高得分:";
private Image logo;
private Image nogo;
private Image jian;
private Image shi;
private Image zhu;
private Image dun;
private Image menu;
private Image qiqiu;
private Image caozuo;
private Image delang;
private Image xiaozhu;
private Image beijing;
private Image qiqiulang;
private Image donghuazuo;
private Image donghuayou;
private static String defenString;// 得分的字符串
private static int defen;// 存贮 得分
private static byte ii;// 狼数组中狼的数量
private static byte index;// 界面跳转
private static byte Menu_index;// 菜单序号,2为第一个 -1为退出游戏
private static byte FormMeun_index;
private static byte tushu;// 一组图片 画的次序 *
private static byte tushuL;// 绘制狼走动动化切图的序号
private static byte tushuZ;// 绘制猪走动动化切图的序号
private static byte jiani;// 得到箭数组中,下标为jiani的箭在ZHUX位置
private static byte[] langfangxiang = new byte[3];// 狼的方向
private static int langStartx;// 狼在Strat里的x坐标
private static int[] langx = new int[3];// FirstForm 右移动和上升的狼的 x坐标
private static int[] langy = new int[3];// FirstForm 右移动和上升的狼的 y坐标
private static int zhux;// Start中猪的x坐标
private static int zhuFirstFormy;// FirstForm用到
private static byte langLife;// 上去的狼的数量
private static boolean boolrun;// 线程开关
private static int[] langLifeArray = new int[9];// 上到崖上的狼数组
private static int[][] jianArray = new int[4][2];// 箭的x,y坐标
private static byte jiange;// 猪手中发射出箭 后阁jiange 后出现下一支
private static boolean controljian;// 箭发射后,隔一段时间(jiange 变量控制),控制生成下一个猪手中的箭
private static boolean[] boolQiqiu = new boolean[3];// 气球是否 破 false 是破的
private static boolean[] boolDun = new boolean[3];// 控制盾是否 绘制
private static boolean[] controlMove = new boolean[3];// 控制狼被杀死后,落下,不能执行向上移动
private static boolean[] defenbool = new boolean[3];// 控制杀死一中狼中得分一次;
private static int shix;// 初始化石头的x坐标
private static int shiy; // 初始化石头的y坐标
private static int[] qiqiuy = new int[3]; // 气球的y坐标
private static byte []t = new byte[3];// 初始化 第一个狼上升前 右移 的总次数 随机生成
private static byte[] temp = new byte[3];// 初始化 第一个狼上升前 右移 的次数
private static boolean[] bool = new boolean[3];// 碰撞判断
private static boolean keyControl; // 游戏结束 按键响应控制
private static boolean pressedUp;// 控制连续按上键
private static boolean pressedDown;// 控制连续按下键
private static byte jixu;// 控制菜单项继续游戏 是否可用
private Thread thr;// 线程对象
private RecordStore rs = null;
private Random r = new Random();
private Runtime rt = Runtime.getRuntime();
CanvasZhu() {
try {
logo=Image.createImage("/zhu/res/logo.png");
donghuazuo = Image.createImage("/zhu/res/donghuazuo.png");
donghuayou = Image.createImage("/zhu/res/donghuayou.png");
shi = Image.createImage("/zhu/res/shi.png");
xiaozhu = Image.createImage("/zhu/res/xiaozhu.png");
qiqiulang = Image.createImage("/zhu/res/qiqiulang.png");
zhu = Image.createImage("/zhu/res/zhu.png");
qiqiu = Image.createImage("/zhu/res/qiqiu.png");
delang = Image.createImage("/zhu/res/delang.png");
jian = Image.createImage("/zhu/res/jian.png");
dun = Image.createImage("/zhu/res/dun.png");
menu = Image.createImage("/zhu/res/menu.png");
// 创建记录集
rs = RecordStore.openRecordStore("recordlist", true);
// 读取记录集1中的数据
String s="";
if (rs.getNumRecords() == 0) {
s= String.valueOf(jixu);
rs.addRecord(s.getBytes(), 0, s.getBytes().length);
}else{
s = new String(rs.getRecord(1));
jixu = Byte.parseByte(s);
}
s=null;
rs.closeRecordStore();
} catch (Exception e) {
}
//线程控制
boolrun = true;
// 初始化变量
index = Logo;
Menu_index = 2;
shix = 160;
shiy = YA_Y;
keyControl = true;
defenString = DEFENS;
zhux = WIDTH;
zhuFirstFormy = ZHUX;
langStartx = WIDTH + LANG_ZHU;
// 箭初始化
for (int i = 0; i < jianArray.length; i++) {
jianArray[i][0] = -(LANG_ZHU - 5);
}
// 初始化上到崖上的狼的位置
for (int i = 0; i < langLifeArray.length; i++) {
langLifeArray[i] = (shix - LANG_ZHU - i * LANG_ZHU);
/** 第一个LANG_ZHU位石头图宽 */
}
// FirstForm静态数组 初始化
for (int i = 0; i < 3; i++) {
langy[i] = HEIGHT;
defenbool[i] = true;
controlMove[i] = true;
qiqiuy[i] = (HEIGHT - LANG_ZHU);// 初始化气球的位置
t[i] = (byte) (Math.abs(r.nextInt() % 28) + 5);
}
jianArray[0][0] = ZHUX;// 箭的x起始位置
jianArray[0][1] = (zhuFirstFormy - 8);// 箭的y起始位置
thr = new Thread(this);// 线程对象
thr.start();// 开启线程
}
private void ChuShiHua() {// 初始化数据
// 初始化变量
ii = 0;
defen = 0;
jiani = 0;
tushu = 0;
jiange = 0;
langLife = 0;
Menu_index = 2;
shix = 160;
shiy = YA_Y;
controljian = false;
keyControl = true;
pressedUp = false;
pressedDown = false;
zhux = WIDTH;
zhuFirstFormy = ZHUX;
langStartx = WIDTH + LANG_ZHU;
defenString = DEFENS;
/** ****FirstForm静态数组 初始化**** */
for (int i = 0; i < 3; i++) {
langx[i] = 0;
langy[i] = HEIGHT;
qiqiuy[i] = (HEIGHT - LANG_ZHU);// 初始化气球的位置
controlMove[i] = true;
boolQiqiu[i] = false;
boolDun[i] = false;
defenbool[i] = true;
t[i] = (byte) (Math.abs(r.nextInt() % 28) + 5);
temp[i] = 0;
bool[i] = false;
langfangxiang[i] = 0;
}
/** ********箭初始化******** */
for (int i = 0; i < jianArray.length; i++) {
jianArray[i][0] = -(LANG_ZHU - 5);
}
/** ****初始化上到崖上的狼的位置**** */
for (int i = 0; i < langLifeArray.length; i++) {
langLifeArray[i] = (shix - LANG_ZHU - i * LANG_ZHU);// 第一个LANG_ZHU位石头图宽
}
/** ****箭的x,y起始位置**** */
jianArray[0][0] = ZHUX;
jianArray[0][1] = (zhuFirstFormy - 8);
}
protected void paint(Graphics a) {
// 清屏
a.setColor(0xffffff);
a.fillRect(0, 0, WIDTH, HEIGHT);
a.setColor(0);
switch (index) {
case Logo:
paintLogo(a);
break;
case Nogo:
paintNogo(a);
break;
case Menu:
paintMenu(a);
break;
case Start:
paintStart(a);
break;
case HelpForm:
paintHelpForm(a);
break;
case AboutForm:
paintAboutForm(a);
break;
case FirstForm:
paintFirstForm(a);
break;
case Result:
paintResult(a);
break;
}
}
private void paintqietu(Graphics g, int x, int y, int tushu, int n,
byte fangxiang) {
// x,y为绘出的图左上的位置,tushu是要切换的图,n为0时 为狼的切图,为25(每块图的边长)时为猪的切图.
g.setClip(x - 25 + n, y - 25, 25, 25);
if (fangxiang == 3) {
g.drawImage(donghuazuo, x - 25 - 25 * tushu, y - 25 - n,
Graphics.TOP | Graphics.LEFT);
} else {
g.drawImage(donghuayou, x - 25 + n - 25 * tushu, y - 25 - n,
Graphics.TOP | Graphics.LEFT);
}
g.setClip(0, 0, WIDTH, HEIGHT);
}
private void paintFirstFormJian(Graphics g) { // 箭的绘制
for (int j = 0; j < jianArray.length; j++) {
// 箭的绘制
if (jianArray[j][0] != ZHUX && jianArray[j][0] != -(LANG_ZHU - 5)) {
g.drawImage(jian, jianArray[j][0], jianArray[j][1],
Graphics.BOTTOM | Graphics.LEFT);
}
if (jianArray[j][0] == ZHUX) {
g.drawImage(jian, jianArray[j][0], zhuFirstFormy - 8,
Graphics.BOTTOM | Graphics.LEFT);
}
}
}
private void paintFirstFormLang(Graphics g) { // 狼绘制
// 崖上的狼绘制
if (langLife > 2) {
for (int j = 0; j < langLife; j++) {
paintqietu(g, langLifeArray[j] + tushuZ * 4, YA_Y, tushuL, 0,
(byte) 0);
}
} else {
for (int j = 0; j < langLife; j++) {
paintqietu(g, langLifeArray[j], YA_Y, tushuL, 0, (byte) 0);
}
}
// 移动的狼的绘制
for (int i = 0; i <= ii; i++) {
switch (langfangxiang[i]) {
case 0:
case 4:// 向右
paintqietu(g, langx[i], langy[i], tushuL, 0, langfangxiang[i]);
break;
case 3:// 向左移动
paintqietu(g, langx[i], langy[i], tushuL, 0, langfangxiang[i]);
break;
case 2:// 死亡下落
g.drawImage(delang, langx[i], langy[i], Graphics.BOTTOM
| Graphics.RIGHT);
break;
case 1:// 向上飘
g.drawImage(qiqiulang, langx[i], langy[i], Graphics.BOTTOM
| Graphics.RIGHT);
break;
}
}
}
private void paintFirstFormShi(Graphics g) {
if (langLife > 2) {
g.drawImage(shi, shix + tushuZ * 4, shiy, Graphics.BOTTOM
| Graphics.RIGHT);
} else {
g.drawImage(shi, shix, shiy, Graphics.BOTTOM | Graphics.RIGHT);
}
}
private void paintFirstFormDun_Qiqiu(Graphics g) {
for (int i = 0; i <= ii; i++) {
// 盾绘制
if (boolDun[i]) {
g.drawImage(dun, langx[i], langy[i], Graphics.BOTTOM
| Graphics.RIGHT);
}
// 气球绘制
if (boolQiqiu[i]) {
g.drawImage(qiqiu, langx[i], qiqiuy[i], Graphics.BOTTOM
| Graphics.RIGHT);
}
}
}
private void paintFirstFormMenu(Graphics g) {
// private final String[] FormMenu={"退出游戏","重新开始","保存游戏"};
if (!boolrun) {
g.setColor(0xF5C580);
g.fillRect(1, HEIGHT - 65, 50, 50);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -