📄 gameobject.java
字号:
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import java.util.*;
import java.io.*;
public class gameObject extends GameCanvas implements CommandListener,Runnable{
Player player=null; //player-player3,用于创建声音Player
Player player1=null;
Player player2=null;
Player player3=null;
myMIDlet a; //类myMIDlet的对象
Sprite sprite; //人物精灵
Command back; //用于创建返回命令
int x; //X的值用于选择人物和Player
Thread t; //多线程
int height; //屏幕高度
int width; //屏幕宽度
boolean gameover; //判断游戏是否结束
Graphics g; //获得当前屏幕
Image img; //Image 用于创建人物图片和背景图片,箭头
jiantou j; //创建jiantou类的对象
Image mm1;
Image mm2;
Image gg;
Image o;
//Image mm3;
Image b;
Image pass;
Sprite p;
long size; //获得歌曲的长度,微秒为单位
long nowsize; //当前播放时间
int all; //歌曲长度转换为INT型
int now; //当前播放时间转换为INT型
int score; //得分
Font f; //字体设置
int sleep; //延时
Image cool;
Image miss;
Sprite m;
Sprite c;
int scoreCool; //COOL的累计
int scoreMiss; //MISS的累计
//构造函数用于初始化所有变量,得到相应资源
public gameObject (myMIDlet g){
super(false);
setFullScreenMode(true);
f=Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE);
height=getHeight();
width=getWidth();
t=new Thread(this);
back=new Command("返回",Command.BACK,1);
addCommand(back);
setCommandListener(this);
a=g;
InputStream is=getClass().getResourceAsStream("/sound/1.mid");
InputStream is1=getClass().getResourceAsStream("/sound/2.mid"); // 获得歌曲资源
InputStream is2=getClass().getResourceAsStream("/sound/3.mid");
InputStream is3=getClass().getResourceAsStream("/sound/4.mid");
try{
o=Image.createImage("/image/o.png");
miss=Image.createImage("/image/miss.png");
cool=Image.createImage("/image/cool.png");
pass=Image.createImage("/image/pass.png");
b=Image.createImage("/image/back.png");
gg=Image.createImage("/image/gg.png"); //获得图片资源
mm1=Image.createImage("/image/mm1.png");
mm2=Image.createImage("/image/mm2.png");
//mm3=Image.createImage("/mm3.png");
img=Image.createImage("/image/jiantou.png");
player=Manager.createPlayer(is,"audio/midi");
player1=Manager.createPlayer(is1,"audio/midi");
player2=Manager.createPlayer(is2,"audio/midi");
player3=Manager.createPlayer(is3,"audio/midi");
}catch (Exception e){
System.out.println(e.getMessage());
}
c=new Sprite(cool,69,29);
m=new Sprite(miss,77,30);
m.setPosition(-50,-50); //创建相应资源
c.setPosition(-50,-50);
p=new Sprite(pass,75,12);
p.setPosition(0,100);
}
//start函数用于判断不同人物,歌曲的创建。多线程的运行。
public void start(int i){
gameover=true;
g=getGraphics();
x=i;
switch(x){
case 0: sleep=100;
sprite=new Sprite(mm1,110,100);
sprite.setPosition(100,50);
try {
player.prefetch();
size=player.getDuration();
all=(int)size/1000000;
player.setLoopCount(1);
player.start();
}catch(Exception e){
System.out.println(e.getMessage());
}
break;
case 1:
sleep=80;
sprite=new Sprite(mm2,128,128);
sprite.setPosition(100,10);
try{
player1.prefetch();
size=player1.getDuration();
all=(int)size/1000000;
player.setLoopCount(1);
player1.start();
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 2:
sleep=60;
sprite=new Sprite(mm1,110,100);
sprite.setPosition(100,50);
try{
player2.prefetch();
size=player2.getDuration();
all=(int)size/1000000;
player.setLoopCount(1);
player2.start();
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 3: sleep=40;
sprite=new Sprite(mm2,128,128);
sprite.setPosition(100,10);
try{
player3.prefetch();
size=player3.getDuration();
all=(int)size/1000000;
player.setLoopCount(1);
player3.start();
}catch(Exception e){
System.out.println(e.getMessage());
}
break;
}
t.start();
}
//用于停止多线程
public void stop(){
gameover=false;
}
//多线程
public void run(){
j=new jiantou(this,img,23,23);
j.init();
while(gameover){
//input();
isPlay();
getTime();
draw(g);
try{
t.sleep(sleep);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
if(gameover==false){
sprite=new Sprite(gg,140,128);
while(true){
stopDraw(g);
try{
t.sleep(100);
}catch (Exception e){
System.out.println(e.getMessage());
}
}
}
}
/* public void input(){
int Key;
Key=getKeyStates();
if((Key&LEFT_PRESSED)!=0){
if(j.coll(p,0)==0){
System.out.println(j.coll(p,0));
}
}
if((Key&RIGHT_PRESSED)!=0){
if(j.coll(p,1)==1){
System.out.println(j.coll(p,1));
}
}
if((Key&UP_PRESSED)!=0){
if(j.coll(p,2)==2){
System.out.println(j.coll(p,2));
}
}
if((Key&DOWN_PRESSED)!=0){
if(j.coll(p,3)==3){
System.out.println(j.coll(p,3));
}
}
}*/
//用于控制人物的帧
public void isPlay(){
if(j.bull[0][2]>93){
sprite.setFrame(0);
m.setPosition(10,30);
scoreMiss++;
}
}
//判断用户键盘输入(用于按下状态)
public void keyPressed(int code){
int Key;
Key=getGameAction(code);
if(Key==Canvas.LEFT){
j.coll(p,0);
if(j.b==false){
c.setPosition(10,30);
score+=10;
scoreCool++;
//System.out.println(j.c);
j.init();
}
}
if(Key==Canvas.RIGHT){
j.coll(p,1);
if(j.b==false){
score+=10;
c.setPosition(10,30);
scoreCool++;
//System.out.println(j.c);
j.init();
}
}
if(Key==Canvas.UP){
j.coll(p,2);
if(j.b==false){
score+=10;
c.setPosition(10,30);
scoreCool++;
//System.out.println(j.c);
j.init();
}
}
if(Key==Canvas.DOWN){
j.coll(p,3);
if(j.b==false){
score+=10;
c.setPosition(10,30);
scoreCool++;
//System.out.println(j.c);
j.init();
}
}
}
//判断用户键盘输入(用于松开状态)
public void keyReleased(int code){
if(j.b==false){
j.b=true;
}
c.setPosition(-50,-50);
}
//用于获得歌曲当前时间
public void getTime(){
switch(x){
case 0: nowsize=player.getMediaTime();
now=(int)nowsize/1000000;
//System.out.println(now);
//System.out.println(all);
if(all!=0){
if(now==all){
stop();
}
}
break;
case 1: nowsize=player1.getMediaTime();
now=(int)nowsize/1000000;
if(all!=0){
if(now==all){
stop();
}
}
break;
case 2: nowsize=player2.getMediaTime();
now=(int)nowsize/1000000;
if(all!=0){
if(now==all){
stop();
}
}
break;
case 3: nowsize=player3.getMediaTime();
now=(int)nowsize/1000000;
if(all!=0){
if(now==all){
stop();
}
break;
}
}
}
//屏幕所有图像的绘制
public void draw(Graphics g){
g.setColor(255,255,255);
g.fillRect(0,0,width,height);
g.drawImage(b,0,0,0);
g.setColor(255,145,53);
g.setFont(f);
g.drawString("分数"+score,width/2,height/2,0);
g.drawString("总时间"+all+"秒",0,290,0);
g.drawString("当前时间"+now+"秒",130,290,0);
g.drawString("COOL:"+scoreCool,0,height/2,0);
g.drawString("MISS:"+scoreMiss,0,height/2+20,0);
sprite.paint(g);
sprite.nextFrame();
p.nextFrame();
p.paint(g);
c.paint(g);
m.paint(g);
j.updata();
j.draw(g);
flushGraphics();
}
//歌曲完后的屏幕的绘制
public void stopDraw(Graphics g){
g.setColor(255,255,255);
g.fillRect(0,0,width,height);
g.setColor(0,0,0);
g.drawString("游戏结束,按返回键继续...",0,height/2+30,0);
g.drawString("得分:"+score,width/2-30,260,0);
g.drawString("MISS:"+scoreMiss,width/2-30,240,0);
g.drawString("COOL:"+scoreCool,width/2-30,220,0);
switch(x){
case 0: if(scoreCool>180){
sprite.setPosition(50,50);
sprite.paint(g);
}else {
g.drawImage(o,80,60,0);
g.drawString("真遗憾~!",80,140,0);
}
break;
case 1: if(scoreCool>200){
sprite.setPosition(50,50);
sprite.paint(g);
}else {
g.drawImage(o,80,60,0);
g.drawString("真遗憾~!",80,140,0);
}
break;
case 2: if(scoreCool>220){
sprite.setPosition(50,50);
sprite.paint(g);
}else {
g.drawImage(o,80,60,0);
g.drawString("真遗憾~!",80,140,0);
}
break;
case 3: if(scoreCool==0){
sprite.setPosition(50,50);
sprite.paint(g);
}else {
g.drawImage(o,80,60,0);
g.drawString("真遗憾~!",80,140,0);
}
break;
}
sprite.nextFrame();
flushGraphics();
}
//监听用户命令
public void commandAction(Command c,Displayable d){
if(c==back){
switch(x){
case 0:try {
//player.setMediaTime(size);
stop();
player.stop();
}catch (Exception e){
System.out.println(e.getMessage());
}
player.close();
System.gc();
break;
case 1:try {
//player1.setMediaTime(size);
stop();
player1.stop();
}catch (Exception e){
System.out.println(e.getMessage());
}
player1.close();
System.gc();
break;
case 2:try{
//player2.setMediaTime(size);
stop();
player2.stop();
}catch(Exception e){
System.out.println(e.getMessage());
}
player2.close();
System.gc();
break;
case 3:try{
//player3.setMediaTime(size);
stop();
player3.stop();
}catch(Exception e){
System.out.println(e.getMessage());
}
player3.close();
System.gc();
break;
}
a.startMenu();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -