Python 制作小游戏系列

一世执手 提交于 2020-12-04 15:51:05

这两天豆子在学习Python的pandas模块。这个模块可以很方便的处理各个格式的文本文件,结合前面学习的Turtle绘图模块,我们可以做一个检测记忆的小游戏,通过输入中国的省份名字,他会自动地在空白地图上表明出来。如果实在想不起了,输入exit可以退出,然后会生成一个csv文件,标明我漏掉的省份名称。

截图如下

Python 制作小游戏系列 - 中国省份测试地图

输入exit 退出之后,会自动生成一个csv,里面是我漏掉的省份名字

Python 制作小游戏系列 - 中国省份测试地图

下面看看思路和实现的要点:

困难点:

1.如何获取每个省份在这个地图里面的坐标
2.如何处理坐标和省份名字之间的关系
3.地图上显示内容

解决方案:

  1. 我们可以通过 turtle 的鼠标事件来显示坐标

比如说,通过下面的代码,我可以在地图上点击对应的区域来获取响应的坐标

def get_mouse_click_coor(x,y):
     print(x,y)

turtle.onscreenclick(get_mouse_click_coor)

turtle.mainloop()
  1. 创建一个类似下面的csv文件,列出省份名字和其对应的坐标,通过第一步的准备,我可以把每个省份的坐标都获取出来

state,x,y
河北,115.0,48.0
山西,73.0,-1.0
辽宁,192.0,58.0
吉林,234.0,91.0
黑龙江,243.0,151.0
江苏,164.0,-63.0
浙江,169.0,-120.0
安徽,130.0,-85.0
福建,144.0,-165.0
江西,109.0,-145.0
山东,139.0,-22.0










  1. 显示内容就很容易了,指定Turtle的实例化对象到对应的坐标输出相应的文字即可

下面是源代码,不到60行,非常简单,但是游戏效果很好

import turtle
import pandas

screen = turtle.Screen()
screen.title("中国省份记忆测试")

image= "china.gif"
screen.addshape(image)

turtle.shape(image)

#回答正确的列表
correct=[]

#总数据
data = pandas.read_csv("province.csv")

allstate= data.state.to_list()

#没有记住的列表

faillist=[]

while len(correct) < 34:
    answer = screen.textinput(title=f"{len(correct)}/34 正确", prompt="省份名字是什么?").title()
    if answer == 'Exit':
        print("exit")
        for item in allstate:
            if item in correct:
                pass
            else:
                print(item)
                faillist.append(item)

        print(faillist)
        newdata= pandas.DataFrame(faillist)
        newdata.to_csv("newdata.csv")
        break

#把 pandas数据里面符合我们搜索结果的那一行数据找出来

    state_data = data[data.state == answer]

    if len(state_data) == 0:
        print("No such state")
    else:
 # 找到这一行了,把对应的名字,x和y坐标找出来
        name = state_data.state.item()
        x = state_data.x
        y = state_data.y
        print(name)
        print(x)
        print(y)
    #发送海龟到对应坐标处输出内容
        display = turtle.Turtle()
        display.hideturtle()
        display.penup()
        display.goto(int(x),int(y))
        display.write(name,align="center",font=("Arial",8,"normal"))
        correct.append(answer)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!