python实现贪吃蛇

python实现贪吃蛇
python实现贪吃蛇

# encoding:utf-8

importtkMessageBox

fromTkinter import Tk, Canvas, Frame

from random import randint

import sys

class Grid:

def __init__(self, master = None, window_width = 500, window_height = 500, grid_width = 25):

self.width = grid_width

self.bg = 7

self.start = 2 # 50 / 25

self.end = 18 # 450 / 25

self.color = ['yellow', 'red', 'pink', 'black', 'orange', 'green', 'purple', 'cyan']

self.canvas = Canvas(master, width = window_width, height = window_height, bg = self.color[self.bg])

self.draw_wall()

self.canvas.pack()

defdraw_rect(self, x, y, clr):

self.canvas.create_rectangle(x, y, x + self.width, y + self.width, fill = self.color[clr], outline = self.color[self.bg])

defdraw_wall(self):

w = self.width

s = self.start * w

e = self.end * w

fori in range(s, e, w):

self.canvas.create_rectangle(i, s, i + w, s + w, fill = 'green', outline = self.color[self.bg])

self.canvas.create_rectangle(i, e - w, i + w, e, fill = 'green', outline = self.color[self.bg])

self.canvas.create_rectangle(s, i, s + w, i + w, fill = 'green', outline = self.color[self.bg])

self.canvas.create_rectangle(e - w, i, e, i + w, fill = 'green', outline = self.color[self.bg])

classsnakenode:

def __init__(self, clr, x, y):

self.clr = clr

self.x = x

self.y = y

class Food:

def __init__(self, Grid):

self.grid = Grid

self.set_food()

defset_food(self):

min = self.grid.start + 1

max = self.grid.end - 2

self.x = randint(min, max) * 25

self.y = randint(min, max) * 25

self.clr = randint(0, len(self.grid.color) - 2)

def display(self):

self.grid.draw_rect(self.x, self.y, self.clr)

class snake:

def __init__(self, Grid):

self.grid = Grid

self.init_snake()

self.direction = 'Up'

self.dir_x = [0, 0, -1, 1]

self.dir_y = [-1, 1, 0, 0]

self.dir = {'Up':0, 'Down':1, 'Left':2, 'Right':3}

self.pause = 1

self.dead = 0

self.food = Food(self.grid)

self.display_food()

definit_snake(self):

s1 = snakenode(0, 100, 300)

s2 = snakenode(1, 100, 325)

s3 = snakenode(2, 100, 350)

self.body = [s1, s2, s3]

defdisplay_snake(self):

for node in self.body:

self.grid.draw_rect(node.x, node.y, node.clr)

defdisplay_food(self):

for node in self.body:

ifnode.x == self.food.x and node.y == self.food.y:

self.food.set_food()

else:

break

self.food.display()

def move(self):

index = self.dir[self.direction]

m = self.dir_x[index] * self.grid.width + self.body[0].x

n = self.dir_y[index] * self.grid.width + self.body[0].y

if m == self.food.x and n == self.food.y: # 吃到食物sn = snakenode(self.food.clr, m, n)

self.body.insert(0, sn)

self.display_food()

return

s = (m / self.grid.width)

t = (n / self.grid.width)

b1 = s == self.grid.start or s == self.grid.end - 1

b2 = t == self.grid.start or t == self.grid.end - 1

if b1 or b2: # 撞到墙

self.dead = 1

return

for node in self.body: # 撞到自身

if m == node.x and n == node.y:

self.dead = 1

return

# 沿着方向继续移动

sn = snakenode(self.body[0].clr, m, n)

self.body.insert(0, sn)

fori in range(1, len(self.body) - 1):

self.body[i].clr = self.body[i + 1].clr

last = self.body.pop()

self.grid.draw_rect(last.x, last.y, self.grid.bg)

self.display_snake()

class Game(Frame):

def __init__(self, master = None):

Frame.__init__(self, master)

self.bind_all('', self.keyrelease_event)

self.master = master

self.grid = Grid(self.master)

self.snake = snake(self.grid)

self.snake.display_snake()

def run(self):

ifself.snake.pause != 0:

self.snake.move()

ifself.snake.dead == 1:

message = tkMessageBox.showinfo('提示', "Game Over")

if message == 'ok':

sys.exit(0)

self.after(300, self.run)

defkeyrelease_event(self,event): # 键盘监听事件

key = event.keysym

dir = self.snake.direction

rule = {'Up':'Down', 'Down':'Up', 'Left':'Right', 'Right':'Left'}

ifrule.has_key(key) and key != rule[dir]: # 按下方向键且不在规则rule中self.snake.direction = key

elifevent.char == ' ': # 实现暂停

self.snake.pause = (self.snake.pause + 1) % 2

if __name__ == "__main__":

root = Tk(className = 'snake')

game = Game(root) game.run()

root.mainloop()

FLASH游戏之贪吃蛇游戏源代码

scorecommand("allowscale", "false"); fscommand("showmenu", "false"); loadedbytes=0; total=_root.getBytesTotal(); loadedbytes=_root.getBytesLoaded() if (loadedbytes==total){nextScene();} else{bfb=int((loadedbytes/total*100))+"%";} stop(); fscommand("allowscale", "false"); fscommand("showmenu", "false"); music=new Sound() music.attachSound("music"); music.stop() music.start(0,10000) musicstart=true onClipEvent(keyDown){ temp=Key.getCode(); if(!keyon){;} else if(game=="stop" and (temp==189 or temp==109)){ if (speed>1) { speed--; rate = speed;}} else if (game=="stop" and (temp==107 or temp==187)) { if (speed"start"){enter(); }else if(temp==Key.ENTER){ enter(); }else if (temp == Key.DOWN and y1>=0) { x1=0; y1 = 1; walk(); timestart() }else if (temp == Key.UP and y1<=0) { x1=0; y1 = -1; walk(); timestart() }else if (temp == Key.LEFT and x1<=0) {

贪吃蛇小游戏实验报告[

软件设计报告 设计题目:贪吃蛇 学院:华北电力大学科技学院 专业班级:软件10K1 学生姓名:张飞 学生学号:101909020122 指导教师:乔玲玲 提交时间: 成绩: - 0 -

目录 一.需求分析 二.概要设计 三.详细设计 四.心得体会 一.需求分析 1.1关于题目 1.1.1题目要求 利用Microsoft Visual C++制作一个贪吃蛇的小游戏,要求: (1)应用MFC单文档制作 (2)能够记录游戏成绩 (3)可根据玩家要求设置游戏速度(级别):初级,中级,高级 (4)可以根据个人喜好更换背景图片,食物图片,障碍物图片,结束图片等 1.1.2选题背景 贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我们,它的制作方法对于以前的我们而言都是很神秘的。我们希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我们的编程能力不是很强,但是我们有信心,在这次学习中我们将从实践和实际的项目中提高自己的编程能力。因此我们选定了这个题目。 1.2关于编译软件 本程序采用Microsoft Visual C++6.0的英文版本进行编译。VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C++规范,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。 - 1 -

- 2 - 1.3关于兼容性 本程序经过调试,可以在XP 系统下编译运行,也可以在Vista 下运行,界面稍有不同,但不影响运行结果。 二. 概要设计 2.1软件主要功能设计 2.1.1程序结构 根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、停止游戏,设置游戏级别(速度),设置图片等。具体的程序结构如下面的图1-1所示。 图2-1 贪吃蛇结构图 2.1.2程序流程 根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。贪吃蛇的内容主要包括: 游戏开始,随机出现食物。 贪吃蛇 游 戏开始 游戏设置 游戏结束 开始 初级 中级 高级 结束

python实现贪吃蛇

Python版贪吃蛇.py #!/usr/bin/python from Tkinter import * import random class snake(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.body = [(0,0)] self.bodyid = [] self.food = [ -1, -1 ] self.foodid = -1 self.gridcount = 10 self.size = 500 self.di = 3 self.speed = 500 self.top = self.winfo_toplevel() self.top.resizable(False, False) self.grid() self.canvas = Canvas(self) self.canvas.grid() self.canvas.config(width=self.size, height=self.size,relief=RIDGE) self.drawgrid() s = self.size/self.gridcount id = self.canvas.create_rectangle(self.body[0][0]*s,self.body[0][1]*s, (self.body[0][0]+1)*s, (self.body[0][1]+1)*s, fill="yellow") self.bodyid.insert(0, id) self.bind_all("", self.keyrelease) self.drawfood() self.after(self.speed, self.drawsnake) defdrawgrid(self): s = self.size/self.gridcount for i in range(0, self.gridcount+1): self.canvas.create_line(i*s, 0, i*s, self.size) self.canvas.create_line(0, i*s, self.size, i*s) defdrawsnake(self): s = self.size/self.gridcount head = self.body[0] new = [head[0], head[1]] if self.di == 1: new[1] = (head[1]-1) % self.gridcount elifself.di == 2: new[0] = (head[0]+1) % self.gridcount elifself.di == 3: new[1] = (head[1]+1) % self.gridcount

用java编写的贪吃蛇游戏代码

用Java编写的贪吃蛇代码 下面是我用java编写的一个贪吃蛇游戏源代码.我个人是比较喜欢玩游戏的,所以学习编程二年多了,很想做个游戏程序,由于能力有限,一直没能做好,后来突然看同学在手机上玩“贪吃蛇”,故想做出来,其一是因为此游戏界面容易设计,算法也比较简单,今天我就把我程序的代码和算法介绍一下,顺便把程序界面皮肤设计说一下...... 程序中一个关于游戏信息的类如下,由于类的说明在程序中写的很清楚了,就不再多解释了:#include "time.h" //方向定义 const CPoint UP(CPoint(0,-1)); const CPoint DOWN(CPoint(0,1)); const CPoint LEFT(CPoint(-1,0)); const CPoint RIGHT(CPoint(1,0)); //速度快慢定义 const int HIGH = 75; const int NORMAL = 180; const int SLOW = 300; const int MAX = 80; //表示转向数 const int LENGTH = 10; class GameMsg { public: GameMsg(void) : m_icon(0)

{ InitGame(); } void InitGame(int up = VK_UP, int down = VK_DOWN, int left = VK_LEFT, int right = VK_RIGHT) { srand((unsigned)time(NULL)); m_gameSpeed = NORMAL; m_speedNum = 2; m_snakeNum = 4; for(int i=0; i

汇编语言写的贪吃蛇小游戏源代码

DATA SEGMENT dw 0,0 snk db 1 blk db 32 food db 3 tal1 db 4 tal2 db 2 adrs db 5 len db ? pst db ? addrs dw ? frow db ? fcol db ? hwrt db ? gmov db 'game over press r to restart press q to quit $' score1 db 'score :$' score2 db ? score0 db 1 zero db 48 writer db 'Developer: Geniusdot $' email db ': geniusdotgmail.$' msg1 db 'The way to play the game:$' way db ' press w to up ,press s to down,press a to left,press d to right$' msg db 'Press any key(except a,s,d,w) to start$' DATA ENDS STACK SEGMENT stack db 200 dup(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK start: mov ax,data mov ds,ax mov ax,0 mov es,ax mov frow,10 mov fcol,6 mov dh,10 mov dl,26 mov ah,2

int 10h mov ah,9 lea dx,msg1 int 21h mov dh,11 mov dl,7 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,way int 21h mov dh,12 mov dl,20 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,msg int 21h mov ah,0 int 16h mov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,10 int 10h mov dh,0 mov dl,0 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,score1 int 21h mov dl,15 mov ah,2 mov bh,0 int 10h

五子棋游戏实验报告

五子棋游戏实验报告 课程名称计算机程序设计(VB) 学号______________________ 姓名______________________ 班级______________________ 提交时间 五子棋软件设计 一、实验目的 1?通过五子棋软件设计或者自拟题目设计,巩固本课程所学的各个章节重点知识,自拟题目的同学需尽早向教师提岀自己的想法及设计方案。 2?通过开发一个较大的系统,增强软件开发能力。 3?通过调试系统,增强逻辑思维能力。 二、实验内容 1.基本要求: (1)输入两个对手名字,然后进入游戏界面。 (2)用鼠标点击的方式在棋盘上摆放棋子,黑白交替。(棋盘15*15 ) (3)可以悔棋。 (4)五子连在一起的时候能判断胜利,并且显示出胜利者的名字。 (5)能够将棋局的结果保存,保存该棋局

结束的状态、对手名字、棋局名字(棋局名字在保存时由用户在相应的界面下添入)(此功能要求用数据库和文件两种技术实现)。

因为棋盘上空点居多,大部分点的信息为0,因此只需保存有棋子的点的信息 用文件技术进行棋局保存,思路相同。 (7)五子棋恢复棋局 思路:首先从数据库文件中找到要恢复棋局的数据(即曾经保存的数据),然后把这些数据赋值给内存中相应的数组或者变量中,按照这些数据重新绘制棋盘和棋子,即完成了对棋局的恢复。 窗体启动事件应该完成的事情: 组合框中应该显示曾经保存的棋局名。因为每次保存棋局时,都是将棋局所有棋子的记录添加在表的最 后,因此表中关于棋局名的记录只能是类似于aaabbbbccccc的形式,而不可能是abbcacc的形式,根据 这个特点编程序取出表中不同的棋局名。 具体算法: 用一个字符串变量strfile初始值为空,从表的顶端向下依次移动记录指针,如果当前记录的棋局名字段和strfile不相等,说明进入另一个棋局的记录中,将该棋局记录的棋局名赋值给strfile,并加入到组合 框中,一直到表中最后一个记录 因为要从数据库中取岀相关数据到a数组中,因此要将a数组所有数据清零。 要建立一个data控件,与数据库连接起来,而后识别棋局(即表中的棋局名字段与在列表框中选择的棋 局名比较),将数据库该棋局中所有信息都赋值给a数组及相关变量。 刚才仅仅是数据的恢复,即将数据库中已经保存过的数据恢复到内存中,下一步应该根据内存中的数据重新绘制棋盘以及棋子。 重新绘制棋盘是独立的一块功能,因此考虑用全局子过程来实现,该子过程定义在模块中。思路如下: 清屏一绘制棋盘一根据a数组中的每一项的两个下标来决定绘制棋子的位置,根据每一项的值是1还是 2来决定在该位置绘制何颜色的棋子。 决定该黑白方走的blackwhite变量当时没有保存,可以采用在数据库中保存的方式来解决,本例中解决方法是通过数黑白棋子个数来决定恢复棋局后该谁走的。 因此设置了一个变量做计数器,每走一步棋计数器的值加一。 用文件技术实现棋局恢复,思路相同。 (8)悔棋 悔一步棋:用几个变量来表示关于一步棋的几个信息,每次下子都将该子的信息赋值给那几个变量,悔 一步棋即将那几个变量所表示的点的a数组信息清零。而后调用paint ()过程重画。 以上是教师带着学生完成的软件功能。 遗留问题:保存棋手姓名和棋局名并在恢复棋局的时候显示。(需要同学们自己完成)思路:在数据表中多建立两个字段,分别表示两个棋手姓名,同其它数据的保存类似。 三、设计日期 十二月 四、完成日期 十二月 五、实验体会 其实,一开始学习vb我就对它不抱有一定的热情,可能是因为要用到计算机以及编程问题,当时一想到有代码,就会无比的苦恼,但是为了让这门课顺利通过,我还是怀着一颗必须要学的心情。起初,我对待这门新课程和其他课

VC实现贪吃蛇的实验报告

题目:利用VC++实现贪吃蛇小游戏

一、题目:利用VC++实现贪吃蛇小游戏 利用VC++实现的贪吃蛇小游戏更加注重可视化。一条蛇在封闭的围墙内,在围墙内会随机出现一个食物,通过键盘上的W S A D四个键控制它向上,下,左,右四个方向移动。当蛇头撞到食物时表示将食物吃掉,这时蛇身增长一节,得分加一。接着随机生成食物,等待被蛇吃掉。如果在移动过程中撞到墙壁或者自己的身体,则游戏结束。游戏过程中,可以在菜单中选择暂停或者结束游戏,对游戏进行暂停或者退出。

二、编程要点(或基本思路、算法分析与说明): 本次游戏设计包含两大模块,一个模块是贪吃蛇游戏本身算法的设计,完成了贪吃蛇的食物产生,获取食物,蛇的移动等功能。另一个模块是利用MFC完成贪吃蛇的可视化显示,产生了一个对话框,在对话框可以控制游戏及游戏的显示。 1.贪吃蛇游戏算法设计包括: <1>果实出现的设计思路: (1)采用随机数生成果实出现坐标 (2)判断当前生成的果实是否在贪吃蛇身体范围内。 (3)如果在,重新生成直到不在为止。如果不在,则把坐标位置返回给调用对象。 <2>贪吃蛇更新的算法设计 (1)接收玩家按下的方向键消息,并保存到方向变量中。 (2)定义一个时间定时器,用来控制蛇运动的速度。 (3)当每次时间间隔到达时,则根据方向变量来更新贪吃蛇curr(即贪吃蛇身体)向量。 (4)判断curr向量的第一个元素中的坐标数据是否碰到边界或者蛇身,如果有,则游戏结束。否则,进行下一步。 (5)判断curr向量的第一个元素中的坐标数据是否与当前果实重合,如果有,表示贪吃蛇已经吃到果实。这时就向贪吃蛇curr向量添加一个元素,并重新生成一个果实。 (6)吃到食物后,得分会同步增加。 2.利用MFC完成贪吃蛇的可视化显示: 首先初始对话框,完成游戏的整体框架的显示。然后游戏玩家在菜单栏里选择开始,暂停,结束等,控制游戏状态。游戏开始后,玩家通过键盘上的消息控制蛇的运动。在函数DrawSnake(CDC *pDC,Snake snake),和DrawFood(CDC *pDC,SnakeFood f)完成对蛇和食物的重绘,从而显示出蛇的运动和对食物的获取。在OnPaint()函数中完成得分和游戏操作提示的显示。 本次游戏设计的主要功能函数如下: OnGameStart()(游戏开始函数), OnGamePauseStart()(游戏暂停函

贪吃蛇实验报告

创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王* 《计算机程序设计》课程设计报告课题名称贪吃蛇游戏 班级 学号 姓名 指导教师 设计时间至 设计地点 常熟理工学院计算机科学与工程学院

常熟理工学院计算机科学与工程学院 目录 1 需求分析 (1) 2 系统分析和设计 (1) 2.1 数据结构的设计和选择的理由 (1) 2.2 系统模块划分和模块结构 (2) 2.3 流程图 (2) 2.4 数据类型、全局变量和函数说明 (3) 3 程序测试和运行结果 (4) 4 课程报告小结 (5) 4.1分数重叠显示 (5) 4.2速度太快 (5) 4.3食物可能出现在蛇身上 (5) 附录A:程序源代码 (6)

《C程序设计》课程设计 1 需求分析 【阐述课程设计应该完成的功能】 使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。 2 系统分析和设计 2.1 数据结构的设计和选择的理由 本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。 2.1.1从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。下面以数组方式为例: struct Point { int x, y; } struct Point nodes[MAX_LENGTH]; //蛇身数组,MAX_LENGTH为最大蛇长 贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点: 1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用int direction;表示) 2. 运动时,蛇身后面一节移动到前面一节的位置。当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处...。 3. 吃到一个食物以后,蛇身会增加一节。即该数组中的有效数据个数加一。(用int length;表示) 根据上面的情况,我们可以设计蛇的数据结构如下: struct Snake { struct Point nodes[MAX_LENGTH]; //蛇身数组,保存每节蛇身的坐标。MAX_LENGTH为最大蛇长 int length; //当前蛇长 int direction; //蛇头运动方向 int live; //蛇活的,还是已经死了? } 2.1.2 关于食物,有两个属性: 1. 坐标位置 2. 状态:存在,或被吃。 故我们用以下结构表示: struct Food { struct Point position; //食物的位置 int exist; //存在?还是被吃? } 1

贪吃蛇游戏开发与实现

南京晓庄学院 手机游戏开发技术报告 贪吃蛇游戏开发与实现 所在院(系): 数学与信息技术学院 学号:XXXXXXX 学生姓名:XX 年级专业: 08计算机科学与技术 指导教师: XXX 提交日期: 2011 年 11 月

第一章、开发平台与技术概述 (5) 1.1开发环境 (5) 1.2 WTK、ECLIPSE与JAM的介绍 (5) (1)WTK (5) (2)Eclipse (5) 1.3 JA V A语言介绍 (6) (1)面向对象 (6) (2)平台无关性 (6) (3)分布式 (6) (4)可靠性和安全性 (6) (5)多线程 (6) 第二章J2ME及其体系结构概述 (7) 2.2体系结构 (7) 2.3 移动信息设备简表概述 (7) 第三章手机游戏开发过程 (9) 3.2 详细设计 (9) 3.2.1 代码设计 (10) 第四章程序的调试与运行 (14) 4.2 游戏的运行环境 (16) 第五章总结 (17) 致谢 (18) 参考文献 (19)

摘要 随着通信技术的发展和手机的普及,手机游戏的开发技术越来越为人们所关注。以J2ME为开发平台,利用Java提供强大工具,不但可以在手机上实现静态HTML技术所无法实现的计算处理、数据存储、与服务器的通信等功能,而且能够开发各种手机游戏。本文在介绍J2ME及其体系结构的基础上,以贪吃蛇游戏为实例,描述了借助J2ME的MIDlet类库开发手机游戏的过程。 本次论文重点在于J2ME技术的应用,通过对手机游戏开发和MIDP 2.0的研究,开发了一款操作简单,并有一定可玩性的手机空中射击游戏。在游戏中玩家可以通过手机的方向键控制己方飞机的移动,己方飞机自动发射子弹。敌方飞机按照预定程序移动并自动发射子弹。当我方飞机发射子弹打中敌方飞机,敌方飞机爆炸,同理,敌方飞机发射子弹打中我方飞机时我方飞机爆炸。当双方飞机相撞时都爆炸。 关键词J2ME,手机游戏,MIDP,SPRITE,永久性数据

贪吃蛇游戏实现思路及源代码

HTML5 贪吃蛇游戏实现思路及源代码 点评:游戏难点是怎么模拟贪吃蛇的移动。如果只是一个方块的话显然很简单。但是当蛇的长度变长之后要怎么样控制,下面为大家简要介绍下具体的实现,感兴趣的朋友可以参考下,希望对大家有所帮助 游戏操作说明 通过方向键控制贪吃蛇上下左右移动。贪吃蛇吃到食物之后会变长一个长度。 游戏具体实现 游戏难点是怎么模拟贪吃蛇的移动。如果只是一个方块的话显然很简单。但是当蛇的长度变长之后要怎么样控制 每个方块的移动呢? 如果观察蛇的移动,可以发现,从蛇的头部到尾部,每个方块在下一时刻的位置就是它的前一个方块在当前时刻 的位置。因此我们需要做的只是控制贪吃蛇的头部的运动。其他部分的位置都可以依次类推。 另外一个值得注意的问题是 贪吃蛇吃下食物之后,新增加的方块应该放在哪个位置。 答案就是在下一时刻,新增加的方块应该出现在当前时刻的尾部位置。 因此,在吃下食物之后应该在更新蛇的每个位置之前,增加一个方块,并且将其位置设定在当前时刻的尾部位置。 然后在当前时刻更新出了新增方块之外的所有方块的位置 index.html snake.js 复制代码代码如下: var canvas; var ctx; var timer; //measures var x_cnt = 15; var y_cnt = 15;

var unit = 48; var box_x = 0; var box_y = 0; var box_width = 15 * unit; var box_height = 15 * unit; var bound_left = box_x; var bound_right = box_x + box_width; var bound_up = box_y; var bound_down = box_y + box_height; //images var image_sprite; //objects var snake; var food; var food_x; var food_y; //functions function Role(sx, sy, sw, sh, direction, status, speed, image, flag) { this.x = sx; this.y = sy; this.w = sw; this.h = sh; this.direction = direction; this.status = status; this.speed = speed; this.image = image; this.flag = flag; } function transfer(keyCode) { switch (keyCode) { case 37: return 1; case 38: return 3; case 39: return 2; case 40: return 0; } } function addFood()

贪吃蛇游戏程序设计实验报告

Windows编程大作业贪吃蛇设计与实现 学校:武汉轻工大学 院系: 班级: 姓名: 学号: 2015年12月16日

目录 一、题目介绍 二、设计目的 三、详细设计 3.1贪吃蛇本体设计 3.2贪吃蛇食物设计 3.3游戏界面设计 3.3.1游戏初始化 3.3.2游戏开始 3.3.3游戏暂停 3.3.4游戏退出 3.3.5游戏总界面 3.3.6游戏区域与背景 3.3.7关于SNAKE 3.4玩法规则设计 3.5核心设计 四、功能测试 五、总结 六、参考文献

一、题目介绍: 编写一个基于MFC的小游戏。 基本要求: 1、实现一个小游戏 2、实现基本游戏控制功能 3、具有游戏数据保存功能 4、界面布局合理、美观; 二、设计目的: 通过使用vc++6.0实现一个小游戏的课程设计,进一步掌握MFC的高级使用方法和锻炼自己动手写程序的能力。了解游戏设计的整个过程,通过熟练使用MFC来设计游戏。程序主要包括:游戏界面设计,游戏菜单栏设计,游戏初始化,游戏控制等。培养和锻炼开发游戏的能力。 三、详细设计 3.1贪吃蛇的本体设计 贪吃蛇的头部拥有一个坐标(x,y),蛇体有一个长度len,蛇有一个运动方向direct,故定义一个结构体如下: struct Snake { int x,y; int len; int direct; }Snake[50]; 3.2贪吃蛇食物设计 贪吃蛇的食物有一个坐标(x,y),此食物有一个标志isfood,当isfood为0时,表示食物还没被吃,为1时,表示被吃。 struct Food { int x; int y; int isfood; }Food; 3.3游戏界面设计 3.3.1游戏初始化 游戏初始蛇体长度为3,颜色为灰色,食物标志为1,因为此时没有显示出食物,需要随机生成后,才置为0;

使用Python编写一个贪吃蛇

import random import pygame import sys from pygame.locals import * from os import system system("pause") Snakespeed = 7 Window_Width = 800 Window_Height = 500 Cell_Size = 20# Width and height of the cells # Ensuring that the cells fit perfectly in the window. eg if cell size was # 10 and window width or windowheight were 15 only 1.5 cells would # fit. assert Window_Width % Cell_Size == 0, "Window width must be a multiple of cell size." # Ensuring that only whole integer number of cells fit perfectly in the window. assert Window_Height % Cell_Size == 0, "Window height must be a multipl e of cell size." Cell_W = int(Window_Width / Cell_Size) # Cell Width Cell_H = int(Window_Height / Cell_Size) # Cellc Height White = (255, 255, 255) Black = (0, 0, 0) Red = (255, 0, 0) # Defining element colors for the program. Green = (0, 255, 0) DARKGreen = (0, 155, 0) DARKGRAY = (40, 40, 40) YELLOW = (255, 255, 0) Red_DARK = (150, 0, 0) BLUE = (0, 0, 255) BLUE_DARK = (0, 0, 150) BGCOLOR = Black # Background color UP = 'up' DOWN = 'down'# Defining keyboard keys. LEFT = 'left'

贪吃蛇小游戏源代码

#include #include #include #include int head=3 ,tail=0; int main() { int i,j,k=0; int zuobiao[2][80]; long start; int direction=77; int gamespeed; int timeover; int change(char qipan[20][80],int zuobiao[2][80],char direction); zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[ 1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4; /*处理棋盘*/ char qipan[20][80];//定义棋盘 for(i=0;i<20;i++) for(j=0;j<80;j++) qipan[i][j]=' ';//初始化棋盘 for(i=0;i<80;i++) qipan[0][i]='_'; for(i=0;i<20;i++) qipan[i][0]='|'; for(i=0;i<20;i++) qipan[i][79]='|'; for(i=0;i<80;i++) qipan[19][i]='_'; qipan[1][1]=qipan[1][2]=qipan[1][3]='*';//初始化蛇的位置 qipan[1][4]='#'; printf("This is a game of a SNAKE.\nGOOD LUCK TO YOU !\n"); printf("Input your game speed,please.(e.g.300)\n"); scanf("%d",&gamespeed); while(direction!='q') { system("cls"); for(i=0;i<20;i++)//打印出棋盘 for(j=0;j<80;j++) printf("%c",qipan[i][j]); timeover=1;

贪吃蛇游戏安卓源代码

附录1.SnakeView类 package com.example.android_snake.view; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import com.example.android_snake.R; import com.example.android_snake.food.Food; import com.example.android_snake.snake.Body; import com.example.android_snake.snake.Head; import com.example.android_snake.snake.Snake; import com.example.android_snake.snake.SnakeDirection; import com.example.android_snake.stone.Stone; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.os.Handler; import android.util.DisplayMetrics; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.ViewManager; import android.view.WindowManager; import android.widget.Toast; public class SnakeView extends View { private Context context; private Bitmap headBitmap; private Bitmap bodyBitmap; private Bitmap foodBitmap; private Bitmap stoneBitmap; // 屏幕的高度和宽度 private int screenHeight; private int screenWidth; // 每个小格子的高度和宽度 private int eachHeight;

python实现贪吃蛇

# encoding:utf-8 importtkMessageBox fromTkinter import Tk, Canvas, Frame from random import randint import sys class Grid: def __init__(self, master = None, window_width = 500, window_height = 500, grid_width = 25): self.width = grid_width self.bg = 7 self.start = 2 # 50 / 25 self.end = 18 # 450 / 25 self.color = ['yellow', 'red', 'pink', 'black', 'orange', 'green', 'purple', 'cyan'] self.canvas = Canvas(master, width = window_width, height = window_height, bg = self.color[self.bg])

self.draw_wall() self.canvas.pack() defdraw_rect(self, x, y, clr): self.canvas.create_rectangle(x, y, x + self.width, y + self.width, fill = self.color[clr], outline = self.color[self.bg]) defdraw_wall(self): w = self.width s = self.start * w e = self.end * w fori in range(s, e, w): self.canvas.create_rectangle(i, s, i + w, s + w, fill = 'green', outline = self.color[self.bg]) self.canvas.create_rectangle(i, e - w, i + w, e, fill = 'green', outline = self.color[self.bg]) self.canvas.create_rectangle(s, i, s + w, i + w, fill = 'green', outline = self.color[self.bg]) self.canvas.create_rectangle(e - w, i, e, i + w, fill = 'green', outline = self.color[self.bg]) classsnakenode: def __init__(self, clr, x, y): self.clr = clr self.x = x self.y = y class Food: def __init__(self, Grid): self.grid = Grid self.set_food() defset_food(self): min = self.grid.start + 1 max = self.grid.end - 2 self.x = randint(min, max) * 25 self.y = randint(min, max) * 25 self.clr = randint(0, len(self.grid.color) - 2) def display(self): self.grid.draw_rect(self.x, self.y, self.clr) class snake: def __init__(self, Grid): self.grid = Grid self.init_snake() self.direction = 'Up' self.dir_x = [0, 0, -1, 1]

贪吃蛇游戏软件可行性分析报告

软件设计与体系架构实验报告 学院:计算机科学与技术学院 学号:0121210680330 姓名:郭烨华 班级:sy1201 课题名:贪吃蛇游戏开发

贪吃蛇开发并进行动态分析 指导老师:陈明俊 组员:李安福 郭烨华 分工明细 成员分工: 职责姓名任务 项目分析经理、程序员李安福可行性分析,系统功能分析,编程 系统设计师、程序员郭烨华概要设计,开发设计、编程 目录 一、引言 (1)

1.1编写目的 (1) 1.2 编写主题 (1) 1.3 游戏运行环境 (1) 二、可行性研究的前提 (1) 2.1游戏基本功能 (1) 2.2 要求 (3) 2.3目标 (3) 2.4 进行可行性研究的方法 (3) 2.5 评价尺度 (4) 三、对现有系统的分析 (4) 3.1 处理流程和数据流程: (4) 3.2 工作负荷 (4) 3.3 人员.................................................................................................. 错误!未定义书签。 3.4 设备 (4) 3.5局限性 (4) 3.6 改进要求 (5) 四、所建议的系统 (5) 4.1 对所建议系统的说明 (5) 4.2处理流程和数据流程 (5) 4.3改进之处 (6) 4.4 影响 (6) 4.4.1对设备的影响: (6) 4.4.3 对用户单位机构的影响 (6) 4.4.4 对系统运行过程的影响 (7) 4.4.5对地点和设施的影响 (7) 4.5 技术条件方面的可行性 (7) 五、可选择的其他系统方案 (7) 六、投资及效益分析 (8) 6.1支出 (8) 6.1.1 基本建设投资 (8) 6.1.2 其他一次性支出 (8) 6.1.3 非一次性支出 (8) 6.2 收益 (8) 6.2.1 一次性收益 (8) 6.2.2 非一次性收益 (8) 6.2.3 不可定量的收益 (8) 6.3 投资回收周期 (9) 6.4 敏感性分析 (9) 七、社会因素方面的可行性 (9) 7.1 法律方面的可行性 (9) 7.2 使用方面的可行性 (9) 八、结论 (9)

少儿编程分享:手把手教你用Python编写贪吃蛇(五)

游戏分享:手把手教你用Python编写 贪吃蛇(五) 2018.1.14 游戏代码还是挺长的 更多素材可以在码趣学院公众号(maquxueyuan)留言领取 确定苹果出现的位置 163. def getRandomLocation(): 164. return {'x': random.randint(0, CELLWIDTH - 1), 'y': random.randint(0, CELLHEIGHT - 1)} 当我们需要一个新苹果出现,我们就需要调用getRandomLocation()函数。这个函数将返回一个存有横纵坐标x、y的字典,x、y的值是由random.randint 随机产生的。 游戏结束界面 167. def showGameOverScreen(): 168. gameOverFont = pygame.font.Font('freesansbold.ttf', 150) 169. gameSurf = gameOverFont.render('Game', True, WHITE) 170. overSurf = gameOverFont.render('Over', True, WHITE) 171. gameRect = gameSurf.get_rect() 172. overRect = overSurf.get_rect() 173. gameRect.midtop = (WINDOWWIDTH / 2, 10)

25) 175. 176. DISPLAYSURF.blit(gameSurf, gameRect) 177. DISPLAYSURF.blit(overSurf, overRect) 178. drawPressKeyMsg() 179. pygame.display.update() 游戏结束界面和游戏开始界面相似,只不过游戏结束界面不是动画。我们用两个Surf对象分别放置“Game”和“Over”两个单词。 180. pygame.time.wait(500) 181. checkForKeyPress() # 清除事件队列中按下键盘度事件 182. 183. while True: 184. if checkForKeyPress(): 185. pygame.event.get() # 清除事件队列 186. return “Game Over”会一直显示在屏幕上,直到玩家按下任意键。为了防止玩家太早 (很可能是不小心)按下键盘,我们在第180行使用pygame.time.wait()添加 半秒的等待时间。在这半秒内,按下键盘也不会退出游戏结束界面从而重新开始游戏。(括号内的参数500代表500毫秒,即0.5秒)。这是为了类似这样的情况 发生:比如玩家在最后关头试着避开屏幕的边缘,但是由于按键太晚导致小蛇撞死。如果是这样的话,玩家很可能是在showGameOverScreen()被调用后才按下的键,而这时按下的键会导致退出游戏界面并且重新开始游戏。

相关文档
最新文档