随机食物生成器(JAVA贪吃蛇课程怎么处理食物的随机性)
本文目录
JAVA贪吃蛇课程怎么处理食物的随机性
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; public class InterFace extends JFrame { /*** WIDTH:宽* HEIGHT:高* SLEEPTIME:可以看作蛇运动的速度* L = 1,R = 2, U = 3, D = 4 左右上下代码*/public static final int WIDTH = 800, HEIGHT = 600, SLEEPTIME = 200, L = 1,R = 2, U = 3, D = 4; BufferedImage offersetImage= new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_3BYTE_BGR);; Rectangle rect = new Rectangle(20, 40, 15 * 50, 15 * 35); Snake snake; Node node; public InterFace() { //创建"蛇"对象snake = new Snake(this); //创建"食物"对象createNode(); this.setBounds(100, 100, WIDTH, HEIGHT);//添加键盘监听器this.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent arg0) { System.out.println(arg0.getKeyCode()); switch (arg0.getKeyCode()) { //映射上下左右4个键位case KeyEvent.VK_LEFT: snake.dir = L; break; case KeyEvent.VK_RIGHT: snake.dir = R; break; case KeyEvent.VK_UP: snake.dir = U; break; case KeyEvent.VK_DOWN: snake.dir = D; } } }); this.setTitle("贪吃蛇 0.1 By : Easy"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); //启动线程,开始执行new Thread(new ThreadUpadte()).start(); } public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) offersetImage.getGraphics(); g2d.setColor(Color.white); g2d.fillRect(0, 0, WIDTH, HEIGHT); g2d.setColor(Color.black); g2d.drawRect(rect.x, rect.y, rect.width, rect.height); //如果蛇碰撞(吃)到食物,则创建新食物if (snake.hit(node)) { createNode(); } snake.draw(g2d); node.draw(g2d); g.drawImage(offersetImage, 0, 0, null); } class ThreadUpadte implements Runnable { public void run() { //无限重绘画面while (true) { try { Thread.sleep(SLEEPTIME); repaint(); //} catch (InterruptedException e) { e.printStackTrace(); } } } } /*** 创建食物*/public void createNode() { //随机食物的出现位置int x = (int) (Math.random() * 650) + 50,y = (int) (Math.random() * 500) + 50; Color color = Color.blue; node = new Node(x, y, color); } public static void main(String args) { new InterFace(); } } /*** 节点类(包括食物和蛇的身躯组成节点)*/class Node { int x, y, width = 15, height = 15; Color color; public Node(int x, int y, Color color) { this(x, y); this.color = color; } public Node(int x, int y) { this.x = x; this.y = y; this.color = color.black; } public void draw(Graphics2D g2d) { g2d.setColor(color); g2d.drawRect(x, y, width, height); } public Rectangle getRect() { return new Rectangle(x, y, width, height); } } /*** 蛇*/class Snake { public List《Node》 nodes = new ArrayList《Node》(); InterFace interFace; int dir=InterFace.R; public Snake(InterFace interFace) { this.interFace = interFace; nodes.add(new Node(20 + 150, 40 + 150)); addNode(); }/*** 是否碰撞到食物* @return true 是 false 否*/public boolean hit(Node node) { //遍历整个蛇体是否与食物碰撞for (int i = 0; i 《 nodes.size(); i++) { if (nodes.get(i).getRect().intersects(node.getRect())) { addNode(); return true; } } return false; } public void draw(Graphics2D g2d) { for (int i = 0; i 《 nodes.size(); i++) { nodes.get(i).draw(g2d); } move(); } public void move() { nodes.remove((nodes.size() - 1)); addNode(); } public synchronized void addNode() { Node nodeTempNode = nodes.get(0); //如果方向switch (dir) { case InterFace.L://判断是否会撞墙if (nodeTempNode.x 《= 20) { nodeTempNode = new Node(20 + 15 * 50, nodeTempNode.y); } nodes.add(0, new Node(nodeTempNode.x - nodeTempNode.width, nodeTempNode.y)); break; case InterFace.R: //判断是否会撞墙if (nodeTempNode.x 》= 20 + 15 * 50 - nodeTempNode.width) { nodeTempNode = new Node(20 - nodeTempNode.width, nodeTempNode.y); } nodes.add(0, new Node(nodeTempNode.x + nodeTempNode.width, nodeTempNode.y)); break; case InterFace.U: //判断是否会撞墙if (nodeTempNode.y 《= 40) { nodeTempNode = new Node(nodeTempNode.x, 40 + 15 * 35); } nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y - nodeTempNode.height)); break; case InterFace.D://判断是否会撞墙if (nodeTempNode.y 》= 40 + 15 * 35 - nodeTempNode.height) { nodeTempNode = new Node(nodeTempNode.x,40 - nodeTempNode.height); } nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y + nodeTempNode.height)); break; } } }
中午吃什么随机生成器,今天中午吃什么
星期一:白米粥、炒鸡蛋、一个奶黄包、一个苹果星期二:三明治面包、牛奶、一根香蕉星期三:青菜粥、煎蛋、白馒头、一瓶酸奶星期四:皮蛋瘦肉粥、青菜包、一根黄瓜星期五:小米粥、酱黄瓜、一个肉包、一些圣女果星期六:一份煎饺、一个鸡蛋、一碗银耳红枣汤星期日:一份油条大饼、一碗豆浆、一个梨
更多文章:
剑灵反和谐补丁怎么用(求解!下了剑灵神灯(反和谐补丁)是压缩文件,打开也更新设置了,关了后再想打开,却找不到启动图标,)
2024年5月30日 13:12
3d斯诺克台球游戏下载(有什么3D斯诺克台球游戏有的发个下载地址!)
2024年7月27日 22:00
奥汀三国群英传5单机手机版(哪位哥哥能告诉我在哪下载单机三国,就是一个大将后面领着一帮兵的那个,可以占领别人的地方,还能俘虏敌)
2024年7月23日 13:16
真三国无双7帝国修改器(真三国无双7帝国22修改器怎么对游戏进行修改)
2024年6月26日 05:14
求犬夜叉的壁纸要1440×900的.?犬夜叉手机壁纸 最好是静态的 谢谢
2024年6月13日 09:02
photoshop中文版免费下载(哪里有免费的Photoshop软件下载哪位知道谢谢!)
2024年6月27日 21:53
波克城市官方网站(波克城市程序启动失败缺少系统文件点击确定安装系统插件怎么回事)
2024年7月22日 05:56
恩典qq透明皮肤大图(恩典的QQ透明皮肤【一键就好的那种】和恩典的个性分组前面的图标╮以及关于恩典的所有QQ需要的东东)
2024年1月7日 01:00
建设银行个人网上银行证书下载(建设银行的网上银行怎么样下载证书呀)
2024年6月2日 23:42