import java.util.Random;
import java.util.Vector;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class GameCanvas extends Canvas implements Runnable {
GameMidlet gm;
static int screenW = 176; // 屏幕宽
static int screenH = 208; // 屏幕高
private int gameState; // 游戏状态
private int gameCount; // 计时器
private int score;// 当前分数显示
private int oldScore;// 累计分数
private int misstate;// 关卡状态
private int menuState; // 菜单状态
private int xSize = 176;
// private int Volumelimits = 10; // 音量
private int coordinates = 120; // 主菜单光标位置
// private int coordinates1 = 90; // 设置菜单光标位置
private int scroll = 176; // 字体移动初始坐标
private int loadIndex; // 进度条
private int frameload;
private long starttime; // 线程开始时间
private long endtime; // 线程结束时间
private int mission; // 游戏关卡
private boolean lifeState;// 生存模式状态
private boolean isLoad; // 加载资源的状态
Vector v;
Random ran;
Image[] logoImg;
Image[] mainImg;
Image[] npcImg;
MapSprite maps;
RoleSprite role;
NpcSprite npc;
Chet chet;
GameTools gts;
public GameCanvas(GameMidlet gm) {
this.gm = gm;
ran = new Random();
gts = new GameTools();
logoImg = new Image[6];// 加载logo图片
gts.createImage(logoImg, "/logoImg.c", 0, 6);
mainImg = new Image[8];
gts.createImage(mainImg, "/mainImg.c", 0, 8);
new Thread(this).start();
}
public void addnpc() {
int x = Math.abs(ran.nextInt() % 200);
int y = (Math.abs(ran.nextInt() % 214) + (maps.map_y + 208));
int type = Math.abs(ran.nextInt() % 2);
int fishspeed = Math.abs(ran.nextInt() % 6) + 3;
npc = new NpcSprite(npcImg, type, fishspeed);
npc.setredxy(528 + x, y);
v.addElement(npc);
}
// 加载游戏load资源
public void init() {
if (isLoad == false) {
switch (mission) {
case Tools.MISSION_ONE:
v = new Vector();
maps = new MapSprite(mainImg, 0, -100);
role = new RoleSprite(mainImg, 30, 106, 3, 1000);
npcImg = new Image[7];
gts.createImage(npcImg, "npcImg.c", 0, 7);
chet = new Chet(npcImg, 0);
addnpc();
role.role_keyState = true;
break;
case Tools.MISSION_TWO:
v = new Vector();
maps = new MapSprite(mainImg, 0, -100);
role = new RoleSprite(mainImg, 30, 106, 3, 1000);
npcImg = new Image[7];
gts.createImage(npcImg, "npcImg.c", 0, 7);
chet = new Chet(npcImg, 0);
addnpc();
role.role_keyState = true;
break;
case Tools.MISSION_THREE:
v = new Vector();
maps = new MapSprite(mainImg, 0, -100);
role = new RoleSprite(mainImg, 30, 106, 3, 1000);
npcImg = new Image[7];
gts.createImage(npcImg, "npcImg.c", 0, 7);
chet = new Chet(npcImg, 0);
addnpc();
role.role_keyState = true;
break;
case Tools.MISSION_FOUR:
v = new Vector();
maps = new MapSprite(mainImg, 0, -100);
role = new RoleSprite(mainImg, 30, 106, 3, 1000);
npcImg = new Image[7];
gts.createImage(npcImg, "npcImg.c", 0, 7);
chet = new Chet(npcImg, 0);
addnpc();
role.role_keyState = true;
break;
}
}
isLoad = true;
}
// 清空资源
public void uninit() {
isLoad = false;
loadIndex = 0;
xSize = 176;
score = 0;
v = null;
Tools.KEY_RIGHT = false;
Tools.KEY_LEFT = false;
Tools.KEY_UP = false;
Tools.KEY_DOWN = false;
}
protected void paint(Graphics g) {
setFullScreenMode(true);
g.setColor(255, 255, 255);
g.fillRect(0, 0, screenW, screenH);
g.setClip(0, 0, screenW, screenH);
switch (gameState) {
// 进入logo时画
case Tools.GAME_LOGO:
if (gameCount >= 10 && gameCount < 20) {
g.drawImage(logoImg[0], screenW / 2, screenH / 2 - 30, 3);
} else if (gameCount >= 20 && gameCount < 30) {
g.drawImage(logoImg[1], screenW / 2, 80, 3);
g.drawImage(logoImg[2], screenW / 2, 150, 3);
} else if (gameCount >= 30 && gameCount < 40) {
g.drawImage(logoImg[3], screenW / 2, screenH / 2, 3);
} else if (gameCount >= 40) {
g.drawImage(logoImg[4], screenW / 2, screenH / 2, 3);
if (gameCount % 4 == 1)
g.drawImage(logoImg[5], screenW / 2, screenH - 100, 3);
}
break;
// 进入load时画
case Tools.GAME_LOAD:
g.setColor(0);
g.fillRect(0, 0, screenW, screenH);
g.setColor(255, 255, 255);
g.drawRect(35, 150, 110, 10);
g.drawString("Loading", 40, 130, 0);
g.setColor(255, 255, 0);
if (frameload > 0) {
g.drawString("。", 80, 130, 0);
}
if (frameload > 3) {
g.drawString("。", 85, 130, 0);
}
if (frameload > 6) {
g.drawString("。", 90, 130, 0);
}
if (frameload > 9) {
g.drawString("。", 95, 130, 0);
}
if (frameload > 12) {
g.drawString("。", 100, 130, 0);
}
g.fillRect(35, 150, loadIndex, 10);
if (mission == 0) {
g.drawString("Mission 1", xSize, 100, 0);
}
if (mission == 1) {
g.drawString("Mission 2", xSize, 100, 0);
}
if (mission == 2) {
g.drawString("Mission 3", xSize, 100, 0);
}
if (mission == 3) {
g.drawString("Mission 4", xSize, 100, 0);
}
break;
// 进入菜单时画
case Tools.GAME_MENU:
switch (menuState) {
case Tools.MENU:
g.drawImage(mainImg[0], 0, 0, 0);
g.drawImage(mainImg[4], 40, this.coordinates, 0);
break;
case Tools.MENU_START:
break;
case Tools.MENU_GUANYU:
g.setColor(128, 128, 128);
g.fillRect(0, 0, screenW, screenH);
g.setColor(0);
g.drawString("该游戏为4键操作的运动类游戏", screenW / 2 - 80, 50, 0);
g.drawString("游戏开始人物会自动匀速前进,", screenW / 2 - 80, 70, 0);
g.drawString("玩家需要通过正确按键躲避障", screenW / 2 - 80, 90, 0);
g.drawString("碍物。", screenW / 2 - 80, 110, 0);
g.drawString("返回", 145, 190, 0);
break;
case Tools.MENU_HELP:
g.setColor(128, 128, 128);
g.fillRect(0, 0, screenW, screenH);
g.setColor(2);
g.drawString("《绝望漂泊》", screenW / 2 - 32, 50, 0);
g.drawString("--游戏控制--", screenW / 2 - 33, 70, 0);
g.drawString("按方向键来控制主角", screenW / 2 - 45, 90, 0);
g.drawString("制作人:张学鹏", screenW / 2 - 45, scroll + 20, 0);
g.drawString("指导教师:许宝丰", screenW / 2 - 50, scroll + 40, 0);
g.drawString("制作日期:2008年3月31日", screenW / 2 - 65, scroll + 60,
0);
g.setColor(0);
g.drawString("返回", 145, 190, 0);
break;
case Tools.MENU_EXIT:
break;
}
break;
// 正式运行游戏时画
case Tools.GAME_START:
switch (mission) {
case Tools.MISSION_ONE:
maps.paint(g);
for (int i = 0; i < v.size(); i++) {
NpcSprite npc = (NpcSprite) (v.elementAt(i));
npc.paint(g);
}
chet.paint(g);
g.setColor(255, 0, 0);
g.drawString("得分:" + score, 120, 10, 0);
role.paint(g);
break;
case Tools.MISSION_TWO:
maps.paint(g);
for (int i = 0; i < v.size(); i++) {
NpcSprite npc = (NpcSprite) (v.elementAt(i));
npc.paint(g);
}
chet.paint(g);
g.setColor(255, 0, 0);
g.drawString("得分:" + score, 120, 10, 0);
role.paint(g);
break;
case Tools.MISSION_THREE:
maps.paint(g);
for (int i = 0; i < v.size(); i++) {
NpcSprite npc = (NpcSprite) (v.elementAt(i));
npc.paint(g);
}
chet.paint(g);
g.setColor(255, 0, 0);
g.drawString("得分:" + score, 120, 10, 0);
role.paint(g);
break;
case Tools.MISSION_FOUR:
maps.paint(g);
for (int i = 0; i < v.size(); i++) {
NpcSprite npc = (NpcSprite) (v.elementAt(i));
npc.paint(g);
}
chet.paint(g);
g.setColor(255, 0, 0);
g.drawString("得分:" + score, 120, 10, 0);
role.paint(g);
break;
}
break;
// 游戏胜利时画
case Tools.GAME_WIN
大鱼吃小鱼JAVA版本源代码
4星 · 超过85%的资源 需积分: 29 142 浏览量
2011-07-20
14:42:49
上传
评论 11
收藏 223KB RAR 举报
水星灭绝
- 粉丝: 239
- 资源: 53
最新资源
- 基于双向 LSTM 中文微博情感分类项目功能实现
- PHP新闻管理系统设计与实现 毕业设计
- 基于Springboot+Vue+Python水质管理和预报系统
- STM32单片机FPGA毕设电路原理论文报告汽车电动助力转向单片机控制系统设计与试验研究
- STM32单片机FPGA毕设电路原理论文报告气压传感器神经网络算法及单片机实现
- 西南交大-大学物理A作业-2019-带参考答案
- c++语言大作业,校区人员管理系统framework.zip
- 多目标优化算法集合,包含使用手册
- c语言程序设计大作业 课程设计 高分大作业98分.zip
- STM32单片机FPGA毕设电路原理论文报告频率的测量在单片机设计中的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
- 6
前往页