游戏规则
玩家控制:玩家通过键盘的左右箭头键控制赛车在赛道上左右移动。
目标:玩家需要避免与从上方不断生成并向下移动的敌方赛车发生碰撞。
得分机制:每当游戏运行1秒,玩家的得分会自动增加1分。
游戏结束:如果玩家的赛车与敌方赛车发生碰撞,游戏结束。此时,游戏会弹出对话框,显示玩家的得分,并询问是否重新开始游戏。
重新开始:如果玩家选择重新开始,得分重置,游戏重新运行;如果选择结束游戏,程序退出。
游戏的难点在于,随着时间推移,敌方赛车会不断生成并加速,玩家需要快速反应以避免碰撞。
代码
import tkinter as tk
from tkinter import messagebox
import random
# 初始化得分
score = 0
game_running = True
# 创建游戏窗口
window = tk.Tk()
window.title("赛车小游戏")
window.geometry("400x600")
window.resizable(False, False)
# 创建画布
canvas = tk.Canvas(window, width=400, height=600, bg="#333333") # 背景为深灰色,模拟赛道
canvas.pack()
# 绘制车道线
for i in range(0, 600, 100): # 每隔100像素绘制虚线
canvas.create_line(200, i, 200, i + 50, fill="white", width=5)
# 玩家赛车
player_car = None
enemy_cars = []
# 更新分数
def update_score():
global score
score += 1
window.after(1000, update_score) # 每秒更新一次得分
# 移动玩家赛车
def move_left(event):
if game_running:
x1, y1, x2, y2 = canvas.coords(player_car)
if x1 > 0:
canvas.move(player_car, -20, 0)
def move_right(event):
if game_running:
x1, y1, x2, y2 = canvas.coords(player_car)
if x2 < 400:
canvas.move(player_car, 20, 0)
# 创建敌方赛车
def create_enemy_car():
if game_running:
x_position = random.choice([50, 150, 250, 350])
enemy_car = canvas.create_rectangle(x_position, -50, x_position + 40, 0, fill="red", outline="black") # 敌方赛车为红色矩形
enemy_cars.append(enemy_car)
window.after(2000, create_enemy_car)
# 移动敌方赛车
def move_enemy_cars():
if game_running:
for enemy_car in enemy_cars:
canvas.move(enemy_car, 0, 10)
if canvas.coords(enemy_car)[3] > 600:
canvas.delete(enemy_car)
enemy_cars.remove(enemy_car)
# 检测碰撞
if detect_collision(player_car, enemy_car):
end_game()
return
window.after(50, move_enemy_cars)
# 检测碰撞
def detect_collision(car1, car2):
x1, y1, x2, y2 = canvas.coords(car1)
enemy_coords = canvas.coords(car2)
if len(enemy_coords) == 0: # 如果敌方赛车已被删除,返回False
return False
x3, y3, x4, y4 = enemy_coords
return not (x2 < x3 or x1 > x4 or y2 < y3 or y1 > y4)
# 游戏结束
def end_game():
global game_running
game_running = False
for car in enemy_cars:
canvas.delete(car)
enemy_cars.clear()
# 弹出游戏结束对话框
response = messagebox.askquestion("游戏结束", f"您的得分是:{score}\n您想重新开始游戏吗?")
if response == 'yes':
reset_game()
else:
window.quit()
# 重置游戏
def reset_game():
global score, game_running
score = 0
game_running = True
canvas.coords(player_car, 170, 500, 230, 550) # 重置玩家赛车位置
create_enemy_car()
move_enemy_cars()
update_score()
# 键盘绑定
window.bind("<Left>", move_left)
window.bind("<Right>", move_right)
# 开始新游戏
def start_game():
global player_car
# 将玩家赛车绘制为矩形,确保可以正常显示
player_car = canvas.create_rectangle(170, 500, 230, 550, fill="blue", outline="black") # 玩家赛车为蓝色矩形
reset_game()
# 启动游戏
start_game()
window.mainloop()