📄 screen.java
字号:
package djdance;
import javax.microedition.lcdui.*;
import java.util.*;
import java.io.*;
import javax.microedition.rms.*;
import javax.microedition.media.*;
import javax.microedition.midlet.*;
public class Screen extends Canvas
{
private int cy=13;//k
static final byte Easy = 1;
static final byte Normal = 2;
static final byte Hard = 3;
static final byte TITLE=0;
static final byte COVER1 = 1;
static final byte COVER2 = 2;
static final byte SELECTLEVEL = 3;
static final byte SETTING = 4;
static final byte TOP10 = 5;
static final byte INSTRUCTIONS = 6;
static final byte ABOUT = 7;
static final byte GAMING = 8;
static final byte GAMERESULT = 9;
DJ dj;
Data d1;
GameThread gt;
Random rand = new Random();
static Image back1img,back2img,Bflash1,Bflash2,Cflash1,Cflash2,timeimg1,timeimg2,lifeimg;
static Image ballimg,dieimg,numimg,messageimg1,messageimg2,messageimg3;
static Image title1,title2,title3,menu0,menu1,menu2,menu3,overimg,passedimg,cr;
static Image jindutiaoimg1,jindutiaoimg2,jindutiaoimg3,starimg,barimg,selectimg,selectimg0;
Image offS;
Graphics offg;
byte gamestate;
int gametime;
int WD, HI;
int score;
int highscore[] = new int[3];
byte level;
byte GetLevel;
byte key;
byte step; //球的每一帧的步长
int ball[]=new int[6]; //每一帧要画的下落球数
int ballup[][]=new int[6][2]; //每一帧要画的上升球数
// ballup[0][0] 被反弹上去的球的索引值
// ballup[0][1]=0 球被慢速反弹上去 ballup[0][1]=1 球被快速反弹上去
int balldown[][]=new int[6][2]; //每一帧要画的上升球数
int[] YY= { 10, 9, 9, 7, 7, 5, 5, 3, 3, 1, 1 , -1, -1, -3, -3, -5, -5, -7, -7, -9, -9, -10 };
byte message; //画提示信息的变量
byte messagetime; //画提示信息的帧数
byte menuselect; //主菜单选项的变量
byte soundselect; //游戏是否开启声音的变量
int color; //游戏纪录画面中球的帧变量
int[] xx = { 192,237,282,327,372,417,462 }; //主菜单中用
int[][] xy = new int[20][2]; //游戏纪录中用
boolean gamepause; //游戏是否暂停的变量
byte isover; //游戏是否结束的变量
boolean ispassed; //游戏是否过关的变量
int timexx; //时间进度条的变量
byte lifeball1; //上层生命球的个数
byte lifeball2; //下层生命球的个数
boolean flagstar=true;
int starnum; //高亮的星星个数
int fenmu; //lossed+good+great的个数
int goodx; //good进度条的变量
int lossx; //lossed进度条的变量
int greatx; //great进度条的变量
int Numlossed; //lossed的个数
int Numgoods; //goods的个数
int Numgreats; //greats的个数
int Numcombo; //最大连击数
boolean isaddball; //是否增加球的变量
Player sp;
long GetTime1;
long GetTime2;
byte[][] dieturn;
//dieturn[0][0] 第一列光盘是否旋转
//dieturn[0][1] 第一列光盘是否是顺时针旋转
//dieturn[0][2] 第一列光盘旋转的时间
boolean isaddballup; //是否增加上升的球
byte selectp;
byte clock; //时钟指针的变量
public Screen(DJ dj)
{
try
{
this.dj=dj;
setFullScreenMode(true);
offS = Image.createImage(176, 204);
offg = offS.getGraphics();
d1=new Data();
level = 1;
d1.Init1(level);
for(int i = 0; i < 20; i++)
{
xy[i][0] = 66 * (i % 4 - 1);
xy[i][1] = 66 * (i / 4 - 1);
}
Init1();
System.gc();
gt=new GameThread(this);
gt.showmenu=true;
gt.start();
}
catch(Exception e) { e.printStackTrace(); }
}
protected void paint(Graphics g)
{
switch(gamestate)
{
case TITLE:
drawTitle(g);
break;
//case COVER1:
// drawCover1(g);
//break;
case COVER2:
drawCover2(g);
break;
case SELECTLEVEL:
drawSelectLevel(g);
break;
case SETTING:
drawSetting(g);
break;
case TOP10:
drawTop10(g);
break;
case GAMING:
if( !gamepause )
drawGame(g);
else
drawPause(g);
break;
case GAMERESULT:
drawGameResult(g);
break;
}
}
/* void drawOffBack1(Graphics g) //初始化菜单背景图
{
g.setColor(0x7b00ff);
g.fillRect(0, 0, 19, HI);
g.setColor(0x99ffca);
g.fillRect(19, 0, 20, HI);
g.setColor(0x51ff00);
g.fillRect(39, 0, 18, HI);
g.setColor(0xff9500);
g.fillRect(57, 0, 119, HI);
g.drawImage(cover1, 0, 4, 0);
g.drawImage(cover2, WD / 2, 192, g.TOP|g.HCENTER);
}*/
void drawOffBack0(Graphics g) //初始化标题背景图
{
g.setColor(0x009900);
g.fillRect(0, 0, WD, 75);
g.setColor(0xfffffff);
g.fillRect(0, 75, WD, 178);
g.setColor(0x009900);
g.fillRect(0, 178, WD, HI);
//g.setColor(0xff9500);
//g.fillRect(57, 0, WD, HI);
g.drawImage(title1, 0, 0, 0);
g.drawImage(title2, 0,97, 0);
g.drawImage(title3, 0,176, 0);
//g.drawImage(cover2, WD / 2, 192, g.TOP|g.HCENTER);
}
public void drawTitle(Graphics g)
{
drawOffBack0(g);
g.drawImage(menu0, 0, 186, 0);
g.drawImage(cr, 39, 3+160, 0);//wolf
}
/* void drawCover1(Graphics g)
{
drawOffBack1(g);
setClipImage(g, xx[0], 88+12-cy, menu2, 0, 0, 31, 16);
if(xx[0]>72)
xx[0]-=15;
setClipImage(g, xx[1], 104+12-cy, menu2, 31, 0, 31, 16);
if(xx[1]>72)
xx[1]-=15;
setClipImage(g, xx[2], 120+12-cy, menu2, 62, 0, 31, 16);
if(xx[2]>72)
xx[2]-=15;
setClipImage(g, xx[3], 136+12-cy, menu2, 93, 0, 31, 16);
if(xx[3]>72)
xx[3]-=15;
setClipImage(g, xx[4], 152+12-cy, menu2, 124, 0, 30, 16);
if(xx[4]>72)
xx[4]-=15;
setClipImage(g, xx[5], 168+12-cy, menu2, 155, 0, 31, 16);
if(xx[5]>72)
xx[5]-=15;
else
gamestate=COVER2;
}*/
void drawCover2(Graphics g)
{
/*drawOffBack1(g);
g.drawImage(menu1,47,98+menuselect*16-cy,0);
setClipImage(g, 72, 88+12-cy, menu2, 0, 0, 31, 16);
setClipImage(g, 72, 104+12-cy, menu2, 31, 0, 31, 16);
setClipImage(g, 72, 120+12-cy, menu2, 62, 0, 31, 16);
setClipImage(g, 72, 136+12-cy, menu2, 93, 0, 31, 16);
setClipImage(g, 72, 152+12-cy, menu2, 124, 0, 30, 16);
setClipImage(g, 73, 168+12-cy, menu2, 155, 0, 31, 16);
setClipImage(g, 1, 188, menu3, 154, 0, 31, 16); //退出
setClipImage(g, 144, 188, menu3, 185, 0, 31, 16); //确定
*/
g.setColor(0xffffff);
//wolf g.fillRect(0,0,WD,HI);
g.fillRect(0,0,WD,HI+10);//wolf
g.setColor(128,128,128);
g.drawLine(0, 20, WD, 20);
g.drawLine(0, HI-18, WD,HI-18);
//wolf setClipImage(g, 1, 188, menu3, 216, 0, 31, 16); //返回
//wolf setClipImage(g, 144, 188, menu3, 185, 0, 31, 16); //确定
setClipImage(g, 144, 188, menu3, 216, 0, 31, 16); //返回 //wolf
setClipImage(g, 1, 188, menu3, 185, 0, 31, 16); //确定 //wolf
g.drawImage(menu1,50,30+menuselect*20,0);
g.drawString("<菜单>",WD/2,1,g.TOP|g.HCENTER);
g.drawString("开始",WD/2,0+30,g.TOP|g.HCENTER);
g.drawString("设置",WD/2,20+30,g.TOP|g.HCENTER);
g.drawString("记录",WD/2,40+30,g.TOP|g.HCENTER);
g.drawString("帮助",WD/2,60+30,g.TOP|g.HCENTER);
g.drawString("关于",WD/2,80+30,g.TOP|g.HCENTER);
g.drawString("更新",WD/2,100+30,g.TOP|g.HCENTER);
}
void drawSelectLevel(Graphics g)
{
drawOffBack0(g);
g.drawImage(selectimg0,0,143,0);//遮罩
for(byte i = 0; i < 3; i++)
setClipImage(g, 37 * (i + 1), 149, ballimg, 56, 0, 28, 28);
if(gametime % 3 == 0)
setClipImage(g, 37 * level, 149, ballimg, 84, 0, 28, 28);
for(byte k = 0; k < 3; k++)
setClipImage(g, 42 + 37 * k, 154, selectimg, 17 * k, 0, 17, 17);
//wolf setClipImage(g, 1, 188, menu3, 216, 0, 31, 16); //返回
//wolf setClipImage(g, 144, 188, menu3, 185, 0, 31, 16); //确定
setClipImage(g, 144, 188, menu3, 216, 0, 31, 16); //返回//wolf
setClipImage(g, 1, 188, menu3, 185, 0, 31, 16); //确定//wolf
}
void drawSetting(Graphics g)
{
g.setColor(0xFFFFFF);
g.fillRect(0, 0, WD, HI);
g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_SMALL));
g.setColor(0x00ffFF);
g.fillRect(0, 0, WD, 20);
g.setColor(128,128,128);
g.drawLine(0, 20, WD, 20);
g.setColor(0,0,255);
g.fillRect(0, 29, WD, 20);
g.setColor(0);
g.drawString("设置",WD/2,1,g.TOP|g.HCENTER);
g.drawString("声音:",3,30,0);
if(soundselect==1)
g.drawString("开启",142,30,0);
else
g.drawString("关闭",142,30,0);
//wolf g.drawString("返回", 3, 180, 0);
//wolf g.drawString("更改", 142, 180, 0);
g.drawString("返回", 142, 180, 0);//wolf
g.drawString("更改", 3, 180, 0); //wolf
}
void drawTop10(Graphics g)
{
for(int i=0;i<20;i++)
{
setClipImage(g,xy[i][0],xy[i][1],back2img,0,0,66,66);
xy[i][0]++;
xy[i][1]++;
}
if(xy[0][0]==0)
{
for(int i=0;i<20;i++)
{
xy[i][0]-=66;
xy[i][1]-=66;
}
}
setClipImage(g, 72, 20, menu2, 62, 0, 31, 16);
for(byte i = 0; i < 3; i++)
{
setClipImage(g, 25, 60 + 40 * i, ballimg, 28 * ((color + i) % 4), 0, 28, 28);
setClipImage(g, 30, 66 + 40 * i, selectimg, 17 * i, 0, 17, 17);
drawscore2(g, 140, 67 + 40 * i, highscore[i]);
}
if(gametime%4==0)
color=(color==10000)?0:(++color);
//setClipImage(g, 144, 188, menu3, 216, 0, 31, 16); //返回
//wolf setClipImage(g, 3, 188, menu3, 216, 0, 31, 16); //返回
setClipImage(g, 144, 188, menu3, 216, 0, 31, 16); //返回//wolf
}
int bt=20;//wolf
class InstructionsScreen extends Canvas
{
Screen scr;
byte select;
public InstructionsScreen(Screen s)
{
scr=s;
select=0;
setFullScreenMode(true);
}
public void paint(Graphics g)
{
g.setColor(0xFFFFFF);
g.fillRect(0, 0, WD, HI);
g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_SMALL));
g.setColor(0x00ffFF);
g.fillRect(0, 0, WD, 20);
g.setColor(128,128,128);
g.drawLine(0, 20, WD, 20);
g.setColor(0);
g.drawString("游戏帮助",WD/2,1,g.TOP|g.HCENTER);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -