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

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();

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();

}


}

下载地址:
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:
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();

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();

}


}

版权声明:本文为cping1982原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。