资讯专栏INFORMATION COLUMN

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

Jiavan / 1621人阅读

摘要:最近在用写一个命令行游戏升级版植物大战僵尸,顺便巩固一下编程技巧。目前版已经在上发布,这是链接。我想在一开始尽量简化游戏,所以用了一个一维数组我想先不管阳光的问题,用一个类实现基础的植物大战僵尸角色的功能。

最近在用python写一个命令行游戏:升(jian)级(hua)版植物大战僵尸,顺便巩固一下python编程技巧。在这个过程中,也收获(cai)了不少乐趣(keng)。目前1.0版已经在GitHub上发布,这是链接。今天就把全过程与大家分享~~~

既然是植物大战僵尸,肯定要有游戏盘。我想在一开始尽量简化游戏,所以用了一个一维数组:

# game.py
board = [0] * 10

我想先不管阳光的问题,用一个类实现基础的植物大战僵尸角色的功能。

基础类

先上代码,基本功能都有了:

# game.py
board = [0] * 10

class GameObject:
    indicating_char = "o"              # 在命令行显示的字符
    
    def __init__(self, pos):
        """ 初始化,并把自己放上游戏盘 """
        if pos in range(10):
            self.pos = pos
            if board[self.pos] == 0:
                board[self.pos] = self
            else:
                print("Position already used.")
    
    def __str__(self):
        """ 字符串表示 """ 
        return self.indicating_char
    
    def __repr__(self):
        """ Python shell/print显示 """
        return self.__str__()

嗯,去IPython里面试试看!

In [1]: import game as g

In [2]: g.board
Out[2]: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

In [3]: g.GameObject(0)
Out[3]: o

In [4]: g.board
Out[4]: [o, 0, 0, 0, 0, 0, 0, 0, 0, 0]

不错!但是,也该为后续程序想想呀。比如,要让向日葵每步生产一定的阳光,或让最后一个僵尸死去时结束游戏,这些方法都应该在基础类中定义。于是,我在GameObject类中追加了这些代码:

def step(self):
    """ 每步执行的操作 """
    pass

def die(self):
    """ 死掉时的操作 """
    pass

好吧,两个空方法,但很快,GameObject的子类们就会重写它们,使它们变得有意义的!

对了,说到子类,我们就先从植物开始吧!

植物基础类

先想想一株《植物大战僵尸》里的植物该有什么属性和行为吧。除了基础类里定义好的之外······阳光!种植植物需要阳光,这不就是属性吗?还有,当初始化一株植物时,扣除一定的阳光,不就是行为吗?来,先把这些实现了!

先在游戏盘定义的后面加上一行:

sunlight = 50

然后就是植物基础类Plant

class Plant(GameObject):
    indicating_char = "p"
    
    def __init__(self, pos, sun_required):
        super().__init__(pos)
        global sunlight
        if sunlight >= sun_required:
            sunlight -= sun_required
        else:
            print("Sunlight not enough.")

好,这就成了。按照惯例,到IPython里试一试(注意!第一个坑):

In [1]: from game import *        # 坑!

In [2]: Plant(0, 50)
Out[2]: p

In [3]: sunlight
Out[3]: 50

TMD怎么可能!!!难道sunlight不应该是0吗?!自己debug半天无果后我决定上思否提问。感谢思否!我上午提的问,下午就有了答案。于是,我赶快又去试了试:

In [1]: import game as g        # 命名空间问题!!!

In [2]: g.Plant(0, 50)
Out[2]: p

In [3]: g.sunlight
Out[3]: 0

成功!

下集预告

下次,我将秀出真正“看得见”、也一直沿用至今的两个类:SunflowerPeashooter。还有,我们的敌人:僵尸的基础类也该出场了!欢迎来看哦!

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

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

相关文章

  • 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开始python命令游戏(九)

    摘要:好了,今天终于到了你们期待已久的多行新僵尸。好,开始吧上篇链接从开始用写一个命令行小游戏八。多行游戏一开始我为了尽可能简化游戏,我用了一个单行数组,以模拟只有一行的游戏。一个形如的列表生成式等价于运行后的列表。 好了,今天终于到了你们期待已久的多行+新僵尸。其实我本来想把它们放在两个beta里解决的,但后来忘了,于是打包起来,跳过beta 5,直接发布了beta 6,就是今天的结束状态...

    WalkerXu 评论0 收藏0

发表评论

0条评论

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