java贪吃蛇求高手现编一个JAVA贪食蛇!

java贪吃蛇  时间:2021-07-10  阅读:()

怎么用Java做贪吃蛇的游戏软件呢?

您好,原理: 把蛇身体的每一块看成一个对象(对象存储该块的坐标和相关信息),作为节点存储在线性链表中,再设置一个变量标志蛇的方向(通过按键可以改变)。

一般人都是让每一个节点等于他指向的下一个节点,并让头节点改变位置来实现转弯和移动,这个算法复杂度太高(O(n)),实际上只要做两步操作,插入一个头节点,删除一个尾节点就可以了,新插入的头节点位置根据蛇当前的方向决定 用一个数组将蛇头的行径记录下来,然后第二段的下一个方格设置为蛇头走过的方格,这样子蛇走过的路径都是前一段走过的,最后将跟着蛇头走了,比如 蛇身的路径 for(int i=snakeLength-1;i>0;i--){ rows[i]=rows[i-1];//依次将蛇前面一段走过行的路段赋值给蛇的下一段 cols[i]=cols[i-1];//依次将蛇前面一段走过列的路段赋值给蛇的下一段 } for(int i=1;i<snakeLength;i++){ gamePanel[rows[i]][cols[i]].setBackground(Color.red);//将整个面板上蛇身走过的行和列设置为不同的颜色,当然可以用图片来设置 } 蛇头走过的行和列(rows[0],cols[i])要根据不同的方向加减1来将面板设置成不同的颜色 如gamePanel[rows[i]-1][cols[i]+1].setBackground(Color.red)

求Java贪吃蛇代码

原发布者:毛志勇gavin #include#include"resource1.h"#include#include#include//蛇的结构体typedefstructSNAKE{intx;inty;structSNAKE*pNext;}Snake;//豆的结构体typedefstructBEAN{intx;inty;structBEAN*pNext;}Bean;//函数原型voidCreateSnake(Snake**pSnake);voiddeleteAll(Snake**pSnake);voidShowSnake(Snake*pSnake);voidCreateBean(Bean**pBean,Snake*pSnake);voidShowBean(Bean*pBean);voidDeleteBean(Bean**pBean);voidSnakeRun(Snake**pSnake);voidSnakeGrowUp(Snake*pSnake);intCanEatBean(Snake*pSnake,Bean*pBean);intCanDie(Snake*pSnake);/////////////////////////////////////////////////////////////////////////////////////charg_ClassName[20]="ClassName";LRESULTCALLBACKWndProc(HWNDhwnd,UINTnMsg,WPARAMwParam,LPARAMlParam);HBITMAPhBitMap;intCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPreInstance,LPSTRpCmdLine,intnCmdShow){HBRUSHhBrush=CreateSolidBrush(RGB(100,100,410));HICONhIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_wnd_icon));HICONhIconsm=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_wnd_iconsm));hBitMap=LoadBitmap(hInstance,MAKEINTR

我想求一个Java编写的贪吃蛇游戏,要有注释和流程图最好

用MVC方式实现的贪吃蛇游戏,共有4个类。

运行GreedSnake运行即可。

主要是观察者模式的使用,我已经添加了很多注释了。

1、 /* * 程序名称:贪食蛇 * 原作者:BigF * 修改者:algo * 说明:我以前也用C写过这个程序,现在看到BigF用Java写的这个,发现虽然作者自称是Java的初学者, * 但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之 * 下,我认真解读了这个程序,发现数据和表现分开得很好,而我近日正在学习MVC设计模式, * 因此尝试把程序得结构改了一下,用MVC模式来实现,对源程序得改动不多。

* 我同时也为程序增加了一些自己理解得注释,希望对大家阅读有帮助。

*/ package mvcTest; /** * @author WangYu * @version 1.0 * Description: * </pre> * Create on :Date :2005-6-13 Time:15:57:16 * LastModified: * History: */ public class GreedSnake { public static void main(String[] args) { SnakeModel model = new SnakeModel(20,30); SnakeControl control = new SnakeControl(model); SnakeView view = new SnakeView(model,control); //添加一个观察者,让view成为model的观察者 model.addObserver(view); (new Thread(model)).start(); } } ------------------------------------------------------------- 2、 package mvcTest; //SnakeControl.java import java.awt.event.KeyEvent; import java.awt.event.KeyListener; /** * MVC中的Controler,负责接收用户的操作,并把用户操作通知Model */ public class SnakeControl implements KeyListener{ SnakeModel model; public SnakeControl(SnakeModel model){ this.model = model; } public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); if (model.running){ // 运行状态下,处理的按键 switch (keyCode) { case KeyEvent.VK_UP: model.changeDirection(SnakeModel.UP); break; case KeyEvent.VK_DOWN: model.changeDirection(SnakeModel.DOWN); break; case KeyEvent.VK_LEFT: model.changeDirection(SnakeModel.LEFT); break; case KeyEvent.VK_RIGHT: model.changeDirection(SnakeModel.RIGHT); break; case KeyEvent.VK_ADD: case KeyEvent.VK_PAGE_UP: model.speedUp(); break; case KeyEvent.VK_SUBTRACT: case KeyEvent.VK_PAGE_DOWN: model.speedDown(); break; case KeyEvent.VK_SPACE: case KeyEvent.VK_P: model.changePauseState(); break; default: } } // 任何情况下处理的按键,按键导致重新启动游戏 if (keyCode == KeyEvent.VK_R || keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_ENTER) { model.reset(); } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } } ------------------------------------------------------------- 3、 /* * */ package mvcTest; /** * 游戏的Model类,负责所有游戏相关数据及运行 * @author WangYu * @version 1.0 * Description: * </pre> * Create on :Date :2005-6-13 Time:15:58:33 * LastModified: * History: */ //SnakeModel.java import javax.swing.*; import java.util.Arrays; import java.util.LinkedList; import java.util.Observable; import java.util.Random; /** * 游戏的Model类,负责所有游戏相关数据及运行 */ class SnakeModel extends Observable implements Runnable { boolean[][] matrix; // 指示位置上有没蛇体或食物 LinkedList nodeArray = new LinkedList(); // 蛇体 Node food; int maxX; int maxY; int direction = 2; // 蛇运行的方向 boolean running = false; // 运行状态 int timeInterval = 200; // 时间间隔,毫秒 double speedChangeRate = 0.75; // 每次得速度变化率 boolean paused = false; // 暂停标志 int score = 0; // 得分 int countMove = 0; // 吃到食物前移动的次数 // UP and DOWN should be even // RIGHT and LEFT should be odd public static final int UP = 2; public static final int DOWN = 4; public static final int LEFT = 1; public static final int RIGHT = 3; public SnakeModel( int maxX, int maxY) { this.maxX = maxX; this.maxY = maxY; reset(); } public void reset(){ direction = SnakeModel.UP; // 蛇运行的方向 timeInterval = 200; // 时间间隔,毫秒 paused = false; // 暂停标志 score = 0; // 得分 countMove = 0; // 吃到食物前移动的次数 // initial matirx, 全部清0 matrix = new boolean[maxX][]; for (int i = 0; i < maxX; ++i) { matrix[i] = new boolean[maxY]; Arrays.fill(matrix[i], false); } // initial the snake // 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半 int initArrayLength = maxX > 20 ? 10 : maxX / 2; nodeArray.clear(); for (int i = 0; i < initArrayLength; ++i) { int x = maxX / 2 + i;//maxX被初始化为20 int y = maxY / 2; //maxY被初始化为30 //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15] //默认的运行方向向上,所以游戏一开始nodeArray就变为: // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15] nodeArray.addLast(new Node(x, y)); matrix[x][y] = true; } // 创建食物 food = createFood(); matrix[food.x][food.y] = true; } public void changeDirection(int newDirection) { // 改变的方向不能与原来方向同向或反向 if (direction % 2 != newDirection % 2) { direction = newDirection; } } /** * 运行一次 * @return */ public boolean moveOn() { Node n = (Node) nodeArray.getFirst(); int x = n.x; int y = n.y; // 根据方向增减坐标值 switch (direction) { case UP: y--; break; case DOWN: y++; break; case LEFT: x--; break; case RIGHT: x++; break; } // 如果新坐标落在有效范围内,则进行处理 if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) { if (matrix[x][y]) { // 如果新坐标的点上有东西(蛇体或者食物) if (x == food.x && y == food.y) { // 吃到食物,成功 nodeArray.addFirst(food); // 从蛇头赠长 // 分数规则,与移动改变方向的次数和速度两个元素有关 int scoreGet = (10000 - 200 * countMove) / timeInterval; score += scoreGet > 0 ? scoreGet : 10; countMove = 0; food = createFood(); // 创建新的食物 matrix[food.x][food.y] = true; // 设置食物所在位置 return true; } else // 吃到蛇体自身,失败 return false; } else { // 如果新坐标的点上没有东西(蛇体),移动蛇体 nodeArray.addFirst(new Node(x, y)); matrix[x][y] = true; n = (Node) nodeArray.removeLast(); matrix[n.x][n.y] = false; countMove++; return true; } } return false; // 触到边线,失败 } public void run() { running = true; while (running) { try { Thread.sleep(timeInterval); } catch (Exception e) { break; } if (!paused) { if (moveOn()) { setChanged(); // Model通知View数据已经更新 notifyObservers(); } else { JOptionPane.showMessageDialog(null, "you failed", "Game Over", JOptionPane.INFORMATION_MESSAGE); break; } } } running = false; } private Node createFood() { int x = 0; int y = 0; // 随机获取一个有效区域内的与蛇体和食物不重叠的位置 do { Random r = new Random(); x = r.nextInt(maxX); y = r.nextInt(maxY); } while (matrix[x][y]); return new Node(x, y); } public void speedUp() { timeInterval *= speedChangeRate; } public void speedDown() { timeInterval /= speedChangeRate; } public void changePauseState() { paused = !paused; } public String toString() { String result = ""; for (int i = 0; i < nodeArray.size(); ++i) { Node n = (Node) nodeArray.get(i); result += "[" + n.x + "," + n.y + "]"; } return result; } } class Node { int x; int y; Node(int x, int y) { this.x = x; this.y = y; } } ------------------------------------------------------------ 4、 package mvcTest; //SnakeView.java import javax.swing.*; import java.awt.*; import java.util.Iterator; import java.util.LinkedList; import java.util.Observable; import java.util.Observer; /** * MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑 */ public class SnakeView implements Observer { SnakeControl control = null; SnakeModel model = null; JFrame mainFrame; Canvas paintCanvas; JLabel labelScore; public static final int canvasWidth = 200; public static final int canvasHeight = 300; public static final int nodeWidth = 10; public static final int nodeHeight = 10; public SnakeView(SnakeModel model, SnakeControl control) { this.model = model; this.control = control; mainFrame = new JFrame("GreedSnake"); Container cp = mainFrame.getContentPane(); // 创建顶部的分数显示 labelScore = new JLabel("Score:"); cp.add(labelScore, BorderLayout.NORTH); // 创建中间的游戏显示区域 paintCanvas = new Canvas(); paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1); paintCanvas.addKeyListener(control); cp.add(paintCanvas, BorderLayout.CENTER); // 创建底下的帮助栏 JPanel panelButtom = new JPanel(); panelButtom.setLayout(new BorderLayout()); JLabel labelHelp; labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER); panelButtom.add(labelHelp, BorderLayout.NORTH); labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER); panelButtom.add(labelHelp, BorderLayout.CENTER); labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER); panelButtom.add(labelHelp, BorderLayout.SOUTH); cp.add(panelButtom, BorderLayout.SOUTH); mainFrame.addKeyListener(control); mainFrame.pack(); mainFrame.setResizable(false); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setVisible(true); } void repaint() { Graphics g = paintCanvas.getGraphics(); //draw background g.setColor(Color.WHITE); g.fillRect(0, 0, canvasWidth, canvasHeight); // draw the snake g.setColor(Color.BLACK); LinkedList na = model.nodeArray; Iterator it = na.iterator(); while (it.hasNext()) { Node n = (Node) it.next(); drawNode(g, n); } // draw the food g.setColor(Color.RED); Node n = model.food; drawNode(g, n); updateScore(); } private void drawNode(Graphics g, Node n) { g.fillRect(n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1, nodeHeight - 1); } public void updateScore() { String s = "Score: " + model.score; labelScore.setText(s); } public void update(Observable o, Object arg) { repaint(); } }

本人用java写贪吃蛇。。。如何实现蛇的自动移动,老师说是线程,但是我的java不太好,希望能说详细点

new Thread(new Runnable() { public synchronized void run() { while(true){ // 写你的每次移动方向和距离算法 try{ // 死循环内 没隔100毫秒运行一次。

Thread.sleep(100); }catch(Exception e){} } } }).start(); 在注释里写你的算法就行了

java 双人贪吃蛇

package game; /*这是一个双人贪吃蛇游戏 *玩家一 A S D W 控制方向 *玩家二 上下左右 控制方向 *当某玩家无路可走的时候既输 */ import java.awt.*; import javax.swing.*; import java.awt.event.*; public class HsGame extends JFrame { HsGame(String str) { // 设置主面版 this.setTitle(str); this.setSize(910, 630); this.setLocation(50, 50); MyPanel mp = new MyPanel(); this.add(mp); this.addKeyListener(mp); new Thread(mp).start(); } // 主线程 public static void main(String[] args) { HsGame m = new HsGame("贪吃蛇竞技版"); m.setVisible(true); } } class MyPanel extends JPanel implements Runnable, KeyListener { int[][] s1 = new int[180][120]; int[][] s2 = new int[180][120]; int x1 = 40; int y1 = 60; int x2 = 140; int y2 = 60; // 设置线程休眠时间 int sleep = 50; // 设置初始方向 int fangxiang1 = 2; int fangxiang2 = 0; // 构造函数 MyPanel() { // 初始化界面 for (int ix = 0; ix < 180; ix++) { for (int iy = 0; iy < 120; iy++) { s1[ix][iy] = 0; s2[ix][iy] = 0; } } // 设置边界 // 上下边界 for (int ix = 0; ix < 180; ix++) { s1[ix][0] = 1; s1[ix][119] = 1; s2[ix][0] = 1; s2[ix][119] = 1; } // 左右边界 for (int iy = 0; iy < 120; iy++) { s1[0][iy] = 1; s1[179][iy] = 1; s2[0][iy] = 1; s2[179][iy] = 1; } } // 画板 public void paint(Graphics g) { // 显示玩家一 g.setColor(Color.red); for (int ix = 0; ix < 180; ix++) { for (int iy = 0; iy < 120; iy++) { if (s1[ix][iy] == 1) { g.fillRect(ix * 5, iy * 5, 5, 5); } } } // 显示玩家二 g.setColor(Color.blue); for (int ix = 0; ix < 180; ix++) { for (int iy = 0; iy < 120; iy++) { if (s2[ix][iy] == 1) { g.fillRect(ix * 5, iy * 5, 5, 5); } } } // 画出边界 g.setColor(Color.black); for (int i = 0; i < 180; i++) { g.fillRect(i * 5, 0, 5, 5); g.fillRect(i * 5, 119 * 5, 5, 5); } for (int i = 0; i < 120; i++) { g.fillRect(0, i * 5, 5, 5); g.fillRect(179 * 5, i * 5, 5, 5); } } public void run() { while (true) { switch (fangxiang1) { case 0: x1--; break; case 1: y1--; break; case 2: x1++; break; case 3: y1++; } switch (fangxiang2) { case 0: x2--; break; case 1: y2--; break; case 2: x2++; break; case 3: y2++; } // 判断死活 if (s1[x1][y1] == 1 || s2[x1][y1] == 1) { // 弹出player2胜利对话框 JOptionPane.showMessageDialog(null, "player 2 win!", "Game Over !", JOptionPane.ERROR_MESSAGE); // 结束游戏 System.exit(0); } else { s1[x1][y1] = 1; } if (s2[x2][y2] == 1 || s1[x2][y2] == 1) { // 弹出player1胜利对话框 JOptionPane.showMessageDialog(null, "player 1 win!", "Game Over !", JOptionPane.ERROR_MESSAGE); // 结束游戏 System.exit(0); } else { s2[x2][y2] = 1; } try { Thread.sleep(sleep); } catch (Exception e) { e.printStackTrace(); } // 重画 this.repaint(); } } public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { // 玩家一控制 if (e.getKeyCode() == 65) { if (fangxiang1 != 2) { fangxiang1 = 0; System.out.println("player 1 left"); } } if (e.getKeyCode() == 87) { if (fangxiang1 != 3) { fangxiang1 = 1; System.out.println("player 1 up"); } } if (e.getKeyCode() == 68) { if (fangxiang1 != 0) { fangxiang1 = 2; System.out.println("player 1 right"); } } if (e.getKeyCode() == 83) { if (fangxiang1 != 1) { fangxiang1 = 3; System.out.println("player 1 down"); } } // 玩家二控制 if (e.getKeyCode() == 37) { if (fangxiang2 != 2) { fangxiang2 = 0; System.out.println("player 2 left"); } } if (e.getKeyCode() == 38) { if (fangxiang2 != 3) { fangxiang2 = 1; System.out.println("player 2 up"); } } if (e.getKeyCode() == 39) { if (fangxiang2 != 0) { fangxiang2 = 2; System.out.println("player 2 right"); } } if (e.getKeyCode() == 40) { if (fangxiang2 != 1) { fangxiang2 = 3; System.out.println("player 2 down"); } } } public void keyReleased(KeyEvent e) { } }

求高手现编一个JAVA贪食蛇!

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class SnakeGame extends JFrame { public SnakeGame(){ this.setResizable(false); this.setDefaultCloseOperation(EXIT_ON_CLOSE); gamePanel=new MyPanel(); Dimension size=gamePanel.getPreferredSize(); this.setSize(size.width+6,size.height+56); this.add(gamePanel,BorderLayout.CENTER); newGame=new JButton("New Game"); newGame.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ gamePanel.newGame(); } }); newGame.addKeyListener(listener); this.add(newGame,BorderLayout.SOUTH); } public static void main(String[] args){ new SnakeGame().setVisible(true); } private JButton newGame; private MyPanel gamePanel; private KeyListener listener=new KeyListener(){ @Override public void keyPressed(KeyEvent e) { int code=e.getKeyCode(); if(code==KeyEvent.VK_UP){ gamePanel.move(Snake.up); } else if(code==KeyEvent.VK_RIGHT){ gamePanel.move(Snake.right); } else if(code==KeyEvent.VK_LEFT){ gamePanel.move(Snake.left); } else if(code==KeyEvent.VK_DOWN){ gamePanel.move(Snake.down); } } @Override public void keyReleased(KeyEvent e) { } @Override public void keyTyped(KeyEvent e) { } }; } class MyPanel extends JPanel { public MyPanel(){ food=this.getFoodPoint(snake.getBody()); } public void paintComponent() { Graphics g=this.getGraphics(); if(g==null) return; //clear g.clearRect(0, 0, this.getWidth(), this.getHeight()); //draw the border g.setColor(Color.BLACK); for(int i=0;i<WIDTH+2;i++){ g.fillRect(i*SIZE.width, 0, SIZE.width, SIZE.height); g.fillRect(i*SIZE.width,(HEIGHT+1)*SIZE.height,SIZE.width,SIZE.height); } for(int i=1;i<HEIGHT+1;i++){ g.fillRect(0,i*SIZE.height , SIZE.width, SIZE.height); g.fillRect((WIDTH+1)*SIZE.width,i*SIZE.height,SIZE.width,SIZE.height); } //draw the food g.setColor(Color.RED); g.fillRect(food.x*SIZE.width, food.y*SIZE.height,SIZE.width, SIZE.width); //draw the snake LinkedList<Point> body=snake.getBody(); Point head=body.get(0); g.setColor(Color.ORANGE); g.fillRect(head.x*SIZE.width, head.y*SIZE.height, SIZE.width, SIZE.height); g.setColor(Color.GREEN); for(int i=1;i<body.size();i++){ Point p=body.get(i); g.fillRect(p.x*SIZE.width, p.y*SIZE.height, SIZE.width, SIZE.height); } //draw text if(gameOver){ g.setColor(Color.BLUE); Dimension size=this.getPreferredSize(); String s="Game Over"; Font f=new Font(g.getFont().getName(),Font.BOLD,32); g.setFont(f); FontMetrics fm=g.getFontMetrics(f); int length=fm.stringWidth(s); int height=fm.getHeight(); int x=(size.width-length)/2; int y=(size.height-height)/2; g.drawString(s, x, y); } } public Dimension getPreferredSize(){ return new Dimension((WIDTH+2)*SIZE.width,(HEIGHT+2)*SIZE.height); } public Point getFoodPoint(Collection<Point> except) { Random random = new Random(); int x = random.nextInt(30)+1; int y = random.nextInt(30)+1; Point result=new Point(x,y); boolean has=false; while(true){ Iterator<Point> iter=except.iterator(); while(iter.hasNext()){ if(iter.next().equals(result)){ has=true; break; } } if(!has) break; x = random.nextInt(30); y = random.nextInt(30); result=new Point(x,y); has=false; } return new Point(x, y); } public void newGame(){ if(timer!=null) timer.cancel(); gameOver=false; snake.setBody(new Point[] { new Point(10, 10), new Point(10, 11), new Point(10, 12), new Point(10, 13) }); snake.setTowards(Snake.up); food=this.getFoodPoint(snake.getBody()); timer=new Timer(); timer.schedule(new TimerTask(){ public void run(){ move(snake.getTowards()); } }, 500, 500); paintComponent(); } public void move(int towards){ if(gameOver) return; Boolean r=MyPanel.snake.move(towards,food); if(r==null) return; LinkedList<Point> body=snake.getBody(); if(r) food=this.getFoodPoint(body); Point head=body.get(0); boolean over=false; for(int i=1;i<body.size();i++){ if(head.equals(body.get(i))){ System.out.println(head+""+i+body.get(i)); over=true; break; } } if(!over){ if(head.x<1||head.y<1||head.x>WIDTH||head.y>HEIGHT) over=true; } if(over){ gameOver=true; timer.cancel(); paintComponent(); return; } paintComponent(); } private static final int WIDTH = 30; private static final int HEIGHT = 30; private static final Dimension SIZE=new Dimension(15,15); private Point food; private boolean gameOver=true; private Timer timer; public static final Snake snake = new Snake(new Point[] { new Point(10, 10), new Point(10, 11), new Point(10, 12), new Point(10, 13) }, Snake.up); } class Snake { public Snake(Point[] body, int towards) { this.setBody(body); this.setTowards(towards); } public Boolean move(int orien,Point food) { int x, y; Point head = body.get(0); switch (orien) { case up: if(towards==down) return null; x = head.x; y = head.y-1; this.setTowards(up); break; case down: if(towards==up) return null; x = head.x; y = head.y + 1; this.setTowards(down); break; case left: if(towards==right) return null; x = head.x - 1; y = head.y; this.setTowards(left); break; case right: if(towards==left) return null; x = head.x + 1; y = head.y; this.setTowards(right); break; default: return null; } Point newHead=new Point(x,y); body.addFirst(newHead); if(newHead.equals(food)){ return true; } body.removeLast(); return false; } public void eat(Point food) { body.addFirst(food); } public int getTowards() { return this.towards; } public void setTowards(int towards) { this.towards=towards; } public LinkedList<Point> getBody(){ return body; } public void setBody(Point[] body){ this.body=new LinkedList<Point>(); for (Point b : body) this.body.add(b); } public Point getHead(){ return this.body.get(0); } private LinkedList<Point> body; private int towards = right; public static final int up = 1; public static final int down = 2; public static final int left = 3; public static final int right = 4; }

PacificRack(19.9美元/年)内存1Gbps带vps1GB洛杉矶QN机房,七月特价优惠

pacificrack怎么样?pacificrack商家发布了七月最新优惠VPS云服务器计划方案,推出新款优惠便宜VPS云服务器采用的是国产魔方管理系统,也就是PR-M系列,全系基于KVM虚拟架构,这次支持Windows server 2003、2008R2、2012R2、2016、2019、Windows 7、Windows 10以及Linux等操作系统,最低配置为1核心2G内存1Gbps带宽1...

老用户专享福利 腾讯云 免费领取轻量云2核4G服务器一年

感恩一年有你!免费领取2核4G套餐!2核4G轻量应用服务器2核 CPU 4GB内存 60G SSD云硬盘 6Mbps带宽领取地址:https://cloud.tencent.com/act/pro/lighthousethankyou活动规则活动时间2021年9月23日 ~ 2021年10月23日活动对象腾讯云官网已注册且完成实名认证的国内站用户(协作者与子用户账号除外),且符合以下活动条件:账号...

bgpto:日本独立服务器6.5折($120起),新加坡独立服务器7.5折($93起)

bgp.to在对日本东京的独立服务器进行6.5折终身优惠促销,低至$120/月;对新加坡独立服务器进行7.5折终身优惠促销,低至$93/月。所有服务器都是直连国内,速度上面相比欧洲、美国有明显的优势,特别适合建站、远程办公等多种用途。官方网站:https://www.bgp.to/dedicated.html主打日本(东京、大阪)、新加坡、香港(CN)、洛杉矶(US)的服务器业务!日本服务器CPU...

java贪吃蛇为你推荐
row函数row函数与column函数的运用mdmMDM产品是如何获取管理终端的权限的?bff有BFF什么什么意思settimerMFC 中,全局SetTimer函数怎么用?溢出隐藏overflow:hidden用在哪里?bindserviceonserviceconnected什么时候执行deviceid怎么能知道安卓系统手机的DEVICE ID?拓扑关系什么是空间数据的拓扑关系slideshare幻灯片的占位符的作用是?色库赤峰中色库博红烨锌业有限公司就是冶炼厂在 赤峰的 什么地方,一 人知道吗???
东莞服务器租用 美国和欧洲vps 香港vps主机 美国加州vps 动态ip的vps 中国域名交易中心 a5域名交易 域名商 vps.net 京东云擎 国内php空间 电子邮件服务器 香港亚马逊 杭州电信宽带优惠 江苏双线 阿里云邮箱个人版 黑科云 深圳主机托管 websitepanel 海外加速 更多