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;
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();
没有合适的资源?快使用搜索试试~ 我知道了~
java吃豆游戏,很不错的源码游戏
共35个文件
class:16个
java:14个
png:2个
3星 · 超过75%的资源 需积分: 19 42 下载量 19 浏览量
2009-01-08
10:52:13
上传
评论
收藏 76KB RAR 举报
温馨提示
java吃豆子游戏,很不错的东东,学习Java的有用的原代码
资源推荐
资源详情
资源评论
收起资源包目录
JavaPacGameProject.rar (35个子文件)
Pac.jar 32KB
Project
.project 388B
org
loon
test
MonsterSprite.class 5KB
AttractManager.java 2KB
PinkMonster.class 2KB
CGloader.java 2KB
Pacgame$1.class 738B
ChipSprite.java 750B
MapManager.java 3KB
MazeManager.class 5KB
Timer.class 1KB
CGloader.class 2KB
SpriteManager.java 2KB
Sprite.class 3KB
Monster.class 2KB
Pacgame.java 11KB
Monster.java 2KB
BlueMonster.java 1KB
MapManager.class 3KB
ChipSprite.class 1015B
RedMonster.class 1KB
PinkMonster.java 2KB
MonsterSprite.java 5KB
MazeManager.java 4KB
Pacgame.class 11KB
Sprite.java 2KB
PacSprite.java 3KB
RedMonster.java 866B
BlueMonster.class 2KB
AttractManager.class 2KB
SpriteManager.class 3KB
PacSprite.class 4KB
pacchr.png 3KB
main.png 2KB
.classpath 226B
共 35 条
- 1
资源评论
- daniel_taoxu2015-05-10跟我前面下的一样
housemanzwx
- 粉丝: 1
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功