jQuery贪吃蛇
JS100行代码实现贪吃蛇,快写给你的女朋友
JS100⾏代码实现贪吃蛇,快写给你的⼥朋友<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>贪吃蛇</title><style>*{margin: 0;padding: 0;}#root{width: 100%;font-size: 0;}.block{display: inline-block;}</style></head><body><div id="root"></div><script>const BLOCK_LENGTH = 30; //⽅格边长const BLOCK_COLOR = "white"; //⽅格颜⾊const FOOD_COLOR = "salmon"; //⾷物颜⾊const HEAD_COLOR = "orchid"; //头部颜⾊const BODY_COLOR = "plum"; //⾝体颜⾊let js = 0; //定时器IDlet w_size = Math.floor((window.screen.width || 450) / BLOCK_LENGTH), //横向⽅格数量h_size = Math.floor((document.documentElement.clientHeight || 450) / BLOCK_LENGTH); //纵向⽅格数量//⽣成地图 startif(true){let map = "";for(let i = 0, len = w_size * h_size; i < len; ++i){map += `<div class='block' style='width:${BLOCK_LENGTH}px;height:${BLOCK_LENGTH}px;background-color:${BLOCK_COLOR};'></div>`; }document.getElementById('root').innerHTML = map;}//⽣成地图 endlet snake_list = [0]; //蛇⾝let snake_length = 1; //蛇⾝长度let block_list = document.getElementsByClassName('block'); //⽅格列表function creat_food(){ //⽣成⾷物let sub = 0;if(snake_list.length / (w_size * h_size) < 0.75){sub = Math.floor(Math.random()*(w_size*h_size));while(block_list[sub].style.backgroundColor != BLOCK_COLOR){sub = Math.floor(Math.random()*(w_size*h_size));}}else{let block_arr = [];for(let i = 0, len = w_size * h_size; i < len; ++i){if(block_list[i].style.backgroundColor == BLOCK_COLOR){block_arr.push(i);}}sub = block_arr[Math.floor(Math.random()*(block_arr.length))];}block_list[sub].style.backgroundColor = FOOD_COLOR;}let dir = 4; //移动⽅向(上:1下:2左:3右:4)function move(){ //移动let handle = function(next){let max = next > snake_list[snake_length - 1] ? next : snake_list[snake_length - 1];if(block_list[next] == undefined ||block_list[next].style.backgroundColor == BODY_COLOR ||(Math.abs(next - snake_list[snake_length - 1]) == 1 &&max % w_size == 0)){clearInterval(js);alert("得分:" + snake_length);location.reload();}else if(block_list[next].style.backgroundColor == FOOD_COLOR){block_list[snake_list[snake_length - 1]].style.backgroundColor = BODY_COLOR;snake_list.push(next);++snake_length;block_list[next].style.backgroundColor = HEAD_COLOR;creat_food();}else{block_list[snake_list[snake_length - 1]].style.backgroundColor = BODY_COLOR;block_list[snake_list[0]].style.backgroundColor = BLOCK_COLOR;snake_list.shift();snake_list.push(next);block_list[snake_list[snake_length - 1]].style.backgroundColor = HEAD_COLOR;}};switch(dir){case 1:handle(snake_list[snake_length - 1] - w_size);break;case 2:handle(snake_list[snake_length - 1] + w_size);break;case 3:handle(snake_list[snake_length - 1] - 1);break;case 4:handle(snake_list[snake_length - 1] + 1);break;default:;}}document.onkeypress = function(e){let theEvent = e || window.event;let code = theEvent.keyCode || theEvent.which || theEvent.charCode;switch(code){case 38: case 119:(dir == 1 || dir == 2) ? void 0 : dir = 1;break;case 37: case 97:(dir == 3 || dir == 4) ? void 0 : dir = 3;break;case 40: case 115:(dir == 1 || dir == 2) ? void 0 : dir = 2;break;case 39: case 100:(dir == 3 || dir == 4) ? void 0 : dir = 4;break;default:;}};block_list[snake_list[0]].style.backgroundColor = HEAD_COLOR;creat_food();js = setInterval(move, 300);</script></body></html>代码易读不⽤解释,只提⼀个事,蛇移动的时候,没必要每个部位都动,只处理头尾就可以了,这个应该也是显⽽易见的。
简单的贪吃蛇游戏代码示例
《简单的贪吃蛇游戏代码示例,使用Python语言和pygame库实现:》import pygameimport random# 初始化pygamepygame.init()# 设置窗口大小和标题screen_width = 640screen_height = 480screen = pygame.display.set_mode((screen_width, screen_height))pygame.display.set_caption("Snake Game")# 设置颜色white = (255, 255, 255)black = (0, 0, 0)red = (255, 0, 0)# 定义蛇的初始位置和长度snake_pos = [[100, 50], [90, 50], [80, 50]]snake_len = len(snake_pos)# 定义游戏结束标志和得分game_over = Falsescore = 0# 定义蛇的移动方向和速度direction = "right"speed = 10# 定义食物的初始位置和大小food_pos = [random.randint(1, screen_width-1), random.randint(1, screen_height-1)]food_size = 20# 定义边界和障碍物的大小和位置border = 10obstacle_size = 200obstacle_pos = [random.randint(border, screen_width-border), random.randint(border, screen_height-border)]obstacle_speed = 2# 游戏循环while not game_over:# 处理事件for event in pygame.event.get():if event.type == pygame.QUIT:game_over = Trueelif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP and direction != "down":direction = "up"elif event.key == pygame.K_DOWN and direction != "up":direction = "down"elif event.key == pygame.K_LEFT and direction != "right":direction = "left"elif event.key == pygame.K_RIGHT and direction != "left":direction = "right"elif event.type == pygame.KEYUP:if event.key == pygame.K_UP and direction == "up":direction = "right" if random.randint(0, 1) else "left"elif event.key == pygame.K_DOWN and direction == "down": direction = "right" if random.randint(0, 1) else "left"elif event.key == pygame.K_LEFT and direction == "left":direction = "up" if random.randint(0, 1) else "down"elif event.key == pygame.K_RIGHT and direction == "right": direction = "up" if random.randint(0, 1) else "down"。
贪吃蛇(HTML小游戏使用JavaScript开发)
贪吃蛇(HTML小游戏使用JavaScript开发)贪吃蛇:HTML小游戏使用JavaScript开发在游戏界,贪吃蛇是非常经典和受欢迎的一款小游戏。
它的简单和上瘾性使得无数玩家沉迷其中。
今天,我们将学习如何使用HTML和JavaScript来开发一个贪吃蛇的小游戏。
一、游戏的基本思路贪吃蛇的游戏规则非常简单明了。
玩家控制蛇的移动,通过吃食物来不断增长蛇的长度。
当蛇碰到墙壁或者自己的身体时,游戏结束。
游戏的目标是使蛇长得尽可能长,挑战自己的最高得分。
二、HTML布局首先,我们需要在HTML文件中创建游戏画布。
这个画布将用于显示游戏的界面。
我们可以通过HTML的"canvas"元素来实现。
```html<!DOCTYPE html><html><head><title>贪吃蛇</title><style>#gameCanvas {border: 1px solid black;}</style></head><body><canvas id="gameCanvas" width="400" height="400"></canvas><script>// 在这里编写JavaScript代码</script></body></html>```上面的代码中,我们创建了一个宽高为400像素的画布,并给它设置了一个边框。
三、JavaScript逻辑接下来,我们需要使用JavaScript来实现游戏的逻辑。
我们将使用一个JavaScript类来表示贪吃蛇,并在其中实现移动、吃食物等功能。
```javascript<script>class SnakeGame {constructor(canvasId) {this.canvas = document.getElementById(canvasId);this.context = this.canvas.getContext("2d");this.snake = new Snake();this.food = new Food();// 在这里添加事件监听器,监听用户的方向键输入this.gameLoop();}// 游戏主循环gameLoop() {// 清空画布this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); // 更新蛇的位置this.snake.update();// 绘制蛇和食物this.snake.draw(this.context);this.food.draw(this.context);// 在下一帧时再次调用游戏主循环requestAnimationFrame(() => this.gameLoop()); }}class Snake {constructor() {// 在这里初始化蛇的位置和长度等信息}update() {// 在这里更新蛇的位置和长度等信息}draw(context) {// 在这里使用context绘制蛇的形状}}class Food {constructor() {// 在这里初始化食物的位置等信息}draw(context) {// 在这里使用context绘制食物的形状}}// 创建一个名为"game"的SnakeGame实例const game = new SnakeGame("gameCanvas");</script>```在上面的代码中,我们创建了一个`SnakeGame`类来表示游戏,`Snake`类来表示蛇,和`Food`类来表示食物。
贪吃蛇代码详解
}
private class SnakeDriver implements Runnable{
/*线程*/
public void run() {
// TODO Auto-generated method stub
while(life){
move();//不停的调用move的方法
/*循环所有的监听器*/
for(int x=0;x<Global.WIDTH;x++){
for(int y=0;y<Global.HIGHT;y++){
if(rocks[x][y]==1){
g.setColor(Color.DARK_GRAY);
g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE, 20, 20, true);
public void newFood(Point p){
this.setLocation(p);
}
public boolean isSnakeEatFood(Snake snake){
System.out.println("Food's isSnakeEatFood");
return this.equals(snake.getHead());
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//蛇死的方法
void die(){
life=false;
}
private int [][] rocks=new int[Global.WIDTH] [Global.HIGHT];
JAVA开放性实验报告贪吃蛇
JAVA开放性实验报告贪吃蛇实验目的:本实验旨在利用Java语言实现一个经典的贪吃蛇游戏,通过实践提升对面向对象程序设计的理解和应用能力,加深对Java语言的熟练程度,并提高解决问题的能力和编程实践经验。
实验内容:1.设计游戏界面:通过Java中的Swing库实现游戏窗口的设计,包括游戏区域、游戏开始按钮、得分显示等。
2.实现游戏逻辑:设计贪吃蛇的移动规则,食物的生成和吃掉判定,碰撞检测等游戏逻辑。
同时实现游戏的主循环,控制游戏的进行。
3.实现键盘控制:通过监听键盘事件,实现玩家控制贪吃蛇的移动方向。
4.设计游戏机制:设置游戏的难度等级,增加贪吃蛇的移动速度、食物生成间隔等参数,使游戏更具挑战性。
5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。
玩家可以选择重新开始游戏或退出。
实验步骤:1.设计游戏界面:创建一个JFrame窗口,在窗口中添加游戏画布,开始按钮和得分显示等组件。
2.实现游戏逻辑:设计Snake类和Food类,表示贪吃蛇和食物。
通过ArrayList存储贪吃蛇的身体节点,并实现移动、吃食物等方法。
3.实现键盘控制:通过实现KeyListener接口来监听键盘事件,根据按键控制贪吃蛇的移动方向。
4.设计游戏机制:设置贪吃蛇的移动速度、食物生成间隔等参数,根据难度级别逐步增加,使游戏更具挑战性。
5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。
提供重新开始游戏和退出游戏的选项。
实验结果:经过实验设计和编码实现,成功完成了Java贪吃蛇游戏的开发。
游戏界面美观,操作流畅,游戏逻辑完整,玩家能够通过控制贪吃蛇吃到食物并获得得分。
随着游戏的进行,贪吃蛇会不断变长,玩家需要避开障碍,控制蛇头移动,体验游戏的乐趣和挑战。
实验总结:通过本次实验,我深入学习了Java语言的面向对象编程思想和应用,掌握了Swing库的使用方法,加深了对Java语言的理解和应用。
贪吃蛇毕业设计论文
贪吃蛇毕业设计论文贪吃蛇毕业设计论文在计算机科学领域中,贪吃蛇游戏是一个经典的案例,用于教授和研究各种算法和数据结构。
它是一款简单而又富有挑战性的游戏,玩家通过控制一条蛇的移动,吃掉食物,同时避免碰到自己的身体或边界。
贪吃蛇游戏的设计和实现涉及到许多计算机科学的基本概念和技术,包括图形绘制、用户输入、碰撞检测等等。
本篇论文将探讨贪吃蛇游戏的设计和实现过程,并介绍一些有趣的扩展功能和算法。
首先,我们将讨论游戏的基本设计思路和目标。
其次,我们将介绍游戏的图形界面和用户交互。
最后,我们将探讨一些扩展功能和算法,例如自动寻路和难度调节。
首先,我们需要明确贪吃蛇游戏的设计目标。
贪吃蛇游戏的核心目标是让玩家蛇吃到尽可能多的食物,同时避免碰到自己的身体或边界。
为了达到这个目标,我们需要设计一个直观而又富有挑战性的游戏界面,并提供简单而又灵活的用户交互方式。
其次,我们需要实现游戏的图形界面和用户交互。
在贪吃蛇游戏中,我们通常使用一个二维的网格来表示游戏界面,每个格子可以是空白、蛇身或食物。
我们可以使用图形库来绘制这个网格,并实现蛇的移动和食物的生成。
同时,我们还需要处理用户的输入,例如通过键盘控制蛇的移动方向。
接下来,我们可以考虑一些有趣的扩展功能和算法。
一个常见的扩展功能是增加难度调节,使得游戏可以逐渐变得更加困难。
我们可以通过增加蛇的移动速度、减少食物的生成频率等方式来实现难度调节。
另一个有趣的扩展功能是自动寻路算法,可以让蛇自动找到最优的吃食物路径。
这可以通过使用搜索算法,例如广度优先搜索或A*算法来实现。
在设计和实现贪吃蛇游戏的过程中,我们还需要考虑一些性能优化和错误处理的问题。
例如,当蛇碰到自己的身体或边界时,游戏应该结束并显示得分。
此外,我们还需要考虑如何处理大规模的游戏界面和复杂的用户输入,以确保游戏的性能和可靠性。
综上所述,贪吃蛇游戏是一个经典的案例,用于教授和研究各种算法和数据结构。
在设计和实现贪吃蛇游戏的过程中,我们需要考虑游戏的基本设计思路和目标,实现游戏的图形界面和用户交互,并探讨一些有趣的扩展功能和算法。
java贪吃蛇 代码
代码:一:::::::public class Cell {// 格子:食物或者蛇的节点private int x;private int y;private Color color;// 颜色public Cell() {}public Cell(int x, int y) {this.x = x;this.y = y;}public Cell(int x, int y, Color color) { this.color = color;this.x = x;this.y = y;}public Color getColor() {return color;}public int getX() {return x;}public int getY() {return y;}public String toString() {return"[" + x + "]" + "[" + y + "]";}}二::::::::::public class Worm {private int currentDirection;// 蛇包含的格子private Cell[] cells;private Color color;public static final int UP = 1;public static final int DOWN = -1;public static final int RIGHT = 2;public static final int LEFT = -2;// 创建对象创建默认的蛇:(0,0)(1,0)(2,0)······(11,0)public Worm() {// 构造器初始化对象color = Color.pink;// 蛇的颜色cells = new Cell[12];// 创建数组对象for (int x = 0, y = 0, i = 0; x < 12; x++) { // for(int y=0;;){}cells[i++] = new Cell(x, y, color);// 添加数组元素}currentDirection = DOWN;}public boolean contains(int x, int y) {// 数组迭代for (int i = 0; i < cells.length; i++) {Cell cell = cells[i];if (cell.getX() == x && cell.getY() == y) {return true;}}return false;}public String toString() {return Arrays.toString(cells);}public void creep() {for (int i = this.cells.length - 1; i >= 1; i--) {cells[i] = cells[i - 1];}cells[0] = createHead(currentDirection);}// 按照默认方法爬一步private Cell createHead(int direction) {// 根据方向,和当前(this)的头结点,创建新的头结点int x = cells[0].getX();int y = cells[0].getY();switch (direction) {case DOWN:y++;break;case UP:y--;break;case RIGHT:x++;break;case LEFT:x--;break;}return new Cell(x, y);}/*** food 食物**/public boolean creep(Cell food) {Cell head = createHead(currentDirection);boolean eat = head.getX() == food.getX() && head.getY() == food.getY();if (eat) {Cell[] ary = Arrays.copyOf(cells, cells.length + 1);cells = ary;// 丢弃原数组}for (int i = cells.length - 1; i >= 1; i--) { cells[i] = cells[i - 1];}cells[0] = head;return eat;}// 吃到东西就变长一格public boolean creep(int direction, Cell food) {if (currentDirection + direction == 0) {return false;}this.currentDirection = direction;Cell head = createHead(currentDirection);boolean eat = head.getX() == food.getX() && head.getY() == food.getY();if (eat) {Cell[] ary = Arrays.copyOf(cells, cells.length + 1);cells = ary;// 丢弃原数组}for (int i = cells.length - 1; i >= 1; i--) { cells[i] = cells[i - 1];}cells[0] = head;return eat;}// 检测在新的运动方向上是否能够碰到边界和自己(this 蛇)public boolean hit(int direction) {// 生成下个新头节点位置// 如果新头节点出界返回true,表示碰撞边界// ···············if (currentDirection + direction == 0) {return false;}Cell head = createHead(direction);if(head.getX() < 0 || head.getX() >= WormStage.COLS || head.getY() < 0|| head.getY() >= WormStage.ROWS) {return true;}for (int i = 0; i < cells.length - 1; i++) { if (cells[i].getX() == head.getX()&& cells[i].getY() == head.getY()) {return true;}}return false;}public boolean hit() {return hit(currentDirection);}// 为蛇添加会制方法// 利用来自舞台面板的画笔绘制蛇public void paint(Graphics g) {g.setColor(this.color);for (int i = 0; i < cells.length; i++) {Cell cell = cells[i];g.fill3DRect(cell.getX() * WormStage.CELL_SIZE, cell.getY()* WormStage.CELL_SIZE, WormStage.CELL_SIZE,WormStage.CELL_SIZE, true);}}}三:::::::::public class WormStage extends JPanel {/** 舞台的列数 */public static final int COLS = 35;/** 舞台的行数 */public static final int ROWS = 35;/** 舞台格子的大小 */public static final int CELL_SIZE = 10;private Worm worm;private Cell food;public WormStage() {worm = new Worm();food = createFood();}/*** 随机生成食物,要避开蛇的身体 1 生成随机数 x, y 2 检查蛇是否包含(x,y)* 3 如果包含(x,y) 返回 1 4 创建食物节点* */private Cell createFood() {Random random = new Random();int x, y;do {x = random.nextInt(COLS);// COLS列数y = random.nextInt(ROWS);// WOWS行数} while (worm.contains(x, y));return new Cell(x, y, Color.green);// 食物颜色/** 初始化的舞台单元测试 */public static void test() {WormStage stage = new WormStage();System.out.println(stage.worm);System.out.println(stage.food);}/*** 重写JPanel绘制方法paint:绘制,绘画,涂抹Graphics 绘图,* 理解为:绑定到当前面板的画笔*/public void paint(Graphics g) {// 添加自定义绘制!// 绘制背景g.setColor(Color.darkGray);// 背景色g.fillRect(0, 0, getWidth(), getHeight());g.setColor(Color.cyan);// 边框上的颜色// draw 绘制 Rect矩形g.drawRect(0, 0, this.getWidth() - 1, this.getHeight() - 1);// 绘制食物g.setColor(food.getColor());// fill 填充 3D 3维 Rect矩形突起的立体按钮形状g.fill3DRect(food.getX() * CELL_SIZE, food.getY() * CELL_SIZE,CELL_SIZE, CELL_SIZE, true);// 绘制蛇worm.paint(g);// 让蛇自己去利用画笔绘制private Timer timer;/*** 启动定时器驱动蛇的运行 1 检查碰撞是否将要发生* 2 如果发生碰撞:创建新的蛇和食物,重写开始* 3 如果没有碰撞就爬行,并检查是否能够吃到食物* 4如果吃到食物:重新创建新的食物* 5 启动重新绘制界面功能 repaint() 更新界面显示效果! repaint()* 方法会尽快调用paint(g) 更新界面!*/private void go() {if (timer == null)timer = new Timer();timer.schedule(new TimerTask() {public void run() {if (worm.hit()) {// 如果蛇碰到边界或自己worm = new Worm();// 创建新的蛇food = createFood();// 创建新食物} else {// 如果没有碰到自己boolean eat = worm.creep(food);// 蛇向前(当前方向)爬行,返回结果表示是否吃到食物if(eat) {// 如果吃到食物,就生成新食物food = createFood();}}repaint();}}, 0, 1000 / 5);this.requestFocus();this.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {int key = e.getKeyCode();switch (key) {case KeyEvent.VK_UP:creepForFood(Worm.UP);break;case KeyEvent.VK_DOWN:creepForFood(Worm.DOWN);break;case KeyEvent.VK_LEFT:creepForFood(Worm.LEFT);break;case KeyEvent.VK_RIGHT:creepForFood(Worm.RIGHT);break;}}});}private void creepForFood(int direction) { if (worm.hit(direction)) {worm = new Worm();food = createFood();} else {boolean eat = worm.creep(direction, food);if (eat) {food = createFood();}}}/** 软件启动的入口方法 */public static void main(String[] args) {// 启动软件....JFrame frame = new JFrame("贪吃蛇");// 一个画框对象frame.setSize(450, 480);// size 大小,setSize 设置大小// frame.setLocation(100,50);//Locationq位置frame.setLocationRelativeTo(null);// 居中// 设置默认的关闭操作为在关闭时候离开软件frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);// Visible可见的设置可见性frame.setLayout(null);// 关闭默认布局管理,避免面板充满窗口WormStage stage = new WormStage();// System.out.println("CELL_SIZE * COLS:"+CELL_SIZE * COLS);stage.setSize(CELL_SIZE* COLS, CELL_SIZE* ROWS);stage.setLocation(40, 50);stage.setBorder(new LineBorder(Color.BLACK));frame.add(stage);// 在窗口添加舞台stage.go();// 启动定时器驱动蛇自动运行}}。
贪吃蛇小游戏
贪吃蛇小游戏贪吃蛇是一款经典的小游戏,目标是控制一条蛇吃食物并尽可能长大,同时避免撞到自己或墙壁。
规则和玩法:1. 游戏开始时,玩家控制一条短小的蛇在一个有边界的区域内移动。
2. 蛇的移动是基于格子的,每次移动一格,可以向上、下、左、右四个方向移动。
3. 在区域内随机生成食物,玩家的任务是让蛇吃到食物,每吃到一个食物,蛇的长度加一。
4. 当蛇头碰到自己的身体或撞到墙壁时,游戏结束。
5. 游戏中可以设置一些特殊的障碍物,如墙壁或障碍物块,蛇不能穿过它们。
6. 游戏中还可以设置一些特殊的道具,如加速道具或减速道具,它们会影响蛇的移动速度。
7. 游戏可以根据蛇的长度或时间进行计分,玩家可以尝试在有限的时间内尽可能地吃到更多的食物。
术语和技巧:1. 蛇身:指蛇的身体部分,蛇的长度会随着吃到食物而增加。
2. 蛇头:指蛇的前端,也是蛇的移动方向。
3. 食物:蛇需要吃的东西,吃到食物可以增加蛇的长度。
4. 墙壁:游戏边界,蛇不能穿过墙壁。
5. 障碍物:游戏中的一些特殊障碍,蛇不能穿过它们。
6. 加速道具:使蛇的移动速度加快,提高游戏难度。
7. 减速道具:使蛇的移动速度减慢,提供更多的时间来思考和规划移动方向。
一些技巧和策略:1. 尽量避免蛇头碰到蛇身或墙壁,这会导致游戏结束。
2. 规划好蛇的移动方向,避免蛇头撞到自己的身体。
3. 利用加速道具来提高游戏难度,但要小心不要让蛇头撞到自己或墙壁。
4. 尽量吃到更多的食物,增加蛇的长度,但要注意不要让蛇头撞到自己的身体。
5. 如果游戏中有障碍物,要注意规避它们,不要让蛇撞到障碍物。
希望以上的解释能帮助你理解贪吃蛇小游戏的玩法和规则。
尽情享受游戏的乐趣吧!。
基于Java的游戏设计——贪吃蛇
毕业设计论文基于Java的游戏设计——贪吃蛇毕业设计(论文)中文摘要毕业设计(论文)外文摘要目录1 绪论 (1)1.1J AVA语言的特点 (1)1.2开发工具E CLIPSE介绍 (2)1.3开发工具JDK介绍 (3)1.4应用环境 (3)2 系统需求分析 (3)2.1需求分析 (4)2.2可行性分析 (4)3 系统概要设计 (5)3.1游戏流程图 (5)3.2设计目标 (6)3.3系统功能模块 (6)3.4系统数据结构设计 (8)4 系统详细设计 (12)4.1程序设计 (12)4.2贪吃蛇游戏各功能界面截图 (16)5 系统测试 (19)5.1测试的意义 (19)5.2测试过程 (19)5.3测试结果 (20)结论 (21)致谢 (22)参考文献 (23)1 绪论贪吃蛇是世界知名的益智类小游戏,选择这个题目一方面是为了将我们自己的所学知识加以运用;另一方面,我希望通过自己的所学知识把它剖析开来,通过自己的动手实践,真正的了解它的本质和精髓。
希望通过这次实践,能从中提高自己的编程能力。
并从中学会从零开始分析设计程序,达到学以致用,活学活用的目的。
另外,通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
本游戏的开发语言为Java,开发工具选用Eclipse。
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
这里采用Java作为开发语言主要是基于Java的面向对象和可移植性。
Eclipse 是一个开放源代码的、基于Java 的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
1.1 Java语言的特点1.1.1 简单性Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。
贪吃蛇游戏设计实训报告
一、摘要随着计算机技术的飞速发展,图形界面编程在计算机科学中占据着越来越重要的地位。
贪吃蛇游戏作为一款经典的益智游戏,不仅能够锻炼玩家的反应能力,还能培养编程思维。
本次实训以贪吃蛇游戏为背景,采用Java编程语言和Swing图形用户界面库进行设计,实现了游戏的基本功能,并对游戏性能进行了优化。
二、引言贪吃蛇游戏是一款简单易玩、老少皆宜的益智游戏。
玩家通过控制蛇的移动,吃掉食物使蛇身变长,同时躲避墙壁和自身,最终达到游戏目标。
本次实训旨在通过贪吃蛇游戏的设计与实现,提高学生的编程能力、图形界面设计能力和团队协作能力。
三、游戏设计1. 游戏界面设计游戏界面采用Swing图形用户界面库进行设计,主要包括以下部分:(1)游戏区域:用于显示蛇、食物和墙壁,采用JPanel组件实现。
(2)游戏菜单:包括开始游戏、重新开始、退出游戏等选项,采用JButton组件实现。
(3)游戏得分:显示当前得分,采用JLabel组件实现。
2. 游戏逻辑设计游戏逻辑主要包括以下部分:(1)蛇的移动:根据玩家输入的方向键控制蛇头的移动,实现蛇的实时更新。
(2)食物的生成:随机生成食物,当蛇头吃到食物时,蛇身变长,同时增加得分。
(3)墙壁和自身碰撞检测:当蛇头触碰到墙壁或自身时,游戏结束。
(4)游戏得分:根据蛇头吃到的食物数量计算得分。
四、关键技术实现1. 蛇的移动蛇的移动通过监听键盘事件实现。
在键盘事件监听器中,根据按键的方向更新蛇头的坐标,然后重新绘制蛇身。
2. 食物的生成食物的生成采用随机算法实现。
首先生成一个随机坐标,然后判断该坐标是否在游戏区域内,如果不在则重新生成。
3. 碰撞检测碰撞检测包括墙壁碰撞和自身碰撞。
在蛇头移动时,判断蛇头的坐标是否超出游戏区域边界,或者与自身坐标相同,若满足任一条件,则游戏结束。
4. 游戏得分游戏得分通过计算蛇头吃到的食物数量实现。
每吃到一个食物,得分加1。
五、性能优化1. 游戏速度优化:通过调整蛇的移动速度和食物生成的速度,使游戏节奏更加紧凑。
贪吃蛇小游戏
贪吃蛇小游戏贪吃蛇是一款经典的小游戏,目标是控制一条蛇在一个有边界的游戏区域内吃食物,使蛇身变得越来越长,同时要避免蛇头碰到自己的身体或游戏区域的边界。
游戏规则如下:1. 游戏开始时,蛇只有一个头部,位于游戏区域的某个位置。
2. 游戏区域内会随机生成一些食物,蛇需要吃掉这些食物来增加长度。
3. 蛇可以通过键盘控制上、下、左、右四个方向的移动,每次只能移动一格。
4. 当蛇头碰到自己的身体或游戏区域的边界时,游戏结束。
5. 蛇吃到食物后,身体会增加一节,并且在蛇头的朝向上增加一节身体。
玩法如下:1. 游戏开始后,蛇会自动向前移动一格。
2. 玩家通过按键控制蛇的移动方向,使蛇朝着食物的方向移动。
3. 当蛇头碰到食物时,蛇的长度增加一节,并在蛇头的朝向上增加一节身体。
4. 蛇的身体会随着蛇头的移动而跟随,形成一条长蛇。
5. 玩家需要不断地控制蛇的移动,使蛇能够吃到更多的食物,并尽量避免蛇头碰到自己的身体或游戏区域的边界。
术语和技巧:1. 蛇头:蛇的前端,控制蛇移动的部分。
2. 蛇身:蛇头后面的部分,长度随着吃到食物而增加。
3. 食物:游戏区域内随机出现的可以被蛇吃掉的物体。
4. 边界:游戏区域的边界,蛇头碰到边界会导致游戏结束。
5. 长度:蛇身的长度,随着吃到食物而增加。
6. 碰撞:蛇头碰到自己的身体或游戏区域的边界。
技巧:1. 尽量避免蛇头碰到自己的身体或游戏区域的边界,要有足够的灵活性和反应能力。
2. 注意观察食物的位置,尽量选择合适的路径去吃食物。
3. 利用蛇身的长度,可以绕过自己的身体,避免碰撞。
4. 不要过于追求吃食物的速度,要保持蛇头的安全。
5. 尝试不同的策略和移动方式,寻找最佳的游戏方式。
贪吃蛇是一款简单而又富有挑战性的游戏,玩家可以通过不断的练习和尝试,提高自己的游戏技巧,挑战更高的分数和更长的蛇身长度。
希望以上的介绍能够帮助读者理解并享受贪吃蛇游戏的乐趣!。
贪吃蛇游戏代码
贪吃蛇游戏可以使用Python的pygame库来实现。
以下是一份完整的贪吃蛇游戏代码:```pythonimport pygameimport sysimport random#初始化pygamepygame.init()#设置屏幕尺寸和标题screen_size=(800,600)screen=pygame.display.set_mode(screen_size)pygame.display.set_caption('贪吃蛇')#设置颜色white=(255,255,255)black=(0,0,0)#设置蛇和食物的大小snake_size=20food_size=20#设置速度clock=pygame.time.Clock()speed=10snake_pos=[[100,100],[120,100],[140,100]]snake_speed=[snake_size,0]food_pos=[random.randrange(1,(screen_size[0]//food_size))*food_size,random.randrange(1,(screen_size[1]//food_size))*food_size]food_spawn=True#游戏主循环while True:for event in pygame.event.get():if event.type==pygame.QUIT:pygame.quit()sys.exit()keys=pygame.key.get_pressed()for key in keys:if keys[pygame.K_UP]and snake_speed[1]!=snake_size:snake_speed=[0,-snake_size]if keys[pygame.K_DOWN]and snake_speed[1]!=-snake_size:snake_speed=[0,snake_size]if keys[pygame.K_LEFT]and snake_speed[0]!=snake_size:snake_speed=[-snake_size,0]if keys[pygame.K_RIGHT]and snake_speed[0]!=-snake_size:snake_speed=[snake_size,0]snake_pos[0][0]+=snake_speed[0]snake_pos[0][1]+=snake_speed[1]#碰撞检测if snake_pos[0][0]<0or snake_pos[0][0]>=screen_size[0]or\snake_pos[0][1]<0or snake_pos[0][1]>=screen_size[1]or\snake_pos[0]in snake_pos[1:]:pygame.quit()sys.exit()#蛇吃食物if snake_pos[0]==food_pos:food_spawn=Falseelse:snake_pos.pop()if not food_spawn:food_pos=[random.randrange(1,(screen_size[0]//food_size))*food_size,random.randrange(1,(screen_size[1]//food_size))*food_size] food_spawn=True#绘制screen.fill(black)for pos in snake_pos:pygame.draw.rect(screen,white,pygame.Rect(pos[0],pos[1],snake_size,snake_size)) pygame.draw.rect(screen,white,pygame.Rect(food_pos[0],food_pos[1],food_size, food_size))pygame.display.flip()clock.tick(speed)```这个代码实现了一个简单的贪吃蛇游戏,包括基本的游戏循环、蛇的移动、食物的生成和碰撞检测。
javascript实现贪吃蛇代码
javascript实现贪吃蛇代码javascript实现贪吃蛇代码 在习作的过程中尝试着贪吃蛇游戏⽤JS实现了。
竟然成功了。
思路:使⽤10px*10px的div层担当“像素”,然后使⽤40*40矩阵160个“像素”构成了游戏的界⾯。
下⾯是代码: 复制代码代码如下: // JavaScript Document alert("键盘的⽅向键控制⽅向,空格键暂停。
nLIFE制作n/anhulife"); // 添加基本的图形块,即160个10 * 10的层组成的⼆维矩阵 var rowindex = new Array(40); var colindex; var cell; // 图像单元的定义 var backcolor = "black"; for(var i = 0; i < 40; i ++ ) { colindex = new Array(40); for(var j = 0; j < 40; j ++ ) { // 设置每个单元的属性 cell = document.createElement("div"); cell.style.backgroundColor = backcolor; cell.style.width = "10px"; cell.style.height = "10px"; cell.style.position = "absolute"; cell.style.left = "" + (j * 10 + 100) + "px"; cell.style.top = "" + (i * 10 + 100) + "px"; cell.style.overflow = "hidden"; // 添加单元 document.body.appendChild(cell); // 填充列组 colindex[j] = cell; } // 填充⾏组 rowindex[i] = colindex; } // 贪吃蛇类的.定义,基于基本的图像单元 function snake() { // 定义蛇的⾝体,并初始化 this.bodycolor = "white"; this.bodys = new Array(); for(var i = 20; i < 25; i ++ ) { rowindex[20][i].style.backgroundColor = this.bodycolor; // rowindex的第⼀个坐标是⾏标,第⼆是列标 this.bodys.push(rowindex[20][i]); } // 定义蛇的头部坐标,第⼀个是⾏标, 第⼆个是列标 this.head = [20, 20]; // 定义蛇的前进⽅向,0代表左、1代表下、2代表右、3代表上 this.direct = 0; } // 移动模块 function move() { // 根据前进⽅向计算头部的坐标 switch(this.direct) { case 0 : this.head[1] -= 1; break; case 1 : this.head[0] += 1; break; case 2 : this.head[1] += 1; break; case 3 : this.head[0] -= 1; break; } // 判断是否越界 if(this.head[0] < 0 || this.head[0] > 39 || this.head[1] < 0 || this.head[1] > 39) { // 如果越界则返回false return false; } else // 如果没有越界则检查下⼀个元素的性质,如果是⾷物则吃掉,并再⽣成⾷物。
贪吃蛇大作战(微信小程序使用微信小程序框架进行开发)
贪吃蛇大作战(微信小程序使用微信小程序框架进行开发)在当今智能手机普及的时代,微信小程序已经成为了一种非常受欢迎的应用形式。
微信小程序框架为开发者提供了便捷的开发环境和丰富的功能接口,使得开发者能够轻松实现各种小程序的创意和想法。
在这篇文章中,将向大家介绍一个基于微信小程序框架开发的游戏应用——贪吃蛇大作战。
一、贪吃蛇游戏概述贪吃蛇游戏作为经典的游戏之一,凭借其简单而又富有挑战的玩法一直备受玩家喜爱。
在这个微信小程序中,我们将以贪吃蛇为主角,通过控制贪吃蛇的移动方向,不断吃食物增加长度,避免撞到墙壁或者自己的身体,通过不断提高分数来挑战自己的极限。
二、游戏功能设计1. 游戏界面设计游戏界面分为游戏画布和得分栏两个部分。
游戏画布上显示了贪吃蛇的移动轨迹和食物的位置,得分栏实时更新当前分数。
2. 贪吃蛇移动控制通过触屏事件,玩家可以控制贪吃蛇的移动方向。
当贪吃蛇触碰到屏幕边缘或者自己的身体时,游戏结束。
3. 食物生成机制在游戏开始时,随机生成一个食物,玩家操控贪吃蛇吃掉食物可以增加分数和身体长度。
每次吃掉食物后,会再次生成下一个随机位置的食物。
4. 分数计算和显示游戏过程中,玩家的得分会实时更新在得分栏中,通过吃食物增加分数,撞到墙壁或自己身体减少分数。
5. 游戏结束和重新开始当玩家撞到墙壁或自己的身体时,游戏结束,显示游戏结束画面,并提供重新开始的按钮。
三、开发实现思路1. 安装开发工具和环境首先,我们需要安装微信开发者工具来进行小程序的开发。
通过微信开发者工具,我们可以创建小程序项目,并在其中进行代码编写、调试和预览。
2. 创建游戏界面在小程序框架中,我们可以使用WXML语言来描述页面结构,使用WXSS来进行样式的定义。
通过WXML和WXSS,我们可以创建出简洁美观的游戏界面。
3. 实现贪吃蛇移动控制通过微信小程序框架提供的触屏事件,我们可以捕捉到玩家操作屏幕的行为。
通过监听触屏事件,并根据触摸点的位置和上一次触摸点的位置进行比较,可以确定贪吃蛇的移动方向。
贪吃蛇代码详解
return true;
}
}
}
return false;
}
public void drawMe(Graphics g){
System.out.println("Ground's drawMe");
}
}
}
public boolean isSnakeEatRock(Snake Snake){
System.out.println("Ground's isSnakeEatRock");
for(int x=0;x<Global.WIDTH;x++){
for(int y=0;y<Global.HIGHT;y++){
}
}
}
}
}
//格子类
packageTanChiShe;
publicclassGlobal {
publicstaticfinalintCELL_SIZE=20;
publicstaticfinalintWIDTH=20;
publicstaticfinalintHIGHT=20;
}
//point类
packageTanChiShe;
for(SnakeListener l:listeners){//依次调用所有的元素
l.snakeMoved(Snake.this);//依次调用snakeMoved的方法
}
try {
Thread.sleep(300);//睡眠1秒既是1秒move一次
Jquery遍历checkbox获取选中项value值的方法
Jquery遍历checkbox获取选中项value值的⽅法源码:复制代码代码如下:jQuery(function($){$("input[name='key']:checkbox").click(function(){var ids = '';var flag = 0;$("#ids").attr("value",ids);$("input[name='key']:checkbox").each(function(){if (true == $(this).attr("checked")) {ids += $(this).attr('value')+',';flag += 1;}});if(0 < flag) {$("#ids").attr("value",ids);return true;}else {alert('请⾄少选择⼀项!');return false;}});});本源码的功能:获取name=‘key'的复选框的值,将选中项的 value 写到隐藏域 <input type="hidden" name="ids" id="ids" value="" /> 的表单中。
核⼼语句:复制代码代码如下:$("input[name='key']:checkbox").each(function(){if (true == $(this).attr("checked")) {ids += $(this).attr('value')+',';}});在HTML中,如果⼀个复选框被选中,对应的标记为 checked="checked"。
贪吃蛇游戏代码
贪吃蛇游戏代码贪吃蛇是一个经典的小游戏,可以在很多平台和设备上找到。
如果你想自己开发一个贪吃蛇游戏,这里有一个简单的Python版本,使用pygame库。
首先,确保你已经安装了pygame库。
如果没有,可以通过pip来安装:bash复制代码pip install pygame然后,你可以使用以下代码来创建一个简单的贪吃蛇游戏:python复制代码import pygameimport random# 初始化pygamepygame.init()# 颜色定义WHITE = (255, 255, 255)RED = (213, 50, 80)GREEN = (0, 255, 0)BLACK = (0, 0, 0)# 游戏屏幕大小WIDTH, HEIGHT = 640, 480screen = pygame.display.set_mode((WIDTH, HEIGHT))pygame.display.set_caption("贪吃蛇")# 时钟对象来控制帧速度clock = pygame.time.Clock()# 蛇的初始位置和大小snake = [(5, 5), (6, 5), (7, 5)]snake_dir = (1, 0)# 食物的初始位置food = (10, 10)food_spawn = True# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_UP:snake_dir = (0, -1)elif event.key == pygame.K_DOWN:snake_dir = (0, 1)elif event.key == pygame.K_LEFT:snake_dir = (-1, 0)elif event.key == pygame.K_RIGHT:snake_dir = (1, 0)# 检查蛇是否吃到了食物if snake[0] == food:food_spawn = Falseelse:del snake[-1]if food_spawn is False:food = (random.randint(1, (WIDTH // 20)) * 20, random.randint(1, (HEIGHT // 20)) * 20)food_spawn = Truenew_head = ((snake[0][0] + snake_dir[0]) % (WIDTH // 20), (snake[0][1] + snake_dir[1]) % (HEIGHT // 20))snake.insert(0, new_head)# 检查游戏结束条件if snake[0] in snake[1:]:running = False# 清屏screen.fill(BLACK)# 绘制蛇for segment in snake:pygame.draw.rect(screen, GREEN, (segment[0], segment[1], 20, 20))# 绘制食物pygame.draw.rect(screen, RED, (food[0], food[1], 20, 20))# 更新屏幕显示pygame.display.flip()# 控制帧速度clock.tick(10)pygame.quit()这个代码实现了一个基本的贪吃蛇游戏。
Python实现的贪吃蛇小游戏代码
以下是Python实现的贪吃蛇小游戏代码:```pythonimport pygameimport random# 初始化Pygamepygame.init()# 设置游戏窗口大小和标题screen_width = 480screen_height = 480game_display = pygame.display.set_mode((screen_width, screen_height))pygame.display.set_caption('贪吃蛇游戏')# 定义颜色white = (255, 255, 255)black = (0, 0, 0)red = (255, 0, 0)green = (0, 255, 0)# 定义蛇的初始位置和尺寸snake_block_size = 20snake_speed = 10initial_snake_pos = {'x': screen_width/2, 'y': screen_height/2}snake_list = [initial_snake_pos]# 定义食物的尺寸和位置food_block_size = 20food_pos = {'x': round(random.randrange(0, screen_width - food_block_size) / 20.0) * 20.0, 'y': round(random.randrange(0, screen_height - food_block_size) / 20.0) * 20.0}# 定义分数、字体和大小score = 0font_style = pygame.font.SysFont(None, 30)# 刷新分数def refresh_score(score):score_text = font_style.render("Score: " + str(score), True, black)game_display.blit(score_text, [0, 0])# 绘制蛇def draw_snake(snake_block_size, snake_list):for pos in snake_list:pygame.draw.rect(game_display, green, [pos['x'], pos['y'], snake_block_size, snake_block_size])# 显示消息def message(msg, color):message_text = font_style.render(msg, True, color)game_display.blit(message_text, [screen_width/6, screen_height/3])# 主函数循环def game_loop():game_over = Falsegame_close = False# 设置蛇头的初始移动方向x_change = 0y_change = 0# 处理事件while not game_over:while game_close:game_display.fill(white)message("You lost! Press Q-Quit or C-Play Again", red)refresh_score(score)pygame.display.update()# 处理重新开始和退出事件for event in pygame.event.get():if event.type == pygame.KEYDOWN:if event.key == pygame.K_q:game_over = Truegame_close = Falseelif event.key == pygame.K_c:game_loop()# 处理按键事件for event in pygame.event.get():if event.type == pygame.QUIT:game_over = Trueif event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:x_change = -snake_block_sizey_change = 0elif event.key == pygame.K_RIGHT:x_change = snake_block_sizey_change = 0elif event.key == pygame.K_UP:y_change = -snake_block_sizex_change = 0elif event.key == pygame.K_DOWN:y_change = snake_block_sizex_change = 0# 处理蛇的移动位置if snake_list[-1]['x'] >= screen_width or snake_list[-1]['x'] < 0 or snake_list[-1]['y'] >= screen_height or snake_list[-1]['y'] < 0:game_close = Truesnake_list[-1]['x'] += x_changesnake_list[-1]['y'] += y_change# 处理食物被吃掉的情况if snake_list[-1]['x'] == food_pos['x'] and snake_list[-1]['y'] == food_pos['y']:score += 10food_pos = {'x': round(random.randrange(0, screen_width -food_block_size) / 20.0) * 20.0,'y': round(random.randrange(0, screen_height -food_block_size) / 20.0) * 20.0}else:snake_list.pop(0)# 处理蛇撞到自身的情况for pos in snake_list[:-1]:if pos == snake_list[-1]:game_close = True# 刷新游戏窗口game_display.fill(white)draw_snake(snake_block_size, snake_list)pygame.draw.rect(game_display, red, [food_pos['x'], food_pos['y'], food_block_size, food_block_size])refresh_score(score)pygame.display.update()# 设置蛇移动的速度clock = pygame.time.Clock()clock.tick(snake_speed)pygame.quit()quit()game_loop()```当您运行此代码时,将会启动一个贪吃蛇小游戏。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意:我的蛇头使用的是background属性,也就是贴图,蛇头,蛇身,和食物对应的分别是6.png;7.png;和8.png;像素都为21px*21px;所以要出效果可以将background属性改为bgcolor属性,或者自己制作3张像素为21*21px的底图即可;运行代码需jquery-1.11.1.js文件,可以从百度下载<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta charset="utf-8"></meta><title>tianchishe</title><script type="text/javascript"src="jquery-1.11.1.js"></script></head><style type="text/css">#contentBox{margin:10px auto 10px; width:421px; height:421px;border-collapse:collapse;}#total{ background-image: url(4.jpg);margin:0 auto;}</style><script type="text/javascript">var arrayId; //蛇var startX=10; //蛇头X坐标var startY=10; //蛇头Y坐标var foodX; //食物X坐标var foodY; //食物Y坐标var interval; //间距var speed=1000; //速度var direction=0; //方向var score=0; //分数avar level=1; //等级//创建底图function createTable(rows,cels){var table=$("#contentBox"); //定义table为id等于contentBox的表格for(var i=0;i<rows;i++){ //循环rows次,将<tr></tr>加入tablevar tr=$("<tr></tr>");tr.appendTo(table);for(var j=0;j<cels;j++){var td=$("<td id='"+i+"-"+j+"'></td>");//循环cels次将<td id="i-j"></td>加入trtd.appendTo(tr);}}}//创建蛇function snake(){arrayId=new Array();arrayId[1]=startY+'-'+startX;arrayId[0]=startX+'-'+(startX-1);$('#'+arrayId[1]).attr("background","6.png");//给蛇头添加属性,可以使:$('#'+arrayId[1]).attr("bgcolor","red");若为此代码则蛇头为红色,以下一样$('#'+arrayId[0]).attr("background","7.png"); //给蛇尾添加属性}//创造食物function food(){while(true){foodY= Math.ceil(Math.random()*19);foodX = Math.ceil(Math.random()*19);if(!$('#'+foodY+"-"+foodX).attr("background")){ $('#'+foodY+"-"+foodX).attr("background","8.png");return;}}}//方向操作0上 1右 2下 3 左$(document).keydown(function (event){ //键盘事件,获取键盘keycode值switch (event.keyCode) {case 37:if(direction != 1)//按下左键,若方向不如右,则改变方向,以下同direction = 3;break;case 38:if(direction != 2)direction = 0;break;case 39:if(direction != 3)direction = 1;break;case 40:if(direction != 0)direction = 2;break;};return false;});//运动方式,注:蛇头为蛇的最后一个元素,蛇尾为舌头的第一个元素,其中获取蛇头坐标的方式与蛇尾相同function run(){var head=$('#'+arrayId[arrayId.length-1]); //获取蛇数组最后一个元素,即蛇头var headId=arrayId[arrayId.length-1]; //获取蛇头idvar headArray=headId.split("-"); //通过split("-")分解蛇头idvar headY= parseInt(headArray[0]); //获取蛇头坐标Yvar headX= parseInt(headArray[1]); //获取蛇头坐标Xvar end=$('#'+arrayId[0]);var endId=arrayId[0];var endArray=endId.split("-");var endY= parseInt(endArray[0]);var endX= parseInt(endArray[1]);switch(direction){case 0:if((headX>19)||(headX<0)||(headY>19)||(headY-1)<0){ //条件,判断蛇是否在墙外,若满足条件,则游戏结束alert("撞死了");clearInterval(interval);//取消由 setInterval() 设置的 timeout;score=0;}elseif($('#'+(headY-1)+"-"+headX).attr("background")=='7.png'){ //判断蛇是否与自己的身体重合alert("吃到自己了");clearInterval(interval);}else{head.attr("background","7.png"); //将蛇头的属性改为与蛇身相同$('#'+(headY-1)+"-"+headX).attr("background","6.png"); //给蛇头出现的下一个位置添加属性arrayId[arrayId.length]=(headY-1)+"-"+(headX); //给蛇的最后一个元素赋值}if((headY-1)==foodY&&headX==foodX){ //判断是否吃到食物food();//生成新的食物score += 10*level;//显示成绩$('#score').text(score);level=1+Math.floor(score/100);//显示等级$('#level').text(level);speed=speed-((level-1)*100);//显示速度$('#speed').text(speed);clearInterval(interval);interval = setInterval(function(){run()},speed); }else{arrayId.shift();//提取第一个元素,并删除end.removeAttr("background");//将第一个元素的属性清空}break;case 1: //同上if(((headX+1)>19)||(headX<0)||(headY>19)||(headY<0)||$('#'+headY+"-"+(headX+1)).attr("background")=='7.png'){alert("吃到自己了!");clearInterval(interval);score=0;}else{head.attr("background","7.png");$('#'+headY+"-"+(headX+1)).attr("background","6.png");arrayId[arrayId.length]=(headY)+"-"+(headX+1); }if((headY)==foodY&&(headX+1)==foodX){food();score += 10*level;$('#score').text(score);level=1+Math.floor(score/100);$('#level').text(level);speed=1000-((level-1)*100);$('#speed').text(speed);clearInterval(interval);interval =setInterval(function(){run()},speed);}else{arrayId.shift();end.removeAttr("background");}break;case 2:if((headX>19)||(headX<0)||((headY+1)>19)||(headY<0)||$(('#'+headY+1)+"-"+headX ).attr("background")=='7.png'){alert("吃到自己了!");clearInterval(interval);score=0;}else{head.attr("background","7.png");$('#'+(headY+1)+"-"+headX).attr("background","6.png");arrayId[arrayId.length]=(headY+1)+"-"+(headX);}if((headY+1)==foodY&&headX==foodX){food();score += 10*level;$('#score').text(score);level=1+Math.floor(score/100);$('#level').text(level);speed=1100-(level*100);$('#speed').text(speed);clearInterval(interval);interval = setInterval(function(){run()},speed); }else{arrayId.shift();end.removeAttr("background");}break;case 3:if((headX>19)||((headX-1)<0)||(headY>19)||(headY<0)||$('#'+headY+"-"+(headX-1) ).attr("background")=='7.png'){alert("吃到自己了!");clearInterval(interval);score=0;}else{head.attr("background","7.png");$('#'+headY+"-"+(headX-1)).attr("background","6.png");arrayId[arrayId.length]=(headY)+"-"+(headX-1);}if((headY)==foodY&&(headX-1)==foodX){food();score += 10*level;$('#score').text(score);level=1+Math.floor(score/100);$('#level').text(level);speed=1000-((level-1)*100);$('#speed').text(speed);clearInterval(interval);interval = setInterval(function(){run()},speed);}else{arrayId.shift();end.removeAttr("background");}break;}}//level// function level(){// level=Math.floor(score/10)+1;// speed=1000-(100*level);// $('#level').text(level);// }$(document).ready(function(){ //就绪函数,可百度其作用createTable(20, 20); //创建表格snake(); //生成蛇food(); //生成食物$("#on").click(function(){ //触发点击事件并执行相关程序interval = setInterval(function(){run()},speed);//设置间隔点,持续运行函数});$("#off").click(function(){clearInterval(interval);});$("#reset").click(function(){$("#contentBox td").removeAttr("background"); //清空表格内所有的属性 snake();food();score=0;$('#score').text(score);speed=1000;$('#speed').text(speed);level=1;$('#level').text(level);clearInterval(interval);});});</script><body><table id="total"border="1"><tr><th bgcolor="grey">菜单栏</th><th colspan="2"bgcolor="green">游戏运行</th> </tr><tr><td bgcolor="yellow"><table border="1"><tr><td><buttonid="on">开始游戏</button></td></tr><br><br><br><tr><td><buttonid="off">暂停游戏</button></td></tr><br><br><br><tr><td><buttonid="reset">重置游戏</button></td></tr><br><br><br><tr><td><span id="score"style="color:red;left:">0</span><span>分</span><td></tr><tr><td><span id="level"style="color:red;left:">1</span><span>级</span><td></tr><tr><td><span id="speed"style="color:red;left:">1000</span><span>ms</span><td></tr></table></td><td><table id="contentBox"border="1"></table></td></tr></table></body></html>。