笔记41 练习45之二,自己来做一个代码游戏,一个挑战,但做出来一点

导入笔记41 练习45之二,自己来做一个代码游戏,一个挑战,但做出来一点

导言、
开始要自食其力了,原先也没有想到,学到第45个练习,就要自己来做游戏的代码。我好像还不具备这样的资质呢,至少许多指令都还是迷迷糊糊的,有个样本你还可以照葫芦画瓢。脱离样本,做一个截然不同的游戏,这还真是一个挑战。
不过,这语言的发展,从自然语言到逻辑的人工语言。又过了大概也就几十年的功夫,这人工语言中又出现了所谓的计算机语言,出现了像python这样的高级语言。这不是也是想象不到的一个语言前景么?语言本来是为人思考服务的工具,因为有了计算机这样的计算工具,人类所创造的语言,竟然首先不是为人服务,而是首先为机器服务,让机器能够接受人的指令,然后再来间接做人的工具。
思考这个问题,真还很有点哲学的味道。互联网和计算机是毒化了我们的大脑,如《浅薄》那本书所说,还是促进了人的大脑功能?大概掌握了python这门语言,就有点发言权了吧。还是先努力接近这门计算机编程的语言,继续往下做练习。
虽然要求代码游戏要独立建构,但思路还得借助这个教材中曾经做过的练习,再看练习43吧。这个重看练习43的结果,就有了以下的代码游戏粗略构想。

一、人物设想
1、人物实例和可能的房间
靠山吃山,靠水吃水,我忽然想到逻辑发展史上的几个人物。如今的游戏往往与科幻暴力情仇之类链接甚为紧密,以有更多的玩客。可不可以走点歪门邪道,在代码中搞点学术性的东西出来呢?就试着这么走吧,从亚里士多德到莱布尼兹,从莱布尼兹到布尔,再从布尔到皮尔斯。
四个实例,来自同一个类,那就是逻辑学家类。至少有四个场景,一个是亚里士多德的,用他的柏拉图学园吧。第二个是莱布尼兹的,德国的汉诺威州为了纪念这位天才,弄出个莱布尼兹大学,那就把这个空间给莱布尼兹。第三个布尔,他是英国人,把布尔安排到他就职的英国科克皇后学院。最后,美国人皮尔斯,就把那个著名的哈佛大学给他,他的上十万页手稿不是卖给哈佛大学的么?那等于是他的魂系所在,安排在哈佛大学是实至名归。
用什么函数和方法串起这帮书呆子呢?这是最难想的。多用互答式,设计一些问题和答案,不知道能不能够引进一些图片或者视频,这都要在边想边做的过程中充实。
先大致设想到这里,在那个atom的编辑器上实现这个逻辑史的游戏。但在atom上初试了一下,还是得有个蓝图,哪怕是非常粗略都行。不然,你怎么开始你的代码编写?
继续思考,就有了以下的一些构思。
2、三种玩家
喜欢生平的玩家
喜欢观念的玩家
喜欢旅游的玩家

二、场景设想
1、哪些经典?
亚里士多德《工具论》
莱布尼兹《普遍语言两则》
布尔《思维法则研究》
皮尔斯《推理及万物逻辑》

2、哪些国家和学院?
希腊柏拉图学园
德国莱布尼兹大学
英国科克皇后学院
美国哈佛大学

3、基本理论贡献
三段论
普遍语言
布尔代数
现代逻辑符号学

4、实例的基本生平?

5、穿越时间隧道的交通工具?

三、游戏可能的台词
之一:
古希腊的亚里士多德,在他的工具论中弄出来一个“三段论”的逻辑;
德国的莱布尼兹,在他的《普遍语言》中弄出了指数法则;
英国的布尔,在他的《思维法则研究》中给出了全无类设想,弄出了布尔代数
美国的皮尔斯,在他的《推理及万物逻辑》中有宏大的逻辑理论,弄出了符号学。

之二:待续
之三:待续
之四:待续

四、一个类层次结构:按时间先后的顺序编排
三个玩家跨越两千年历史,从古希腊穿越到美国,最长的寿命,最遥远的旅行历程
四个逻辑学家的基本生平、设想和贡献
他们所在的四个国家
他们所在的四个大房间:四个学园。
他们的四本书:
一辆传送玩家的方程式卡丁车

五、选择可能的动词作为方法或者函数
思考 旅行 跨越 运算 推理 跳跃 进化 升级 前进 返回

现在做了一些设想了,在atom编辑器中去实现这些设想吧。
把测试代码做好了,但atom绑定github的使用不熟悉,关上软件的指令找不到,只有强制关机。今早来熟悉这个github,又把office2016给删掉了。文件找不到,只有再弄,搞了个2019,不算贵18元,下载有点麻烦,但总算把这个软件搞定。一个python语言,链接的东西一个又一个,真有点应接不暇的味道。
Githut有点感觉了,继续做吧。先做一个部分的,然后,如同写大部头文字一样,一个一个地接续。第一部分是需要引入的现成函数。
1先做基本的导入,这完全仿照练习43的导入
2再做希腊的亚里士多德的东西。一个台词:
Preface
“地中海和黑海把这个巨大的陆块分成了欧洲和亚洲”,
“欧洲这块土地的东缘,雅典人在前449年大败波斯人”,
“在这里建成帕特农神庙,并建立了盟邦式的雅典帝国”,
“柏拉图的共相和理性,还有亚里士多德的三段论出现了”,
“学科的历史,于是就有了一门逻辑学”。

最简单的一段代码通不过执行,找不到原因!又得熟悉power shell了。
看样子,那个ps是不是不能用了,明天再来搜寻。
琢磨了几天,还在github的软件学习中知道了微软的sandbox沙箱教学节目。突然间琢磨出,前几天电脑出了毛病,重新升级重装,是不是python的软件没有装,所以做出的代码在ps中执行不了。这个想法一露头就抓住不放,立刻下载python3.8.3。下载装好,果然就是这个问题。困惑几天,又大大前进了几步。现在做的代码可以在ps中执行了,只是那个atom编译器,它的那个易操作的页面再也找不到了,也许是没有找到诀窍吧。
突然又有了灵感,参与的玩家弄三个吧,每一个编一套台词,自成一条线路,看这个想法能不能成功。
复习三个有关“打印”的练习ex7,8,9,很有感觉!!!
今天又花了大半天功夫为这个python游戏设置玩家,还不是那种游戏意义的玩家。到达那一步恐怕还得时间磨,先建立一个人物类吧,秉承昨天的思路,三个人物是人物类的实例化,为这三个人物想一些属性,想一些行为,也就是函数或者方法。然后把这三个人物丢到那个历史的长河中去。
在csdn中发现一篇讨论面向对象的长文,有对于玩家的设置。改变了原先的设想,先从最简单的开始,不要三个玩家,先弄一个吧。这弄成功,数字上加多少应该就是简单的事情了。
“类”其实就是plato中的共相,不是实存,而是抽象。先看那几本有点经典的python文本,然后到csdn继续搜寻面向对象,结果还弄到了两篇很有参考价值的长文。把增加玩家类的设想给做成功了,虽然道理还有点难解,但增加玩家好像不再是问题。明天估计会有个了解,还是先做一个玩家,做得好再加。
类、对象、实例,实例、对象、类,这人类的文字互有相通之处,无论中外。似乎是这三个概念难解难分,除了那个最高的类和最低的专有个体,它们似乎都可以在不同的情形中分别可以既是类,也是对象,也是实例。
逻辑学家的实例建立起来了,给他起个名吧,那就是zhou.logician。是不是需要交通工具呢?
今天进步还很大,最基本的框架出来了,但还是运行不了,老是出现
TypeError: init() missing 1 required positional argument: ‘scene_map’

还没有找到办法解决,今天来做这件事。
加一个scene-map实例化,又出现:
IndentationError: unexpected indent

但7月1号这天的进步虽有,还是太小,那个engine的代码怎么也理不顺,只有明天再来受磨了。
这受python代码折磨的结果,在昨天最让人纠结,那个丢失参数的关口怎么也过不了,一天一点进步都没有。
但这个世界的事情就是这样,当你觉得没有希望的时候,往往就是给你期待的时候。
昨天的纠结就在于,你想好了,这个逻辑史游戏练习代码,先不要太多的自我创造,还是仿照现成的做多少是多少,越简单越好,只要有执行成功的希望就好。当你这样来做的时候,依然还是解决不了问题,你还是困在老地方,一步都前进不了。真如前面说到过的,一天一点进步也没有。
但今天上午突然有了点柳暗花明的感觉,仿照练习43,再次模仿从一个文本中学会的类的实例化的蠢办法。一早就动工,到上午十点,把那些提示的错误反复修改。哈哈,竟然执行通了前面的几个部分,可以做一个练习笔记了。剩余的问题,留给下一个笔记来解决吧。这个笔记也太长了一点,就此落笔。
练习45的代码ex45.3.py

在这里插入代码片from sys import exit
from random import randint
from textwrap import dedent


class Person(object): #构造一个人类下的z子类
    def logician(self):

        print(dedent("""
             从古典到现代逻辑 导言
         地中海和黑海把这个巨大的北半球陆块分成了欧洲和亚洲.
         欧洲这块土地的东缘,雅典人在公元前449年大败波斯人.
         这里,建成了宏伟的帕特农神庙,建立了盟邦式的雅典帝国
         这里,柏拉图的共相和理性,还有亚里士多德的三段论出现了,
         学科的历史,于是就有了一门逻辑学从古典到现代的延续.
         """))

zhou = Person()
zhou.logician()

class Scene(object):
    def enter(self):
        hobby = input(" ")
        if hobby == "go":
           print("逻辑学的历史从场景类这里开始!!")
           return 'ground'


brand = Scene()
brand.enter()


class Engine(object):
    def __init__(self, scene_map):
        self.scene_map = scene_map()

    def play(self):
        current_scene = self.scene_map.opening_scene()
        last_scene = self.scene_map.next_scene('gameover')

        while current_scene != last_scene:
            next_scene_name = current_scene.enter()
            current_scene = self.scene_map.next_scene(next_scene_name)

        current_scene.enter()


class Ground(Scene):

    def enter(self):
        original = input("> ")
        if original == "forward":
           print('ok, go on!')
           print(dedent("""
              逻辑学历史的三大场景
             希腊雅典,一个如同其名称那样典雅的城市.希腊哲学家plato
             在那里建成了一个以知识为乐趣的学园:柏拉图学园,亚里士
             多德据说是这里学习时间最长的人,他在学园呆了19年之久。
             因为亚里士多德的工作,逻辑成为古代的必修课程。一直持续
             到17世纪.因为莱布尼兹的工作,逻辑学开始从古典走向现代,
             我们由此就有了第二个场景,德国汉诺威的莱布尼兹大学。
             然后再到布尔就职的第三个场景:英国科克市的皇后学院。
             """))
           return 'platoacadimic'

teacher = Ground()
teacher.enter()


class Platoacadimic(Scene):

    def enter(self):
        assword = input("> ")

        if assword == "几何":
             print(dedent("""
                   这里是柏拉图学园,柏拉图创立,亚里士多德学习19年的地方
                   柏拉图建构了共相学说,亚里士多德则建立了他的三段论。这是
                   经典逻辑的开端之处。进出学园的大门需要知道入校口令,两个汉字。
                   猜中可进。不然,你就只有回到起点了。
                   """))

             return 'leibnizuniversity'


student = Platoacadimic()
student.enter()


class Leibnizuniversity(Scene):
    def enter(self):
        print("这里是德国汉诺威的莱布尼兹大学,为纪念莱布尼兹而建立。")
        print("莱布尼兹最先为建立一个普遍语言使用算术运算,他创立了二进制和逻辑加。")
        print("这里也需要密码,三位数字")
        code = f"{randint(1, 5)}{randint(1, 5)}{randint(1, 5)}"
        guess = input("> ")
        guesses = 0

        while guess != code and guesses < 5:
            print("please!")
            guesses += 1
            guess = input("> ")

        if guesses > 5:
            print("stop")

            return 'queencollege'

class Queencollege(Scene):
    def enter(self):
        print("这里是英国科克皇后学院,布尔工作过的地方。")
        print("布尔天才的自学能力使他成为现代逻辑的创始人。")
        print("读布尔的思维法则研究")

        visit = input("> ")

        if visit == "read Boole":
            print(dedent("""
                  布尔在他的代数研究中想到了逻辑,认为用算术的方法
                  可以处理古典的逻辑三段论。于是他设想了全无两个类,
                  又想到这两个类可以用数字1和0来表示,还想到了,
                  这两个数字就是逻辑的真与假,这就是今天计算机语言
                  中的布尔类型,布尔值。
                  """))

            return 'gameover'

        else:
            print('stop now')
            return 'ground'

class Gameover(Scene):
    def enter(self):
        print("good trip")
        return 'gameover'


class Map(object):

    scenes = {
        'ground': Ground(),
        'platoacadimic': Platoacadimic(),
        'leibnizuniversity': Leibnizuniversity(),
        'queencollege': Queencollege(),
        'gameover':Gameover(),
    }

    def __init__(self, start_scene):
        self.start_scene = start_scene

    def next_scene(self, scene_name):
        val = Map.scene.get(scene_name)
        return val

    def opening_scene(self):
        return self.next_scene(self.start_scene)

a_map = Map('ground')
a_game = Engine(a_map)
a_game.play()

练习ex45.3.py的执行结果:

在这里插入代码片 File "ex45.3.py", line 66
    original = input("> ")
    ^
IndentationError: unexpected indent
PS C:\Users\lenovo\1pythonw> python ex45.3.py
  File "ex45.3.py", line 53
    print('ok, go on!')
    ^
IndentationError: expected an indented block
PS C:\Users\lenovo\1pythonw> python ex45.3.py

    从古典到现代逻辑 导言
地中海和黑海把这个巨大的北半球陆块分成了欧洲和亚洲.
欧洲这块土地的东缘,雅典人在公元前449年大败波斯人.
这里,建成了宏伟的帕特农神庙,建立了盟邦式的雅典帝国
这里,柏拉图的共相和理性,还有亚里士多德的三段论出现了,
学科的历史,于是就有了一门逻辑学从古典到现代的延续.

 go
逻辑学的历史从场景类这里开始!!
> forward
ok, go on!

 逻辑学历史的三大场景
希腊雅典,一个如同其名称那样典雅的城市.希腊哲学家plato
在那里建成了一个以知识为乐趣的学园:柏拉图学园,亚里士
多德据说是这里学习时间最长的人,他在学园呆了19年之久。
因为亚里士多德的工作,逻辑成为古代的必修课程。一直持续
到17世纪.因为莱布尼兹的工作,逻辑学开始从古典走向现代,
我们由此就有了第二个场景,德国汉诺威的莱布尼兹大学。
然后再到布尔就职的第三个场景:英国科克市的皇后学院。

> 几何

这里是柏拉图学园,柏拉图创立,亚里士多德学习19年的地方
柏拉图建构了共相学说,亚里士多德则建立了他的三段论。这是
经典逻辑的开端之处。进出学园的大门需要知道入校口令,两个汉字。
猜中可进。不然,你就只有回到起点了。

Traceback (most recent call last):
  File "ex45.3.py", line 159, in <module>
    a_game = Engine(a_map)
  File "ex45.3.py", line 35, in __init__
    self.scene_map = scene_map()
TypeError: 'Map' object is not callable
PS C:\Users\lenovo\1pythonw>

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值