python扫雷游戏代码_50⾏Python代码实现经典游戏,不仅是
划⽔神器,更是学习利器!...
Free Python Games⾮常适合学⽣,它不仅具有⾼度的组织性和灵活性,⽽且能够激发⼈们探索和理解能⼒。--Terri Furton Free Python Games在轻松的环境中把游戏和学习结合在⼀起,从⽽减轻了编程过
程中的压⼒。--Brett Bymaster
...
贪吃蛇、迷宫、吃⾖⼈、扫雷、这些游戏可以是⾮常经典,甚⾄伴随着很多⼈的童年回忆。那么,你是否想过⾃⼰开发⼀款专属游戏?是否思考过开发这样⼀款游戏需要多少⼯作量?
遥游戏开发在互联⽹⾏业算是⼀个门槛较⾼的⽅向,因此,对于⾮专业的游戏开发者来说,开发⼀款游戏⼀直是⼀件让⼈望⽽却步的事情,遥不可及
不可及。
那么,今天要介绍的这款Python项⽬就可以轻松实现你成为游戏开发者的想法,实现前⾯提到的这些经典游戏只需要50-100代码即可完成。
free-python-games
两年前,我就曾表达了希望我能够抽空教外甥学习编程的想法。对于这份嘱托,我⼀直放在⼼上,但是却迟迟不到合适的⽅向。
该从哪个⽅向着⼿教⼀个孩⼦学习编程?
怎么提升⼀个⼩孩⼦对编程的兴趣?
即便是从事⼏年互联⽹⾏业的我来说都对编程都觉得枯燥乏味,何况⼀个⼀⽆所知的孩⼦呢?
但是,free-python-games这个项⽬让我眼前⼀亮,终于到了⼀个合适的Python学习项⽬。当年,它对于成年⼈同样适⽤、有价值。
我之所以介绍这款项⽬,不单单是它实现了让⼈回到童年的经典游戏。更重要的原因是它能够作为⼀个Python学习、锻炼探索和理解能⼒的⼀款好⼯具。
垒积⽊⼀样去实现⼀项功能不同,你需要去静下⼼来死锁⼀款游戏的主free-python-games和我们接触的⼤多数Python库那样让⼈如同垒积⽊
题,同时需要去实现游戏中的每⼀个策略。
拿来即⽤的搬运⼯作要有趣很多,且更加具有挑战。
我觉得这样⽐拿来即⽤
贪吃蛇为例,当然我们⽬前对于这款游戏的主题和玩法已经⾮常清楚了,通过⽅向键控制蛇的移动,每当吃到⼀颗⾷物蛇就会以我们熟知的贪吃蛇
变长,如果撞到墙则游戏结束...
那么,对这款游戏进⾏拆解,就需要思考⼏个问题:
如何使蛇加速和减速?
如何使蛇绕过边缘?
如何分配新产⽣⾷物的位置?
游戏中的蛇如何根据键盘操作做出相应的反应?
看到这⾥你就会发现,它并不像我们⼤多数情况下使⽤Python那样,np.linespace、plt.plot、tf.Session,它更像是LeetCode上⾯的算法题,需要你从零开始去实现⼀款游戏,⽤⼼去思考游戏实现过程中的每个细节。⽽在这个过程中对⼈的提升会⾮常迅速。
下⾯就以贪吃蛇这个游戏为例,介绍它的源码和实现过程,来回答上述4个问题。
⾸先,导⼊需要的模块,
from turtle import *
from random import randrange
from freegames import square, vector
其中turtle是⼀款绘图⼯具,主要为了实现游戏的前端和⽤户交互功能,freegames包含了⼀些开发游戏会⽤到的基本元素,random是Python中⽤于⽣成随机数的库,在⽣产新⾷物的过程中会遇到(回忆⼀下,当蛇吃了⼀颗⾷物后,会在窗⼝内随机产⽣⼀颗⾷物)。
然后,就初始化⼀些变量,分别⽤于存储⾷物、蛇的状态,
food = vector(0, 0)
snake = [vector(10, 0)]
aim = vector(0, -10)
响应,朝着指定的⽅向移动,
下⾯就是初始化蛇的位置,已经定义蛇对于键盘⽅向键的响应
def change(x, y):
"Change snake direction."
aim.x = x
aim.y = y
setup(420, 420, 370, 0)
hideturtle()
tracer(False)
listen()
onkey(lambda: change(10, 0), 'Right')
onkey(lambda: change(-10, 0), 'Left')
onkey(lambda: change(0, 10), 'Up')
onkey(lambda: change(0, -10), 'Down')
接下来,我们需要判断蛇是否在边界框以内,如果在,则继续移动,否则终⽌,
def inside(head):
"Return True if head inside boundaries."
return -200 < head.x < 190 and -200 < head.y < 190
最后,就是整个游戏的串联逻辑,不断移动蛇、不断判断当前状态,然后选择是否继续移动,
def move():
"Move snake forward one segment."
head = snake[-1].copy()
贪吃蛇的编程代码if not inside(head) or head in snake:
square(head.x, head.y, 9, 'red')
update()
return
snake.append(head)
if head == food:
print('Snake:', len(snake))
food.x = randrange(-15, 15) * 10
food.y = randrange(-15, 15) * 10
else:
snake.pop(0)
clear()
for body in snake:
square(body.x, body.y, 9, 'black')
square(food.x, food.y, 9, 'green')
update()
ontimer(move, 100)
到此为了,经典的贪吃蛇游戏就完成了。整款游戏的纯代码⾏数不⾜50⾏。但是,却内藏锦绣,有很多需要开发者去思考和琢磨的点,对Python学习者也是⼀个很⼤的提升。
除了贪吃蛇,这个项⽬中还有迷宫、吃⾖⼈、扫雷、Flappy Bird等20+款经典游戏。
当然,如果你觉得这些游戏还不够,或者对游戏开发充满兴趣,或者有很好的游戏设计idea但开发能⼒受限,那么,不妨学习⼀下free-python-games这个项⽬,能够把精⼒专注于游戏本⾝,⽽不需要在编程语⾔⽅⾯耗费太多时间。
另外,如果你仅仅希望⽤来划⽔,这个项⽬同样可以满⾜你,只需要简单的安装之后就可以在电脑上玩这些经典游戏。
安装
$ python3 -m pip install freegames
游戏列表
$ python3 -m freegames list
打开游戏
$ python3 -m freegames.snake
另外,你还可以拷贝⼀份游戏源码到本地路径,⽤于编辑,
$ python3 -m freegames copy snake
$ python3 snake.py
⼲货
最近,为了⽅便⼤家,我花费了半个⽉的时间把这⼏年来收集的各种技术⼲货整理到⼀起,其中内容包括但不限于Python、机器学习、
Python、机器学习、深度学习、计算机视觉、推荐系统、Linux、⼯程化、Java,内容多达5T+,我把各个资源下载链接整理到⼀个⽂档内,⽬录如下:深度学习、计算机视觉、推荐系统、Linux、⼯程化
、Java
所有⼲货送给⼤家,希望能够点赞⽀持⼀下!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论