一、初始pygame
1.游戏框架搭建
- pygame游戏框架搭建大体分为四个步骤,如下图所示:
参考代码:
# 导入pygame
import pygame
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:480,高:700
# 游戏退出
pygame.quit()
2.添加循环
以上代码执行后,游戏窗口闪一下就关闭了。我们需要在窗口下方添加一个无限循环,让窗口一直显示。
# 导入pygame
import pygame
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
# 添加无限循环,让窗口一直显示
while True:
pass
# 游戏退出
pygame.quit()
3.监听事件
以上代码执行后,窗口可以一直显示,但无法关闭。所以我们需要监听事件消息,例如关闭窗口事件,按下键盘事件等等。
# 导入pygame
import pygame
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
4.最终代码
基本设置完成后,我们可以设置窗口标题,更改背景颜色等等
# 导入pygame
import pygame
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
# 窗口标题
pygame.display.set_caption('原神')
# 自定义颜色
bg_color1 = (255,0,0)
# 游戏窗口背景颜色
screen.fill(bg_color1)
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
以上代码结束后,颜色无法更改,我们需要加一行代码pygame.display.flip,去刷新屏幕。代码如下:
# 导入pygame
import pygame
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
# 窗口标题
pygame.display.set_caption('原神')
# 自定义颜色
bg_color1 = (255,0,0)
# 游戏窗口背景颜色
screen.fill(bg_color1)
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
# 刷新屏幕
pygame.display.flip()
二、Pygame进阶
1.游戏窗口坐标系
2.画圆
# 导入pygame
import pygame
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
# 窗口标题
pygame.display.set_caption('原神')
# 自定义颜色
bg_color1 = (255,0,0)
# 游戏窗口背景颜色
screen.fill(bg_color1)
# 绘制一个蓝色实心的圆形,其中[60,250]表示圆心的位置,40为半径,width默认为0
pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40,0)
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
# 刷新屏幕
pygame.display.flip()
3.插入图片
# 导入pygame
import pygame
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
# 窗口标题
pygame.display.set_caption('原神')
ball = pygame.image.load("ball.jpg") # 加载图片
WHITE = (255, 255, 255) #白色
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
screen.fill(WHITE) #重新背景颜色为白色
screen.blit(ball,(0,0))# 在原点位置放置图片
pygame.display.update()# 刷新屏幕
4.让图片移动
# 导入pygame
import pygame
import time
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
ball = pygame.image.load("ball.jpg") # 加载图片
RED = (255, 0, 0) # 红色
ballrect = ball.get_rect() #获取矩形的区域
speed = [5,5] #偏移量
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
ballrect = ballrect.move(speed) #让图片移动
screen.fill(RED) # 背景颜色为红色
screen.blit(ball, ballrect)# 将图片画到窗口
pygame.display.flip()# 刷新屏幕
time.sleep(0.1) #间接控制图片移动速度,越短越快
5.碰撞反弹
# 导入pygame
import pygame
import time
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
ball = pygame.image.load("ball.jpg") # 加载图片
RED = (255, 0, 0) # 红色
ballrect = ball.get_rect() #获取矩形的区域
speed = [5,5] #偏移量
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
# 碰到左右边缘反弹
if ballrect.left < 0 or ballrect.right > 480:
speed[0] = - speed[0]
# 碰到上下边缘反弹
if ballrect.top < 0 or ballrect.bottom > 700:
speed[1] = - speed[1]
ballrect = ballrect.move(speed) #让图片移动
screen.fill(RED) # 背景颜色为红色
screen.blit(ball, ballrect)# 将图片画到窗口
pygame.display.flip()# 刷新屏幕
time.sleep(0.1) #间接控制图片移动速度,越短越快
三、Pygame进阶(一)
1.绘制矩形
# 导入pygame
import pygame
import time
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
RED = (255, 0, 0) # 红色
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
pygame.draw.rect(screen,RED,(50,50,150,50),0) #绘制矩形,第三个参数为矩形的范围:(left,top,width,height),最后一个参数,0表示填充矩形
pygame.draw.rect(screen, RED, (250, 50, 150, 50), 1)
pygame.draw.rect(screen, RED, (50, 150, 150, 50), 10)
pygame.display.flip()# 刷新屏幕
2.绘制三角形
# 导入pygame
import pygame
import time
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
BLACK = (0, 0, 0) # 黑色
WHITE = (255, 255, 255) # 白色
RED = (255, 0, 0) # 红色
GREEN = (0, 255, 0) # 绿色
BLUE = (0, 0, 255) # 蓝色
screen.fill(WHITE) # 填充背景色
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
"""绘制三角形"""
points = [(60,0),(0,50),(120,50)]
pygame.draw.polygon(screen, GREEN, points, 0)
"""绘制多边形"""
points = [(200, 75), (300, 25), (400, 75), (450, 25), (450, 125), (400, 75), (300, 125)]
pygame.draw.polygon(screen, RED, points, 0)
pygame.display.flip()# 刷新屏幕
3.显示文字
# 导入pygame
import pygame
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((480, 700)) # 宽:640,高:700
# 窗口标题
pygame.display.set_caption('原神')
# 定义颜色
BLACK = (0, 0, 0) # 黑色
WHITE = (255, 255, 255) # 白色
RED = (255, 0, 0) # 红色
GREEN = (0, 255, 0) # 绿色
BLUE = (0, 0, 255) # 蓝色
#循环
while True:
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
text = pygame.font.SysFont("SimHei", 60) # 创建一个font文本对象
text_font = text.render("游戏结束", 1, RED, BLUE) # 渲染文本对象
screen.blit(text_font, (100,200)) # 绘制文本内容
pygame.display.update()# 刷新屏幕
3.乒乓球创意
# 导入pygame
import pygame
import time
# 初始化游戏
pygame.init()
# 游戏代码【这里写我们的游戏代码主体部分,比如游戏窗口,标题,背景颜色等等】
# 游戏窗口
screen = pygame.display.set_mode((600, 550)) # 宽:600,高:550
# 窗口标题
pygame.display.set_caption('乒乓球争霸赛')
# 定义颜色
BLACK = (0, 0, 0) # 黑色
WHITE = (255, 255, 255) # 白色
RED = (255, 0, 0) # 红色
GREEN = (0, 255, 0) # 绿色
BLUE = (0, 0, 255) # 蓝色
Orange = (225, 121, 21) # 橙色
x = 120 # 乒乓球的x坐标
y = 120 # 乒乓球的y坐标
vx = 1 # 乒乓球的x轴初始速度
vy = 1 # 乒乓球的y轴初始速度
# boost = 0 # boost是加速器,如果接了10次,那么加速
score = 0 # score是分数,接到一次乒乓球就加分
# Bpc= 1 # 基础加分量英文:Basic plus component的缩写
# 打印文本
def printtext(font, text, x, y, color):
# 渲染文本
text_font = font.render(text, True, color)
# 绘制文本
screen.blit(text_font, (x, y))
#循环
while True:
screen.fill(Orange) # 填充背景为橙色
# 监听所有事件
for event in pygame.event.get():
# 点击❌号关闭,退出游戏
if event.type == pygame.QUIT:
#游戏退出
pygame.quit()
### 显示文字 ###