前言
大家好! 我是第一次发文章的新人,如有不对的请多指教
准备工作
我们需要以下工具:
- 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()
结语
很高兴,您能看完此文章!但现在,可以自己或朋友一起玩,看看谁能在最短时间里“捉”到最多的球,并晒在评论区里吧!
更多推荐
[Pygame]用Pygame做简单有好玩的小游戏系列1:鼠标捉球
发布评论