package com.Penguin; import com.util.Constant; import com.util.GameUtil; import com.util.MyFrame; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Date; public class PenguinGameFrame extends MyFrame{ Image bg = GameUtil.getImage("images/bg.png"); Penguin p=new Penguin("images/left.gif",50,50); ArrayList faceList = new ArrayList(); //Explode baozha=new Explode(50,50); Explode bao; Date startime; Date endtime; Date currentTime; int time,period; boolean peng=false; public void paint(Graphics g) { g.drawImage(bg, 0, 0, null); p.draw(g); //baozha.draw(g); //bao.draw(g); //observer观察者 //遍历画子弹 for (int i = 0; i < faceList.size(); i++) { Face b = (Face) faceList.get(i); b.draw(g); //检测企鹅的碰撞 peng= b.getRect().intersects(p.getRect()); if(peng){ if(bao==null) { bao = new Explode(p.x-52, p.y-52); } p.live=false; //System.out.println("############peng!!"); endtime=new Date(); } else{ //画个时间表 //if(!(p.x==1000)){ currentTime = new Date(); try { time = (int) ((currentTime.getTime() - startime.getTime()) / 1000); } catch(Exception e) { } printInfo(g, "时间" + time + "秒", 20, Constant.GAME_WIDTH - 100, 70, Color.black); //} } } if(!p.live) { int fx=Constant.GAME_WIDTH/2-100; int fy=Constant.GAME_HEIGHt/2; period = ((int) endtime.getTime() - (int) startime.getTime()) / 1000; int time1=(time-period+1); //System.out.println(time1); //掉到窗口外面会游戏结束 if(p.y<Constant.GAME_HEIGHt+30) { p.y = p.y + time1 * time1 *5; }else { printInfo(g, "Game Over!", 50,fx, fy,Color.black); printInfo(g,"生存时间:"+ period+"秒",20 , fx, fy+40, Color.black); //判断等级 switch (period/10){ case 0: printInfo(g,"级别:菜鸟",50,fx,fy-60,Color.black); break; case 1:printInfo(g,"级别:小鸟",50,fx,fy-60,Color.black); break; case 2:printInfo(g,"级别:大鸟",50,fx,fy-60,Color.black); break; case 3:printInfo(g,"级别:鸟王子",50,fx,fy-60,Color.black); break; case 4:printInfo(g,"级别:鸟人",50,fx,fy-60,Color.black); break; default: printInfo(g,"级别:鸟神",50,fx,fy-60,Color.black); break; } } if(bao!=null) { bao.draw(g); } } } //在窗口上打印信息 public void printInfo(Graphics g,String str,int size,int x,int y,Color color){ Color c = g.getColor(); g.setColor(color); Font f=new Font("宋体",Font.BOLD,size); g.setFont(f); g.drawString(str, x, y); g.setColor(c); } //双缓冲解决屏幕一闪一闪的问题 private Image offScreenImage=null; public void update(Graphics g){ if(offScreenImage==null) { offScreenImage = this.createImage(Constant.GAME_WIDTH, Constant.GAME_HEIGHt); } Graphics g0ff=offScreenImage.getGraphics(); paint(g0ff); g.drawImage(offScreenImage,0 , 0, null); } //定义为内部类,可以方便的使用外部类的普通属性 class keyMonitor extends KeyAdapter{ //表示键盘按下去 public void keyPressed(KeyEvent e){ //每一个键都对应一个值 //System.out.println("按下:"+e.getKeyCode()); switch(e.getKeyCode()) { case KeyEvent.VK_LEFT: p.img=GameUtil.getImage("images/left.gif"); p.left=true; break; case KeyEvent.VK_UP: p.img=GameUtil.getImage("images/up.gif"); p.up=true; break; case KeyEvent.VK_RIGHT: p.img=GameUtil.getImage("images/right.gif"); p.right=true; break; case KeyEvent.VK_DOWN: p.img=GameUtil.getImage("images/down.gif"); p.down=true; break; } } //表示按键释放 public void keyReleased(KeyEvent e){ //System.out.println("释放:"+e.getKeyCode()); switch(e.getKeyCode()) { case KeyEvent.VK_LEFT: p.left=false; case KeyEvent.VK_UP: p.up=false; break; case KeyEvent.VK_RIGHT: p.right=false; break; case KeyEvent.VK_DOWN: p.down=false; break; } } } //增加键盘监听 public void launchFrame(){ super.launchFrame(); addKeyListener(new keyMonitor()); //生成一堆表情 for (int i = 0; i < 53; i++) { Face b=new Face("images/"+(i+1)+".gif"); faceList.add(b); } startime=new Date(); } public static void main(String[] args) { new PenguinGameFrame().launchFrame(); } }
最近下载更多
wybdxjq LV1
2023年12月27日
dacfsdfaa LV1
2022年5月25日
ma小跳 LV5
2021年7月2日
asdffghhj LV1
2021年3月19日
happyzhu LV1
2020年12月17日
TerryGaoBo LV9
2020年8月26日
kkkxyh LV13
2020年8月23日
a105259 LV3
2020年5月9日
xueiqngquan LV1
2019年12月14日
aa123456awww LV8
2019年12月9日