📄 gamecanvas.java
字号:
import java.io.IOException;
import java.io.InputStream;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.Graphics;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.midlet.MIDlet;
import com.nokia.mid.ui.FullCanvas;
/*************************************
*游戏画面类 作者:郭松柏 2004-10-20
* ===================================*/
public class GameCanvas extends FullCanvas {
private static final int LOGO = 0;
private static final int INDEX = 1;
private static final int SEELOG = 2;
private static final int SOUND = 3;
private static final int HELP = 4;
private static final int LEVEL = 5;
private static final int SUBLEVEL = 6;
private static final int GAME = 7;
private static final int PASSSUB = 8;
private static final int PASS = 9;
private static final int WIN = 10;
private static final int ABOUT = 11;
private static final int NEWGAME = 12;
//public static final Font smallFont = Font.getFont(0, 0, 8);
//public static final Font bigFont = Font.getFont(0, 1, 0);
private int gameState; //游戏状态
private int menuState; //菜单状态
private int menuNum; //菜单数
private int scoll; //文本滚动
private int level; //大关
private int subLevel; //小关
private int completeColor;
private boolean[][] mark; //标记
private boolean[] levelPass;
private boolean [] stars; //小关星星数
private int [] score; //小关分数
private int passCount;
private int timeCount;
private int doCount;
private boolean soundOpen;
private Timer gameTimer; //timer
private SCFresh scFresh; //刷屏
private Player player=null;
private LoadImages li; //载入图片
private GameLogic gl; //逻辑
private ScoreData sd;
private MIDlet m;
/**构造器**/
protected GameCanvas(MIDlet main) {
this.m = main;
gameState = LOGO;
li = new LoadImages();
li.loadLogoImg();
gameTimer = new Timer();
scFresh = new SCFresh(); //刷屏
gameTimer.schedule(scFresh, 0, 200);
}
/** 整体绘画:paint**/
protected void paint(Graphics g) {
switch(gameState){
case LOGO:
logoPage(g);
break;
case INDEX: //INDEX
indexPage(g);
break;
case NEWGAME: //NEWGAME
newGamePage(g);
break;
case LEVEL: //选关
levelPage(g);
break;
case SUBLEVEL: //选小关
subLevelPage(g);
break;
case GAME: //游戏
paintGame(g);
break;
case PASSSUB: //过小关画面
passSubPage(g);
break;
case PASS: //过关画面
passPage(g);
break;
case WIN: //LOGO
winGamePage(g);
break;
case SEELOG:
seeLog(g);
break;
case HELP:
helpPage(g);
break;
case ABOUT:
aboutPage(g);
break;
}
}
/**绘制LOGO:logoPage**/
protected void logoPage(Graphics g) {
//移动
if (timeCount <8) {
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(li.logoImgYD, 30,61, 20);
}
//sina
if (timeCount >=8 && timeCount <16) {
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(li.logoImgSina,13, 20, 20);
}
//our co.
if (timeCount >=16 && timeCount <24) {
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(li.logoImgCo, 30, 71, 20);
}
}
/**绘画首页**/
private void indexPage(Graphics g) {
int x = 57;
int y = 184;
g.setColor(0x000000);
g.drawImage(li.indexPageImg, 0, 0, 20);
//menu
String[] menu = {" 新游戏","读取进度","查看记录"," 帮 助","声音"," 关 于"," 退 出"};
/*String[] menu ={"new game","load game","scores","help","sound","exit"};*/
if (menuNum == 4) {
if (soundOpen)
g.drawString(menu[menuNum] + "=>关", x, y, 20);
else
g.drawString(menu[menuNum] + "=>开", x, y, 20);
} else {
g.drawString(menu[menuNum], x, y, 20);
}
x = 38;
y = 91;
if (menuState == 0) {
drawDoing(g, x, y, "清除进度?");
drawButton(g, 0, 188, " 是");
drawButton(g, 137, 188, " 否");
}
if (menuState == 1 || menuState == 3) {
drawDoing(g, x, y, "没有记录");
}
if (menuState == 5) { //声音设置
if (soundOpen)
drawDoing(g, x, y, "声音打开");
else
drawDoing(g, x, y, "声音关闭");
}
}
//设置结果
private void drawDoing(Graphics g,int x,int y, String s){
g.drawImage(li.doingImg, x, y, 20);
g.drawString(s, x+19, y+7, 20);
}
/**新游戏**/
private void newGamePage(Graphics g) {
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(),getHeight());
String[] newgame={
"日月神教秘技吸星大",
"法重现江湖,引起江",
"湖中人的血拼争夺,",
"乱世之中秘籍竟然落",
"到了你的手中,于是",
"你隐居深山开始刻苦",
"修炼…"
};
g.setColor(0xffcc00);
for(int i=0;i<newgame.length;i++){//显示11行
g.drawString(newgame[i], 17, 32+18*i, 20);
}
}
/**绘制选关:levelPage**/
protected void levelPage(Graphics g) {
//底部纹理
fillBack(g,0,0,11,13);
g.drawImage(li.levelPageImg, 0, 0, 20);
int tmpL=sd.getLevel();
int xy[][] = {{116,84},{57,79},{74,86},{99,85},
{76,145},{91,186},{96,53},{86,13}};
for (int i = 0; i < 8; i++) {
if(tmpL==0){
if(i==0){
g.drawImage(li.levleMenuImg[1], xy[0][0], xy[0][1],20);
}else{ //not pass levels
g.drawImage(li.levleMenuImg[2], xy[i][0], xy[i][1],20);
}
}
if(tmpL>0){
if(i < tmpL) { //pass levels
if (i == level){ //selected
g.drawImage(li.levleMenuImg[1], xy[i][0], xy[i][1],20);
} else {
g.drawImage(li.levleMenuImg[0], xy[i][0], xy[i][1],20);
}
} else { //not pass levels
g.drawImage(li.levleMenuImg[2], xy[i][0], xy[i][1],20);
}
}
}
//botton
drawButton(g,10,189,"选关");
drawButton(g,127,189,"返回");
}
//底部纹理
private void fillBack(Graphics g,int x,int y,int w,int h){
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++)
g.drawImage(li.backTexImg, x+j*16, y+i*16, 20);
}
}
/**绘制选小关:subLevelPage**/
protected void subLevelPage(Graphics g) {
//底部纹理
fillBack(g,0,0,11,13);
g.drawImage(li.sbLevelPageImg, 0, 0, 20); //画背景
//关数
g.setColor(0xFE00DD);
g.drawString("修炼 "+(level+1)+" 级", 60, 32, 20);
//绘制菜单
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
int x=36 + j * 21;
int y=86 + i * 21;
if (subLevel == (i * 5 + j)) {
g.drawImage(li.sbLevleMenuImg[1], x, y,20);
} else {
if(levelPass[i * 5 + j]){
g.drawImage(li.sbLevleMenuImg[2], x, y,20);
}else{
g.drawImage(li.sbLevleMenuImg[0], x, y,20);
}
}
}
}
//botton
drawButton(g,10,189,"选关");
drawButton(g,127,189,"返回");
}
/**绘制通关**/
private void winGamePage(Graphics g) {
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(),getHeight());
String[] win={
"经过无数日夜的刻苦",
"修炼,终于修得吸星",
"大法的最高境界。哈",
"哈哈哈,你长笑一声",
"。江湖的血雨腥风从",
"此开始…"
};
g.setColor(0xffcc00);
for(int i=0;i<win.length;i++){//显示11行
g.drawString(win[i], 17, 45+18*i, 20);
}
}
/**查看记录**/
private void seeLog(Graphics g) {
//统计
int starsCount = 0;
int scoreCount = 0;
int []tmpScore = sd.getAllScore(); //取得分数
int []tmpStars = sd.getAllStars(); //取得星星数
//总计
for (int i = 0; i < tmpStars.length; i++) {
starsCount = starsCount + tmpStars[i];
scoreCount = scoreCount + tmpScore[i];
}
//画
//g.fillRect(0,0,getWidth(),20);
fillBack(g,0,0,11,13); //纹理
//表格
g.setColor(0xC9B376);
int v=5;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 2; j++)
g.fillRect(19+j*41,v+i*18,40,17);
g.fillRect(101,v+i*18,53,17);
}
g.setColor(0x000000);
//g.drawLine(0,20,getWidth(),20);
//g.drawString("记 录", 66, 1, 20);
g.drawString("关卡", 27, v, 20);
g.drawString("星星", 68, v, 20);
g.drawString("得分", 116, v, 20);
v=22;
for (int i = 0; i < tmpStars.length; i++) {
//level
g.drawString(i + 1 + "", 35, v + i * 18, 20);
g.drawString(tmpStars[i] + "", 78, v + i * 18, 20);
g.drawString(tmpScore[i] + "", 116,v + i * 18, 20);
}
//总计
g.drawString("总计", 27, v + 8 * 18, 20);
g.drawString(starsCount + "", 78, v + 8 * 18,20);
g.drawString(scoreCount + "", 116, v + 8 * 18,20);
//back
drawButton(g,137,189,"返回");
}
/**帮助**/
private void helpPage(Graphics g) {
String[] help={
"游戏介绍:",
"本游戏为益智类游戏。",
"将所有左下角所提示的",
"颜色的方块连成一片,",
"则过关(白色方块不能",
"移动)。",
"按键说明:",
"方向键或",
"2-8-4-6数字键:",
"移动方块",
"OK键或左软键:",
"确认或弹出菜单",
"右软键:返回",
"*键:该小关重新开始",
"保存进度:",
"游戏中可按OK键或左",
"软键弹出菜单,再选择",
"“保存进度”,可保存",
"该大关已完成的小关",
"游戏奖励:",
"方块组合形状跟右下角",
"提示的形状相同,则会",
"得到一颗星星",
"",
"客服电话:95105670",
"客服EMAIL:",
"bjkf@staff.sina.com.cn"
};
//底部色快
g.setColor(0xC9B376);
g.fillRect(0, 0, getWidth(), 19);
fillBack(g,0,19,11,12); //纹理
g.setColor(0x533D00);
g.fillRect(164, 19, 12, getHeight()-39);
g.setColor(0x000000);
g.drawLine(0,19,getWidth(),19);
//箭头
if(scoll>0){
g.drawImage(li.arrowImg[0], 166, 10+(getHeight()-19)/2,20);
}
if(scoll<17){
g.drawImage(li.arrowImg[1], 166, 20+(getHeight()-19)/2,20);
}
g.drawString("帮 助", 68, 1, 20);
g.setColor(0xeeeeee);
for(int i=scoll;i<10+scoll;i++){//显示11行
g.drawString(help[i], 3, 20+17*(i-scoll), 20);
}
//back
drawButton(g,137,189,"返回");
}
/**关于**/
private void aboutPage(Graphics g) {
String[] about={
"新浪无线代理发行",
"",
"发行商网站:",
"http://mbox.sina.com.cn",
"客服电话:",
"95105670",
"客服EMAIL: ",
"bjkf@staff.sina.com.cn"
};
//底部色快
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -