把川普射上太阳—如何用python制作小游戏

故事扮演 提交于 2020-03-25 17:28:38

 

 

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。

输入以下命令安装我们所需要的依赖模块:

pip install freegames 
pip install turtle

看到 Successfully installed xxx 则说明安装成功。

2.编写代码

原理很简单,就是用到了张川普的漫画图和freegames模块,以及turtle画图模块。

2.1 模块加载与设定图像

首先,引入turtle模块,和freegames模块,我们这一次实验需要用到freegames模块里的向量vector(用于表示坐标)。

import turtle
from random import randrange
from freegames import vector
 
# 设定screen
screen = turtle.Screen()
screen.setup(420, 420, 370, 0)
 
# 加载trump图,并设为默认turtle
trump = '3.gif'
screen.addshape(trump)
turtle.shape(trump) 

2.2 准备画图

在开始画图之前,由于需要用川普头像作为移动点,我们需要隐藏原有的turtle对象,并设置不显示tracer,即特朗普移动的时候不画线。

最后设定当用户点击画布的时候,执行tap函数。

turtle.hideturtle()
turtle.up()
turtle.tracer(False)
turtle.onscreenclick(tap) 

tap函数如下,即设定球体的位置和初始速度。

def tap(x, y):
    """
    回应屏幕点击
    :param x: x轴位置
    :param y: y轴位置
    """
    if not inside(ball):
        ball.x = -199
        ball.y = -199
        speed.x = (x + 200) / 25
        speed.y = (y + 200) / 25 

2.3 开始画图

这一部分的核心是move函数,不过在说道move函数前,我们要重点讲一下如何将原有端点换成特朗普的头像,那就是draw函数的功能:

def draw():
    """
    绘画出太阳和trump
    """
    turtle.hideturtle()
    turtle.clear()
 
    for target in targets:
        turtle.goto(target.x, target.y)
        turtle.dot(20, 'red')
 
    if inside(ball):
        turtle.showturtle()
        turtle.goto(ball.x, ball.y)
 
    turtle.update() 

还记得我们在一开始就将川普的头像设定为turtle的shape了吗?然后在move函数运行之前,又将turtle的点隐藏了起来,其实这个时候隐藏的就是川普的头像。而在开始移动的时候,我们仅需要将turtle重新show回来即可。因此核心语句便是:

turtle.showturtle()
turtle.goto(ball.x, ball.y)

这两句控制了头像的移动。

接下来看看move函数主体:

def move():
    """
    移动太阳和trump
    :return:
    """
 
    # 生成“太阳”球体
    if randrange(40) == 0:
        y = randrange(-150, 150)
        target = vector(200, y)
        targets.append(target)
 
    # 移动太阳
    for target in targets:
        target.x -= 0.5
 
    # 如果Trump在屏幕内,减速并移动
    if inside(ball):
        speed.y -= 0.35
        ball.move(speed)
 
    # 重新渲染“太阳”位置
    dupe = targets.copy()
    targets.clear()
 
    # 和Trump距离太近,则消去球体
    for target in dupe:
        if abs(target - ball) > 13:
            targets.append(target)
 
    # 渲染画布
    draw()
 
    # 没有目标了则终止游戏
    for target in targets:
        if not inside(target):
            return
 
    # 每隔50毫秒递归调用本函数
    turtle.ontimer(move, 50) 

其实注释写的挺清楚的,但是这里我们还是详细解释一下:

1.首先需要生成“太阳”球体,这里用到了vector,是一个用于生成坐标的函数,y是随机产生的,所以球体初始位置都在最右边(200, y)。2.平移所有的太阳,包括新增的。3.如果屏幕内存在Trump头像,令其移动。4.重新渲染太阳位置,用新坐标代替,若和Trump距离过近,则消去该球体。5.渲染所有的球体和Trump的新位置。6.如果没有球体了,则终止游戏,否则每50毫秒重新调用本函数。

基于这个逻辑大家也可以写一个属于自己的游戏哦。

最后的效果图:

 

 

如果想了解更多关于python的应用,可以私信我,不管你是零基础还是有基础都可以获取到自己相对应的学习礼包!包括Python软件工具和2019最新入门到实战教程,(http://t.cn/A6Zvjdun)复制到浏览器打开!python技术学习交流群:695185429

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!