添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
呐喊的小蝌蚪  ·  C++ ...·  1 年前    · 
空虚的毛豆  ·  c# - Execute code ...·  1 年前    · 

Free Python Games非常适合学生,它不仅具有高度的组织性和灵活性,而且能够激发人们探索和理解能力。--Terri Furton

Free Python Games在轻松的环境中把游戏和学习结合在一起,从而减轻了编程过程中的压力。--Brett Bymaster

贪吃蛇、迷宫、吃豆人、扫雷、Flappy Bird...这些游戏可以是非常经典,甚至伴随着很多人的童年回忆。那么,你是否想过自己开发一款专属游戏?是否思考过开发这样一款游戏需要多少工作量?

游戏开发在互联网行业算是一个门槛较高的方向,因此,对于非专业的游戏开发者来说,开发一款游戏一直是一件让人望而却步的事情, 遥不可及

那么,今天要介绍的这款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 randrangefrom freegames import square, vector复制代码

其中 turtle 是一款绘图工具,主要为了实现游戏的前端和用户交互功能, freegames 包含了一些开发游戏会用到的基本元素, random 是Python中用于生成随机数的库,在生产新食物的过程中会遇到(回忆一下,当蛇吃了一颗食物后,会在窗口内随机产生一颗食物)。

然后,就初始化一些变量,分别用于存储食物、蛇的状态,

food = vector(00)snake = [vector(10, 0)]aim = vector(0, -10)复制代码

下面就是初始化蛇的位置,已经定义蛇对于键盘方向键的 响应 ,朝着指定的方向移动,

def change(x, y):    "Change snake direction."    aim.x = x    aim.y = ysetup(4204203700)hideturtle()tracer(False)listen()onkey(lambda: change(100), 'Right')onkey(lambda: change(-100), 'Left')onkey(lambda: change(010), '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()    head.move(aim)    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(-1515) * 10        food.y = randrange(-1515) * 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复制代码
干货 | 2019年共享免费资源整理(上):学习资源篇 干货 | 2019年共享免费资源整理(下):实用工具篇 10款VS Code插件神器,第7款超级实用!

欢迎各位同学添加我的个人微信,互相交流、互相学习,第一时间获得更多冷门好用的小工具!

我整理了10T+资源进行共享,其中包括 实用工具、Python电子书、Spring视频教程、机器学习资源 ,扫码关注我的公众号“ 平凡而诗意 ”,后台回复相应关键字即可获得。除此之外,原创技术文章会第一时间推送,如果喜欢,麻烦点一下“ 在看 ”~