[Java] 贪吃蛇 →→→→→进入此内容的聊天室

来自 , 2020-08-24, 写在 Java, 查看 144 次.
URL http://www.code666.cn/view/6a5889bb
  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.Graphics2D;
  4. import java.awt.Rectangle;
  5. import java.awt.event.KeyAdapter;
  6. import java.awt.event.KeyEvent;
  7. import java.awt.image.BufferedImage;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import javax.swing.JFrame;
  11.  
  12. /**
  13.  * @url http://download.csdn.net/detail/leasystu/4308246
  14.  *
  15.  * @author Easy
  16.  */
  17. public class InterFace extends JFrame {
  18.     public static final int WIDTH = 800, HEIGHT = 600, SLEEPTIME = 20, L = 1,
  19.             R = 2, U = 3, D = 4;
  20.     BufferedImage offersetImage = new BufferedImage(WIDTH, HEIGHT,
  21.             BufferedImage.TYPE_3BYTE_BGR);;
  22.     Rectangle rect = new Rectangle(20, 40, 15 * 50, 15 * 35);
  23.     Snake snake;
  24.     Node node;
  25.  
  26.     public InterFace() {
  27.         snake = new Snake(this);
  28.         createNode();
  29.         this.setBounds(100, 100, WIDTH, HEIGHT);
  30.         this.addKeyListener(new KeyAdapter() {
  31.             public void keyPressed(KeyEvent arg0) {
  32.                 System.out.println(arg0.getKeyCode());
  33.                 switch (arg0.getKeyCode()) {
  34.                 case KeyEvent.VK_LEFT:
  35.                     snake.dir = L;
  36.                     break;
  37.                 case KeyEvent.VK_RIGHT:
  38.                     snake.dir = R;
  39.                     break;
  40.                 case KeyEvent.VK_UP:
  41.                     snake.dir = U;
  42.                     break;
  43.                 case KeyEvent.VK_DOWN:
  44.                     snake.dir = D;
  45.                 }
  46.             }
  47.         });
  48.         this.setTitle("贪吃蛇 0.1   By : Easy");
  49.         this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  50.         this.setVisible(true);
  51.         new Thread(new ThreadUpadte()).start();
  52.     }
  53.  
  54.     public void paint(Graphics g) {
  55.         Graphics2D g2d = (Graphics2D) offersetImage.getGraphics();
  56.         g2d.setColor(Color.white);
  57.         g2d.fillRect(0, 0, WIDTH, HEIGHT);
  58.         g2d.setColor(Color.black);
  59.         g2d.drawRect(rect.x, rect.y, rect.width, rect.height);
  60.         if (snake.hit(node)) {
  61.             createNode();
  62.         }
  63.         snake.draw(g2d);
  64.         node.draw(g2d);
  65.         g.drawImage(offersetImage, 0, 0, null);
  66.     }
  67.  
  68.     class ThreadUpadte implements Runnable {
  69.         public void run() {
  70.             while (true) {
  71.                 try {
  72.                     Thread.sleep(SLEEPTIME);
  73.                     repaint();
  74.                 } catch (InterruptedException e) {
  75.                     e.printStackTrace();
  76.                 }
  77.             }
  78.         }
  79.     }
  80.  
  81.     public void createNode() {
  82.         int x = (int) (Math.random() * 650) + 50, y = (int) (Math.random() * 500) + 50;
  83.         Color color = Color.blue;
  84.         node = new Node(x, y, color);
  85.     }
  86.  
  87.     public static void main(String args[]) {
  88.         new InterFace();
  89.     }
  90. }
  91.  
  92. class Node {
  93.     int x, y, width = 15, height = 15;
  94.     Color color;
  95.  
  96.     public Node(int x, int y, Color color) {
  97.         this(x, y);
  98.         this.color = color;
  99.     }
  100.  
  101.     public Node(int x, int y) {
  102.         this.x = x;
  103.         this.y = y;
  104.         this.color = color.black;
  105.     }
  106.  
  107.     public void draw(Graphics2D g2d) {
  108.         g2d.setColor(color);
  109.         g2d.drawRect(x, y, width, height);
  110.     }
  111.  
  112.     public Rectangle getRect() {
  113.         return new Rectangle(x, y, width, height);
  114.     }
  115. }
  116.  
  117. class Snake {
  118.     public List<Node> nodes = new ArrayList<Node>();
  119.     InterFace interFace;
  120.     int dir = InterFace.R;
  121.  
  122.     public Snake(InterFace interFace) {
  123.         this.interFace = interFace;
  124.         nodes.add(new Node(20 + 150, 40 + 150));
  125.         addNode();
  126.     }
  127.  
  128.     public boolean hit(Node node) {
  129.         for (int i = 0; i < nodes.size(); i++) {
  130.             if (nodes.get(i).getRect().intersects(node.getRect())) {
  131.                 addNode();
  132.                 return true;
  133.             }
  134.         }
  135.         return false;
  136.     }
  137.  
  138.     public void draw(Graphics2D g2d) {
  139.         for (int i = 0; i < nodes.size(); i++) {
  140.             nodes.get(i).draw(g2d);
  141.         }
  142.         move();
  143.     }
  144.  
  145.     public void move() {
  146.         nodes.remove((nodes.size() - 1));
  147.         addNode();
  148.     }
  149.  
  150.     public synchronized void addNode() {
  151.         Node nodeTempNode = nodes.get(0);
  152.         switch (dir) {
  153.         case InterFace.L:
  154.             if (nodeTempNode.x <= 20) {
  155.                 nodeTempNode = new Node(20 + 15 * 50, nodeTempNode.y);
  156.             }
  157.             nodes.add(0, new Node(nodeTempNode.x - nodeTempNode.width,
  158.                     nodeTempNode.y));
  159.             break;
  160.         case InterFace.R:
  161.             if (nodeTempNode.x >= 20 + 15 * 50 - nodeTempNode.width) {
  162.                 nodeTempNode = new Node(20 - nodeTempNode.width, nodeTempNode.y);
  163.             }
  164.             nodes.add(0, new Node(nodeTempNode.x + nodeTempNode.width,
  165.                     nodeTempNode.y));
  166.             break;
  167.         case InterFace.U:
  168.             if (nodeTempNode.y <= 40) {
  169.                 nodeTempNode = new Node(nodeTempNode.x, 40 + 15 * 35);
  170.             }
  171.             nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y
  172.                     - nodeTempNode.height));
  173.             break;
  174.         case InterFace.D:
  175.             if (nodeTempNode.y >= 40 + 15 * 35 - nodeTempNode.height) {
  176.                 nodeTempNode = new Node(nodeTempNode.x,
  177.                         40 - nodeTempNode.height);
  178.             }
  179.             nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y
  180.                     + nodeTempNode.height));
  181.             break;
  182.         }
  183.     }
  184. }
  185.  

回复 "贪吃蛇"

这儿你可以回复上面这条便签

captcha