贪食蛇源代码.docx
《贪食蛇源代码.docx》由会员分享,可在线阅读,更多相关《贪食蛇源代码.docx(18页珍藏版)》请在冰豆网上搜索。
贪食蛇源代码
packagegsf;
/**
*软件开发=框架+插入点
*本UI框架,第15次课,详细讲解,学员都能“自主”写出来!
*/
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjavax.swing.*;
importjava.io.File;
importjava.io.IOException;
importjavax.sound.sampled.*;
publicclassGame
{
//TODO:
变量“声明”在下面
窗口ck=null;
定时器ds1=null;
inttouxiang=0;
int[][]pan;
inttoux;
inttouy;
intdoux;/*(0,n)随机数*/
intdouy;/*(0,n)随机数*/
int[]shenx;
int[]sheny;
booleanwin=false;
booleanlose=false;
booleandouc=false;
Game()
{
//TODO:
程序初始化在下面
pan=newint[22][22];
for(inti=0;i<22;i++){
pan[0][i]=4;
pan[i][0]=4;
pan[21][i]=4;
pan[i][21]=4;
}
pan[1][1]=2;
pan[1][2]=1;
toux=2;
touy=1;
shenx=newint[10];
sheny=newint[10];
for(inti=0;i<10;i++){
shenx[i]=0;
sheny[i]=0;
}
shenx[0]=1;
sheny[0]=1;
doux=1+newRandom().nextInt(20);/*(0,n)随机数*/
douy=1+newRandom().nextInt(20);/*(0,n)随机数*/
ck=new窗口();
//窗口宽+2*立体边,高+2*立体边+标题栏
ck.setSize(5*2+600,600+2*5+25);
//设定窗口可见性setVisibletrue/false
ck.setVisible(true);
//延时的毫秒
ds1=new定时器(200);
}
class窗口extendsJFrame
{
菜单cd=null;
面板mb=null;
窗口监听器exit=null;
键盘监听器jp=null;
窗口()
{
jp=new键盘监听器();
this.addKeyListener(jp);
mb=new面板();
this.add(mb);
exit=new窗口监听器();
this.addWindowListener(exit);
this.repaint();
}
class菜单extendsJMenuBar
{
JMenudan;//菜单
JMenuItemxiang1;//菜单项
菜单监听器cdjtq;
菜单()
{
dan=newJMenu("游戏");//菜单
xiang1=newJMenuItem("开局");//菜单项
this.add(dan);
dan.add(xiang1);
cdjtq=new菜单监听器();
xiang1.addActionListener(cdjtq);
}
class菜单监听器implementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
//TODO:
菜单事件处理
if(e.getSource()==xiang1)
{
}
}
}
}
class窗口监听器extendsWindowAdapter
{
publicvoidwindowClosing(WindowEvente)
{
ds1.xc.stop();
System.exit(0);
}
}
class键盘监听器implementsKeyListener
{
//TODO:
键盘按下,可加入KeyEvent.VK_XXX
publicvoidkeyPressed(KeyEvente)
{
switch(e.getKeyCode())
{
caseKeyEvent.VK_LEFT:
//左键
if(touxiang!
=0)
touxiang=2;
break;
caseKeyEvent.VK_RIGHT:
//右键
if(touxiang!
=2)
touxiang=0;
break;
caseKeyEvent.VK_UP:
//上键
if(touxiang!
=3)
touxiang=1;
break;
caseKeyEvent.VK_DOWN:
//下键
if(touxiang!
=1)
touxiang=3;
break;
caseKeyEvent.VK_1:
//大键盘数字1
break;
caseKeyEvent.VK_W:
//W键盘
break;
}
ck.repaint();
}
publicvoidkeyReleased(KeyEvente)
{
//TODO:
键盘释放,可加入KeyEvent.VK_XXX
switch(e.getKeyCode())
{
caseKeyEvent.VK_LEFT:
//左键
break;
caseKeyEvent.VK_RIGHT:
//右键
break;
caseKeyEvent.VK_UP:
//上键
break;
caseKeyEvent.VK_DOWN:
//下键
break;
caseKeyEvent.VK_1:
//大键盘数字1
break;
caseKeyEvent.VK_W:
//W键盘
break;
}
ck.repaint();
}
publicvoidkeyTyped(KeyEvente)
{
}
}
class面板extendsJPanel
{
鼠标监听器sb=null;
面板()
{
sb=new鼠标监听器();
this.addMouseListener(sb);
this.addMouseMotionListener(sb);
}
class鼠标监听器extendsMouseAdapterimplementsMouseMotionListener
{
publicvoidmousePressed(MouseEvente)
{
//mxmy鼠标的位置
intmx=e.getX();
intmy=e.getY();
//TODO:
鼠标按下在下面
ck.repaint();
}
publicvoidmouseDragged(MouseEvente)
{
//mxmy鼠标的位置
intmx=e.getX();
intmy=e.getY();
//TODO:
鼠标拖拽在下面
ck.repaint();
}
publicvoidmouseMoved(MouseEvente)
{
//mxmy鼠标的位置
intmx=e.getX();
intmy=e.getY();
//TODO:
鼠标移动在下面
ck.repaint();
}
publicvoidmouseReleased(MouseEvente)
{
//mxmy鼠标的位置
intmx=e.getX();
intmy=e.getY();
//TODO:
鼠标释放在下面
ck.repaint();
}
publicvoidmouseClicked(MouseEvente)//鼠标单击
{
}
}
publicvoidpaint(Graphicsg)
{
//命令提示:
//矩形jx
//椭圆ty
//实心矩形sxjx
//实心椭圆sxty
//图片tp
//g.setColor(Color.BLUE);//设定颜色:
REDGREENBLUEORANGE
//TODO:
绘图在下面
if(!
win&&!
lose){
Imagetu=(newImageIcon("贪吃蛇/背景.PNG")).getImage();
g.drawImage(tu,0,0,null);//绘制图片API
Imagetut=(newImageIcon("贪吃蛇/头"+touxiang+".PNG")).getImage();
g.drawImage(tut,toux*27,touy*27,null);
for(inth=0;h<22;h=h+1)//对于?
从?
循环到?
{
for(intl=0;l<22;l=l+1)//对于?
从?
循环到?
{
if(pan[h][l]==2){
Imagetus=(newImageIcon("贪吃蛇/身.PNG")).getImage();
g.drawImage(tus,l*27,h*27,null);//绘制图片API
}//if
elseif(pan[h][l]==4){
Imagetuq=(newImageIcon("贪吃蛇/墙.PNG")).getImage();
g.drawImage(tuq,l*27,h*27,null);
}//else
}//for
}//for
if(douc==true){
do{
doux=1+newRandom().nextInt(20);/*(0,n)随机数*/
douy=1+newRandom().nextInt(20);/*(0,n)随机数*/
}while(pan[douy][doux]!
=0);
douc=false;
}//if
Imagetud=(newImageIcon("贪吃蛇/豆.png")).getImage();
g.drawImage(tud,doux*27,douy*27,null);//绘制图片API
}//if
if(win){
Imagetu=(newImageIcon("贪吃蛇/背景.PNG")).getImage();
g.drawImage(tu,0,0,null);//绘制图片API
for(inth=0;h<22;h=h+1)//对于?
从?
循环到?
{
for(intl=0;l<22;l=l+1)//对于?
从?
循环到?
{
Imagetuq=(newImageIcon("贪吃蛇/墙.PNG")).getImage();
g.drawImage(tuq,l*27,h*27,null);
}
}
Imagetuy=(newImageIcon("贪吃蛇/ying.png")).getImage();
g.drawImage(tuy,100,100,null);//绘制图片API
}elseif(lose){
Imagetu=(newImageIcon("贪吃蛇/背景.PNG")).getImage();
g.drawImage(tu,0,0,null);//绘制图片API
for(inth=0;h<22;h=h+1)//对于?
从?
循环到?
{
for(intl=0;l<22;l=l+1)//对于?
从?
循环到?
{
Imagetuq=(newImageIcon("贪吃蛇/墙.PNG")).getImage();
g.drawImage(tuq,l*27,h*27,null);
}
}
Imagetul=(newImageIcon("贪吃蛇/gameover.png")).getImage();
g.drawImage(tul,200,200,null);//绘制图片API
}
}
}
}
class定时器implementsRunnable//实现Runnable接口
{
Threadxc=null;
longjianGe;
定时器(longjianGe)
{
this.jianGe=jianGe;
xc=newThread(this);
xc.start();
}
publicvoidrun()
{
while(!
win&&!
lose)
{
try
{
xc.sleep(jianGe);
if(this==ds1)
{
//TODO:
定时处理在下面
intcurrentx=0;
intcurrenty=0;
for(inti=0;i<10;i++){
if(shenx[i]!
=0){
currentx=shenx[i];
currenty=sheny[i];
}
elseif(shenx[i]==0)
break;
}
for(inti=9;i>=1;i--){
if(shenx[i]!
=0){
shenx[i]=shenx[i-1];
sheny[i]=sheny[i-1];
pan[sheny[i]][shenx[i]]=2;
}
}
if(touxiang==0){
toux+=1;
//if(shenx[1]==0){
//currentx=shenx[0];
//currenty=sheny[0];
//
//}
shenx[0]=toux-1;
sheny[0]=touy;
pan[sheny[0]][shenx[0]]=2;
}
elseif(touxiang==1){
touy-=1;
//if(shenx[1]==0){
//currentx=shenx[0];
//currenty=sheny[0];
//
//}
shenx[0]=toux;
sheny[0]=touy+1;
pan[sheny[0]][shenx[0]]=2;
}
elseif(touxiang==2){
toux-=1;
//if(shenx[1]==0){
//currentx=shenx[0];
//currenty=sheny[0];
//
//}
shenx[0]=toux+1;
sheny[0]=touy;
pan[sheny[0]][shenx[0]]=2;
}
elseif(touxiang==3){
touy+=1;
//if(shenx[1]==0){
//currentx=shenx[0];
//currenty=sheny[0];
//
//}
shenx[0]=toux;
sheny[0]=touy-1;
pan[sheny[0]][shenx[0]]=2;
}
//for(inti=1;i<10;i++){
//
//if(shenx[i]!
=0){
//currentx=shenx[i];
//currenty=sheny[i];
//shenx[i]=shenx[i-1];
//sheny[i]=sheny[i-1];
//pan[sheny[i]][shenx[i]]=2;
//}
//
//}
if(toux==doux&&touy==douy){
douc=true;
}
pan[currenty][currentx]=0;
if(douc==true){
for(inti=0;i<10;i++){
if(shenx[i]==0){
shenx[i]=shenx[i-1]-1;
sheny[i]=sheny[i-1];
break;
}
}
}
if(shenx[9]!
=0)
win=true;
if(pan[touy][toux]!
=0)
lose=true;
//for(inti=0;i<22;i++){
//if(pan[0][i]!
=4&&pan[i][0]!
=4&&pan[21][i]!
=4&&pan[i][21]!
=4)
//win=false;
//}
ck.repaint();
}
}
catch(InterruptedExceptione)
{
e.printStackTrace();
}
}
}
}
//main主方法,主类的“入口方法”
publicstaticvoidmain(String[]args)
{
newGame();
}
}