Python贪吃蛇

Python贪吃蛇
Python贪吃蛇

摘要

本次Python语言程序设计主要使用了Python中的Pygame模块创建了一个简单的又充满童年回忆的游戏——贪吃蛇。编写这个游戏用到了一个游戏都具备有的框架,在这个贪吃蛇的游戏中,游戏窗口里会随机生成目标小方块作为贪吃蛇的食物,通过键盘的上下左右的按键控制贪吃蛇的方向去“吃”食物,每“吃”进一个食物就会增加分数,并显示在界面右上方,同时还设置了最高得分,显示在界面的顶端。当贪吃蛇接触到界面的边缘,游戏结束,弹出“Play Again”的按钮,玩家可以选择重新开始游戏或者退出游戏,重新开始游戏将保持最高分纪录直至打破。

1.引言

在通过一学期的Python学习之后,我初步的了解到Python的语法以及它在各方面的应用:Web和Internet开发、科学计算和统计、人工智能、桌面界面开发、软件开发、后端开发、网络爬虫等。Python相对于其他语言更为简洁易懂,有严格的格式要求,在接触Python时是通过小游戏开始的,所以在本次Python的期末项目中,我使用了Pygame 模块编写了一个经典贪吃蛇的游戏。

Pygame是被设计用来写游戏的Python模块集合,Pygame是在优秀的SDL库之上开发的功能性包。使用Python可以导入Pygame来开发具有全部特性的游戏和多媒体软件,Pygame是极度轻便的并且可以运行在几乎所有的平台和操作系统上。Pygame包已经被下载过成千上万次,并且也被访问过成千上万次。可见Pygame是多受人欢迎,虽然使用Python做游戏项目并不是Python的主要作用,但是是初学者用来进一步掌握Python 的不错的选择,Python的循环语句,条件语句,以及面向对象编程在一个游戏项目中都需要用到,熟悉掌握这些之后,对以后在其他方面的应用奠定了基础。

本次论文介绍了我编写游戏项目——贪吃蛇的过程,详细介绍了这个项目的架构,各个函数,实现方法,以及编写完成后如何操作和演示结果。

关键字:Python,Pygame,面向对象,贪吃蛇

2.系统结构

2.1 设计框架

每一个项目都拥有它的设计框架,图1为贪吃蛇的设计框架:

图1 贪吃蛇的设计框架

①相关设置:里面包含了这个游戏中所需要的固定设置,方便下面的函数调用;

②初始化:初始化Pygame这个游戏库;

③欢迎信息:运行程序后出现的界面,包含“Play”的按钮,点击能开始游戏;

④游戏运行主体:开始游戏后进入的循环;

④-①蛇、食物的位置初始化:对这些位置进行初始化;

④-②监听键盘、移动蛇位置:通过对键盘的监听,控制蛇的运动;

④-③判断游戏状态:如果触发死亡,则结束游戏,没有则继续游戏;

④-④分数更新:蛇的长度增加则分数更新;

④-⑤更新画面:蛇每次移动都更新一次画面;

⑤结束信息:触发死亡游戏结束时出现的界面,包含“Play Again”的按钮,点

击重新进入游戏循环。

2.2 程序流程图

图2所示为贪吃蛇游戏的程序流程图

图2 贪吃蛇游戏的程序流程图

3.实现代码

代码实现按照设计框架分为五大部分,其中第四部分游戏主体分五小部分介绍。

3.1 相关设置

定义颜色的设置和游戏界面的大小

图3

3.2 初始化

初始化Pygame游戏库,定义变量控制游戏速度以及最高得分初始化。创建游戏窗口。

图4

3.3 欢迎信息

定义一个show_start_info函数,里面包含了“Play”按钮的定义,并使按钮在屏幕中央显示出来,还设置了鼠标监听事件,当按下按钮之后,结束函数,游戏开始。

图5

图6

图7

3.4 游戏运行主体

3.4.1 蛇、食物的位置初始化

设定蛇和食物在屏幕上的初始化位置,以及蛇的初始化方向。

图8

3.4.2 监听键盘、移动蛇位置

设置一个循环,监听键盘的按键是否按下,通过设定各按键对应的方向,控制蛇头

的方向改变。

图9

图10

3.4.3 判断游戏状态

判断蛇头是否与目标方块重合,是则继续游戏,如果蛇头碰触到屏幕边缘,则结束游戏。

图11

图12

3.4.4 分数更新

设定一个draw_score和一个draw_high_score函数表示在屏幕上绘制分数。在main 函数中调用此函数。

图13

图14

图15

3.4.4 更新画面

图16

3.4 结束信息

在触发游戏结束的条件后,出现游戏结束的界面。

图17

图18

3.4 完整代码

# 导入程序所需要的模块

import pygame

import random

import sys

from pygame.locals import *

# 定义颜色的变量

# 目标方块的颜色红色

redColour = pygame.Color(255, 0, 0)

# 背景颜色黑色

blackColour = pygame.Color(0, 0, 0)

# 贪吃蛇的颜色白色

whiteColour = pygame.Color(255, 255, 255)

#游戏界面大小

windows_width = 800

windows_height = 600

# 定义游戏结束的函数

def gameOver():

pygame.quit()

sys.exit()

# 主函数

def main():

# 初始化Pygame这个游戏库

pygame.init()

# 定义一个变量控制游戏的速度

fpsClock = pygame.time.Clock()

# 创建一个窗口图形界面

playSurface = pygame.display.set_mode((windows_width, windows_height)) pygame.display.set_caption("贪吃蛇") #游戏名称写在窗口标题

# 初始化最高分(不可修改)

high_score = 0

show_start_info(playSurface) #打印欢迎信息

while True:

# 初始化变量

# 贪吃蛇起始坐标位置(100,100)

snakePosition = [100, 100]

snakeBody = [[100, 100], [80, 100], [60, 100]]

# 目标方块的起始位置

targetPosition = [300, 300]

# 目标方块的标记目的:用来判断是否吃掉了这个目标方块

targetflag = 1

# 初始化方向--> 往右

direction = 'right'

# 定义一个方向变量

changeDirection = direction

while True:

for event in pygame.event.get():

if event.type == QUIT:

pygame.quit()

sys.exit()

elif event.type == KEYDOWN:

if event.key == K_RIGHT:

changeDirection = 'right'

if event.key == K_LEFT:

changeDirection = 'left'

if event.key == K_UP:

changeDirection = 'up'

if event.key == K_DOWN:

changeDirection = 'down'

# 对应该键盘上的Esc键

if event.key == K_ESCAPE:

pygame.event.post(pygame.event.Event(QUIT))

# 确定方向

if changeDirection == 'left' and not direction == 'right':

direction = changeDirection

if changeDirection == 'right' and not direction == 'left':

direction = changeDirection

if changeDirection == 'up' and not direction == 'down':

direction = changeDirection

if changeDirection == 'down' and not direction == 'up':

direction = changeDirection

# 根据方向移动蛇头坐标

if direction == 'right':

snakePosition[0] += 20

if direction == 'left':

snakePosition[0] -= 20

if direction == 'up':

snakePosition[1] -= 20

if direction == 'down':

snakePosition[1] += 20

# 增加蛇的长度

snakeBody.insert(0, list(snakePosition))

# 如果我们贪吃蛇的位置和目标方块的位置重合了目标方块的标记为0

if snakePosition[0] == targetPosition[0] and snakePosition[1] == targetPosition[1]: targetflag = 0

else:

snakeBody.pop()

if targetflag == 0:

# 随机生成目标方块

x = random.randrange(1, 32)

y = random.randrange(1, 24)

targetPosition = [int(x * 20), int(y * 20)]

targetflag = 1

playSurface.fill(blackColour) # 填充背景为黑色

for position in snakeBody:

# 在屏幕上创建一条蛇

pygame.draw.rect(playSurface, whiteColour, Rect(position[0], position[1], 20, 20))

# 在屏幕上创建目标方块

pygame.draw.rect(playSurface, redColour, Rect(targetPosition[0], targetPosition[1], 20, 20))

pygame.display.flip()

# 显示得分信息

score = len(snakeBody) * 50 - 150

draw_score(playSurface, score)

draw_high_score(playSurface, high_score)

# 出现更高分数把分数更新

if score > high_score:

high_score = score

pygame.display.update()

# 游戏结束

if snakePosition[0] > 800 or snakePosition[0] < 0:

break

elif snakePosition[1] > 600 or snakePosition[1] < 0:

break

# 控制游戏速度

fpsClock.tick(8)

# 显示再玩一次按钮

show_gameover_info(playSurface)

def show_start_info(playSurface):

#设置按钮的尺寸和其他属性

width, height = 200,50

button_color = pygame.Color(0, 255, 0)

text_color = pygame.Color(255, 255, 255)

font = pygame.font.SysFont(None, 48)

#创建按钮的rect对象,并使其居中

rect = pygame.Rect(0, 0, width, height)

playSurface_rect = playSurface.get_rect()

rect.center = playSurface_rect.center

'''将msg渲染为图像,并使其在按钮上居中'''

msg = "Play"

msg_image = font.render(msg, True, text_color, button_color)

msg_image_rect = msg_image.get_rect()

msg_image_rect.center = rect.center

#绘制一个用颜色填充的按钮,再绘制文本

playSurface.fill(button_color, rect)

playSurface.blit(msg_image, msg_image_rect)

pygame.display.update()

while True: #鼠标监听事件

for event in pygame.event.get(): # event handling loop

if event.type == pygame.QUIT:

gameOver() #终止程序

elif event.type == pygame.MOUSEBUTTONDOWN:

mouse_x, mouse_y = pygame.mouse.get_pos()

return #结束此函数, 开始游戏

def show_gameover_info(playSurface):

#设置按钮的尺寸和其他属性

width, height = 200,50

button_color = pygame.Color(0, 255, 0)

text_color = pygame.Color(255, 255, 255)

font = pygame.font.SysFont(None, 48)

#创建按钮的rect对象,并使其居中

rect = pygame.Rect(0, 0, width, height)

playSurface_rect = playSurface.get_rect()

rect.center = playSurface_rect.center

'''将msg渲染为图像,并使其在按钮上居中'''

msg = "Play Again"

msg_image = font.render(msg, True, text_color, button_color)

msg_image_rect = msg_image.get_rect()

msg_image_rect.center = rect.center

#绘制一个用颜色填充的按钮,再绘制文本

playSurface.fill(button_color, rect)

playSurface.blit(msg_image, msg_image_rect)

pygame.display.update()

while True: #键盘监听事件

for event in pygame.event.get(): # event handling loop

if event.type == pygame.QUIT:

gameOver() #终止程序

elif event.type == pygame.MOUSEBUTTONDOWN:

mouse_x, mouse_y = pygame.mouse.get_pos()

return #结束此函数, 开始游戏

def draw_score(playSurface, score):

#显示得分信息时使用的字体设置

text_color = pygame.Color(255, 255, 255)

font = pygame.font.SysFont(None, 48)

'''将得分转换为一幅渲染的图像'''

rounded_score = int(round(score, -1))

score_str = "{:,}".format(rounded_score)

score_image = font.render(score_str, True, text_color, (0, 0, 0))

#将得分放在屏幕右上角

score_rect = score_image.get_rect()

playSurface_rect = playSurface.get_rect()

score_rect.right = playSurface_rect.right -20

score_rect.top = 20

playSurface.blit(score_image, score_rect)

def draw_high_score(playSurface, high_score):

#显示得分信息时使用的字体设置

text_color = pygame.Color(255, 255, 255)

font = pygame.font.SysFont(None, 48)

'''将得分转换为一幅渲染的图像'''

rounded_high_score = int(round(high_score, -1))

high_score_str = "{:,}".format(rounded_high_score)

high_score_image = font.render(high_score_str, True, text_color, (0, 0, 0))

#将得分放在屏幕顶端

high_score_rect = high_score_image.get_rect()

playSurface_rect = playSurface.get_rect()

high_score_rect.right = playSurface_rect.centerx

high_score_rect.top = high_score_rect.top

playSurface.blit(high_score_image, high_score_rect)

# 启动程序

if __name__ == '__main__':

main()

4.实验

运行程序,首先进入开始信息界面:

图19

点击“Play”按钮进入游戏

图20

通过键盘↑↓←→键控制蛇的方向,每次触碰到目标方块,蛇的长度增加1,原来的目标方块消失,并随机再在屏幕上生成,分数加50分。

图21

当蛇头触碰到屏幕边缘,游戏停止,显示游戏结束信息

图22

点击”PlayAgain”重新开始游戏,最高得分不会重置

图23

5.总结和展望

本次使用Python中的Pygame模块设计了经典的贪吃蛇小游戏,实现了这个游戏的基本功能,操作蛇也比较灵敏,目标方块也及时在原来的消失之后随机再出现,能够看到分数也能够刷新最高得分,具有一定的可玩性。但游戏的功能还可以进一步完善,比如增加音效和更多选项改变蛇和食物的外观等,使游戏更加美观,更加有吸引力和趣味性,在以后的学习中希望能对这个游戏进行完善。

Python的应用范围很广,做游戏也只是它其中小小的用途,在今后对Python的继续深入学习之后,应该拓展学习它在其他方面的应用,使用Python做更多的有用的项目,为科技发展出一份力。

参考文献:

[1]《Python编程:从入门到实践》作者:[美] Eric Matthes 译者:袁国忠

[2]《中文版Python3教程》

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) {

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

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()(游戏暂停函

贪吃蛇游戏开发与实现

南京晓庄学院 手机游戏开发技术报告 贪吃蛇游戏开发与实现 所在院(系): 数学与信息技术学院 学号: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()

使用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]

少儿编程分享:手把手教你用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()被调用后才按下的键,而这时按下的键会导致退出游戏界面并且重新开始游戏。

java版贪吃蛇小游戏

辅助类 Coordinate.java 复制代码 package com.nn.util; /** *坐标点 */ public class Coordinate { public int x; public int y; public Coordinate(int newX, int newY) { x = newX; y = newY; } public boolean equals(Coordinate other) { if (x == other.x && y == other.y) { return true; }

return false; } @Override public String toString() { return "Coordinate: [" + x + "," + y + "]"; } } 复制代码 接口Direction 复制代码 package com.nn.entity; public interface Direction { public class Dir{ public static final int UP = 1; public static final int DOWN = 2; public static final int LEFT = 3;

public static final int RIGHT = 4; } } 复制代码 实体类Snake.java 复制代码 package com.nn.entity; import java.util.ArrayList; import com.nn.entity.Direction.Dir; import com.nn.util.Coordinate; public class Snake{ //小方块x坐标 private int x; //小方块y坐标

html5实现贪吃蛇源代码

Insert title here