java小程序贪吃蛇代码_贪吃蛇的小程序

1 import java.awt.*;2 import javax.swing.*;3 import java.util.*;4 import java.awt.event.*;5 classDemo6 {7 public static voidmain(String[] args)8 {9 Worm wo=newWorm();10 }11 }12 class Worm extendsJFrame13 {14 JPanel panel;15 Point food=null;16 private int speed=200;17 private int dir=1;//方向

18 JButton contro,bu,bu2;19 ArrayList worm=new ArrayList();20 HashMap map=new HashMap();21 Dialog dia;22 Label la;23 boolean isContinue=true;24 Worm()25 {26 init();27 start();28 }29 public voidinit()30 {31 this.setBounds(250,100,500,500);32 this.add(setPanel());33 this.setResizable(false);34 this.myEvent();35 this.setVisible(true);36 }37 private void setdia()//设置弹出窗口

38 {39 dia=new Dialog(this,"game over",true);40 bu=new JButton("重新开始");41 la=new Label("game over");42 bu2=new JButton("退出");43 dia.add(la);44 dia.add(bu);45 dia.add(bu2);46 dia.setBounds(350,200,200,100);47 dia.setLayout(newFlowLayout());48

49 }50 publicJPanel setPanel()51 {52 if(panel==null)53 {54 panel=newJPanel();55 if(contro==null)56 getcontro();57 setdia();58 panel.add(contro);59 panel.setLayout(null);60 panel.setBackground(new Color(0,0,0));61 for(int i=0;i<500;i+=10)62 {63 for(int j=0;j<470;j+=10)64 {65 Point p=newPoint(i,j);66 JButton jb=newJButton();67 jb.setBounds(i,j,10,10);68 jb.setBackground(new Color(255,255,255));69 jb.setEnabled(false);70 panel.add(jb,null);71 map.put(p,jb);72 }73 }74 getFood();75 addworm();76 }77 returnpanel;78 }79 public voidgetFood()80 {81 if(food==null)82 {83 Random ran=newRandom();84 int x=ran.nextInt(49)*10;85 int y=ran.nextInt(46)*10;86 food=newPoint(x,y);87 while(worm.contains(food))88 {89 x=ran.nextInt(49)*10;90 y=ran.nextInt(46)*10;91 food=newPoint(x,y);92 }93 JButton jb1=map.get(food);94 jb1.setBackground(Color.black);95 }96 }97 public void start()//游戏开始

98 {99 while(true)100 {101 System.out.println("");102 while(isContinue)103 {104 Point p=worm.get(0);105 int x=0,y=0;106 if(dir==-1)107 {108 x=(int)p.getX()-10;109 y=(int)p.getY();110 }111 if(dir==1)112 {113 x=(int)p.getX()+10;114 y=(int)p.getY();115 }116 if(dir==-2)117 {118 x=(int)p.getX();119 y=(int)p.getY()-10;120 }121 if(dir==2)122 {123 x=(int)p.getX();124 y=(int)p.getY()+10;125 }126 Point nextp=newPoint(x,y);127 if(food.equals(nextp))128 {129 worm.add(0,nextp);130 map.get(nextp).setBackground(Color.red);131 food=null;132 getFood();133 if(speed!=80)134 speed-=10;135 continue;136 }137 if(worm.contains(nextp)||map.get(nextp)==null)138 {139 dia.setVisible(true);140 continue;141 }142 worm.add(0,nextp);143 map.get(nextp).setBackground(Color.red);144 map.get(worm.remove(worm.size()-1)).setBackground(Color.white);145 try{Thread.sleep(speed);}146 catch(Exception e)147 {148 throw new RuntimeException("发生错误");149 }150 }151 }152 }153 private void addworm()//构造一条贪吃蛇

154 {155 worm=new ArrayList();156 for(int i=200;i<230;i+=10)157 {158 Point p=new Point(i,200);159 worm.add(0,p);160 map.get(p).setBackground(Color.red);161 }162 }163 public voidgetcontro()164 {165 contro=newJButton();166 }167 private void compare(intnum)168 {169 if((num+dir)!=0)170 dir=num;171 }172 private void resum()//重构游戏

173 {174 ListIterator it=worm.listIterator();175 while(it.hasNext())176 {177 map.get(it.next()).setBackground(Color.white);178 }179 map.get(food).setBackground(Color.white);180 food=null;181 getFood();182 addworm();183 dia.setVisible(false);184 speed=200;185 if(dir==-1)186 dir=1;187 }188 private void myEvent()//所有监听器

189 {190 this.addWindowListener(newWindowAdapter()191 {192 public voidwindowClosing(WindowEvent e)193 {194 System.exit(0);195 }196 });197 bu.addActionListener(newActionListener()198 {199 public voidactionPerformed(ActionEvent e)200 {201 resum();202 }203 });204 bu2.addActionListener(newActionListener()205 {206 public voidactionPerformed(ActionEvent e)207 {208 System.exit(0);209 }210 });211 contro.addKeyListener(newKeyAdapter()212 {213 public voidkeyPressed(KeyEvent l)214 {215 int numb=l.getKeyCode();216 switch(numb)217 {218 case KeyEvent.VK_LEFT :compare(-1);break;219 case KeyEvent.VK_RIGHT :compare(1);break;220 case KeyEvent.VK_UP :compare(-2);break;221 case KeyEvent.VK_DOWN :compare(2);break;222 case KeyEvent.VK_ENTER:isContinue=true;break;223 case KeyEvent.VK_SPACE:isContinue=false;break;224 }225 }226 });227 }228 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值