Java版吃豆游戏及源码

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

下载地址:http://download.csdn.net/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: [url]http://www.apache.org/licenses/LICENSE-2.0

[/url]* </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;                        while (true) {                                if (key > 

0)                                        break;                                

waitFrame();                        }                        timer.off();        

                atMng.player = false;                        atMng.gameover = false; 

               }        }        public void esaInit() {                Graphics 

g = bg.getGraphics();                g.drawImage(bg0, 0, 0, null);                

g.dispose();                emanager.init(bg);        }        public int 

gameMain(int stage) {                atMng.init(bg, score, number1);                

spmanager.init();                pac.init();                // 游戏状态 1:DEAD 

2:CLEAR                int gamestat = 0;                int renzoku = 0;         

       boolean ispower = false;                boolean iseyesnd = false;             

   Sprite chip;                isAttr = true;                int wait;           

     if ((score == 0) && (number1 == 3)) {                        wait = 

2000;                } else {                        wait = 1000;                

}                spmanager.setShow(false);                pac.setShow(false);    

            atMng.player = true;                atMng.ready = true;                

repaint();                sleep(wait);                atMng.setBattle(--

number1);                spmanager.setShow(true);                pac.setShow

(true);                atMng.player = false;                atMng.ready = true;  

              repaint();                sleep(wait);                isAttr = 

false;                int time = 0;                timer.on();                

int frame = 1;                while (gamestat == 0) {                        for 

(int l = 0; l < frame; l++) {                                int score0 = score;  

                              if (time == 60 * 55) {                                     

   spmanager.setNawabari(false);                                } else if (time == 60 * 

50) {                                        spmanager.setNawabari(true);            

                    } else if (time == 60 * 30) {                                        

spmanager.setNawabari(false);                                } else if (time == 60 * 25) 

{                                        spmanager.setNawabari(true);                

                } else if (time == 60 * 5) {                                        

spmanager.setNawabari(false);                                }                       

         spmanager.run();                                MonsterSprite hitmon = 

spmanager.isMonsterHit(pac);                                if (hitmon != null) {    

                                    int state = hitmon.getState();                       

                 if (state == 0)                                                gamestat 

= 1;                                        if (state == 1) {                        

                        renzoku++;                                                score 

= score + (1 << renzoku) * 100;                                                

chip = chipmanager.getSprite(renzoku);                                                

int x = hitmon.getX();                                                int y = 

hitmon.getY();                                                chip.setXY(x, y);      

                                          chip.setShow(true);                            

                    hitmon.setShow(false);                                               

 pac.setShow(false);                                                try {            

                                            Thread.sleep(50);                            

                    } catch (Exception e) {                                              

  }                                                repaint();                        

                        for (int i = 0; i < 50; i++) {                                

                        try {                                                            

    Thread.sleep(10);                                                        } catch 

(Exception e) {                                                        }             

                                   }                                                

chip.setShow(false);                                                hitmon.setShow

(true);                                                pac.setShow(true);            

                                    hitmon.activity();                                   

             iseyesnd = true;                                                if 

(ispower) {                                                        if (iseyesnd)     

                                                           try {                         

                                               Thread.sleep(10);                         

                                       } catch (Exception e) {                           

                                     }                                                }

                                        }                                }       

                         pac.setKey(key);                                int esa = 

pac.run(mzmanager, emanager);                                if (esa > 0) {       

                                 int remain = emanager.getRemain();                      

                  score += 10;                                        if (remain <= 

0)                                                gamestat = 2;                      

          }                                if (esa == 2) {                           

             redmon.state();                                        ao.state();      

                                  pink.state();                                        

monster.state();                                        pac.powerup();               

                         renzoku = 0;                                        score += 

40;                                        ispower = true;                           

     }                                if (ispower) {                                 

       if (!pac.isPower()                                                        || 

((redmon.getState() != 1)                                                                

        && (ao.getState() != 1)                                                  

                      && (pink.getState() != 1) && (monster              

                                                          .getState() != 1))) {          

                                      ispower = false;                                   

     }                                }                                if (iseyesnd) 

{                                        if ((redmon.getState() != 2) && 

(ao.getState() != 2)                                                        && 

(pink.getState() != 2)                                                        && 

(monster.getState() != 2)) {                                                iseyesnd = 

false;                                        }                                } 

                               if (score != score0) {                                    

    atMng.setScore(score);                                }                          

      time++;                                score0 = score;                         

       if (gamestat > 0)                                        break;            

            } // FPS LOOP END                        repaint();                      

  frame = waitFrame();                        System.gc();                }      

          timer.off();                try {                        Thread.sleep

(2000);                } catch (Exception e) {                }                

return gamestat;        }        public void gameTheater() {                

Graphics g = bg.getGraphics();                g.setColor(Color.black);               

 g.fillRect(0, 0, WIDTH, HEIGHT);                g.dispose();                int 

pacx = WIDTH;                int p;                int index = 288;              

  spmanager.setShow(false);                pac.init();                pac.setShow

(true);                redmon.init();                redmon.setShow(true);       

         timer.on();                int frame = 1;                int i = 0;     

           while (i < 380) {                        for (int j = 0; j < frame; 

j++) {                                p = 2;                                switch 

((i >> 2) % 4) {                                case 1:                        

                p += 4;                                        break;                

                case 3:                                        p = 8;                

                        break;                                }                      

          pac.setP(p);                                pac.setXY(pacx--, 100);        

                        redmon.setXY(index--, 100);                                

i++;                                if (i >= 360)                                 

       break;                        }                        repaint();         

               frame = waitFrame();                }                pacx = -32;  

              redmon.state();                index = 0;                i = 0;    

            while (i < 380) {                        for (int j = 0; j < frame; 

j++) {                                p = 0;                                switch 

((i >> 2) % 4) {                                case 1:                        

                p += 4;                                        break;                

                case 3:                                        p = 8;                

                        break;                                }                      

          pac.setP(p);                                pac.setXY(pacx++, 100);        

                        redmon.setXY(index++, 100);                                

i++;                                if (i >= 360)                                 

       break;                        }                        repaint();         

               frame = waitFrame();                }                timer.off(); 

       }        public void sleep(int tm) {                try {                 

       Thread.sleep(tm);                } catch (Exception e) {                      

  e.printStackTrace();                }        }        public boolean 

handleEvent(Event e) {                switch (e.id) {                case 

Event.KEY_PRESS:                case Event.KEY_ACTION:                        switch 

(e.key) {                        case Event.RIGHT:                                

key = 1;                                break;                        case 

Event.DOWN:                                key = 2;                                

break;                        case Event.LEFT:                                key = 

4;                                break;                        case Event.UP:   

                             key = 8;                                break;          

              }                        return true;                case 

Event.KEY_RELEASE:                case Event.KEY_ACTION_RELEASE:                

default:                }                return false;        }        /** 

*//**         * fps计算         *          * @return         */        

private synchronized int waitFrame() {                try {                        

wait();                } catch (InterruptedException e) {                }       

         // 返回fps                return timer.frames();        }        public 

synchronized final void notifyFrame() {                notifyAll();        }     

   public static void main(String[] args) {                final Pacgame ap = new 

Pacgame();                ap.setSize(WIDTH, HEIGHT);                Frame frm = new 

Frame("Java吃豆游戏");                frm.addWindowListener(new WindowAdapter

() {                        public void windowClosing(WindowEvent e) {               

                 ap.stop();                                System.exit(0);           

             }                });                frm.addNotify();                

Insets inset = frm.getInsets();                int w0 = inset.left + inset.right;    

            int h0 = inset.top + inset.bottom;                frm.add(ap);           

     frm.setSize(ap.getWidth() + w0, ap.getHeight() + h0);                

frm.setResizable(false);                frm.setLocationRelativeTo(null);             

   frm.setVisible(true);                ap.requestFocus();                ap.init

();                ap.start();        }}

本文出自 “Java究竟怎么玩” 博客,请务必保留此出处 http://cping1982.blog.51cto.com/601635/116833

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, new
, import
, true
, false
, public
, java源码color
, ,PAC
Java小游戏源码
吃豆人java源代码、安卓吃豆人游戏源码、unity3d吃豆人源代码、吃豆人 c语言源代码、吃豆人源码,以便于您获取更多的相关知识。

时间: 2024-12-28 11:39:18

Java版吃豆游戏及源码的相关文章

Java版吃豆游戏

这是一个吃豆游戏的Java实现,具体代码较多请下载文件. 下载地址:http://download.111cn.net/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.M

php版进销存管理系统源码

问题描述 php版进销存管理系统源码出售php版进销存管理系统源码一份,软件采用PHP开发完成,同时可根据您不同需求定制各种软件及二次开发.演示网址http://azword.cn用户:demo密码:demo.联系QQ1114034508Email:skyharp@live.cn 解决方案 解决方案二: 该回复于2009-10-19 10:49:22被版主删除解决方案三: 东方天琴进销存(php+mysql)演示地址:http://www.etqsoft.com/jxc2用户名:admin密码:

java源码-java实现汉诺塔 求源码解析思路,不要链接

问题描述 java实现汉诺塔 求源码解析思路,不要链接 一共十六个盘子,盘子必须从小到大排列,只能在abc三个塔自由移动,一次只能移动一个!求源码 解决方案 这个要递推,假设开始的时候全部在a塔上,目标是全部移到c塔上. 从一个盘子开始: 1. 一个盘子,从a移到c塔显然只需要一步,所以答案是1 2.两个盘子,那么我们需要先将上面的一个盘子移到b塔,需要1步:再将a最下面的移到c塔上,需要1步:然后再将b塔的移到c塔上,需要1步:所以总计是3 3.三个盘子,那么我们需要先将上面两个移到b塔,按照

java解析chunked+gizp的html源码,有谁做过吗。

问题描述 java解析chunked+gizp的html源码,有谁做过吗.贴一点核心代码吧.100分奉上 解决方案 解决方案二: 解决方案三:有这么难???

文件下载+断点续传-用java开发的文件下载和断点续传源码,一定开可以使用的

问题描述 用java开发的文件下载和断点续传源码,一定开可以使用的 现在需要从别的网站如百度网盘中将文件下载到本地,如果由于其他原因断开下载还需要从断开位置继续下载的功能(断点续传),求一个可用的源码 解决方案 直接贴在这吗,我写过类似的代码,多线程,断点续传 解决方案二:

纯HTML5制作围住神经猫游戏-附源码下载_javascript技巧

HTML5围住神经猫游戏网页版是一款基于HTML5.jquery.Typescript等技术制作的围住神经猫游戏. 先给大家附上演示和源码下载,点击这里  查看演示     下载源码 去年风靡微信朋友圈的小游戏"围住神经猫",我也试着做了一下.游戏是用Egret引擎开发的,因为Egret是用Typescript语言构建的,因此这里游戏也是用Typescript来开发的. 游戏规则: 点击画面上的灰色格子,慢慢将神经猫围起来抓住.如果猫到达游戏区边缘则游戏失败. 准备素材 在网上搜索&q

《Java并发编程的艺术》源码下载

<Java并发编程的艺术>纸质书购买地址=>天猫(价最低)  当当 京东  互动   亚马逊 <Java并发编程的艺术>电子书购买地址=>亚马逊 请使用JDK1.7及其以上版本编译源码,源码的任何问题可以通过评论告诉我们. 通过附件下载源码:ArtConcurrentBook 从SVN check out 源码:http://code.taobao.org/svn/ifevebook/trunk/ArtConcurrentBook   转载自 并发编程网 - ifeve

WinFom中经典小游戏(含源码)

  最近整理了若干经典的小游戏,无聊时可以打发时间.程序本身不大,练手非常不错,主要是GDI编程,主界面地址如下图所示         源码下载方式 1,关注微信公众号:小特工作室(也可直接扫描签名处二维码) 2,发送:示例4004 即可下载

仿酷狗音乐播放器开发日志二十二 动态调色板控件第二版(性能大幅提升附源码)

转载请说明原出处,谢谢~~         在上次写的博客<仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源码)>发布后,我在群里和网友讨论这个控件的性能和优 缺点,发现了他很多不足,还有很多提升空间,之后我简单的修改了代码提升了控件的响应速度.        昨天网友"风之羽翼"联系到我,他在我原来写的控件基础上,对绘图的算法进行重写,大幅提升了控件的绘制速度,算法也精准了很多,最终的控 件效果要比原酷狗更加流畅,于是今天把新的控件代码上传,供感兴趣的朋友使用.在