首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python创意游戏《王的使命》

Python创意游戏《王的使命》

作者头像
楚客追梦
发布于 2022-11-14 11:46:37
发布于 2022-11-14 11:46:37
91800
代码可运行
举报
文章被收录于专栏:网页杂谈网页杂谈
运行总次数:0
代码可运行

设置中文字体

实现效果:在游戏窗口中,正确显示中文文本。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
screen.draw.text('你好', (10, 10), fontname='puhuiti.ttf', fontsize=40, color='blue')

参数说明:

fontname

设置字体的类型,字体文件存在fonts文件夹中

fontsize

设置字体大小,默认大小是24

color

设置字体颜色,默认颜色是白色

注意:不同参数之间用逗号隔开

切换介绍信息

效果

每点击一次鼠标,介绍信息就切换一句

思路

  1. 鼠标点击次数与列表中句子的索引相同
  2. 定义变量n记录鼠标的点击次数,每点击鼠标1次,n增大1
  3. 利用全局变量n关联draw()函数on_mouse_down()函数

每句话的索引和鼠标点击次数

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
info = ['你是一位雄心勃勃的国王', '你的使命是:提升国民的幸福感、
\n提升军s实力、维持国家安定统一', '大臣们会为你提供各种治g建议, 
n\你需要对这些建议作出抉择', '每一项决策都会影响到\n你自己的声望值和财富值', 
'声望和财富上升,会得到国民拥戴;\n反之,
也会引起民众的不满', '点击任意位置开始游戏,\n履行你作为国王的使命吧......']

列表索引

0

1

2

3

4

5

点击次数

0

1

2

3

4

5

第几句话

1

2

3

4

5

6

逐句显示游戏介绍

button参数

on_mouse_down(button)中的button参数可以判断 鼠标操作。

button常用的值有4个:

mouse.LEFT

点击鼠标左键

mouse.RIGHT

点击鼠标右键

mouse.WHEEL_UP

向上滑动滚轮

mouse.WHEEL_DOWN

向下滑动滚轮

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def on_mouse_down(button):
    if button == mouse.LEFT:
        print('按下鼠标左键')
    if button == mouse.RIGHT:
        print('按下鼠标右键')
    if button == mouse.WHEEL_UP:
        print('向上滑动滚轮')
    if button == mouse.WHEEL_DOWN:
        print('向下滑动滚轮')

通过设置button参数,限制只有点击鼠标左键,才显示下一句话

切换游戏背景

效果

最后一句介绍信息显示完,再次点击鼠标,切换窗口显 示内容,进入玩家决策阶段

思路

  1. 定义全局变量state记录游戏的不同阶段
  2. on_mouse_down()中,根据鼠标点击次数改变state的值
  3. draw()中,根据state的值绘制决策背景

游戏的四个阶段

《王的使命》游戏有4个阶段

游戏阶段

表示

游戏介绍

begin

玩家决策

choice

结果展示

show

游戏结束

end

鼠标点击角色

pygame中判断鼠标是否点击到某个角色,需要两步:

  1. 定义on_mouse_down()函数。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def on_mouse_down():
    print('鼠标被按下了')

按下鼠标按键时,被自动调用一次,会执行下级代码。

  1. 使用角色.collidepoint(pos)检测鼠标指针是否碰到了角色。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def on_mouse_down(pos):
    if yes.collidepoint(pos):
        print('点击了同意按钮')
    elif no.collidepoint(pos):
        print('点击了驳回按钮')

运行程序,每次点击同意按钮,都会输出“点击了同意按钮”,点击驳回按钮,都会输出“点击了驳回按钮”。

不同选择展示不同结果

游戏中,要根据不同的选择,展示不同的决策结果。

思路

  1. 把决策问题及对应的结果作为一个子列表,存储在二维列表中。其中,子列表的第二位存储同意结果,第三位存储驳回结果。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
question=[
['要建立军队吗?', '攻打邻国...', '国家灭亡...'],
['要攻打邻国吗?', '战争胜利...', '忌惮邻国...'],
['要加税收...吗?', '怨声载道...', '发展农业...'],
['要花金钱...吗?', '国库亏空...', '战败亡国...'],
['要将民众...吗?', '连年征战...', '民众起义...'],
['要将财产...吗?', '国家繁荣...', '人民困苦...'],
]

同意结果在子列表中的索引为1,驳回结果在子列表中的索引为2。

  1. 使用变量ci存储决策结果的索引,初始值设为0, 点击同意按钮后,把ci设为1,点击驳回按钮后,把ci设为2。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ci = 0

def on_mouse_down(button, pos):
    global ci   #global声明
    if yes.collidepoint(pos):
        ci = 1  #同意结果索引
    elif no.collidepoint(pos):
        ci = 2  #驳回结果索引   
  1. 根据索引绘制决策结果:ci为1 绘制同意结果; ci为2 绘制驳回结果。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def draw():
    screen.blit('展示背景',(0,0))
    screen.draw.text(qustion[qi][ci], (100,150), fontname='puhuiti.ttf', fontsize=40, color='black')

运行程序,点击 同意/驳回按钮,游戏就会根据玩家的选择展示出二维列表question中对应索引的决策结果。

不同选择触发不同问题

当游戏从展示阶段切换到决策阶段时,需要显示新的决策问题。

思路

  1. 在子列表的第四位存储选择同意时,下一条决策信息的索引。在子列表的第五位存储选择驳回时,下一条决策信息的索引。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
question=[
['要建立军队吗?', '攻打邻国...', '国家灭亡...', 1,100],
['要攻打邻国吗?', '战争胜利...', '忌惮邻国...',2,3],
['要加税收...吗?', '怨声载道...', '发展农业...',4,5],
['要花金钱...吗?', '国库亏空...', '战败亡国...',2,100],
['要将民众...吗?', '连年征战...', '民众起义...',100,100],
['要将财产...吗?', '国家繁荣...', '人民困苦...',100,100],
]

只需要查看二维列表question,就可以看出来每一个问题及问题之间的关系。

  1. 因为决策的总是是根据qi的值绘制出来的,所以要显示新的决策问题,就需要在决策以后,修改qi的值。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def draw():
    global qi
    ...
    screen.draw.text(question[qi][0]), (280,140),fontname='puhuiti.ttf', fontsize=40, color='royablue2')

#根据不同的选择,把qi设为下一条决策信息的索引

def on_mouse_down(pos):
    global qi
    ...
    if ci == 1:
        qi = question[qi][3]
    elif ci == 2:
        qi = question[qi][4]

运行程序,每次鼠标点击同意按钮或者驳回后,qi的值就会变二维列表中对应的索引,能绘制出新的决策问题。

声望和财富系统

玩家在进行决策后,声望值和财富值应该根据选项发生变化。

步骤1:完善列表

将每个决策选择同意或驳回时,对应的声望值和财富值变化量存储在列表中。

选择同意时:

声望和财富值的变化量存储在列表中第6、7项。

选择驳回时:

声望和财富值的变化量存储在列表中第8、9项。

步骤2:修改声望值和财富值

当同意、驳回按钮被点击后,从列表question中取出声望值和财富值的变化量,增加到变量score1和score2上。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def on_mouse_down(button,pos):
    global n, state, qi, ci
    global score1, score2
    if button == mouse.LEFT:
        if state == 'begin':
            ...
        elif state == 'choice':
            if yes.collidepoint(pos):
                score1 += question[qi][6]
                score2 += question[qi][7]
                state='show'
                ci=1
            elif no.collidepoint(pos):
                score1 += question[qi][8]
                socre2 += question[qi][9]
                state='show'
                ci=2

游戏结束界面

当剧情走向结局时,我们切换游戏状态并绘制出结束界面。

不同的结局对应不同的结束界面背景。

修改每个子列表中的结束索引,将它改为对应的背景图名称。

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
question=[
['要建立军队吗?', '大臣建议攻打邻g,n\以获得更多土地', '邻g攻打,国j灭亡', 1,100,3,-3,-5,-5],
['要攻打邻g吗?', '战z胜利,获得大片土地,\n但战z也消耗了大量财产,\n国ku亏空', '本国没有发动战z,\n但也十分忌惮邻国',2,3,3,-2,-2,3],
['要加民众shui收\n填补国ku的亏k吗?', '民众被shui收压得怨声载道,\n为了平民f,\n大臣提出一个办法', '大力发展农业来填补国ku亏空,\n经济复苏',4,5,-5,4,5,8],
['要花费大量金钱\n购买wu器吗?', '国ku亏空...', '战败亡g...',2,100,3,-5,-5,-3],
['要将民众...吗?', '连年征战...', '民众起义...',300,400,-5,-3,-7,-5],
['要将财产...吗?', '国家繁荣...', '人民困k...',500,600,5,5,-6,-2],
]

绘制结束背景

在draw()函数中进行判断,当游戏状态变量state的值为’end’时,绘制剧情对应的结束背景图。

全局变量qi为结束索引值

py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def draw():
    global n, state, score1, score2, qi, ci
    if state == 'begin':
        ...
    elif state == 'choice':
        ...
    elif state == 'show':
        ...
    elif state == 'end':
        screen.blit(str(qi), (0,0))

最终评价系统

游戏结束后,需要根据声望值和财富值计算出最终评价。

最终评价

最终评价由声望称号和财富称号组成,声望称号由声望值计算得出,财富称号由财富值计算得出。

声望值和财富值与称号对应表

声望值

声望称号

财富值

财富称号

15分以上

受人爱戴

15分以上

富甲一方

5分以上15分以下

平平无奇

5分以上15分以下

囊中羞涩

5分以下

声名狼藉

5分以下

穷困潦倒

将声望称号和财富称号拼接起来,并绘制在结束界面上。

Code Source

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def draw():
    global n, state, score1, score2, qi, ci, fame, money
    if state == 'begin':
        ...
    elif state == 'choice':
        ...
    elif state == 'show':
        ...
    elif state == 'end':
        screen.blit(str(qi), (0,0))
        s='你是一位'+ fame + '并且' + money + '的国王'
        screen.draw.text(s,
        (60, 150),
        fontname='puhuiti.ttf',
        fontsize=40,
        color='white'
        )

那年 • 这天

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Arch Linux的推荐、介绍与理由
Arch Linux(或Arch /ˈɑːrtʃ/))是一款基于 x86-64 架构的 Linux 发行版。系统主要由自由和开源软件组成,支持社区参与。系统设计以KISS原则(保持简单和愚蠢)为总体指导原则,注重代码正确、优雅和极简主义,期待用户能够愿意去理解系统的操作。 Arch Linux 系统安装、删除和更新软件的软件包管理器叫做 pacman 。
huofo
2022/02/28
2.1K0
2020年linux桌面系统盘点
MX Linux是基于Debian的“稳定”分支的面向桌面的Linux发行版,是antiX与以前的MEPIS Linux社区之间的合作企业。它使用Xfce作为默认桌面,是一种中等重量的操作系统,旨在将优雅高效的桌面与简单的配置,高稳定性,稳定的性能和中等大小的占地面积相结合。
程序那些事儿
2023/03/07
13.2K0
2020年linux桌面系统盘点
EndeavourOS Neo提供了一条时尚的Arch Linux使用途径
EndeavourOS 是一款漂亮的桌面操作系统,任何想轻松体验 Arch Linux 的人都可以尝试一下。
云云众生s
2024/12/31
2160
EndeavourOS Neo提供了一条时尚的Arch Linux使用途径
为什么 Arch Linux 如此“难弄”又有何优劣?
Arch Linux 于 2002 年发布,由 Aaron Grifin 领头,是当下最热门的 Linux 发行版之一。从设计上说,Arch Linux 试图给用户提供简单、最小化且优雅的体验,但它的目标用户群可不是怕事儿多的用户。Arch 鼓励参与社区建设,并且从设计上期待用户自己有学习操作系统的能力。
用户8639654
2021/10/21
2K0
[ 利器篇 ] - Ubuntu 18.04 系统更换为Manjaro
Ubuntu 16.04 -> Ubuntu 18.04 -> Manjaro 电脑系统升级的版本.
程序手艺人
2020/02/17
2.5K0
Linux发行版该如何选择?
对于很多刚使用Linux的人来说,选择使用哪个Linux发行版着实是一件头疼的事情,特别是对于有选择困难症的人们就更是如此了。其实对于那些著名的Linux发行版本,都有比较明显的个性,具体选择哪些,也只是由自己的需求而定,当然,如果你很熟悉Linux的话,那么版本的问题就不是问题了,因为在根本上它们都是相似的。
用户6543014
2019/10/25
7K0
Linux发行版该如何选择?
Manjaro Linux 入门使用教程
Manjaro 是一款基于 Arch LInux 的自由开源发行版,它吸收了 Arch Linux 优秀丰富的软件管理,同时提供了稳定流畅的操作体验。优雅简单是它的追求,稳定实用是它的优势。
未读代码
2020/05/09
4.8K0
Manjaro Linux 入门使用教程
MANJARO KDE安装配置(已换Arch Linux,此贴可能废弃)
安装后阿可能有打不开steam的情况,记得安装libGL相关的包,一般是缺失例如lib32-nvidia-440xx-utils的包,记得选择和自己安装的相关的包哦
impressionyang
2020/08/27
4.3K0
MANJARO KDE安装配置(已换Arch Linux,此贴可能废弃)
Manjaro Linux 入门使用教程「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Manjaro Linux 入门使用教程「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/09/12
2.9K0
Manjaro Linux 入门使用教程「建议收藏」
最适合程序员的 10 款 Linux 发行版
对于程序员来说,选择一个适合的 Linux 发行版非常重要,因为它能直接影响开发效率、稳定性、工具支持和开发环境的灵活性。以下是 10 款最适合程序员的 Linux 发行版,它们具有高效、灵活、开发友好的特性,能够满足从初学者到高级开发者的需求。
是山河呀
2025/01/26
1.5K0
Linux 10个主流发行版本
这里只表示做个记录。其实相关的介绍已经很多了。但是还是想怀缅一下青春。这10个Linux发行版来源于国外网站(最后给出链接)。它列出了10个Linux发行版(包含一个FreeBSD,Linux的胞兄弟),通常被认为是全球Linux用户最广泛使用的。当然并没有经过详细的数字统计,大家仍然可以选择其他的发行版。但是一般来讲,这几个都有非常活跃的论坛或邮件列表,遇到困难,也能比较迅速的解决。
狼啸风云
2019/10/24
19.6K0
11个用于编程和开发的最佳Linux发行版[2021版]
基于Linux的操作系统是最受欢迎的,并且最适合开发人员和程序员。大多数开发人员使用不同的Linux发行版来迅速完成工作并创建新的东西,但是作为我自己的前开发人员,我主要担心的一个问题是“我应该选择哪一个Linux发行版 ?” 同样,选择Linux发行版进行编程或软件开发时要考虑的其他一些问题是兼容性,功能,稳定性和灵活性。
生信交流平台
2022/09/21
4.9K0
11个用于编程和开发的最佳Linux发行版[2021版]
最佳 Linux 发行版汇总
Linux入门 Ubuntu Ubuntu是一款基于Debian发行版,以Unity作为默认桌面环境的Linux操作系统。他是世界上最流行的发行版之一,最新发行版为桌面、移动及其桌面移动混合版的优化。
小小科
2018/05/04
7.3K0
最佳 Linux 发行版汇总
六款小众却功能强大的 Linux 系统!用过一半以上的都是高手
Linux 系统自1991年首次发布以来,已经发展出了大量的发行版本。因新的发行版本不断涌现,一些旧的发行版本可能停止维护或者被合并到其他项目中。保守估计,Linux 发行版总数可能超过一千个,但同时活跃的发行版数量则要少得多。
民工哥
2024/11/05
9920
六款小众却功能强大的 Linux 系统!用过一半以上的都是高手
为什么我抛弃了 Ubuntu?
十多年来,我一直在使用 Ubuntu 的 Linux 发行版。但是,经过这么长时间以后,我第一次改变了心意。如今我开始使用 Manjaro,而且感觉非常好!
GitHubDaily
2019/10/22
9080
树莓派4b支持5gwifi吗_树莓派4和4b的区别
Manjaro Linux(或简称 Manjaro)是基于 Arch Linux 的 Linux 发行版,使用 Xfce 、GNOME和 KDE Plasma 作为默认桌面环境,和 Arch 一样,采用滚动更新。其目标是为 PC 提供易于使用的自由的操作系统。 Manjaro Linux 基于 Arch Linux,但拥有自己独立的软件仓库。Manjaro 的目标是让强大的 Arch 更方便用户使用,Manjaro 使用著名的 Pacman 且可以直接利用 AUR 上的资源。Manjaro 本身使用三个软件仓库:不稳定库,即含有那些不成熟的 Arch 包,这些包与 Arch 源有 1-2 天 的延后;测试库,每周同步一次,包含那些 Arch 不稳定源的包;以及稳定库,包含那些由开发团队确认稳定的软件。
全栈程序员站长
2022/11/01
1.7K0
树莓派4b支持5gwifi吗_树莓派4和4b的区别
安装和使用ArchLiunx超详细教程
启动 iso到 live 环境,登录后,在 /root, ArchLinux 贴心地 放置了 install.txt 文件供参考。
斯武丶风晴
2020/05/25
6.3K0
安装和使用ArchLiunx超详细教程
arch linux 安装
好长时间都没有更新自己的博客了,我简单翻阅了一下自己的更新记录,上一次更新好像还是在5月份左右,距今也有快半年,这半年也是遇到了很多事情,有不好的,也有好的。这半年我对在日常生活工作中使用Linux系统产生了一些兴趣,从零开始折腾这一系列的内容,主要从安装、配置、以及尝试各种软件来取代Windows的主导地位,也产生了一些心得,这里我想分几篇博客来聊聊我是如何慢慢使用arch Linux 来替代以前的Windows机器
Masimaro
2021/10/20
2.9K0
Arch Linux安装与初体验
Arch Linux 是一个 x86-64 通用发行版,它流行于那些喜欢 DIY Linux 系统的用户和 Linux铁杆粉丝当中。其默认的安装文件只含有一个最基本的系统,它希望使用者自己配置并使用 Arch 系统。其基于 KISS 原则(使它保持简单、傻瓜Keep It Simple, Stupid!),Arch Linux 是一个专注于优雅、代码正确,精简而简洁的系统。
yuanfan2012
2021/02/25
3K0
Arch Linux安装与初体验
再见,Ubuntu,你好,Manjaro
上周,我撰写了一篇题为《给 Ubuntu 的一封分手信》的文章,纪念我过去 15 年甚至更久时间里一直坚守的Linux 发行版 Ubuntu。Ubuntu 一直致力于为用户提供易于使用的 Linux 桌面环境,它以让用户简单易上手为目标,并且在绝大部分时间里,这个目标都得以实现。然而,最近的一次更新使 Ubuntu 变得显得缓慢且庞大,应用程序需要花费几分钟才能加载,一些 USB 设备,比如我的胶片扫描仪,突然变得无法使用。我很快找到了问题的源头——新引入的 Snap 包。因此,我知道,现在是时候放弃 Ubuntu 寻找另一种发行版了。
明明如月学长
2023/07/10
5710
再见,Ubuntu,你好,Manjaro
相关推荐
Arch Linux的推荐、介绍与理由
更多 >
LV.7
这个人很懒,什么都没有留下~
目录
  • 设置中文字体
  • 切换介绍信息
    • 效果
    • 思路
  • button参数
  • 切换游戏背景
    • 效果
    • 思路
  • 游戏的四个阶段
  • 鼠标点击角色
  • 不同选择展示不同结果
    • 思路
  • 不同选择触发不同问题
    • 思路
  • 声望和财富系统
    • 步骤1:完善列表
    • 步骤2:修改声望值和财富值
  • 游戏结束界面
    • 绘制结束背景
  • 最终评价系统
    • 最终评价
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档