?? 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 + -