Java版吃豆游戏

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

下载地址: http://download.csdn.net/source/396925

Java版吃豆游戏_第1张图片

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;

/** */ /**
 * 
 * 


 * Title: LoonFramework
 * 


 * 


 * Description:
 * 


 * 


 * Copyright: Copyright (c) 2008
 * 


 * 


 * Company: LoonFramework
 * 


 * 


 * License: http://www.apache.org/licenses/LICENSE-2.0
 * 


 * 
 * 
@author chenpeng
 * @email:[email protected]
 * 
@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(
08);

        mzmanager 
= new MazeManager();

        emanager 
= new MapManager();

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

        pac 
= new PacSprite(1020, loader);
        redmon 
= new RedMonster(1010, mzmanager, loader);
        redmon.setTarget(pac);
        spmanager.add(redmon);
        ao 
= new BlueMonster(913, mzmanager, loader);
        ao.setTarget(pac);
        spmanager.add(ao);
        pink 
= new PinkMonster(1013, mzmanager, loader);
        pink.setTarget(pac);
        spmanager.add(pink);
        monster 
= new Monster(1113, mzmanager, loader);
        monster.setTarget(pac);
        spmanager.add(monster);
        
for (int i = 0; i < 5; i++...{
            chipmanager.add(
new ChipSprite(i * 160, loader, i * 1613016,
                    
16));
        }


        atMng 
= new AttractManager(loader);
        timer 
= new Timer(this16);

        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, 
00this);
            spmanager.draw(volG, 
this);
            pac.draw(volG, 
this);
            chipmanager.draw(volG, 
this);
            
if (isAttr)
                atMng.draw(volG, 
this);
            volG.dispose();
            g.drawImage(offImage, 
00this);
        }
 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;

你可能感兴趣的:(Java版吃豆游戏)