dj619406695 dj619406695
超级仙剑迷!!!!!!!!!!!!!!!!
关注数: 46 粉丝数: 58 发帖数: 3,217 关注贴吧数: 32
【初学者】想学java,在网上找了一个贪吃蛇,看不太懂,求注释 import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.*; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; public class KeyBoard extends JFrame{ private int direction = 0; private int judge = 0; private Panel panel = new Panel(); private RectLabel label[] = new RectLabel[1200]; private HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); private ArrayList<RectLabel> list = new ArrayList<RectLabel>(); private Point[] point = new Point[1200]; private int targetX = 0; private int targetY = 0; private static int goal = 3; private int speed; private RectLabel targetLabel = new RectLabel(); private static KeyBoard frame = new KeyBoard(); public static void main(String[] args){ frame.setVisible(true); } public KeyBoard(){ super(); addWindowListener(new WindowAdapter() { @Override public void windowActivated(WindowEvent arg0) { map.put(KeyEvent.VK_RIGHT, KeyEvent.VK_LEFT); map.put(KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT); map.put(KeyEvent.VK_UP, KeyEvent.VK_DOWN); map.put(KeyEvent.VK_DOWN, KeyEvent.VK_UP); map.put(0, 0); map.put(KeyEvent.VK_G, 0); Random ra = new Random(); targetX = ra.nextInt(30)*10 + 50; targetY = ra.nextInt(20)*10 + 50; targetLabel.setLocation(targetX, targetY); } }); setBackground(Color.gray); setLayout(null); setBounds(400,200,400,300); addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ if(e.getKeyCode() == map.get(direction)){ return; }else direction = e.getKeyCode(); } }); for(int i=1; i<goal; i++){ label[i] = new RectLabel(); label[i].setBounds(-10,-10, 10, 10); list.add(label[i]); } panel.setBounds(-10, -10, 10, 10); panel.addComponentListener(new ComponentAdapter() { @Override public void componentMoved(ComponentEvent arg0) { point[0] = panel.getLocation(); if(Math.abs(point[0].x-targetX)<5&&Math.abs(point[0].y-targetY)<5){ Random ra = new Random(); targetX = ra.nextInt(30)*10 + 50; targetY = ra.nextInt(20)*10 + 50; while(true){ for(int i=1; i<goal-1; i++){ Point p = label[i].getLocation(); if((p.x==targetX)&&(p.y==targetY)){ break; }else{ judge ++; } } if(judge==goal-2){ break; }else{ judge=0; targetX = ra.nextInt(30)*10 + 50; targetY = ra.nextInt(20)*10 + 50; } } targetLabel.setLocation(targetX, targetY); label[goal] = new RectLabel(); label[goal].setBounds(-10, -10, 10, 10); point[goal-1] = new Point(); list.add(label[goal]); goal++; } for(int i=1; i<list.size(); i++){ point[i] = label[i].getLocation(); label[i].setLocation(point[i-1]); frame.add(label[i]); } label[list.size()].setLocation(point[list.size()-1]); frame.add(label[list.size()]); for(int i=3; i<list.size(); i++){ if(Math.abs(label[1].getLocation().x-label[i].getLocation().x)<=1&& Math.abs(label[1].getLocation().y-label[i].getLocation().y)<=1){ direction = KeyEvent.VK_G; } } } }); targetLabel.setBounds(200, 100,10,10); add(targetLabel); add(panel); } class Panel extends JPanel implements Runnable{ private int flag = 0; private int x = 0; private int y = 0; public Panel(){ setPreferredSize(new Dimension(10, 10)); new Thread(this).start(); } @Override public void run() { while(true){ if(direction == KeyEvent.VK_RIGHT){ if(x<=this.getParent().getWidth()-10){ x+=10; setLocation(x,y); }else{ direction = KeyEvent.VK_G; } } if(direction == KeyEvent.VK_G){ JOptionPane.showMessageDialog(null, "您得了"+(goal-3)+"分,"+"欢迎再次光临!"); System.exit(0); setLocation(-10,-10); } if(direction == KeyEvent.VK_LEFT){ if(x>=0){ x-=10; setLocation(x,y); }else{ direction = KeyEvent.VK_G; } } if(direction == KeyEvent.VK_DOWN){ if(y<=this.getParent().getHeight()-10){ y+=10; setLocation(x,y); }else{ direction = KeyEvent.VK_G; } } if(direction == KeyEvent.VK_UP){ if(y>=0){ y-=10; setLocation(x,y); }else{ direction = KeyEvent.VK_G; } } try{ if(goal<30){ speed = goal; }else{ speed = 60; } Thread.sleep(400 - speed*10); }catch(InterruptedException e){ e.printStackTrace(); } repaint(); } } } class RectLabel extends JLabel{ private int r = 5;// 小球半径 private int width = r * 2;// 球宽度 private int height = r * 2;// 球高度 private Color ballColor = Color.BLUE;// 默认颜色 public RectLabel() { setPreferredSize(new Dimension(width, height));// 初始化大小 } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(ballColor);// 设置默认颜色 g.fillRect(0, 0, width, height);// 在标签上绘制球体 } } } 求大神帮帮忙,注释一下每个地方的功能,例如蛇的移动,吃果子自身增长各在哪???
1 下一页