[Pygame]用Pygame做简单有好玩的小游戏系列1:鼠标捉球

前言

大家好! 我是第一次发文章的新人,如有不对的请多指教

准备工作

我们需要以下工具

  • Pygame
  • 一台装有 Python3.8 (或其它更高版本) 的电脑
  • IDLE 或其他开发工具(如PyCharm

如果你还没有安装 Pygame库的话,在CMD输入以下代码:

  1| pip install pygame 

如果没报错的话,就是安装成功了。

开始写代码

初始化变量

首先,我们要先导入Pygame库、Sys库、Random库和Pygame下的Locals

import random
import sys
import pygame
from pygame.locals import *

然后我们要初始化Pygame, 不然会报错

pygame.init()

接下来就要创建屏幕和其他数值

screen = pygame.display.set_mode((1820, 980)) #创建屏幕
ball_pos = (random.randint(0, 1770), random.randint(0, 930)) #随机创建球的位置
ball_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) #随机创建球的颜色
ball_size = 50
is_down = False #判断鼠标有没有捉到球
score = 0 #创建分数
font = pygame.font.Font("Mojangles.ttf", 48) #创建字体,字体文件我会放在文章结尾

好的,这一切都准备好了,那我们就接下来就写主体吧!

创建主体

我们要先做出最简单的循环程序:

while True:
    for event in pygame.event.get(): #获取当前事件
        if event.type == QUIT: #如果事件是退出
            pygame.quit() #}退出
            sys.exit(0)   #}退出
    
    pygame.display.update() #开始循环

运行以后,一个黑色窗口弹出来了。

我们要先定义一个初始化函数使它成为白色

def init(screen):
    screen.fill((255, 255, 255))

把这个函数放在循环里

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit(0)
	init(screen)    #初始化
    pygame.display.update(

接下来我们要创建小球,把这段代码放在初始化函数的末尾:

pygame.draw.circle(screen, ball_color, pos, ball_size) # 创建小球

之后,就会有一个小球会在每一次的运行中变换位置

做完了主体的创建了,接下来就是核心部分了!

创建核心

我们怎样才能判断鼠标有没有“捉”到球?在Pygame里并没有用来判断的函数,所以我们只能自己来。

我是想到了一个办法,因为画圆球的函数circle(),radius参数是画球的半径,所以我们可以在鼠标按下的时候判断位置是不是在球的范围之内
在这里插入图片描述
因为做不到在圆形上的精细,所以留空的部分就当作按到了

核心部分是以下代码:

def core():
    global ball_color, pos, score
    if is_down:
        mouse = pygame.mouse.get_pos()
        if ball_pos[0] + 50 > mouse[0] > ball_pos[0] - 50 and ball_pos[1] + 50 > mouse[1] > ball_pos[1] - 50:
            score += 1
            ball_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
            ball_pos = (random.randint(0, 1770), random.randint(0, 930))

        else:
            pygame.draw.circle(screen, (255, 255, 0), mouse, 30)

这行代码是判断鼠标在按下的时候有没有在范围之内,如果有,重新指定位置和颜色并加分,如果没有,就显示黄色圆圈提醒玩家没有“捉”到

将核心函数添加到循环里,但不过我们要先判断鼠标有没有按下,一起添加进去

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit(0)
        if event.type == MOUSEBUTTONDOWN: # 判断鼠标有没有按下
            is_down = True # 如果有, True
        else:
            is_down = False #如果没有, False
    init(screen)
    core() #添加核心函数
    pygame.display.update()

最后一步:显示分数

我们只差一步就完成了!添加分数!
很简单,用render()函数,把他集成show_score()函数

def show_score(score):
    text = font.render("{0}".format(score), True, (0, 0, 0)) # 写文字
    screen.blit(text, (1700, 10)) # 显示文字

把他添加进循环:

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit(0)
        if event.type == MOUSEBUTTONDOWN:
            is_down = True
        else:
            is_down = False
    init(screen)
    core()
    show_score(score) # 显示分数
    pygame.display.update()

最终代码

import random
import sys

import pygame
from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((1820, 980))
clock = pygame.time.Clock()
FPS = 100
ball_pos = (random.randint(0, 1770), random.randint(0, 930))
ball_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
is_down = False
score = 0
font = pygame.font.Font("Mojangles.ttf", 48)


def core():
    global ball_color, ball_pos, score
    if is_down:
        mouse = pygame.mouse.get_pos()
        if ball_pos[0] + 50 > mouse[0] > ball_pos[0] - 50 and ball_pos[1] + 50 > mouse[1] > ball_pos[1] - 50:
            score += 1
            ball_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
            ball_pos = (random.randint(0, 1770), random.randint(0, 930))

        else:
            pygame.draw.circle(screen, (255, 255, 0), mouse, 30)


def show_score(score):
    text = font.render("{0}".format(score), True, (0, 0, 0))
    screen.blit(text, (1700, 10))


def init(screen):
    screen.fill((255, 255, 255))
    pygame.draw.circle(screen, ball_color, pos, 50)


while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit(0)
        if event.type == MOUSEBUTTONDOWN:
            is_down = True
        else:
            is_down = False
    init(screen)
    core()
    show_score(score)
    pygame.display.update()

结语

很高兴,您能看完此文章!但现在,可以自己或朋友一起玩,看看谁能在最短时间里“捉”到最多的球,并晒在评论区里吧!

猜你喜欢

转载自blog.csdn.net/csdngeogeo/article/details/126521622