JavaAWT实现贪吃蛇游戏Word下载.docx
《JavaAWT实现贪吃蛇游戏Word下载.docx》由会员分享,可在线阅读,更多相关《JavaAWT实现贪吃蛇游戏Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
*边距
publicstaticfinalintLEFT_LIMIT=10;
publicstaticfinalintUPER_LIMIT=30;
publicstaticfinalintDOWN_LIMIT=LEN*ROW+UPER_LIMIT;
publicstaticfinalintRIGHT_LIMIT=LEN*COLUMN+LEFT_LIMIT;
*方向常量
publicstaticfinalintUPER=0,DOWN=1,LEFT=2,RIGHT=3;
*画面布局数据存储数组
privatestaticint[][]panel=newint[ROW][COLUMN];
*移动方向初始化向右
privatestaticintdirect=RIGHT;
*移动时间间隔
privatestaticlongtime=500;
*贪吃蛇数据存储容器
privatestaticLinkedList<
int[]>
track=newLinkedList<
();
*增加移动时间间隔,上限为1000毫秒
publicstaticvoidtimeUp(){
if(time<
1000)
time+=100;
*减少时间间隔,下线为100毫秒
publicstaticvoidtimeDown(){
if(time>
100)
time-=100;
*获取当前时间间隔
*@returntime
publicstaticlonggetTime(){
returntime;
*获取当前界面数据
*@return
publicstaticint[][]getPanel(){
returnpanel;
*设置移动方向
*@paramdirect
publicstaticvoidsetDirect(intdirect){
Config.direct=direct;
*获得移动方向
publicstaticintgetDirect(){
returndirect;
*添加蛇头位置,如果与蛇身重复,抛出运行时异常用于结束游戏
*@paramx
*@paramy
publicstaticvoidadd(intx,inty){
panel[x][y]=1;
for(int[]arr:
track){
if(arr[0]==x&
&
arr[1]==y)
thrownewRuntimeException();
}
track.addFirst(newint[]{x,y});
*移除蛇尾
publicstaticvoidremove(){
int[]site=(int[])track.removeLast();
panel[site[0]][site[1]]=0;
importjava.awt.Graphics;
importjavax.swing.JFrame;
@SuppressWarnings("
serial"
)
*界面布局类
*
publicclassMainPanelextendsJFrame{
JFrameframe;
Policepolice;
publicMainPanel(){
//TODOAuto-generatedconstructorstub
frame=this;
frame.setBounds(300,300,Config.RIGHT_LIMIT,Config.DOWN_LIMIT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setTitle("
贪吃蛇"
);
init();
privatevoidinit(){
newWorm(this);
police=newPolice();
frame.addKeyListener(police);
publicvoidpaint(Graphicsg){
super.paint(g);
paintWorm(g);
privatevoidpaintWorm(Graphicsg){
int[][]panel=Config.getPanel();
for(inti=0;
i<
Config.ROW;
i++){
for(intj=0;
j<
Config.COLUMN;
j++){
if(panel[i][j]==1){
g.fillRect((Config.LEFT_LIMIT+Config.LEN*j),
(Config.UPER_LIMIT+Config.LEN*i),Config.LEN,
Config.LEN);
}
}
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importstaticjava.awt.event.KeyEvent.*;
*键盘监听器类
publicclassPoliceimplementsKeyListener{
@Override
publicvoidkeyPressed(KeyEvente){
//TODOAuto-generatedmethodstub
{
chara=e.getKeyChar();
if(a=='
a'
Config.setDirect(Config.LEFT);
elseif(a=='
s'
Config.setDirect(Config.DOWN);
d'
Config.setDirect(Config.RIGHT);
w'
Config.setDirect(Config.UPER);
q'
Config.timeUp();
e'
Config.timeDown();
inti=e.getKeyCode();
if(i==VK_LEFT)
elseif(i==VK_DOWN)
elseif(i==VK_RIGHT)
elseif(i==VK_UP)
publicvoidkeyReleased(KeyEvente){
publicvoidkeyTyped(KeyEvente){
*贪吃蛇构造类
publicclassWormimplementsRunnable{
int[][]panel;
*随机食物位置
int[]food=newint[2];
*蛇头位置信息
int[]head;
*当前移动方向
intdirect;
publicWorm(JFrameframe){
this.frame=frame;
panel=Config.getPanel();
direct=Config.getDirect();
head=newint[2];
wormInit();
newThread(this).start();
privatevoidwormInit(){
for(inti=1;
=3;
Config.add(7,i);
head[0]=7;
head[1]=3;
publicvoidrun(){
try{
foodRandom();
while(true){
try{
Thread.sleep(Config.getTime());
}catch(InterruptedExceptione){
e.printStackTrace();
switch(Config.getDirect()){
caseConfig.UPER:
{
if(direct==Config.DOWN){
Config.setDirect(direct);
break;
}
Config.add(head[0]--,head[1]);
if(head[0]==food[0]&
head[1]==food[1]){
//蛇头移动到食物位置后,调用产生食物方法,并不调用移除蛇尾方法
foodRandom();
Config.remove();
break;
caseConfig.DOWN:
if(direct==Config.UPER){
Config.add(head[0]++,head[1]);
caseConfig.LEFT:
if(direct==Config.RIGHT){
Config.add(head[0],head[1]--);
caseConfig.RIGHT:
if(direct==Config.LEFT){
try{
Config.add(head[0],head[1]++);
}catch(Exceptione){
direct=Config.getDirect();
frame.paint(frame.getGraphics());
}catch(Exceptione){
frame.setTitle("
GameOver"
*在随机位置产生食物
privatevoidfoodRandom(){
while(true){
intx=(int)(Math.random()*Config.ROW);
inty=(int)(Math.random()*Config.COLUMN);
if(panel[x][y]==0){
panel[x][y]=1;
food[0]=x;
food[1]=y;
return;