资讯专栏INFORMATION COLUMN

从0开始用python写一个命令行小游戏(九)

WalkerXu / 2682人阅读

摘要:好了,今天终于到了你们期待已久的多行新僵尸。好,开始吧上篇链接从开始用写一个命令行小游戏八。多行游戏一开始我为了尽可能简化游戏,我用了一个单行数组,以模拟只有一行的游戏。一个形如的列表生成式等价于运行后的列表。

好了,今天终于到了你们期待已久的多行+新僵尸。其实我本来想把它们放在两个beta里解决的,但后来忘了,于是打包起来,跳过beta 5,直接发布了beta 6,就是今天的结束状态。好,开始吧!上篇链接:从0开始用python写一个命令行小游戏(八)。

多行游戏

一开始我为了尽可能简化游戏,我用了一个单行数组,以模拟只有一行的游戏。因为现在要多行,所以要把单行数组补充为多行数组。于是(因为创建多行数组有一系列方法),我进入IPython环境进行测试各种可能的方法:

In [1]: test_list = [[0] * 10] * 5

In [2]: test_list
Out[2]: 
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

In [3]: test_list[0][0] = 1

In [4]: test_list
Out[4]: 
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]]                     # 不太对!

In [5]: test_list = [[0] * 10 for i in range(5)]

In [6]: test_list
Out[6]: 
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

In [7]: test_list[0][0] = 1

In [8]: test_list
Out[8]: 
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]                     # 正常了

这里说一说In [5]处我的代码意思:Python有一种叫做列表生成式的语法,它由一个表达式(如[0] * 10)和一个类似for循环开头的语句(for i in range(5))组成,还有包裹整个列表生成式的方括号。一个形如[exp for i in seq]的列表生成式等价于:

result = []
for i in seq:
    result.append(exp)

运行后的result列表。注意表达式可以包含i(也可以不包含),就像在真正的for循环里面一样。回到正题,将game_obj.py中的board修改为:

board = [[0] * 10 for i in range(5)]

然后,将所有类的__init__方法的pos参数都修改为xy两个参数,并把所有board[self.pos]都改为board[self.y][self.x]。此外,game.py中的Game类也需要修改,具体方法可参见我的GitHub上的v1.0 release代码。然后,就···该让新僵尸出场了!

新的僵尸

说实话,你刚才是不是以为我会说“然后就没有然后了”?不管怎么样,开始吧!我想设计一种一来到植物身边就可以把它“踢飞”的僵尸,以增加游戏的刺激性。其实,它的难点在于设计,不是代码:

class KickerZombie(BaseZombie):
    indicating_char = color(31, "k")          # 红色
    
    def __init__(self, x, y, die_to_exit=False):
        super().__init__(x, y, 1, 30, die_to_exit)          # 超大伤害

然后就是配置,如果你有兴趣,可以效仿之前我的配置,这里我就不再多说了。

下集预告

下次,我们要做一些重构工作了!欢迎继续关注!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42243.html

相关文章

  • 0开始python一个命令游戏(十)

    摘要:前几天出去旅游了,所以没能更新文章,但转眼间,从开始用写一个命令行小游戏系列已经更新到了第十篇。闲话少说,今天我们要开始重构了但第一件事还是上篇的链接从开始用写一个命令行小游戏九。所以,我们需要一个标志变量,以标志游戏的结束。 前几天出去旅游了,所以没能更新文章,但转眼间,从0开始用python写一个命令行小游戏系列已经更新到了第十篇。闲话少说,今天我们要开始重构了!但第一件事还是上篇...

    OnlyLing 评论0 收藏0
  • 0开始python一个命令游戏(六)

    摘要:嗯,今天我们的从开始用写一个命令行小游戏系列总算走到了我发布的时候。玩过我的正式版的话,你会发现现在的游戏还和正式版差别很大。好,现在就来顺便补充一下,上次方法后追加僵尸被打败是完成了好好庆祝一下 嗯,今天我们的从0开始用python写一个命令行小游戏系列总算走到了我发布v1.0 beta 1的时候。玩过我的1.0正式版的话,你会发现现在的游戏还和正式版差别很大。不管怎么样,现在就开始...

    channg 评论0 收藏0
  • 0开始python一个命令游戏(四)

    摘要:讲点搞笑的,最近在开发时,发现最令程序猿头疼的一点就是没有语句。但自动的僵尸呢哎,别急,那是后话下集预告下次,我要把游戏变得全自动具体工作令僵尸自动出现,和让用户用命令控制游戏这些工作完成后,就可以发布了欢迎继续关注 嗯,还是我,我又回来了——以后文章就两天一篇吧。讲点搞笑的,最近在开发v1.1 beta 3时,发现Python最令程序猿头疼的一点就是没有switch/case语句。要...

    graf 评论0 收藏0
  • 0开始python一个命令游戏(五)

    摘要:今天我时间有点紧张,所以不说废话了,直接进入正题。好现在,游戏可以自动产生僵尸了。然后呢用户可控的植物真正的植物大战僵尸游戏可以让玩家用鼠标控制游戏。由于这是命令行游戏,所以我们得用命令控制。 今天我时间有点紧张,所以不说废话了,直接进入正题。前作链接: 从0开始用python写一个命令行小游戏(一) 从0开始用python写一个命令行小游戏(二) 从0开始用python写一个命令行...

    skinner 评论0 收藏0
  • 0开始python一个命令游戏(三)

    摘要:今天就开始由于整个游戏会有自己的一些属性和行为,所以我决定把它编写在类里。初始化游戏定义自己的属性先定义这些。我计划使用格式,以第几步出现作为键,以出现的僵尸类型以后可能会出现不同类型的僵尸和是否在它被消灭后结束游戏作为值。 Hey, everyone! 文章迟到了一天,但我今天心情很好,因为有两个好消息,你们想先听哪个?哎,算了,反正都是好消息,一起听吧。 本游戏的v1.1 bet...

    Tony_Zby 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<