📄 gamescreen.java
字号:
//开火
//向右
if(((sboss.getX()+40)<c1.getX())&&(sboss.getY()<c1.getY())&&((sboss.getY()+65)>c1.getY())&&(sbsz0==0))
{bossbullet0.setVisible(true);
bossbullet0.setPosition(sboss.getX()+45,sboss.getY()+35);
sbsz0=1;
}
if(sbsz0==1)
{
bossbullet0.move(3,0);
if(bossbullet0.getX()>getWidth())
{
sbsz0=0;
}
}
//向左
if((sboss.getX()>c1.getX())&&((sboss.getY()+65)>c1.getY())&&(sbsz1==0))
{
bossbullet1.setPosition(sboss.getX()+10,sboss.getY()+35);
sbsz1=1;
}
if(sbsz1==1)
{
bossbullet1.move(-3,0);
if(bossbullet1.getX()<0)
{
bossbullet1.setVisible(false);
sbsz1=0;
}
}
//向上
if((sboss.getX()<c1.getX())&&((sboss.getX()+50)>(c1.getX()))&&(sboss.getY()>c1.getY())&&(sbsz2==0))
{
bossbullet2.setVisible(true);//之所以只有2SET,是因为屏幕向上东,如果不SET,屏幕早晚会看到静止的子弹
bossbullet2.setPosition(sboss.getX()+25,sboss.getY());
sbsz2=1;
}
if(sbsz2==1)
{
bossbullet2.move(0,-4);
if(bossbullet2.getY()<planepoup)
{bossbullet2.setVisible(false);
sbsz2=0;
}
}
//向下
if((sboss.getX()<c1.getX())&&((sboss.getX()+50)>(c1.getX()))&&(sboss.getY()<c1.getY())&&(sbsz3==0))
{bossbullet0.setVisible(true);
bossbullet1.setVisible(true);
bossbullet2.setVisible(true);
bossbullet2.setPosition(sboss.getX()+10,sboss.getY()+25);
bossbullet1.setPosition(sboss.getX()+30,sboss.getY()+50);
bossbullet0.setPosition(sboss.getX()+55,sboss.getY()+25);
sbsz3=1;
}
if(sbsz3==1)
{
bossbullet0.move(0,4);
bossbullet1.move(0,4);
bossbullet2.move(0,4);
if(bossbullet0.getY()>planepo)
{
bossbullet0.setVisible(false);
bossbullet1.setVisible(false);
bossbullet2.setVisible(false);
sbsz3=0;
}
}
}//sboss end
if((slife==80))
{
sboss.setImage(img("/pic/explosion.png"),32,32);
sboss.setFrame(3);
bossbullet0.setVisible(false);
bossbullet1.setVisible(false);
bossbullet2.setVisible(false);
jiangli=11;
slife=85;
drawslife=0;
playerno=playerno+1;
sbz=-1;//sboss发射子弹那段不执行
sbpzbz=1;//玩家子弹与小BOSS不发生碰撞检测
}
//如果玩家挂了,背景的地图自动走,到BOSS出来得时候,SBOSS快速飞出屏幕上界
if((sboss.getY()==getHeight()))
{
sbz=-1;
sbpzbz=1;
drawadd=21;
}
if(drawadd==21)
{
sboss.move(0,-3);
if(sboss.getY()<-65)
{
sboss.setVisible(false);
drawadd=31;
}
}
if(planert==1)
{inputno=1;
pzbz=1;
s2=65;
c1.setImage(img("/pic/MyPlaneFrames.png"),24,24);
c1.setFrame(0);
c1.setVisible(true);
c1.setPosition(getWidth()/2,planepo+48);
//pzbz=0;
//飞机从屏幕外飞回来,此过程键盘不好用
//此时碰撞不好用,即无敌状态
planert=2;
}//玩家飞机小挂后初始位置
if(planert==2)
{
c1.move(0,-2);
if(c1.getY()<(planepo-24))
{//System.out.println(c1.getY());
//System.out.println(planepo-24);
inputno=0;
s1=1;
planert=3;
}
if(c1.getY()>(planepo+24))
{
c1.move(0,-2);
}
}
et=System.currentTimeMillis();
if((et-st)<rate)
{
try
{
Thread.sleep(rate-(et-st));
}catch(Exception exp){}
}
}
}
public void render(Graphics g)
{ System.gc();
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
lm.setViewWindow(0,0,getWidth(),getHeight()+10000);//0,0,开始位置,宽,高,既是 可视面积
lm.paint(g,0,y1);//在哪里画是地图,不是精灵//参考《王》P376,所有的点都是左上的点,所以PAINT要设置负数//即开始=-1400,一个线程+1,即-1399,-1398,
// huokebullet.paint(g);
//c1.setPosition(50,50);//有此行的话,瞄准精灵不懂,就固定在(50,50)了,
//因为线成的关系,所以此行改在了构造函数里
if(over==1)//c1.getheight=32,因为飞机被击中后变成了爆炸图片
{
g.drawString("寒在杭州览桥上空因座机被击中,壮烈殉国,时",c1.getWidth()-24,60,0);//c1.getHeight(),0);
g.drawString("1937年 8月14日,空军第4大队少尉飞行员刘思",c1.getWidth()-24,40,0);//c1.getHeight()-20,0);
g.drawString("年21岁",c1.getWidth()-24,80,0);//c1.getHeight()+20,0);
inputno=1; //键盘输入标志位,GAMEOVER后,就不能读取键盘数据了
}
g.drawString("37年8月14日 杭州览桥 战果:"+String.valueOf(huokebullet[0].rscore()+huokebullet[3].rscore()+huokebullet[6].rscore()),c1.getWidth()-24,c1.getHeight()-20,0);//
if(drawslife==1)//sboss生命条
{
g.setColor(255,0,0);
g.fillRect(2,22,80,5);//sboss进度条背景,白
g.setColor(255,255,255);
g.fillRect(2,22,slife,5);//sboss生命进度条前景,红
}
if(playerno==3)
{
g.drawImage(img("/pic/playerbiaozhi.png"),170,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),195,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),220,4,0);
}
if(playerno==2)
{
g.drawImage(img("/pic/playerbiaozhi.png"),195,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),220,4,0);
}
if(playerno==1)
{
g.drawImage(img("/pic/playerbiaozhi.png"),220,4,0);
}
if(playerno==4)
{
g.drawImage(img("/pic/playerbiaozhi.png"),145,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),170,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),195,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),220,4,0);
g.setColor(255,0,0);
}
if(jiangli==11)
{
g.setColor(255,0,0);
g.drawString("援军到达",100,150,0);
if(sboss.getY()>planepo)
{
jiangli=20;
}
}
if(s1==1)
{
g.setColor(255,255,255);
g.fillRect(170,22,65,5);//无敌生命进度条前景,白
g.setColor(255,0,0);
g.fillRect(170,22,s2,5);//无敌进度条背景,红
g.drawString("无敌时间",124,18,0);
drawadd=1;
s2=s2-1;
if(s2==0)
{pzbz=0;
s1=2;
}
}
flushGraphics();
}
public void renderboss(Graphics g)
{System.gc();
lm.setViewWindow(0,0,getWidth(),getHeight());//0,0,开始位置,宽,高,既是 可视面积
lm.paint(g,0,0);
if(over==1)//c1.getheight=32,因为飞机被击中后变成了爆炸图片
{
g.drawString("寒在杭州览桥上空因座机被击中,壮烈殉国,年",c1.getWidth()-24,60,0);//c1.getHeight(),0);
g.drawString("1937年 8月14日,空军第4大队少尉飞行员刘思",c1.getWidth()-24,40,0);//c1.getHeight()-20,0);
g.drawString("仅21岁",c1.getWidth()-24,80,0);//c1.getHeight()+20,0);
inputno=1; //键盘输入标志位,GAMEOVER后,就不能读取键盘数据了
}
g.setColor(255,0,0);
g.fillRect(2,2,60,5);//生命进度条背景,红
g.setColor(255,255,255);
g.fillRect(2,2,bosslife,5);//生命进度条前景,白
if((bossover==1)&&(c1.isVisible()))
{
g.drawString("此处加览桥空战真实历史战果",c1.getWidth()-24,40,0);//c1.getHeight()-20,0);
g.drawString("此处加览桥空战真实历史战果",c1.getWidth()-24,60,0);//c1.getHeight(),0);
g.drawString("仅21岁",c1.getWidth()-24,80,0);//c1.getHeight()+20,0);
}
if(playerno==4)
{
g.drawImage(img("/pic/playerbiaozhi.png"),145,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),170,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),195,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),220,4,0);
}
if(playerno==3)
{
g.drawImage(img("/pic/playerbiaozhi.png"),170,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),195,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),220,4,0);
}
if(playerno==2)
{
g.drawImage(img("/pic/playerbiaozhi.png"),195,4,0);
g.drawImage(img("/pic/playerbiaozhi.png"),220,4,0);
}
if(playerno==1)
{
g.drawImage(img("/pic/playerbiaozhi.png"),220,4,0);
}
if(s1==1)
{
g.setColor(255,255,255);
g.fillRect(170,22,65,5);//无敌生命进度条前景,白
g.setColor(255,0,0);
g.fillRect(170,22,s2,5);//无敌进度条背景,红
g.drawString("无敌",124,18,0);
s2=s2-1;
if(s2==0)
{pzbz=0;
s1=2;
}
}
flushGraphics();//必须写在最后,在做这BOSSOVER的时候忘了,浪费了时间
}
public void input()
{ if(inputno==0)
{
int keystate=getKeyStates();
if((keystate&UP_PRESSED)!=0)
{
moveUp();
}
if((keystate&DOWN_PRESSED)!=0)
{
moveDown();
}
if((keystate&LEFT_PRESSED)!=0)
{
moveLeft();
}
if((keystate&LEFT_PRESSED)==0)
{
c1.setFrame(0);//飞机左转后改为平飞,即,只要左键松开都是平飞
}
if((keystate&RIGHT_PRESSED)!=0)
{
moveRight();
}
//以 huokebullet[z].no为射程,以每组第一个子弹为标志,即0,3,,6,9。。。。。。。18
if((keystate&FIRE_PRESSED)!=0)
{
for(int i=0;i<=6;i=i+3)
{
if(huokebullet[i].no==1)
{
for( int z=i;z<i+3;z++)
{ //huokebullet[z].setv(z);
huokebullet[z].initBullets(z);
huokebullet[z].no=huokebullet[z].bulletheight;
}
huokebullet[i].setfirstposition(c1.getX(),c1.getY(),i,huokebullet,img("/pic/bullet.png"));//相对于IF语句的I
break;//重要,删除后就只能打一组子弹了
}
}
}
}
}
private void moveDown() {
c1.move(0,4);
if((c1.getY()+c1.getHeight())>planepo)
{
c1.setPosition(c1.getX(),planepo-c1.getHeight());//-c1.getHeight()是因为坐标点是左上的点,所以要减去GETHEIGHT以使用飞机出来
}
}
private void moveUp() {
c1.move(0,-4);
if(c1.getY()<planepoup)
{
c1.setPosition(c1.getX(),planepoup);
}
}
private void moveRight() {
c1.setFrame(2);
c1.move(3,0);
if(c1.getX()>(getWidth()-c1.getWidth()))
{
c1.setPosition((getWidth()-c1.getWidth()),c1.getY());
}
}
private void moveLeft() {
c1.move(-3,0);
c1.setFrame(1);
if(c1.getX()<=0)
{
c1.setPosition(0,c1.getY());
}
}
public void start()
{
Thread t=new Thread(this);
t.start();
}
public void commandAction(Command c,Displayable d)
{
if(c.getLabel()=="暂停")
{ conti=false;
removeCommand(c);
addCommand(new Command("继续",Command.OK,1));
}
if(c.getLabel()=="继续")
{ conti=true;
start();//此处很重要,如果不写他,则RUN()根本就不执行,所以原先的继续不好用5月30日凌晨12时22分OK
removeCommand(c);
addCommand(new Command("暂停",Command.OK,2));
}
if(c.getLabel()=="返回")
{ conti=false;
midlet.menuscreensecond();//玩完一遍或挂了后在玩一遍 菜单第一项改为 重新开始
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -