zoukankan      html  css  js  c++  java
  • 贪吃蛇的小程序

      1 import java.awt.*;
      2 import javax.swing.*;
      3 import java.util.*;
      4 import java.awt.event.*;
      5 class  Demo
      6 {
      7  public static void main(String[] args) 
      8  {
      9   Worm wo=new Worm();
     10  }
     11 }
     12 class Worm extends JFrame
     13 {
     14  JPanel panel;
     15  Point food=null;
     16  private int speed=200;
     17  private int dir=1;//方向
     18  JButton contro,bu,bu2;
     19  ArrayList<Point> worm=new ArrayList<Point>();
     20  HashMap<Point,JButton> map=new HashMap<Point,JButton>();
     21  Dialog dia;
     22  Label la;
     23  boolean isContinue=true;
     24  Worm()
     25  {
     26   init();
     27   start();
     28  }
     29  public void init()
     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(new FlowLayout());
     48   
     49  }
     50  public JPanel setPanel()
     51  {
     52   if(panel==null)
     53   {
     54    panel=new JPanel();
     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=new Point(i,j);
     66      JButton jb=new JButton();
     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   return panel;
     78  }
     79  public void getFood()
     80  {
     81   if(food==null)
     82   {
     83    Random ran=new Random();
     84    int x=ran.nextInt(49)*10;
     85    int y=ran.nextInt(46)*10;
     86    food=new Point(x,y);
     87    while(worm.contains(food))
     88    {
     89     x=ran.nextInt(49)*10;
     90     y=ran.nextInt(46)*10;
     91     food=new Point(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=new Point(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<Point>();
    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 void getcontro()
    164  {
    165   contro=new JButton();
    166  }
    167  private void compare(int num)
    168  {
    169   if((num+dir)!=0)
    170    dir=num;
    171  }
    172  private void resum()//重构游戏
    173  {
    174   ListIterator<Point> 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(new WindowAdapter()
    191   {
    192    public void windowClosing(WindowEvent e)
    193    {
    194     System.exit(0);
    195    }
    196   });
    197   bu.addActionListener(new ActionListener()
    198   {
    199    public void actionPerformed(ActionEvent e)
    200    {
    201     resum();
    202    }
    203   });
    204   bu2.addActionListener(new ActionListener()
    205   {
    206    public void actionPerformed(ActionEvent e)
    207    {
    208     System.exit(0);
    209    }
    210   });
    211   contro.addKeyListener(new KeyAdapter()
    212   {
    213    public void keyPressed(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 }


    自制贪吃蛇小游戏  

  • 相关阅读:
    java.lang.Class
    公司面试题目之取出数据库中重复的记录
    常用的linux基础命令
    算法练习4冒泡排序java版
    算法练习1桶排序java版
    算法练习2斐波那契数列java版
    算法练习3水仙花数java版
    mysql查询语句复习小结
    linux设置开机自动进入命令模式
    JSP九大内置对象和四个作用域
  • 原文地址:https://www.cnblogs.com/mengzhang/p/5293202.html
Copyright © 2011-2022 走看看