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日