一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Java版吃豆游戏

时间:2008-04-28 编辑:简简单单 来源:一聚教程网

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

下载地址:http://download.111com.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;

/**
 * 
 * 


 * Title: LoonFramework
 * 


 * 


 * Description:
 * 


 * 


 * Copyright: Copyright (c) 2008
 * 


 * 


 * Company: LoonFramework
 * 


 * 


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


 * 
 * 
@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(
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;
            
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, 
00null);
        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);
               &nbs

热门栏目