coding
首页>分享>java swing开发表情包大作战游戏>/src/com/Penguin/PenguinGameFrame.java
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();
    }

}
最近下载更多
lixiang1996 LV610月12日
月亮星星星星
1602177575 LV69月23日
月亮星星星星
城南花已开1 LV19月12日
星星
youwuzuichen LV69月11日
月亮星星星星
2360248666 LV29月9日
星星星星
最代码官方 LV1459月6日
皇冠皇冠太阳星星
最近浏览更多
天下第一 LV12昨天
月亮月亮月亮
lixiang1996 LV610月12日
月亮星星星星
siximu912 LV710月11日
月亮星星星星星星
1225086246 LV310月11日
星星星星星星
萌了个乖乖 LV910月11日
月亮月亮星星
930384782 LV410月10日
月亮
fengyumeluo LV1110月10日
月亮月亮星星星星星星
xixi24 LV1510月10日
月亮月亮月亮星星星星星星
谭鬼鬼 LV4610月10日
太阳太阳月亮月亮月亮星星星星
ht23333 LV210月10日
星星星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友