📄 gamescreen.java
字号:
drawSTR("得分:"+score,f1,red,screenW/2-30,screenH/8,bg);
/******************/
/* 命中与错失 */
/*****************/
drawSTR("连 中:",null,red,screenW/20,screenH/5,bg);
for(int i=0; i<got; i++){
bg.drawImage(score_img, screenW/10+(i+1)*score_img.getWidth(), screenH/5, 20);
}
drawSTR("miss:",null,blue,screenW/20,screenH/4,bg);
for(int i=0; i<miss; i++){
bg.drawImage(score_img, screenW/10+(i+1)*score_img.getWidth(), screenH/4, 20);
}
if(sc_y!=0&&Add)
drawDoubleScore(bg,1); //双倍加分提示
if(sc_y!=0&&Minus)
drawDoubleScore(bg,-1); //双倍减分提示
/******************/
/* 游戏任务 */
/*****************/
drawSTR(""+job,f1,blue,screenW/10,screenH/8,bg);
/******************/
/* 游戏时间 */
/*****************/
int t_size = screenW/8;
bg.setColor(blue);
bg.fillArc(screenW-t_size-10, screenH/12, t_size, t_size, 0, game_time*3);
//CPF
if(show){
bg.setColor(0x00ffff);
bg.setClip(0, 0, getWidth(), getHeight());
bg.drawString("CPS"+cps, 5, 5, Graphics.TOP|Graphics.LEFT);
}
}break;
case game_Pass:{
if(level>MaxLevel){
/******************/
/* 胜利 */
/*****************/
bg.setColor(0xff00ff);
int y = (screenH-50)/2;
bg.fillRect(lx, y, screenW/2, screenH/4); //从左往右插入的矩形
bg.fillRect(rx, y, screenW/2, screenH/4); //从右往左插入的矩形
if(lx>=0){
drawSTR("- YOU WIN -",f1,red,(screenW-78)/2,y+screenH/20,bg);
drawSTR("任意键继续",f1,black,screenW/36,(int)(screenH*0.9),bg);
if(lx++ > 10)
done = true;
//wait = true;
}
}else{
/******************/
/* 通关 */
/*****************/
bg.setColor(black);
int y = (screenH-50)/2;
bg.fillRect(lx, y, screenW/2, screenH/4); //从左往右插入的矩形
bg.fillRect(rx, y, screenW/2, screenH/4); //从右往左插入的矩形
if(lx>=0){
drawSTR("- Level Up -",f1,white,(screenW-78)/2,y+screenH/20,bg);
drawSTR("任意键继续",f1,black,screenW/36,(int)(screenH*0.9),bg);
if(lx++ > 10)
done = true;
//wait = true;
}
}
}break;
case game_Pause:{
/******************/
/* 游戏暂停 */
/*****************/
bg.setColor(red);
int y = (screenH-50)/2;
bg.fillRect(lx, y, screenW/2, screenH/4); //从左往右插入的矩形
bg.fillRect(rx, y, screenW/2, screenH/4); //从右往左插入的矩形
if(lx>=0){
drawSTR("- 游戏暂停 -",f1,blue,(screenW-78)/2,y+screenH/20,bg);
drawSTR("继续游戏",f1,black,screenW/36,(int)(screenH*0.9),bg);
drawSTR("返回菜单",f1,black,screenW-60,(int)(screenH*0.9),bg);
}
}break;
case game_Over:{
if(level<=MaxLevel){
/******************/
/* 游戏结束 */
/*****************/
bg.setColor(blue);
int y = (screenH-50)/2;
bg.fillRect(lx, y, screenW/2, screenH/4); //从左往右插入的矩形
bg.fillRect(rx, y, screenW/2, screenH/4); //从右往左插入的矩形
if(lx>=0){
drawSTR("- TIME UP -",f1,red,(screenW-78)/2,y+screenH/20,bg);
drawSTR("任意键继续",f1,black,screenW/36,(int)(screenH*0.9),bg);
if(lx++ > 10)
done = true;
//wait = true;
}
}
}break;
case game_Setting:{
bg.setColor(white);
bg.fillRect(0, 0, screenW, screenH);
Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);//获取字体
drawSTR("声音设置",f,black,screenW/2-35,screenH/20,bg);
if(sound_on_off==true){
drawSTR("声音:[开]",f1,blue,screenW/2-35,screenH/3,bg);
}else{
drawSTR("声音:[关]",f1,blue,screenW/2-35,screenH/3,bg);
}
drawSTR("返回",f1,black,screenW/36,(int)(screenH*0.9),bg);
}break;
case game_Record:{
/******************/
/* 游戏排行 */
/*****************/
bg.drawImage(topscore_img, 0, 0, 20);
Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);//获取字体
bg.setFont(f);
bg.setColor(red); //红色
bg.drawString("积分榜", (screenW-f.stringWidth("积分榜"))/2, screenH/90, 20);
try {
gr.showRecord(bg,screenW,screenH,screenW/6,screenH/5,screenW/2,screenH/8,black,f);
drawSTR("返回",f1,black,screenW/36,(int)(screenH*0.9),bg);
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}break;
case game_About:{ //游戏帮助界面
/******************/
/* 游戏帮助 */
/*****************/
bg.setColor(white);
bg.fillRect(0, 0, screenW, screenH);
Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);//获取字体
drawSTR("游戏帮助",f,black,screenW/2-30,screenH/10,bg);
bg.setColor(blue);
bg.setFont(f2);
String help = " 游戏操作:1~9键对应于游戏中9个洞,右软件为暂停,左软键为返回。" +
" 游戏规则:在规定时间内完成左上角显示的连击次数 (连续击中3次为一次连击)"+
" - Enjoy!! ";
row = screenH/4;
end = (start+1)*n;
for(int i=start; i<start+5; i++){
row += screenH/10;
String t1 = help.substring(i*n, end);
drawSTR(t1,f2,blue,screenW/10,row,bg);
end += n;
if(end>=help.length())
end = help.length();
}
int w = screenW/35;
int mx = (screenW-w)/2;
if(end!=help.length()){
int my = (int)(screenH*0.9);
bg.setColor(blue);
bg.fillTriangle(mx-w/2, my, mx, my+w, mx+w/2, my);
}
if(start>0){
int my = (int)(screenH*0.3);
bg.setColor(blue);
bg.fillTriangle(mx-w/2, my, mx+w/2, my, mx, my-w);
}
//返回按钮
drawSTR("返回",f1,black,screenW/24,(int)(screenH*0.9),bg);
}break;
case game_Quit:{
bg.setColor(black);
bg.fillRect(0, 0, screenW, screenH);
drawSTR("游戏图片源于网络",f2,73|146<<8|182<<16,
screenW/2-f2.stringWidth("游戏图片源于网络")/2,screenH/7,bg);
drawSTR("游戏版本:v1.0",f2,73|146<<8|182<<16,
screenW/2-f2.stringWidth("游戏版本:v1.0")/2,screenH*2/7,bg);
drawSTR("制作者:univasity",f2,73|146<<8|182<<16,
screenW/2-f2.stringWidth("制作者:univasity")/2,screenH*3/7,bg);
drawSTR("QQ:595920004",f2,73|146<<8|182<<16,
screenW/2-f2.stringWidth("QQ:595920004")/2,screenH*4/7,bg);
drawSTR("email:",f2,73|146<<8|182<<16,
screenW/2-f2.stringWidth("email:")/2,
screenH*5/7,bg);
drawSTR("joopererer@yahoo.com.cn",f2,73|146<<8|182<<16,
screenW/2-f2.stringWidth("joopererer@yahoo.com.cn")/2,
screenH*6/7,bg);
}break;
}
}
/**************/
/* 画星星 */
/*************/
private void drawStart(Graphics bg) {
if(isHit){
int x,y;
int w = starts_img.getWidth();
x = (int)(Starts_Positions[index][0]*scale_x);
y = (int)(Starts_Positions[index][1]*scale_y);
bg.setClip(x, y, w, starts_img.getHeight());
bg.drawImage(starts_img, x, y, 20);
}
}
/**************/
/* 画锤子 */
/*************/
private void drawSNK(Graphics bg) {
if(hasMove){
int w = snk_img.getWidth()/4; //图片宽
int h = snk_img.getHeight(); //图片高
bg.setClip((int)(Snk_Positions[index][0]*scale_x),
(int)(Snk_Positions[index][1]*scale_y), w, h);
bg.drawImage(snk_img, (int)(Snk_Positions[index][0]*scale_x-frame*w),
(int)(Snk_Positions[index][1]*scale_y), 20);
if(count%speed==0){
frame++; //变换帧
}
count++;
}
}
/*x2*/
private void drawDoubleScore(Graphics g,int i) {
bg.setClip(0, 0, screenW, screenH);
if(i>0){ //加分提示
g.drawImage(times_2, sc_x, sc_y, 20);
}else{ //减分提示
g.drawImage(devide_2, sc_x, sc_y, 20);
}
}
/*********************************************************************/
/* 游戏线程 */
/*********************************************************************/
public void run() {
while(running){
long startTime = System.currentTimeMillis();
gameLogic();
repaint();
if(System.currentTimeMillis() - lastTime > 1000){
lastTime = System.currentTimeMillis();
cps = second;
second = 0;
//改变游戏时间
if(GameState==game_Start)
game_time-=2;
}else{
second++;
}
long takenTime;
if((takenTime=System.currentTimeMillis()-startTime) < 1000/CPS){ //FPS
try {
Thread.sleep(1000/CPS-takenTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//来电处理
public static void phoneIn(){
if(GameState==game_Start){
GameState = game_Pause;
}
}
//获取缩放比率
public static double getScaleX(){
return scale_x;
}
public static double getScaleY(){
return scale_y;
}
/*********************************************************************/
/* 游戏逻辑判断 */
/*********************************************************************/
private void gameLogic(){
switch(GameState){
case game_Menu:{
if(menu_index>4)
menu_index = 0;
if(menu_index<0)
menu_index = 4;
}break;
case game_Start:{
if(game_time <= 0){ //游戏时间到达
if(job==0 && !LevelUp){ //判断是否通关
LevelUp = true;
level++;
GameState = game_Pass;
done = false;
lx = -screenW/2;
rx = screenW;
//sound
if(sound_on_off==true)
p2.playAudio();
}else{
GameState = game_Over; //游戏结束
done = false;
lx = -screenW/2;
rx = screenW;
//sound
if(sound_on_off==true)
p3.playAudio();
}
}
/*玩家操作*/
if(!isHit){
if(timer==game_sp){
mouse.changeFrame(); //变换帧
timer=0;
}else
timer++; //计时器累加
}else{ //当被击中
mouse.setFrame(3);
if(timer==game_sp*6){
mouse.setFrame(17);
isHit = false;
Add = false;
timer = 0;
}else{
timer++; //计时器累加
}
}
/*是否命中*/
if(mouse.isOut()&&(mouse.getIndex()==key-49)&&(!isHit)){
if(frame>=2)
isHit = true;
}
/*锤子逻辑*/
if(frame>4){
frame = 0;
count = 0; //计数器归零
hasMove = false; //恢复键位
Minus = false;
}
/*地鼠*/
if(level==3){
if((rmd.nextInt()>>>1)%10==0) //1/10几率闪现
if(mouse.getFrame()==2)
mouse.setFrame(6);
}
/*分数记录*/
if(hasMove)
UpdateScore();
//双倍分数
if(sc_y>screenH/10)
sc_y--;
else
sc_x = sc_y = 0;
}break;
case game_Pass:
if(lx < 0)
lx+=2;
if(rx > screenW/2)
rx-=2;
if(done/*&&(!wait)*/){
if(level>MaxLevel){
GameState = game_Over;
}else{
GameState = game_Start;
initGame();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -