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; }

Digital-VM80美元新加坡和日本独立服务器

Digital-VM商家的暑期活动促销,这个商家提供有多个数据中心独立服务器、VPS主机产品。最低配置月付80美元,支持带宽、流量和IP的自定义配置。Digital-VM,是2019年新成立的商家,主要从事日本东京、新加坡、美国洛杉矶、荷兰阿姆斯特丹、西班牙马德里、挪威奥斯陆、丹麦哥本哈根数据中心的KVM架构VPS产品销售,分为大硬盘型(1Gbps带宽端口、分配较大的硬盘)和大带宽型(10Gbps...

UCloud优刻得,新增1核1G内存AMD快杰云机型,服务器2元/首月,47元/年

UCloud优刻得近日针对全球大促活动进行了一次改版,这次改版更加优惠了,要比之前的优惠价格还要低一些,并且新增了1核心1G内存的快杰云服务器,2元/首年,47元/年,这个价格应该是目前市面上最低最便宜的云服务器产品了,有需要国内外便宜VPS云服务器的朋友可以关注一下。UCloud好不好,UCloud服务器怎么样?UCloud服务器值不值得购买UCloud是优刻得科技股份有限公司旗下拥有的云计算服...

德阳电信高防物理机 16核16G 50M 260元/月 达州创梦网络

达州创梦网络怎么样,达州创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,一手四川托管服务商,成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快,直连省骨干,大网封UDP,无视UDP攻击,机房集群高达1.2TB,单机可提供1...

java贪吃蛇为你推荐
1u1U的 定义linux修改文件名Linux中,怎样修改文件名?bindservice安卓里 remote service到底有什么用arc是什么意思arctanx等于什么?调度系统配送调度系统是干嘛的?是手机还是电脑的系统?editplus破解版DBTools Manager Professional 破解版在哪里可以下载?spawning为什么编译和运行vc++ 时会出现Error spawning c1.exe 的错误相似图片搜索如何输入图片并且搜出最相似的图片?51信用卡论坛51信用卡贷了1200 现在还不上怎么办中科红旗北京中科红旗软件技术有限公司的介绍
代理主机 上海域名注册 电信服务器租赁 息壤备案 站群服务器 java主机 国内永久免费云服务器 idc测评网 轻量 北京主机 一元域名 网盘申请 100m免费空间 老左来了 腾讯实名认证中心 百度云1t 空间技术网 免费邮件服务器 智能dns解析 ledlamp 更多