Prefacio: Aprendimos en las primeras tres lecciones, creación de ventanas, carga de imágenes, eventos comunes del mouse, etc. Hoy aprendemos a monitorear el color y hacemos un juego de laberinto. Vamos a ver
Las tres lecciones anteriores están aquí, recuerde prestarles atención:
demostración de vídeo
1. Construcción de la interfaz
- Imagen de fondo (800x600):
En la última lección aprendimos sobre los eventos del mouse, y en esta lección aprenderemos sobre los eventos de los botones.
Uso de código para evento clave:
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:
按下下键执行的代码块
...
...
...
- Eventos clave comunes
Pygame.K_LEFT | botón izquierdo |
pygame.K_RIGHT | botón derecho del ratón |
pygame.K_UP | tecla arriba |
pygame.K_DOWN | tecla abajo |
- Para ver más eventos de botones, vaya al sitio web oficial, haga clic en mí para ver
Detección de color:
sc.get_at((x,y))
sc: objeto de ventana
get_at((x,y)), la función es una tupla, que indica el color de las coordenadas actuales, y el valor devuelto por el color es (r,g,b )
sc.get_at((x-9,y))
análisis lógico:
- 1. Use la imagen posterior del laberinto como fondo de ventana (800x600)
- 2. Use el código de dibujo de círculos de la lección anterior para dibujar un círculo pequeño
- 3. Obtener las coordenadas de los cuatro vértices del círculo pequeño
- 4. Determina el color de las coordenadas de los cuatro vértices del círculo pequeño, si toca la línea negra. Si devuelve (0,0,0), significa que el juego está perdido; si toca el cuadro verde en el punto final, significa que el juego gana.
Monitoreo continuo e intervalo de tiempo de llaves
Si no escribes esta línea, la pelota no podrá seguir moviéndose
pygame.key.set_repeat(1,10)
Código de la versión completa:
# 完整代码
# 请完成迷宫游戏
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()