话说我学习的时候,英文文档难以理解,中文文档杂乱无章,最终还是觉得,还不如直接看代码学习。

下面是我学习过程中写的代码,注释写的很详细,我想会帮助你理解的

pip install pygame

1.游戏窗口的创建

下面的代码,将会帮助您学习到

1.使用pygame创建游戏窗口

2.在游戏窗口中绘制文字

点击查看代码
# 开发人员:萌狼蓝天
# 博客:Https://mllt.cc
# 笔记:Https://cnblogs.com/mllt
# 哔哩哔哩/微信公众号:萌狼蓝天
# 开发时间:2022/4/30
# Coding:UTF-8
import time import pygame
# 定义好游戏窗口宽高和帧率数值
WINDOW_width=360
WINDOW_height=480
GAME_FPS=120
# 定义颜色
COLOR_font_tips=(1, 170, 237)
COLOR_background =(238, 238, 238)
# 游戏状态
var_running = False
#----------------------------------------------------------------------------
if __name__ == '__main__':
# 基本
pygame.init() # Pygame模块初始化
# 文本模板设置开始
font_tips = pygame.font.Font("fonts/fang_zheng_kai_ti_GBK.ttf",18) # (文本内容,字体大小) 建议自己设置字体避免中文显示问题
# 文本模板设置结束
val_screen = pygame.display.set_mode((WINDOW_width,WINDOW_height)) # 创建游戏窗口
pygame.display.set_caption("飞翔的小鸟@萌狼工作室") # 设置窗口标题栏文字
val_clock = pygame.time.Clock() #Clock时钟对象,以确保游戏以所设定的FPS运行
var_running=True # 设置游戏状态为启动
var_count=0 # 运行后刷新的帧数。用于计算帧率 # 帧数/时间 = 每秒多少帧
var_time_start=time.time() # 获取系统当前时间,记录为开始运行时间
while var_running:
val_clock.tick(GAME_FPS) # 设置帧率(tick告诉pygame一秒执行多少次)
# 设置窗口关闭功能
for event in pygame.event.get(): # pygame内部保存自上一帧以来发生的所有事件
if event.type == pygame.QUIT: # 用户点击关闭按钮
var_running = False
# 【注意】上述监听必须写在循环体内,否则会导致运行的窗口处于无响应状态
# 计算帧率
var_count+=1
var_time_now=time.time()
var_fps=var_count/(var_time_now-var_time_start)
# 将帧率以文字的方式绘制在窗口上
text_img_tips_ftp=font_tips.render(" FPS:"+str(int(var_fps)),True,COLOR_font_tips)
# 绘制屏幕
val_screen.fill(COLOR_background) # 使用指定颜色填充屏幕
val_screen.blit(text_img_tips_ftp,(0,0))
pygame.display.flip() # 翻转(类似刷新,但不是刷新)屏幕
# 退出游戏程序
pygame.quit()

2.添加精灵与精灵控制

先看一下效果图

下面的代码在上面代码的基础上,增加了场景、障碍物(柱子)、小鸟

(还没有做碰撞检测)

观看下面的代码,您应该要知道如何创建精灵对象,如何控制精灵对象,如何将精灵对象放上屏幕

我会将素材贴在下面,您需要自己保存图片





点击查看代码
# 开发人员:萌狼蓝天
# 博客:Https://mllt.cc
# 笔记:Https://cnblogs.com/mllt
# 哔哩哔哩/微信公众号:萌狼蓝天
# 开发时间:2022/4/30
# Coding:UTF-8
import os.path
import time
import random
import pygame # 定义好游戏窗口宽高和帧率数值
WINDOW_width = 800
WINDOW_height = 600
GAME_FPS = 120 # 定义颜色
COLOR_user_background = (47, 64, 86)
COLOR_font_tips = (1, 170, 237)
COLOR_background = (238, 238, 238)
# 游戏状态
var_running = False # ---------------------------------------------------------------------------- class User(pygame.sprite.Sprite): # 父类型是pygame.sprite.Sprite
# image = pygame.image.load("img/bird.png")
# rect = image.get_rect()
# rect.center = (WINDOW_width / 2, WINDOW_height / 2) # 将精灵放在屏幕正中间
def __init__(self):
# 运行内置Sprite类初始化程序
pygame.sprite.Sprite.__init__(self)
# 下面两行备注上的是设置一个50X100的矩形并填充颜色COLOR_user_background
# self.image = pygame.Surface((50, 100))
# self.image.fill(COLOR_user_background) # 设置背景颜色
self.image = pygame.image.load("img/bird.png").convert_alpha()
self.rect = self.image.get_rect() # 获取包围图片的矩形
self.rect.center = (100, WINDOW_height / 2) # 将精灵放在屏幕中间居左
self.speedy = 2 # 控制精灵移动速度
def update(self):
key_pressed = pygame.key.get_pressed() # 监听键盘,按下键返回ture,否flase
if self.rect.top>=self.rect.height:
if key_pressed[pygame.K_UP]: # 键盘方向键上键
self.rect.y -= self.speedy
if self.rect.bottom<=(WINDOW_height-self.rect.height):
if key_pressed[pygame.K_DOWN]: # 键盘方向键下键
self.rect.y += self.speedy class Obstacle(pygame.sprite.Sprite):
def __init__(self,seed):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("img/pillar.png").convert_alpha()
self.rect = self.image.get_rect()
self.rect.center = (WINDOW_width,seed) def update(self):
self.rect.x -= random.randint(1, 10)
if self.rect.right < 0:
self.kill() # 清除 def game_draw():
user = User() # 获取用户精灵对象
all_sprites.add(user) # 将用户精灵添加到精灵组 def game_addObstacle():
seed = random.randint(int(WINDOW_height / 2 - 100), int(WINDOW_height / 2 + 100))
obstacle = Obstacle(seed) # 获取障碍物对象
all_sprites.add(obstacle) # 将障碍物精灵添加到精灵组
def game_update():
all_sprites.update() # 更新内容
all_sprites.draw(val_screen) # 绘画在屏幕上 if __name__ == '__main__': # 基本
pygame.init() # Pygame模块初始化
all_sprites = pygame.sprite.Group() # 创建精灵组
# 文本模板设置开始
font_tips = pygame.font.Font("fonts/fang_zheng_kai_ti_GBK.ttf", 18) # (文本内容,字体大小) 建议自己设置字体避免中文显示问题
# 文本模板设置结束
val_screen = pygame.display.set_mode((WINDOW_width, WINDOW_height)) # 创建游戏窗口
pygame.display.set_caption("飞翔的小鸟@萌狼工作室") # 设置窗口标题栏文字
val_clock = pygame.time.Clock() # Clock时钟对象,以确保游戏以所设定的FPS运行
var_running = True # 设置游戏状态为启动
var_count = 0 # 运行后刷新的帧数。用于计算帧率 # 帧数/时间 = 每秒多少帧
var_time_start = time.time() # 获取系统当前时间,记录为开始运行时间
var_nandu =0
var_time_last=var_time_start
game_draw() while var_running:
val_clock.tick(GAME_FPS) # 设置帧率(tick告诉pygame一秒执行多少次)
# 设置窗口关闭功能
for event in pygame.event.get(): # pygame内部保存自上一帧以来发生的所有事件
if event.type == pygame.QUIT: # 用户点击关闭按钮
var_running = False
# 【注意】上述监听必须写在循环体内,否则会导致运行的窗口处于无响应状态
# 计算帧率
var_count += 1
var_time_now = time.time()
var_fps = var_count / (var_time_now - var_time_start)
# 将帧率以文字的方式绘制在窗口上
text_img_tips_ftp = font_tips.render(" FPS:" + str(int(var_fps)), True, COLOR_font_tips)
# 绘制屏幕
val_screen.blit(pygame.image.load("img/background.jpg"), (0, 0))
# val_screen.fill(COLOR_background) # 使用指定颜色填充屏幕
val_screen.blit(text_img_tips_ftp, (0, 0))
if var_time_now-var_time_last>var_nandu:
game_addObstacle()
var_time_last=var_time_now
var_nandu = 0.5
game_update()
pygame.display.flip() # 翻转(类似刷新,但不是刷新)屏幕
# 退出游戏程序
pygame.quit()

3.碰撞检测

两根柱子一张图,要想要鸟穿过柱子中间,而不报碰撞,就不能使用矩形碰撞检测的方式

点击查看代码
# 开发人员:萌狼蓝天
# 博客:Https://mllt.cc
# 笔记:Https://cnblogs.com/mllt
# 哔哩哔哩/微信公众号:萌狼蓝天
# 开发时间:2022/4/30
# Coding:UTF-8
import os.path
import time
import random
import pygame # 定义好游戏窗口宽高和帧率数值
WINDOW_width = 800
WINDOW_height = 600
GAME_FPS = 120 # 定义颜色
COLOR_user_background = (47, 64, 86)
COLOR_font_tips = (1, 170, 237)
COLOR_background = (238, 238, 238)
# 游戏状态
var_running = False
var_end = False # ---------------------------------------------------------------------------- class User(pygame.sprite.Sprite): # 父类型是pygame.sprite.Sprite
# image = pygame.image.load("img/bird.png")
# rect = image.get_rect()
# rect.center = (WINDOW_width / 2, WINDOW_height / 2) # 将精灵放在屏幕正中间
def __init__(self):
# 运行内置Sprite类初始化程序
pygame.sprite.Sprite.__init__(self)
# 下面两行备注上的是设置一个50X100的矩形并填充颜色COLOR_user_background
# self.image = pygame.Surface((50, 100))
# self.image.fill(COLOR_user_background) # 设置背景颜色
self.image = pygame.image.load("img/bird.png").convert_alpha()
self.rect = self.image.get_rect() # 获取包围图片的矩形
self.rect.center = (100, WINDOW_height / 2) # 将精灵放在屏幕中间居左
self.speedy = 2 # 控制精灵移动速度
self.mask=pygame.mask.from_surface(self.image) def update(self):
key_pressed = pygame.key.get_pressed() # 监听键盘,按下键返回ture,否flase
if self.rect.top >= self.rect.height:
if key_pressed[pygame.K_UP]: # 键盘方向键上键
self.rect.y -= self.speedy
if self.rect.bottom <= (WINDOW_height - self.rect.height):
if key_pressed[pygame.K_DOWN]: # 键盘方向键下键
self.rect.y += self.speedy class Obstacle(pygame.sprite.Sprite):
def __init__(self, seed):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("img/pillar.png").convert_alpha()
self.rect = self.image.get_rect()
self.rect.center = (WINDOW_width, seed)
self.mask = pygame.mask.from_surface(self.image)
def update(self):
self.rect.x -= random.randint(1, 10)
if self.rect.right < 0:
self.kill() # 清除 def game_draw():
user = User() # 获取用户精灵对象
all_sprite_user.add(user)
return user def game_addObstacle():
seed = random.randint(int(WINDOW_height / 2 - 100), int(WINDOW_height / 2 + 100))
obstacle = Obstacle(seed) # 获取障碍物对象
all_sprites.add(obstacle) # 将障碍物精灵添加到精灵组
return obstacle def game_update():
all_sprites.update() # 更新内容
all_sprite_user.update()
all_sprite_user.draw(val_screen)
all_sprites.draw(val_screen) # 绘画在屏幕上 if __name__ == '__main__': # 基本
pygame.init() # Pygame模块初始化
all_sprite_user = pygame.sprite.Group() # 创建精灵组
all_sprites = pygame.sprite.Group() # 创建精灵组
# 文本模板设置开始
font_tips = pygame.font.Font("fonts/fang_zheng_kai_ti_GBK.ttf", 18) # (文本内容,字体大小) 建议自己设置字体避免中文显示问题
# 文本模板设置结束
val_screen = pygame.display.set_mode((WINDOW_width, WINDOW_height)) # 创建游戏窗口
pygame.display.set_caption("飞翔的小鸟@萌狼工作室") # 设置窗口标题栏文字
val_clock = pygame.time.Clock() # Clock时钟对象,以确保游戏以所设定的FPS运行
var_running = True # 设置游戏状态为启动
var_count = 0 # 运行后刷新的帧数。用于计算帧率 # 帧数/时间 = 每秒多少帧
var_time_start = time.time() # 获取系统当前时间,记录为开始运行时间
var_nandu = 0
var_time_last = var_time_start
user = game_draw()
while not var_end:
val_clock.tick(GAME_FPS) # 设置帧率(tick告诉pygame一秒执行多少次)
# 设置窗口关闭功能
for event in pygame.event.get(): # pygame内部保存自上一帧以来发生的所有事件
if event.type == pygame.QUIT: # 用户点击关闭按钮
var_end = True
# 【注意】上述监听必须写在循环体内,否则会导致运行的窗口处于无响应状态 while var_running:
for event in pygame.event.get(): # pygame内部保存自上一帧以来发生的所有事件
if event.type == pygame.QUIT: # 用户点击关闭按钮
var_running=False
var_end = True
# 计算帧率
var_count += 1
var_time_now = time.time()
var_fps = var_count / (var_time_now - var_time_start)
# 将帧率以文字的方式绘制在窗口上
text_img_tips_ftp = font_tips.render(" FPS:" + str(int(var_fps)), True, COLOR_font_tips)
# 绘制屏幕
val_screen.blit(pygame.image.load("img/background.jpg"), (0, 0))
# val_screen.fill(COLOR_background) # 使用指定颜色填充屏幕
val_screen.blit(text_img_tips_ftp, (0, 0))
if var_time_now - var_time_last > var_nandu:
obstacle = game_addObstacle()
var_time_last = var_time_now
var_nandu = 0.5
game_update()
pygame.display.flip() # 翻转(类似刷新,但不是刷新)屏幕
# result = (pygame.sprite.groupcollide(all_sprites, all_sprite_user, False, False))
# print(len(result))
# if len(result) > 0:
# font_tips_end = pygame.font.Font("fonts/fang_zheng_kai_ti_GBK.ttf", 32) # (文本内容,字体大小) 建议自己设置字体避免中文显示问题
# text_img_tips_end = font_tips_end.render("游戏失败", True, COLOR_font_tips)
# val_screen.blit(text_img_tips_end,
# (WINDOW_width / 2 - text_img_tips_end.get_rect().width, WINDOW_height / 2))
# var_running = False
# 上面的碰撞方式不适用于这个游戏,因为障碍物上下柱子是一个整体,用上述方式判断的话,没法穿过柱子图片透明部分(经过透明部分也会检测为碰撞)
for i in all_sprites:
if not pygame.sprite.collide_mask(user, i) is None:
font_tips_end = pygame.font.Font("fonts/fang_zheng_kai_ti_GBK.ttf",
32) # (文本内容,字体大小) 建议自己设置字体避免中文显示问题
text_img_tips_end = font_tips_end.render("游戏失败", True, COLOR_background)
val_screen.blit(text_img_tips_end,
(WINDOW_width / 2 - text_img_tips_end.get_rect().width/2 , WINDOW_height / 2-text_img_tips_end.get_rect().height))
var_running = False
pygame.display.flip() # 翻转(类似刷新,但不是刷新)屏幕 # 不在运行中,也就是暂停状态
# 退出游戏程序
pygame.quit()

代码重构与完善V1

上面的代码很乱在一堆,功能还不多,代码就很乱了。

所以我打算将不同的界面以不同的函数来写

通过互相调用的方式组合起来

下面的代码实现了如下功能:

1.游戏主页(可以点击 开始游戏)

2.游戏页

3.游戏失败页(可以选择重玩游戏,或者回到主页)

点击查看代码 | game_sprites.py
# 开发人员:萌狼蓝天
# 博客:Https://mllt.cc
# 笔记:Https://cnblogs.com/mllt
# 哔哩哔哩/微信公众号:萌狼蓝天
# 开发时间:2022/5/1
# Coding:UTF-8
import pygame
import random pygame.init() class User(pygame.sprite.Sprite): # 父类型是pygame.sprite.Sprite
def __init__(self, Object_image,WINDOW_height, WINDOW_width, center_x, center_y, speedx, speedy):
"""
:param Object_image:精灵对象图片
:param WINDOW_height: 游戏窗口高度
:param WINDOW_width:游戏窗口宽度
:param center_x: 精灵对象中心点X坐标
:param center_y: 精灵对象中心点Y坐标
:param speedx:x轴移动量
:param speedy:y轴移动量
"""
# 运行内置Sprite类初始化程序
pygame.sprite.Sprite.__init__(self)
self.WINDOW_height = WINDOW_height
self.WINDOW_width = WINDOW_width
self.image = pygame.image.load(Object_image).convert_alpha()
self.rect = self.image.get_rect() # 获取包围图片的矩形
self.rect.center = (center_x, center_y) # 将精灵放在屏幕中间居左
self.speedx = speedx # 控制精灵移动速度
self.speedy = speedy # 控制精灵移动速度
self.mask = pygame.mask.from_surface(self.image) def update(self):
key_pressed = pygame.key.get_pressed() # 监听键盘,按下键返回ture,否flase
if self.rect.top >= self.rect.height:
if key_pressed[pygame.K_UP]: # 键盘方向键上键
self.rect.y -= self.speedy
if self.rect.bottom <= (self.WINDOW_height - self.rect.height):
if key_pressed[pygame.K_DOWN]: # 键盘方向键下键
self.rect.y += self.speedy
class Obstacle(pygame.sprite.Sprite):
def __init__(self, Object_image, center_x, center_y, random_start, random_end):
"""
:param WINDOW_height: 游戏窗口高度
:param WINDOW_width:游戏窗口宽度
:param Object_image:精灵对象图片
:param center_x: 精灵对象中心点X坐标
:param center_y: 精灵对象中心点Y坐标
:param random_start:x轴移动量最小值
:param random_end:x轴移动量最大值
"""
# 运行内置Sprite类初始化程序
pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(Object_image).convert_alpha()
self.rect = self.image.get_rect() # 获取包围图片的矩形
self.rect.center = (center_x, center_y+random.randint(random_start,random_end)) # 将精灵放在屏幕中间居左
self.mask = pygame.mask.from_surface(self.image)
self.random_start = random_start
self.random_end = random_end def update(self):
self.rect.x -= 10
if self.rect.right < 0:
self.kill() # 清除
点击查看代码 | game_run.py
# 开发人员:萌狼蓝天
# 博客:Https://mllt.cc
# 笔记:Https://cnblogs.com/mllt
# 哔哩哔哩/微信公众号:萌狼蓝天
# 开发时间:2022/5/1
# Coding:UTF-8
import time
import game_sprites as gsp
import pygame
# 游戏固定参数
class GameSet:
window_title = "飞翔的小鸟" + "@萌狼工作室"
window_width = 800
window_height = 600
game_fps = 60
game_clock = pygame.time.Clock() # Clock时钟对象,以确保游戏以所设定的FPS运行
game_background = pygame.image.load("img/background.jpg")
# 游戏颜色
class GameColor:
color_user_background = (47, 64, 86)
color_font_tips = (1, 170, 237)
color_background = (238, 238, 238)
# 创建窗口
def game_window(WINDOW_width, WINDOW_height, WINDOW_title):
"""
创建窗口
:param WINDOW_width:窗口宽度
:param WINDOW_height:窗口高度
:param WINDOW_title:窗口标题
:return:screen | <class 'pygame.Surface'>
"""
pygame.init() # Pygame模块初始化
screen = pygame.display.set_mode((WINDOW_width, WINDOW_height)) # 创建游戏窗口
pygame.display.set_caption(WINDOW_title) # 设置窗口标题栏文字
return screen
# 添加精灵到精灵组
def game_addElfToElfs(elfs, elf):
"""
通过此函数获得障碍物精灵组
:param elfs:要加入的精灵组
:param elf:需要添加的精灵对象
:return:新的精灵组
"""
elfs.add(elf)
return elfs
# 更新精灵组
def game_elfsUpdate(elfs, screen):
"""
通过此函数更新精灵组并绘制到窗口上
:param elfs:精灵组
:param screen:窗口
:return:无返回值
"""
elfs.update()
elfs.draw(screen)
# 文字图片
def game_font(text, size=14, color=(0, 0, 0), font="fonts/fang_zheng_kai_ti_GBK.ttf"):
text_font = pygame.font.Font(font, size) # (文本内容,字体大小) 建议自己设置字体避免中文显示问题
text_img = text_font.render(text, True, color)
return text_img
def game_playing(gameset, val_screen):
# 基本
pygame.init() # Pygame模块初始化
var_running = True # 设置游戏状态为启动
var_end = False # 设置程序状态为未结束
while not var_end:
var_time_start = time.time() # 获取系统当前时间,记录为开始运行时间
var_count = 0 # 运行后刷新的帧数。用于计算帧率 # 帧数/时间 = 每秒多少帧
var_time_last = var_time_start
var_nandu = 0
elfs_user = pygame.sprite.Group() # 创建精灵组(Elf Group)
elfs_obs = pygame.sprite.Group() # 创建精灵组(Elf Group)
# 玩家对象
user = gsp.User("img/bird.png", gameset.window_width, gameset.window_height, 100,
gameset.window_height / 2, 0,
5)
game_addElfToElfs(elfs_user, user)
# 游戏进行体
result = 0 # 分数重置
while var_running:
gameset.game_clock.tick(gameset.game_fps) # 设置帧率(tick告诉pygame一秒执行多少次)
for event in pygame.event.get(): # pygame内部保存自上一帧以来发生的所有事件
if event.type == pygame.QUIT: # 用户点击关闭按钮
var_running=False
var_end=True
# 计算帧率
var_count += 1
var_time_now = time.time()
timec = (var_time_now - var_time_start)
var_fps = int(var_count / timec)
c = var_time_now - var_time_last
if c >= var_nandu:
result += 1
ob = gsp.Obstacle("img/pillar.png", gameset.window_width, gameset.window_height / 2, -100, 100)
elfs_obs = game_addElfToElfs(elfs_obs, ob)
var_time_last = time.time()
var_nandu = 0.75
# 画面更新
val_screen.blit(gameset.game_background, (0, 0)) # 背景加载
val_screen.blit(game_font("FPS:" + str(int(var_fps))), (0, 0)) # FPS显示
game_elfsUpdate(elfs_user, val_screen) # 玩家更新
game_elfsUpdate(elfs_obs, val_screen) # 障碍物更新
pygame.display.flip() # 翻转(类似刷新,但不是刷新)屏幕
# 碰撞检测
for i in elfs_obs:
if not pygame.sprite.collide_mask(user, i) is None:
var_running = False
pygame.display.flip() # 翻转(类似刷新,但不是刷新)屏幕
# 来到这一步的时候,说明撞到柱子了,开始显示分数,询问是否继续
# 重新开始游戏
for i in elfs_obs:
i.kill()
for i in elfs_user:
i.kill()
game_elfsUpdate(elfs_user, val_screen)
game_elfsUpdate(elfs_obs, val_screen)
game_fail(gameset, val_screen, result)
# pygame.quit()
# 窗口失败界面
def game_fail(gameset, val_screen, result):
# 基本
pygame.init() # Pygame模块初始化
# 预设参数
var_end = False
while not var_end:
gameset.game_clock.tick(gameset.game_fps) # 设置帧率(tick告诉pygame一秒执行多少次)
val_screen.blit(gameset.game_background, (0, 0)) # 背景加载
text_result = game_font("游戏结束,您获得的分数为{}".format(result), 45, (255, 255, 255))
text_restart = game_font("重来".format(result), 35, (255, 255, 255))
text_main = game_font("回到主页".format(result), 35, (255, 255, 255))
val_screen.blit(text_result, (gameset.window_width / 2 - text_result.get_rect().width / 2, 100))
val_screen.blit(text_restart, (gameset.window_width / 2 - text_restart.get_rect().width / 2, 200))
val_screen.blit(text_main, (gameset.window_width / 2 - text_main.get_rect().width / 2, 300))
pygame.display.flip()
for event in pygame.event.get(): # pygame内部保存自上一帧以来发生的所有事件
if event.type == pygame.QUIT: # 用户点击关闭按钮
var_end=True
if event.type == pygame.MOUSEBUTTONDOWN:
x = pygame.mouse.get_pos()[0]
y = pygame.mouse.get_pos()[1]
print(x, y)
xc = int(gameset.window_width / 2)
if y >= 200:
if y < 300:
if x > xc - int(text_restart.get_width() / 2):
if x < int(xc + text_restart.get_width() / 2):
game_playing(gameset, val_screen)
if y < text_main.get_height() + 300:
if x > xc - int(text_main.get_width() / 2):
if x < int(xc + text_main.get_width() / 2):
game_main()
pygame.quit()
# 窗口主界面,通向运行
def game_main():
# 基本
pygame.init() # Pygame模块初始化
# 预设参数
var_end = False
gameset = GameSet()
# 窗口创建
val_screen = game_window(gameset.window_width, gameset.window_height, gameset.window_title)
while not var_end:
gameset.game_clock.tick(gameset.game_fps) # 设置帧率(tick告诉pygame一秒执行多少次)
val_screen.blit(pygame.image.load("img/background.jpg"), (0, 0)) # 背景加载
text_game_title = game_font(" 飞翔的小鸟", 45, (255, 255, 255))
text_game_start = game_font(" -- 开始游戏 --", 35, (255, 255, 255))
# text_game_exit = game_font(" -- 退出游戏 --", 35, (255, 255, 255))
val_screen.blit(text_game_title, (gameset.window_width / 2 - text_game_title.get_rect().width / 2, 100))
val_screen.blit(text_game_start, (gameset.window_width / 2 - text_game_start.get_rect().width / 2, 250))
# val_screen.blit(text_game_exit, (gameset.window_width / 2 - text_game_exit.get_rect().width / 2, 350))
pygame.display.flip() # 翻转(类似刷新,但不是刷新)屏幕
# 设置窗口关闭功能
for event in pygame.event.get(): # pygame内部保存自上一帧以来发生的所有事件
if event.type == pygame.QUIT: # 用户点击关闭按钮
var_end = True
if event.type == pygame.MOUSEBUTTONDOWN:
x = pygame.mouse.get_pos()[0]
y = pygame.mouse.get_pos()[1]
print(x, y)
xc = int(gameset.window_width / 2)
yc = int(gameset.window_height / 2)
if y >= 250:
if y < text_game_start.get_height() + 250:
if x > xc - int(text_game_start.get_width() / 2):
if x < int(xc + text_game_start.get_width() / 2):
game_playing(gameset, val_screen)
pygame.quit() if __name__ == '__main__':
game_main()

【pygame】Python小游戏开发之看代码学编程的更多相关文章

  1. python小游戏开发关于pygame库的安装

    ---恢复内容开始--- 测试环境:运行环境 Window 10 64bit上运行 前提条件 python3.7(当前时间最新版本20181021)安装(记住安装路径如C:\application\p ...

  2. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  3. Python之游戏开发-飞机大战

    Python之游戏开发-飞机大战 想要代码文件,可以加我微信:nickchen121 #!/usr/bin/env python # coding: utf-8 import pygame impor ...

  4. Egret白鹭H5小游戏开发入门(二)

    前言: 昨天的文章中简单的介绍了Egret白鹭引擎从安装到基本的使用配置等问题,今天着重介绍H5小游戏开发的起步阶段,如Wing面板的使用,素材的处理,类的说明,开始布局等等. 整体概况: 根据上一篇 ...

  5. Egret白鹭H5小游戏开发入门(三)

    前言: 在上一篇文章中着重介绍了H5小游戏开发的起步阶段,如Wing面板的使用,素材的处理,类的说明等等,那么今天主要是涉及到场景的创建,loading的修改等等的代码编写. 对于这一节,我在讲解的过 ...

  6. 一、微信小游戏开发 --- 初次在微信开发者工具里跑Egret小游戏项目

    尝试下Egret的小游戏开发,学习,学习,干IT,不学习,就得落后啊... 相关教程: Egret微信小游戏教程 微信公众平台-微信小游戏教程 微信公众平台-微信小游戏接入指南 开发版本: Egret ...

  7. 玩Python小游戏猜数字,在游戏中掌握基础,你还能学不会?

    学python怎么离得开案例呢? 今天再继续给大家分享一个Python教程里的猜数字游戏     我最近也是在学python,从事编程工作几年了,但是python还是今年才开始玩的,不得不说,这真是一 ...

  8. Python小游戏、小程序

    python 小游戏之摇骰子猜大小 python 实现一个双色球生成程序 python-循环与判断练习题

  9. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  10. 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)

    微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...

随机推荐

  1. Linux:/proc/meminfo参数详细解释

    Linux:/proc/meminfo参数详细解释 一.Linux内存总览图 二.meminfo参数的详细介绍 /proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的&qu ...

  2. pcss 软阴影

    PCF Percentage Closer Filtering:PCF是一种用于阴影反锯齿的方法,本身不是软阴影方法. 算法流程说明: Perform multiple (e.g. 7x7) dept ...

  3. 十三载求索续风华,数智化扬帆启新航 | 万字长文回顾DTC 2024

    4月13日下午,为期两天的第十三届数据技术嘉年华(DTC 2024)在北京新云南皇冠假日酒店圆满落下帷幕.本次大会由中国数据库联盟与墨天轮社区联合主办,以"智能·云原生·一体化--DB与AI ...

  4. 2021年6月国产数据库排行榜:OceanBase、PolarDB会师TiDB、openGauss,入局开源阵营,逐鹿生态建设

    "首夏犹清和,芳草亦未歇",时至六月,百花齐放.百家争鸣的国产数据库市场依旧延续着如骄阳般火热的态势.不过从最新一期的 国产数据库流行度排行榜 Top 10 中不难发现,一个词足以 ...

  5. spring boot 官网提供所有组件

    所有资源来自于官网:https://start.spring.io/,在此整理只是为了方便查看 Developer Tools Spring Boot DevToolsProvides fast ap ...

  6. Exchange2016虚拟目录介绍

    Exchange2016虚拟目录介绍 Autodiscover 允许Outlook自动发现邮箱设置,以便用户无需手动配置Outlook的高级设置. ecp 用于访问EAC. EWS 提供如服务可用性, ...

  7. uni-app H5 腾讯地图无法导航

    uni-app 打包H5腾讯地图无法导航 具体使用扫描二维码查看 前言: 最近几天用uni-app开发安卓和iOS应用,打包成APP安装包后,APP内做地图导航没有问题,APP内使用的是高德地图:但是 ...

  8. 顺序结构程序设计(python)

    文章目录 1.python运算符 1.1 python算数运算 1.2python比较运算符 1.3 Python赋值运算符 1.4 python逻辑运算符 1.5 python成员运算符 1.6py ...

  9. Paimon lookup store 实现

    Lookup Store 主要用于 Paimon 中的 Lookup Compaction 以及 Lookup join 的场景. 会将远程的列存文件在本地转化为 KV 查找的格式. Hash htt ...

  10. 3.4 Linux文件(目录)命名规则

    介绍完 Linux 系统中目录结构之后,读者一定想知道如何为文件或目录命名. 我们知道,在 Linux 系统中,一切都是文件,既然是文件,就必须要有文件名.同其他系统相比,Linux 操作系统对文件或 ...