博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用python+pygame写贪吃蛇小游戏
阅读量:5220 次
发布时间:2019-06-14

本文共 2750 字,大约阅读时间需要 9 分钟。

因为python语法简单好上手,前两天在想能不能用python写个小游戏出来,就上网搜了一下发现了pygame这个写2D游戏的库。了解了两天再参考了一些资料就开始写贪吃蛇这个小游戏。 毕竟最开始的练手项目好像都是这个emmmmpython推荐廖雪峰的python3教程,pygame推荐目光博客的pygame教程,pygame是一个开发2D游戏的库。Python + Pygame 简单了解后就可以上手这个项目。

 

总体思路:

1、游戏开始信息显示

2、地图的初始化

3、蛇的初始化

4、食物的随机出现

5、实现简单的用户输入控制贪吃蛇的方向变化

6、判断贪吃蛇是否吃到食物,如果吃到食物(头部坐标和食物坐标相同),蛇自身长度+1,同时随机出现新的食物。否则保持不变。

7、判断蛇是是否碰到边界,如果碰到边界,弹出死亡信息和分数。

 

(1) 游戏的整体定义:

cell_size是贪吃蛇的大小,注意cell_size 要能被窗口大小被整除.

 

地图的总体宽度:

map_width = int(windows_width / cell_size)

map_height = int(windows_height / cell_size)
整体颜色和方向定义:

white = (255, 255, 255)

black = (0, 0, 0)
gray = (230, 230, 230)
dark_gray = (40, 40, 40)
DARKGreen = (0, 155, 0)
Green = (0, 255, 0)
Red = (255, 0, 0)
blue = (0, 0, 255)
dark_blue =(0,0, 139)
BG_COLOR = black #游戏背景颜色
# 定义方向
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4
HEAD = 0 #贪吃蛇头部下标
主要函数:

1.贪吃蛇的初始化:

snake_coords = [{'x': startx, 'y': starty}, #初始贪吃蛇

{'x': startx - 1, 'y': starty},
{'x': startx - 2, 'y': starty}]
2.画贪吃蛇:

def draw_snake(screen, snake_coords):

for coord in snake_coords:
x = coord['x'] * cell_size
y = coord['y'] * cell_size
wormSegmentRect = pygame.Rect(x, y, cell_size, cell_size)
pygame.draw.rect(screen, dark_blue, wormSegmentRect)
wormInnerSegmentRect = pygame.Rect( #蛇身子里面的第二层亮绿色
x + 4, y + 4, cell_size - 8, cell_size - 8)
pygame.draw.rect(screen, blue, wormInnerSegmentRect)
3.移动贪吃蛇:

def move_snake(direction, snake_coords):

if direction == UP:
newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] - 1}
elif direction == DOWN:
newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] + 1}
elif direction == LEFT:
newHead = {'x': snake_coords[HEAD]['x'] - 1, 'y': snake_coords[HEAD]['y']}
elif direction == RIGHT:
newHead = {'x': snake_coords[HEAD]['x'] + 1, 'y': snake_coords[HEAD]['y']}
snake_coords.insert(0, newHead)
4.判断蛇是否死亡:

def snake_is_alive(snake_coords):

tag = True
if snake_coords[HEAD]['x'] == -1 or snake_coords[HEAD]['x'] == map_width or snake_coords[HEAD]['y'] == -1 or \
snake_coords[HEAD]['y'] == map_height:
tag = False # 蛇碰壁啦
for snake_body in snake_coords[1:]:
if snake_body['x'] == snake_coords[HEAD]['x'] and snake_body['y'] == snake_coords[HEAD]['y']:
tag = False # 蛇碰到自己身体啦
return tag
5.食物的初始化:

def get_random_location():

return {'x': random.randint(0, map_width - 1), 'y': random.randint(0, map_height - 1)}
6.判断蛇是否吃到食物:

def snake_is_eat_food(snake_coords, food): #如果是列表或字典,那么函数内修改参数内容,就会影响到函数体外的对象。

if snake_coords[HEAD]['x'] == food['x'] and snake_coords[HEAD]['y'] == food['y']:
food['x'] = random.randint(0, map_width - 1)
food['y'] = random.randint(0, map_height - 1) # 实物位置重新设置
else:
del snake_coords[-1] # 如果没有吃到实物, 就向前移动, 那么尾部一格删掉
主要函数就在这里了,具体思路后面再说吧,第一次用csdn还不是很熟悉。
--------------------- 

转载于:https://www.cnblogs.com/hyhy904/p/11026666.html

你可能感兴趣的文章
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>
NPM慢怎么办 - nrm切换资源镜像
查看>>
CoreData 从入门到精通(四)并发操作
查看>>
Swift - UIView的常用属性和常用方法总结
查看>>
Swift - 异步加载各网站的favicon图标,并在单元格中显示
查看>>
Java编程思想总结笔记Chapter 5
查看>>
[LeetCode]662. Maximum Width of Binary Tree判断树的宽度
查看>>
WinForm聊天室
查看>>
【Python学习笔记】1.基础知识
查看>>
梦断代码阅读笔记02
查看>>
selenium学习中遇到的问题
查看>>
大数据学习之一——了解简单概念
查看>>
Linux升级内核教程(CentOS7)
查看>>
Lintcode: Partition Array
查看>>
分享适合个人站长的5类型网站
查看>>