package demo; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class Snake extends JFrame implements Runnable{ int x = 300; int y = 300; int x1 = 350; int y1 = 350; int mx = 10; int my = 0; int interval=400; int speed; int score; int time; boolean isRun; boolean paintFood; LinkedList<MySnake>snake = new LinkedList<MySnake>(); JMenuBar bar = new JMenuBar(); JLabel jl1 = new JLabel(" 速度级别:"); JLabel jl2 = new JLabel(); JLabel jl3 = new JLabel(" 分数:"); JLabel jl4 = new JLabel(); JLabel jl0 = new JLabel("提示:按空格键开始/暂停游戏"); JMenu jm1 = new JMenu("菜单"); JMenu jm2 = new JMenu("帮助"); JMenuItem[] jmi=new JMenuItem[4]; public Snake(){ //添加蛇体 snake.add(new MySnake(x,y)); snake.add(new MySnake(x-10,y)); snake.add(new MySnake(x-20,y)); snake.add(new MySnake(x-30,y)); snake.add(new MySnake(x-40,y)); //添加菜单条上的组件 jmi[0] = new JMenuItem("重新开始"); jmi[1] = new JMenuItem("退出"); jmi[2] = new JMenuItem("玩法"); jmi[3] = new JMenuItem("关于"); jl1.setForeground(Color.magenta); jl2.setForeground(Color.green); jl3.setForeground(Color.magenta); jl4.setForeground(Color.green); jm1.add(jmi[0]); jm1.add(jmi[1]); jm2.add(jmi[2]); jm2.add(jmi[3]); bar.add(jm1); bar.add(jm2); bar.add(jl1); bar.add(jl2); bar.add(jl3); bar.add(jl4); setJMenuBar(bar); //添加提示标签 setLayout(null); jl0.setBounds(260,0,180,30); jl0.setForeground(Color.red); add(jl0); for(int i=0;i<4;i++){ jmi[i].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(e.getSource()==jmi[0]){ Thread t = new Thread(new Snake()); t.start(); } if(e.getSource()==jmi[1]){ System.exit(0); } if(e.getSource()==jmi[2]){ JOptionPane.showMessageDialog(null,"玩法:吃掉绿色食物让蛇变得更长,以此获得更高的得分!"); } if(e.getSource()==jmi[3]){ JOptionPane.showMessageDialog(null,"作者:杨卓"); } } }); } addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ if(e.getKeyCode()==KeyEvent.VK_UP&&my==0){ mx = 0; my = -10; } if(e.getKeyCode()==KeyEvent.VK_DOWN&&my==0){ mx = 0; my = 10; } if(e.getKeyCode()==KeyEvent.VK_LEFT&&mx==0){ mx = -10; my = 0; } if(e.getKeyCode()==KeyEvent.VK_RIGHT&&mx==0){ mx = 10; my = 0; } /*if(e.getKeyCode()==KeyEvent.VK_PAGE_UP){ interval-=20; speed++; } if(e.getKeyCode()==KeyEvent.VK_PAGE_DOWN){ interval+=20; speed--; }*/ if(e.getKeyCode()==KeyEvent.VK_SPACE){ if(isRun==true){ isRun = false; }else{ isRun = true; } } } }); setTitle("玩蛇"); setSize(700,700); setLocation(350,20); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); } public void paint(Graphics g){ super.paint(g); //画蛇体 for(int i=0;i<snake.size();i++){ MySnake ms1 = snake.get(i); g.setColor(Color.red); g.fillOval(ms1.x,ms1.y,10,10); } //蛇头为蓝色 g.setColor(Color.blue); g.fillOval(snake.getFirst().x,snake.getFirst().y,10,10); //画食物 g.setColor(Color.green); while(paintFood){ x1=(int)(10+Math.random()*50)*10; y1=(int)(10+Math.random()*50)*10; int i; for(i=0;i<snake.size();i++){ if(x1==snake.get(i).x&&y1==snake.get(i).y){ break; } } if(i==snake.size()){ paintFood = false; } } g.fillOval(x1,y1,10,10); //画墙体 g.setColor(Color.orange); for(int i=90;i<=100;i+=2){ g.drawRect(i,i,700-2*i,700-2*i); } } public void run(){ while(true){ if(isRun){ MySnake ms = snake.getFirst(); snake.addFirst(new MySnake(ms.x+mx,ms.y+my)); MySnake ms2 = snake.getFirst(); speed = 1+score/50; interval = 400-80*score/50; jl2.setText(""+speed); jl4.setText(""+score); if(ms2.x==x1&&ms2.y==y1){ score+=10; paintFood = true; }else{ snake.removeLast(); } for(int i=1;i<snake.size();i++){ MySnake ms3=snake.get(i); //咬到自己,游戏结束 if(ms2.x==ms3.x&&ms2.y==ms3.y){ JOptionPane.showMessageDialog(null,"GameOver!"); return; } } if(ms2.x<100||ms2.x>590||ms2.y<100||ms2.y>590){ //碰到墙壁,游戏结束 JOptionPane.showMessageDialog(null,"GameOver!"); break; } } repaint(); try{ Thread.sleep(interval); }catch(Exception e){} } } public static void main(String[] args){ Thread t = new Thread(new Snake()); t.start(); } } class MySnake{ int x; int y; public MySnake(int x,int y){ this.x=x; this.y=y; } }
最近下载更多
zattttt LV1
5月14日
xuweisong2010 LV28
2022年6月13日
Silence丶二哈 LV13
2021年5月12日
wang123999 LV19
2021年1月1日
菜鸟选手22 LV3
2020年12月25日
Spoil me LV1
2020年12月17日
ykqwe123 LV1
2020年11月23日
675104182 LV14
2020年9月21日
xutanfei LV3
2020年5月13日
yezi1110 LV1
2020年4月19日
最近浏览更多
zattttt LV1
5月14日
zolscy LV12
3月25日
kuknkk LV1
2023年12月27日
jiemomo LV12
2023年10月19日
lili010126 LV8
2023年6月16日
微信网友_6499754820063232 LV1
2023年6月1日
DHADHAJGFU
2023年6月1日
暂无贡献等级
luo110012 LV9
2023年5月17日
舒舒不吃葱花 LV2
2022年11月18日
627526996 LV8
2022年8月8日