sairate 5488a216f2 feat(第7讲 字母卡牌): 实现记忆游戏并添加开始界面
- 新增 jiyi.py 文件,实现字母翻牌记忆游戏功能
- 添加 youxijiemian.py 文件,创建游戏开始界面
- 使用 turtle 和 tkinter 模块分别实现游戏和界面
- 支持选择不同难度的游戏模式
2025-11-16 13:29:06 +08:00

120 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pgzrun
#pygame zero模块 python game zero
import random
from pgzhelper import *
#pygame zero模块 辅助模块
# images 图片文件夹
# sounds 音效文件夹
# music 音乐文件夹
# fonts 字体文件夹
#参数名称不可变
WIDTH = 1500
HEIGHT = 800
#Actor 面向对象编程思想
#角色类 基类
#创建背景角色
#创建了两个背景角色
bg1 = Actor('连续道路.png', topleft = (0,0))
bg2 = Actor('连续道路.png', topleft = (1500,0))
# 创建障碍物
obstacles = [] #障碍物列表
for _ in range(3): # 障碍物数量
x = random.randint(WIDTH, WIDTH + 1500) # 障碍物出现在屏幕右侧外
y = random.randint(100, HEIGHT - 50)
obstacles.append(Actor('路障', (x, y)))
# 创建摩托车
motor = Actor('摩托1', (200, HEIGHT // 2))
# 将摩托造型存放在列表内
motor.images = ['摩托1','摩托2']
# 创建终点线
line = Actor('终点线', topleft = (20000, 163))
# 初始化设置
speed = 15 #速度
flag = 0 #0为正常行驶1为成功2为失败
# 绘制
def draw():
# 绘制连续背景
bg1.draw()
bg2.draw()
if flag == 1:
music.stop()
screen.blit('摩托成功', (0,0))
elif flag == 2:
music.stop()
screen.blit('摩托失败', (0,0))
else:
# 绘制障碍物
for obs in obstacles:
obs.draw()
# 绘制摩托
motor.draw()
# 绘制终点线
line.draw()
# 绘制距离文字
x = int(line.x-motor.x)
screen.draw.text(f'距终点:{x} m', (50,700), fontname = 'simkai', fontsize = 50)
# 背景、终点线移动
def bg_move():
bg1.x -= speed
bg2.x -= speed
if bg1.right <= 0:
bg1.left = bg2.right
if bg2.right <= 0:
bg2.left = bg1.right
line.x -= speed
# 更新障碍物位置
def obs_move():
for obs in obstacles:
obs.x -= speed # 障碍物随背景一起移动
if obs.x < 0:
obs.x = random.randint(WIDTH, WIDTH + 1500) # 障碍物继续出现在屏幕外
obs.y = random.randint(100, HEIGHT - 50)
# 最后冲刺
def line_collide():
global flag
if motor.collide_pixel(line):
flag = 1
sounds.胜利.play()
else:
motor.x += 15
# 判断是否与障碍物相撞
def obs_collide():
global flag
for obs in obstacles:
if motor.collide_pixel(obs):
flag = 2
sounds.失败.play()
def update():
if flag == 0:
if line.x > WIDTH - 200: # 正常行驶
bg_move()
obs_move()
else: # 最后冲刺
line_collide()
# 控制赛车移动,限制不能出界
if keyboard.up and motor.top > 0:
motor.y -= 7
if keyboard.down and motor.bottom < HEIGHT-50:
motor.y += 7
# 是否碰撞障碍物
obs_collide()
def change_image():
motor.next_image()
clock.schedule_interval(change_image,0.2)
music.play('速度与激情')
pgzrun.go()