前言:前三节课我们学习了,窗口的创建、图片的加载、常用鼠标事件的等。今天我们学一个颜色的监测,并自制一个迷宫小游戏。那我们一下来看看吧
前面的三节课在这里,大家记得关注收藏一下:
视频演示
1、界面搭建
- 背景图片(800x600):
上一节课我们学习了,鼠标事件,这一节课我们学习一下按键事件
按键事件的代码用法:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
按下左键执行的代码块
elif event.key == pygame.K_RIGHT:
按下右键执行的代码块
elif event.key == pygame.K_UP:
按下上键执行的代码块
elif event.key == pygame.K_DOWN:
按下下键执行的代码块
...
...
...
- 常见的按键事件
pygame.K_LEFT | 左键 |
pygame.K_RIGHT | 右键 |
pygame.K_UP | 上键 |
pygame.K_DOWN | 下键 |
- 更多的按键事件,请移步至官网,点我查看
颜色检测:
sc.get_at((x,y))
sc : 窗口对象
get_at((x,y)),函数里是一个元祖,表示当前坐标所处的颜色,颜色返回值为(r,g,b)
sc.get_at((x-9,y))
逻辑分析:
- 1、以迷宫背图片为窗口背景(800x600)
- 2、利用上节课的画圆形代码,绘制一个小圆
- 3、获取小圆的四个顶点坐标
- 4、判断小圆四个顶点坐标所处的颜色,如果碰到了黑线。返回(0,0,0),则表示游戏失败;如果碰到了终点的绿色方框,则表示游戏胜利。
按键的持续监测与间隔时间
如果不写这一行,小球将无法持续运动
pygame.key.set_repeat(1,10)
完整版代码:
# 完整代码
# 请完成迷宫游戏
import pygame,sys
import time
pygame.init()
#2_2 :设置持续按键时间间隔
pygame.key.set_repeat(1,10)
#设定好颜色变量,方便下面使用
red = (255,0,0)
black = (0,0,0)
green = (0,255,0)
# 3_2:设置变量,判断是否胜利
win = False
#知识进阶,计算时间
mytime1 = time.time()
# 1:创建窗口、贴上小球
sc = pygame.display.set_mode((860,660))
bg = pygame.image.load("./image/maze.png")
title = pygame.display.set_caption("迷宫")
sc.blit(bg,(0,0))
#由于小球的位置是会变化的,所以要线设置变量
# x = 760 作弊坐标
# y = 600 作弊坐标
x = 25
y = 25
# replay = input("xxxxxxxxxxxxxxxxxxxxx")
def gong(x,y):
while True:
sc.blit(bg,(0,0))
pygame.draw.circle(sc,red,(x,y),8)
pygame.display.update( )
# 2_1:获取键盘事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x-=1
elif event.key == pygame.K_RIGHT:
x+=1
elif event.key == pygame.K_UP:
y-=1
elif event.key == pygame.K_DOWN:
y+=1
# 3_1 : 侦测颜色,判断输赢
if sc.get_at((x-9,y))==black or sc.get_at((x+9,y))==black or sc.get_at((x,y+9))==black or sc.get_at((x,y-9))==black:
# 3_2:设置变量,判断是否胜利
win = False
break
if sc.get_at((x-9,y))==green or sc.get_at((x+9,y))==green or sc.get_at((x,y+9))==green or sc.get_at((x,y-9))==green:
win = True
break
gong(x,y)
#3_3 判断胜利或失败
while True:
if win == True:
mytime2 = time.time()
mytime = int(mytime2-mytime1)
print("恭喜,你逃出了迷宫,用时:%s秒"%mytime)
replay = input("你想再玩一遍吗?(y or n )")
if replay == "y":
gong(x,y)
else:
print("退出游戏")
sys.exit()
else:
print("真遗憾,你输了")
replay = input("你想再玩一遍吗?(y or n )")
if replay == "y":
gong(x,y)
else:
print("退出游戏")
sys.exit()