📄 maincanvas.java
字号:
import javax.microedition.lcdui.*;
import com.nokia.mid.ui.*;
public class mainCanvas extends FullCanvas implements Runnable
{
private Image m_offScreen;
private Graphics m_offG;
private int m_gamePage = 0; //标识游戏进行中的各页: 0--菜单页 1--游戏页
private int m_scene; //游戏进行中的场景号: 0--战斗页 其它代表各场景的序号
private int m_toScene; //即将要切换去的场景号
private int m_switchFightState; //场景画面与战斗画面的切换状态:
// 1:场景->战斗,亮->暗 应该:场景画面
// 2:场景->战斗,暗->亮 应该:战斗画面
// 3:战斗->场景,亮->暗 应该:战斗画面
// 4:战斗->场景,暗->亮 应该:场景画面
private int m_sceneAfterFight; //记录战斗之后应该回到的场景
private CMenu m_menu; //菜单
private CMan m_player; //主角
private CSlide m_slide; //渐变
private CText m_text; //显示信息
private boolean m_confirm = false; //是否按下确定
private boolean m_dialogOn; //是否处于对话状态
private int m_dialogID; //对话ID号,随着剧情增加
private boolean m_firstBoot; //是否第一次游戏
private int m_process = 0; //游戏进度,与同一个 NPC 说不同的话时用到
public mainCanvas()
{
m_offScreen = Image.createImage(176, 208);
m_offG = m_offScreen.getGraphics();
m_menu = new CMenu(m_offG);
m_player = new CMan(m_offG, "/data/player.png");
m_text = new CText(m_offG);
m_slide = new CSlide(m_offG);
int slideAreaX[] = {0, 176, 176, 0};
int slideAreaY[] = {0, 0, 208, 208};
m_slide.setSlideArea(slideAreaX, slideAreaY);
(new Thread(this)).start();
}
public void paint(Graphics g)
{
g.drawImage(m_offScreen, 0, 0, 0);
}
public void run()
{
while(true)
{
//清屏
m_offG.setColor(0,0,0);
m_offG.fillRect(0,0,176,208);
//游戏处理
switch (m_gamePage)
{
case 0: //菜单页
m_menu.draw();
if (m_menu.isGameStarted()) //游戏开始
{
m_player.reset();
m_dialogOn = false;
m_dialogID = 1;
m_gamePage = 1;
m_player.loadScene(0, 2);
m_scene = 2;
m_slide.setSlideState(1); //游戏开始有渐变效果
m_slide.setAlpha(255);
m_switchFightState = 4;
m_firstBoot = true;
}
break;
case 1: //游戏页
if (m_player.isFighted()) //已触发战斗,或正在战斗
{
if (m_player.isDead())
{
m_gamePage = 0; //主角死亡,回到游戏菜单
m_menu.reset();
}
if (m_scene != 0) //已经触发战斗,但还在场景页面渐变
{
m_toScene = 0; //即将切换到战斗画面
m_sceneAfterFight = m_scene; //记录战斗完后应该返回的场景号
m_scene = 0; //此次战斗这条 if 语句不再执行
m_slide.setSlideState(2); // 亮 -> 暗
m_switchFightState = 1; //场景->战斗
}
}
else //处于场景页面
{
if (m_scene == 0)
{
m_scene = m_toScene; //渐变完后回到原来场景
m_toScene = 0; //战斗结束渐暗处理完,即将处理变暗后的场景转换
m_slide.setSlideState(2); // 亮 -> 暗
m_switchFightState = 3; //战斗->场景
}
}
switch (m_switchFightState)
{
case 1: //场景->战斗,亮->暗 应该:场景画面
case 4: //战斗->场景,暗->亮 应该:场景画面
m_player.drawMap();
m_player.drawNPC();
m_player.drawPlayer();
checkTalk(); //是否主角触发了对话
setDialog(); //设置对话内容
break;
case 2: //场景->战斗,暗->亮 应该:战斗画面
case 3: //战斗->场景,亮->暗 应该:战斗画面
m_player.drawBattle();
break;
}
SwitchScene();
m_text.paint();
break;
}
//游戏渲染
this.repaint();
try{Thread.sleep(80);}catch(Exception d){}
}
}
public void checkTalk()
{
if (m_text.getTextState() == 0 && m_confirm) //没有对话时,并且按下确定时
{
switch (m_player.getNextCollideNPC())
{
case 4: //与阿美对话时
m_dialogOn = true;
switch (m_process)
{
case 1: //与阿美第一次对话完后
m_dialogID = 14;
break;
case 2: //与霍恩第一次对话完后
case 3: //与胡尔第一次对话完后
m_dialogID = 26;
break;
}
break;
case 2: //与霍恩对话
m_dialogOn = true;
switch (m_process)
{
case 1: //与阿美第一次对话完后
m_dialogID = 15;
break;
case 2: //与霍恩第一次对话完后
case 3: //与胡尔第一次对话完后
m_dialogID = 25;
break;
}
break;
case 1: //与胡尔对话
m_dialogOn = true;
switch (m_process)
{
case 1: //还没到与此 NPC 对话的时候
m_dialogID = 44;
break;
case 2: //与霍恩第一次对话完后
m_dialogID = 27;
break;
case 3: //与胡尔第一次对话完后
m_dialogID = 37;
break;
}
break;
case 0: //与萨耶对话
m_dialogOn = true;
switch (m_process)
{
case 1:
case 2: //还没发展到此情节
m_dialogID = 44;
break;
case 3: //与胡尔第一次对话完后
m_dialogID = 38;
break;
}
break;
}
}
}
public void setDialog()
{
if (m_dialogOn)
{
m_text.emptyText();
switch (m_dialogID)
{
case 1: //========= 与阿美第一次对话
m_text.setText(0, "阿美:你终于醒了!");
m_text.show();
break;
case 2:
m_text.setText(0, "诺齐奥尼:这是什么地");
m_text.setText(1, "方?");
break;
case 3:
m_text.setText(0, "阿美:我的家啊!你已");
m_text.setText(1, "经昏睡了3天啦!");
break;
case 4:
m_text.setText(0, "诺齐奥尼:……");
break;
case 5:
m_text.setText(0, "阿美:你和你的朋友倒");
m_text.setText(1, "在海边,是我爸爸把你");
m_text.setText(2, "们救回来的。");
break;
case 6:
m_text.setText(0, "诺齐奥尼:露娜,露娜");
m_text.setText(1, "……她在哪?");
break;
case 7:
m_text.setText(0, "阿美:哦。是那个女孩");
m_text.setText(1, "吗?");
break;
case 8:
m_text.setText(0, "诺齐奥尼:嗯……");
break;
case 9:
m_text.setText(0, "阿美:她还在昏迷当中");
m_text.setText(1, "……");
break;
case 10:
m_text.setText(0, "诺奇奥尼:那我怎么才");
m_text.setText(1, "能救她啊……");
break;
case 11:
m_text.setText(0, "阿美:这个我也不知道");
m_text.setText(1, "……你去门口找我爸爸");
m_text.setText(2, "问问吧,他就在这附近");
break;
case 12:
m_text.setText(0, "卖装备呢!");
break;
case 13:
m_text.setText(0, "诺奇奥尼:嗯,好的…");
m_text.setText(1, "…");
m_text.setCanEnd(true); //第一对话结束!
m_process = 1;
break;
case 14: //========= 与阿美第二次对话
m_text.setText(0, "阿美:快去问问我爸爸");
m_text.setText(1, "吧,他就在外边附近。");
m_text.show();
m_text.setCanEnd(true); //此次对话结束
break;
case 15: //========= 与霍恩第一次对话
m_text.setText(0, "霍恩:小伙子你醒啦?");
m_text.show();
break;
case 16:
m_text.setText(0, "诺奇奥尼:谢谢您的救");
m_text.setText(1, "命之恩!我的朋友还没");
m_text.setText(2, "醒,能帮我救救他吗?");
break;
case 17:
m_text.setText(0, "霍恩:我已经尽力了,");
m_text.setText(1, "她中了一种很奇怪的毒");
m_text.setText(2, ",我从来没有见过……");
break;
case 18:
m_text.setText(0, "诺奇奥尼:那……那怎");
m_text.setText(1, "么办?");
break;
case 19:
m_text.setText(0, "霍恩:村子附近有个男");
m_text.setText(1, "孩叫胡尔,他性格很孤");
m_text.setText(2, "僻,但是精通医术,你");
break;
case 20:
m_text.setText(0, "试着去找他问问吧。");
break;
case 21:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -