Pygame 实战(行动代号(单机版)):(三). 程序的完善补充

5 篇文章 0 订阅
5 篇文章 0 订阅

历史文章

这一部分我们讲一些可以在之前程序附加的部分。

目录

颜色地图的发送(利用Python发送图片正文的邮件)

词语的获取


颜色地图的发送(利用Python发送图片正文的邮件)

在之前的代码中,我们通过直接将 generate_map_image() 生成了颜色地图的图片并将其保存在了 image_file_path 目录下。

def generate_map_image(maps):
    global ID_COLOR
    image_file_path = 'img/text.png'
    size_img = 600, 600
    img = py.Surface(size_img)
    img.fill((255, 255, 255))
    padx, pady = 30, 30
    int_x, int_y = 10, 10
    w, h = 100, 100
    i = 0
    py.draw.rect(img, (0, 0, 0), (padx // 2, pady // 2, size_img[0] - padx, size_img[1] - pady), 1)
    while i < 25:
        x, y = i % 5, i // 5
        temp_surf = py.Surface((w, h))
        temp_surf.fill(ID_COLOR[maps[i]])
        img.blit(temp_surf, (padx + x * w + x * int_x, pady + y * h + y * int_y, w, h))
        i += 1
    py.image.save(img, image_file_path)

在实际游戏中,因为这个颜色只有队长才能看,但是我们又只有一个电脑屏幕。那么为了游戏的流畅进行,我们应该想办法将这个地图放在电脑之外的地方,比如!我们可以将图片发送到某个指定的邮箱中去,这样队长就可以自己拿着手机看邮箱中的图啦!

利用Python发送带图片的邮件是很容易的,大家百度一下就能找到很多,

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header


def send_card_map(receivers = [xxx@qq.com,yyy@163.com],image_file_path='img/text.png'):
    '''
    发送颜色图片至指定邮箱
    :param receivers: 接受邮箱地址 例如
    :param image_file_path: 发送图片的路径
    '''
    ## 第三方 SMTP 服务
    ## 注意这里改成一个可用的发件邮箱
    mail_host="smtp.163.com"  #设置服务器
    mail_user="abc@163.com"    #用户名
    mail_pass="abc"   #口令

    sender = mail_user

    msgRoot = MIMEMultipart('related')
    msgRoot['From'] = sender
    msgRoot['To'] = ','.join(receivers)
    subject = 'Codenames_round_data'
    msgRoot['Subject'] = Header(subject, 'utf-8')
    msgAlternative = MIMEMultipart('alternative')
    msgRoot.attach(msgAlternative)

    mail_msg = """
    <p>行动代号(Codenames)</p>
    <p>本局词语地图:</p>
    <p><img src="cid:image1"></p>
    """
    msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

    # 指定图片为当前目录
    fp = open(image_file_path, 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()

    # 定义图片 ID,在 HTML 文本中引用
    msgImage.add_header('Content-ID', '<image1>')
    msgRoot.attach(msgImage)
    try :
        smtpObj = smtplib.SMTP()
        smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
        smtpObj.login(mail_user, mail_pass)
        smtpObj.sendmail(sender, receivers, msgRoot.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("Error: 无法发送邮件")

最后我们将 send_card_map() 加在 generate_map_image() 的最后即可

词语的获取

游戏的另一个问题就是我们词语数据的获取,of course用爬虫就好了,然后找一些4字以下的词语放在 ./dat 文件夹下就行

例如,911查询网词典

打开网址后一共发现有20页词语,我们定位到显示词语的元素标签,发现是一个 class = ‘l3’ 的列表,于是通过直接用BeautifulSoup 获取就好

import json
import requests
from bs4 import BeautifulSoup


def is_Chinese(word):
    # 判断word是否是中文单词
    for ch in word:
        if '\u4e00' <= ch <= '\u9fff':
            return True
    return False


def get_raw_data():
    global raw_data
    raw_data = dict()
    for i in range(1,21):
        if i == 1:
            url ='https://cidian.911cha.com/cixing_mingci.html'
        else :
            url = 'https://cidian.911cha.com/cixing_mingci_p{}.html'.format(i)
        response = requests.get(url,headers={'User-Agent': 'Custom'}) # 简单的防止反爬
        if response.status_code != 200:
            print('Error page{}'.format(i))
            continue
        content = BeautifulSoup(response.text)
        raw_data[i] = content.find('ul',class_= 'l3').get_text()[:]
        print('page {}, done!'.format(i))
    print('Finish !')
get_raw_data()

得到 raw_data 后,我们简单的处理一下数据将其转化为一个单词列表

filter_data = dict()
for i in raw_data:
    temp_s = ''
    s = raw_data[i]
    for ch in s:
        if is_Chinese(ch):
            temp_s+=ch
        else :
            temp_s+=' '
    filter_data[i] = temp_s[:].split()
words_list = []
for i in filter_data:
    words_list.extend(filter_data[i])

过滤掉太长的单词

words_list = filter(lambda x: len(x) < 5, words_list)

保存单词

with open('words.dat', 'w', encoding='utf-8') as f:
    f.write(','.join(words_list))

当然大家也可以自己想一些有趣的词和爬取一些有趣的网站将词语放在 dat/ 文件夹下

 

祝大家玩的开心!

 

(P.S. 如果大家看到这了,说明对游戏还是有一些兴趣的,可能大家注意到呢我们的标题一直表明是“单机版”……其实,我最近也写了一个联机版的,不过需要自己有服务器才能玩,如果大家真的有兴趣的话,我可以过段时间把这个游戏如何多人游戏的代码教程写一写嘿嘿)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值