【云云怪】第3个项目:弈厢棋苑

【项目预览】

【创作背景】

这其实才是我真正意义上的第一个python项目,创建日期大概在3月20多号,但因为更新的拖拖拉拉,甚至到现在都还没完工,所以排在了第三个。跟图书馆项目类似,这个项目也是我在学了“类和对象”之后,用来练手的。
弈厢棋苑是我的围棋微信群,也是我的主要社交圈。群里的小伙伴们互相都认识很久了,平时群里下棋,做题,聊天,八卦,唱歌,比赛,非常热闹。学了python之后,我想把这些热闹用程序再现出来。

【功能设想】+【效果体验】

成员:正如图书馆里面的对象是一本一本的书,微信群里面的对象就是一个一个的人。因此,建立一个成员类,内置一些核心成员对象。

申请入群:这个功能最简单了,就是添加新的对象。

下棋功能:这是我第一个设想好的功能,每个人有“棋力”属性,把用K和D表示的棋力数字化之后,根据匹配到的两个人的棋力差值,计算出谁黑谁白,需要让几子,输出提示语。因为这个程序并不能真的下棋,所以意思意思,输赢结果随机输出就好。

聊天功能:这里我想引入智能聊天机器人,我自己当然不会编写,但风变体验课的第一课就给我们体验过一个聊天机器人,我只要去把代码抄过来,改一改,就行了。我给每个人设置了“聊天意愿”属性,赋值0-5,这是根据小伙伴的真实水群水平定的,这个属性就决定了你可以跟这个成员聊几句话(例如:云云的聊天意愿是4,那么当你选择云云跟你聊天的时候,她只会跟你讲4句话,就溜了)。

群唱会功能:弈厢群里真实的群唱会是这样的:大家一起丢骰子,丢到最大的,就发语音唱几句歌。在程序里,只要我们把唱歌用打印歌词来代替,其他过程跟真实群唱会可以做到一模一样。首先在核心成员里随机产生几个人来报名参加这次群唱会(列表里随机选择N个对象),然后大家逐个丢骰子(产生随机数),比较这些数的大小,输出最大的数的人名,然后随机给出一段歌词就当是唱歌了。我给每个人设置了“唱歌意愿”属性,赋值0-5,代表了他报名参加群唱会的概率(按“唱歌意愿”属性值把人名重复N次添加到群唱会参加人名单列表里,再随机抽取)。

做题功能:直到现在还没想好怎么实现,怕是要一直坑下去了。

 

【完工感受】——额,其实并没有完工,但短期内我也不会更新了

虽然并是一个不是很有趣的项目,但它对我的提升非常大。我不仅巩固了学过的所有知识(循环,列表和字典,类和对象,函数),还学会了抄别人的高级代码改装成自己的(聊天功能),还学会了自定义import(因为歌词这个字典实在太大,我不想放在源代码里,于是建了一个新的py文件专门存放{歌名:歌词}字典。相应的,也就学会了在打包exe的时候添加隐藏模块(hidden import)。
因为这是基于一个真实存在的群所开发的小游戏,我把这个程序打包成exe发到群里,小伙伴们纷纷刷了一波存在感。我也是很开心的,想要给大家做更多的游戏。不过很快,下一个项目就让我明白了,exe真的不能随便乱开。基于对大家负责的态度,我也决定再也不在群里发exe了。

【完整代码】

这个程序我建了3个py文件,一个用来放聊天机器人(因为这个代码不是我写的,分开放以示尊重原作者),一个用来放歌词字典,还有一个主程序。

聊天机器人:chat.py

import urllib.parse
import hashlib
import time
import random
import string
import requests
import sys
import readline

#----------------智能聊天程序-----------------#

def chatchat(person,chatch):
    global se
    def curl_md5(src):
        m = hashlib.md5(src.encode('UTF-8'))
        # 将得到的MD5值所有字符转换成大写
        return m.hexdigest().upper()

    """
    get_req_sign :根据 接口请求参数 和 应用密钥 计算 请求签名
    参数说明
        -pa:接口请求参数
        -apk:应用密钥
    返回数据
        -签名结果
    """

    def get_req_sign(pa, apk):

        # 1.字典升序排序
        pa_list = list(pa.items())
        pa_list.sort()

        # 2.拼按URL键值对
        tem_str = ''
        for i in range(len(pa_list)):
            if pa_list[i][1]:
                tem_str += (pa_list[i][0] + '=' + urllib.parse.quote(pa_list[i][1]) + '&')

        # 3.拼接app_key
        tem_str += ('app_key=' + apk)

        # 4.MD5运算 + 转换大写,得到请求签名
        sign = curl_md5(tem_str)
        return sign


    def get_param
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值