Java版吃豆游戏

                这是一个吃豆游戏的Java实现,具体代码较多请下载文件。

下载地址: http://download.youkuaiyun.com/source/396925



package  org.loon.test;

import  java.awt.Color;
import  java.awt.Event;
import  java.awt.Frame;
import  java.awt.Graphics;
import  java.awt.Image;
import  java.awt.Insets;
import  java.awt.MediaTracker;
import  java.awt.Panel;
import  java.awt.Toolkit;
import  java.awt.event.WindowAdapter;
import  java.awt.event.WindowEvent;
import  java.awt.image.BufferedImage;
import  java.awt.image.VolatileImage;

/** */ /**
 * 
 * <p>
 * Title: LoonFramework
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: Copyright (c) 2008
 * </p>
 * <p>
 * Company: LoonFramework
 * </p>
 * <p>
 * License: http://www.apache.org/licenses/LICENSE-2.0
 * </p>
 * 
 * @author chenpeng
 * @email:ceponline@yahoo.com.cn
 * @version 0.1
 */

class  Timer  implements  Runnable  ... {
    Pacgame ap;

    int duration;

    private Thread myThread;

    private boolean loopf = true;

    private long tickCount;

    public Timer(Pacgame ap, int duration) ...{
        this.ap = ap;
        this.duration = duration;
    }


    public Timer(Pacgame ap) ...{
        this(ap, 16);
    }


    public void on() ...{
        myThread = new Thread(this);
        myThread.start();
    }


    public void off() ...{
        loopf = false;
    }


    public void run() ...{
        loopf = true;
        tickCount = System.currentTimeMillis();
        while (loopf) ...{
            try ...{
                Thread.sleep(duration);
            }
 catch (Exception e) ...{
                e.printStackTrace();
            }

            ap.notifyFrame();
        }

    }


    public int frames() ...{
        long nowTick = System.currentTimeMillis();
        int frame = (int) (nowTick - tickCount) / duration;
        if (frame <= 0) ...{
            frame = 1;
            tickCount = nowTick;
        }
 else if (frame > 5) ...{
            frame = 5;
            tickCount = nowTick;
        }
 else ...{
            tickCount += frame * duration;
        }

        return frame;
    }

}


public   class  Pacgame  extends  Panel  implements  Runnable  ... {
    /** *//**
     * 
     */

    private static final long serialVersionUID = 1L;

    private static int WIDTH = 256;

    private static int HEIGHT = 224;

    Thread thread;

    //构造一个双缓冲的、可变的image
    VolatileImage offImage;

    Image bg, bg0;

    CGloader loader;

    MazeManager mzmanager;

    MapManager emanager;

    SpriteManager spmanager, chipmanager;

    MonsterSprite redmon, ao, pink, monster;

    PacSprite pac;

    AttractManager atMng;

    Timer timer;

    int key = 0;

    int score;

    int number1;

    boolean loadOK = false;

    boolean isAttr = false;

    public void init() ...{
        ClassLoader cl = getClass().getClassLoader();
        Toolkit tk = Toolkit.getDefaultToolkit();
        bg0 = tk.createImage(cl.getResource("main.png"));
        bg = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB_PRE);
        MediaTracker mt = new MediaTracker(this);
        mt.addImage(bg0, 0);
        try ...{
            mt.waitForID(0);
        }
 catch (Exception e) ...{
            e.printStackTrace();
        }

        loader = new CGloader("pacchr.png", this);
        loader.setAlpha(0, 8);

        mzmanager = new MazeManager();

        emanager = new MapManager();

        spmanager = new SpriteManager(4);
        chipmanager = new SpriteManager(5);

        pac = new PacSprite(10, 20, loader);
        redmon = new RedMonster(10, 10, mzmanager, loader);
        redmon.setTarget(pac);
        spmanager.add(redmon);
        ao = new BlueMonster(9, 13, mzmanager, loader);
        ao.setTarget(pac);
        spmanager.add(ao);
        pink = new PinkMonster(10, 13, mzmanager, loader);
        pink.setTarget(pac);
        spmanager.add(pink);
        monster = new Monster(11, 13, mzmanager, loader);
        monster.setTarget(pac);
        spmanager.add(monster);
        for (int i = 0; i < 5; i++) ...{
            chipmanager.add(new ChipSprite(i * 16, 0, loader, i * 16, 130, 16,
                    16));
        }


        atMng = new AttractManager(loader);
        timer = new Timer(this, 16);

        setBackground(Color.black);
        setSize(WIDTH, HEIGHT);

        offImage = createVolatileImage(WIDTH, HEIGHT);

    }


    public void paint(Graphics g) ...{
        if (!loadOK)
            return;
        do ...{
            int returnCode = offImage.validate(getGraphicsConfiguration());
            if (returnCode == VolatileImage.IMAGE_INCOMPATIBLE)...{
                offImage = createVolatileImage(WIDTH, HEIGHT);
            }

            Graphics volG = offImage.getGraphics();
            volG.drawImage(bg, 0, 0, this);
            spmanager.draw(volG, this);
            pac.draw(volG, this);
            chipmanager.draw(volG, this);
            if (isAttr)
                atMng.draw(volG, this);
            volG.dispose();
            g.drawImage(offImage, 0, 0, this);
        }
 while (offImage.contentsLost());
    }


    public void update(Graphics g) ...{
        paint(g);
    }


    public void start() ...{
        System.gc();
        if (thread == null) ...{
            thread = new Thread(this);
            thread.start();
        }

    }


    @SuppressWarnings("deprecation")
    public void stop() ...{
        if (thread != null) ...{
            thread.stop();
            thread = null;
        }

    }


    public void run() ...{

        while (true) ...{
            // MAIN LOOP
            score = 0;
            number1 = 3;
            int stage = 1;
            esaInit();
            loadOK = true;
            while (number1 > 0) ...{
                while (gameMain(stage) == 2) ...{
                    if (stage == 2)
                        gameTheater();
                    stage++;
                    number1++;// 1:DEAD 2:CLEAR
                    esaInit();
                }

            }

            // GAME OVER
            isAttr = true;
            spmanager.setShow(false);
            pac.setShow(false);
            atMng.player = true;
            atMng.ready = false;
            atMng.gameover = true;
            repaint();

            timer.on();
            key = 0;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值