这是一个吃豆游戏的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;
下载地址: http://download.youkuaiyun.com/source/396925



































































































































































































































































































