基于python的赛车小游戏

游戏规则

在这里插入图片描述

玩家控制:玩家通过键盘的左右箭头键控制赛车在赛道上左右移动。
目标:玩家需要避免与从上方不断生成并向下移动的敌方赛车发生碰撞。
得分机制:每当游戏运行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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值