体验用ai做了个python小游戏

写在前面:

最近ai确实比较火。各种生成式AI,包括文字、图片、视频。之前听说ai生产代码能力比较强,一直想试试。所以及就有了本问。

 

使用的工具

deepinseek :用来生成python代码

即梦:用来生成图片素材

Remove.bg:用来对生成的图片素材去除背景

pixabay.com:用来下载音乐素材

 

游戏建立步骤

1.设立游戏建立背景

 

 

 

我使用了深度思考

整个深度思索的过程,让我了解到deepseek为啥选择pygame库,为啥选择收集物品得分的模式。主要是我前面的提示词:小学生。我觉得符合我预期。

很快他就生成了python代码

图片[1]-体验用ai做了个python小游戏-牛翰网

import pygame
import random

# 初始化游戏
pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("哈尔滨冰雪大冒险")
clock = pygame.time.Clock()

# 加载哈尔滨元素素材
bg = pygame.image.load("snow_bg.jpg")  # 冰雪大世界背景
player_img = pygame.image.load("skier.png")  # 滑雪运动员
ice_img = pygame.image.load("ice_block.png")  # 冰障碍物
flag_img = pygame.image.load("finish_flag.png")  # 终点旗

# 颜色定义
WHITE = (255, 255, 255)
BLUE = (0, 100, 255)

# 玩家类
class Skier:
    def __init__(self):
        self.image = pygame.transform.scale(player_img, (60, 60))
        self.rect = self.image.get_rect(center=(WIDTH//2, HEIGHT-100))
        self.speed = 8

    def move(self, direction):
        if direction == "left" and self.rect.left > 0:
            self.rect.x -= self.speed
        elif direction == "right" and self.rect.right < WIDTH:
            self.rect.x += self.speed

# 障碍物类
class Obstacle:
    def __init__(self):
        self.type = random.choice(["ice", "flag"])
        self.image = ice_img if self.type == "ice" else flag_img
        self.image = pygame.transform.scale(self.image, (40, 40))
        self.rect = self.image.get_rect(center=(random.randint(20, WIDTH-20), -20))
        self.speed = 5

    def move(self):
        self.rect.y += self.speed

# 游戏主循环
def main():
    skier = Skier()
    obstacles = []
    score = 0
    font = pygame.font.Font(None, 36)
    game_active = True

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return

        if game_active:
            keys = pygame.key.get_pressed()
            if keys[pygame.K_LEFT]:
                skier.move("left")
            if keys[pygame.K_RIGHT]:
                skier.move("right")

            # 生成障碍物
            if random.random() < 0.05:  # 5%概率生成
                obstacles.append(Obstacle())

            # 移动障碍物
            for obstacle in obstacles:
                obstacle.move()
                if skier.rect.colliderect(obstacle.rect):
                    if obstacle.type == "ice":
                        game_active = False
                    else:
                        score += 50
                        obstacles.remove(obstacle)
                if obstacle.rect.top > HEIGHT:
                    obstacles.remove(obstacle)
                    if obstacle.type == "ice":
                        score += 10

            # 更新界面
            screen.blit(bg, (0, 0))
            screen.blit(skier.image, skier.rect)
            for obstacle in obstacles:
                screen.blit(obstacle.image, obstacle.rect)

            # 显示得分
            score_text = font.render(f"得分: {score}", True, WHITE)
            screen.blit(score_text, (10, 10))
        else:
            # 游戏结束界面
            screen.fill(BLUE)
            end_text = font.render("游戏结束!最终得分: " + str(score), True, WHITE)
            screen.blit(end_text, (WIDTH//2-150, HEIGHT//2))
            restart_text = font.render("按R重新开始", True, WHITE)
            screen.blit(restart_text, (WIDTH//2-100, HEIGHT//2+50))

            keys = pygame.key.get_pressed()
            if keys[pygame.K_r]:
                game_active = True
                score = 0
                obstacles = []
                skier = Skier()

        pygame.display.update()
        clock.tick(60)

if __name__ == "__main__":
    main()

View Code

代码的完整度非常好,拷贝图片素材基本就可以运行了。代码中有注释,方便阅读代码。他还给出了后续的建议。游戏就是避障,然后接住游戏元素得分。碰到障碍物游戏结束,提示分数,提示按R键继续游戏。逻辑比较简单。

 

2.增加功能

在这个基础上,我对deepseek提了一些要求,或者觉得有问题的让他解决。总体上都解决了。而且效果我认为满意。

1.要求增加视频作为背景。

因为pygame是不支持视频元素的。我 看看deepseek怎么解决的哦,他比较了opencv和moviepy库,在小学生这个条件下,给出opencv更适合。这段深度思考部分,我觉得给出moviepy和opencv的比较逻辑有点欠缺。但是实际的思路还是比较清晰的使用第三方库从视频中取帧,然后绘制到pygame的surface上。

它还贴心的给出了如何安装opencv库,怎么引用素材

图片[1]-体验用ai做了个python小游戏-牛翰网

import pygame
import cv2  # 新增OpenCV库
import numpy as np
import random

# 初始化游戏
pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("哈尔滨冰雪大冒险")
clock = pygame.time.Clock()

# 加载视频背景(新增部分)
video = cv2.VideoCapture("harbin_winter.mp4")  # 准备哈尔滨冬季主题视频
video_width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
video_height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 加载其他素材(保持原有)
player_img = pygame.image.load("skier.png")
ice_img = pygame.image.load("ice_block.png")
flag_img = pygame.image.load("finish_flag.png")

# 视频帧转换函数(新增)
def get_video_frame():
    ret, frame = video.read()
    if not ret:  # 如果视频播放完毕
        video.set(cv2.CAP_PROP_POS_FRAMES, 0)  # 重置到开头
        ret, frame = video.read()
    frame = cv2.resize(frame, (WIDTH, HEIGHT))  # 调整尺寸
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 颜色空间转换
    return pygame.surfarray.make_surface(frame.swapaxes(0, 1))  # 转为Pygame Surface

# 玩家类(保持原有)
class Skier:
    # ... 原有代码不变 ...

# 障碍物类(保持原有)
class Obstacle:
    # ... 原有代码不变 ...

# 修改后的游戏主循环
def main():
    skier = Skier()
    obstacles = []
    score = 0
    font = pygame.font.Font(None, 36)
    game_active = True

    while True:
        # 处理事件(保持原有)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                video.release()  # 新增:释放视频资源
                pygame.quit()
                return

        # 获取视频背景帧(新增部分)
        bg_surface = get_video_frame()

        if game_active:
            # ... 原有游戏逻辑保持不变 ...

            # 更新界面(修改背景部分)
            screen.blit(bg_surface, (0, 0))  # 替换原来的bg
            screen.blit(skier.image, skier.rect)
            # ... 其余绘制逻辑保持不变 ...

        else:
            # 游戏结束界面(可以保持原有)
            # ... 原有代码 ...

        pygame.display.update()
        clock.tick(60)

if __name__ == "__main__":
    main()

View Code

 

2.我让增加了一个欢迎页面。

它的思路,通过设置变量,把游戏过程分为欢迎页,游戏进行中,游戏结束3个状态。逻辑没毛病。还贴心的提供修改说明和建议。

图片[1]-体验用ai做了个python小游戏-牛翰网

import pygame
import cv2
import numpy as np
import random

# 初始化游戏
pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("哈尔滨冰雪大冒险")
clock = pygame.time.Clock()

# 加载视频背景
video = cv2.VideoCapture("harbin_winter.mp4")
video_width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
video_height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 加载游戏素材
player_img = pygame.image.load("skier.png")
ice_img = pygame.image.load("ice_block.png")
flag_img = pygame.image.load("finish_flag.png")

# 视频帧转换函数
def get_video_frame():
    ret, frame = video.read()
    if not ret:
        video.set(cv2.CAP_PROP_POS_FRAMES, 0)
        ret, frame = video.read()
    frame = cv2.resize(frame, (WIDTH, HEIGHT))
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    return pygame.surfarray.make_surface(frame.swapaxes(0, 1))

# 玩家类
class Skier:
    def __init__(self):
        self.image = pygame.transform.scale(player_img, (60, 60))
        self.rect = self.image.get_rect(center=(WIDTH//2, HEIGHT-100))
        self.speed = 8

    def move(self, direction):
        if direction == "left" and self.rect.left > 0:
            self.rect.x -= self.speed
        elif direction == "right" and self.rect.right < WIDTH:
            self.rect.x += self.speed

# 障碍物类
class Obstacle:
    def __init__(self):
        self.type = random.choice(["ice", "flag"])
        self.image = ice_img if self.type == "ice" else flag_img
        self.image = pygame.transform.scale(self.image, (40, 40))
        self.rect = self.image.get_rect(center=(random.randint(20, WIDTH-20), -20))
        self.speed = 5

    def move(self):
        self.rect.y += self.speed

def main():
    skier = Skier()
    obstacles = []
    score = 0
    font = pygame.font.Font(None, 36)

    # 新增游戏状态变量
    game_active = False
    welcome_page = True  # 新增欢迎页面状态

    while True:
        # 获取视频背景帧
        bg_surface = get_video_frame()

        # 事件处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                video.release()
                pygame.quit()
                return

        # 欢迎页面逻辑
        if welcome_page:
            screen.blit(bg_surface, (0, 0))

            # 绘制标题文字
            title_font = pygame.font.Font(None, 72)
            title_text = title_font.render("哈尔滨冰雪大冒险", True, (255, 255, 255))
            title_rect = title_text.get_rect(center=(WIDTH//2, HEIGHT//3))
            screen.blit(title_text, title_rect)

            # 绘制提示文字
            tip_font = pygame.font.Font(None, 36)
            tip_text = tip_font.render("按空格键开始游戏", True, (255, 255, 255))
            tip_rect = tip_text.get_rect(center=(WIDTH//2, HEIGHT//2))
            screen.blit(tip_text, tip_rect)

            # 检测空格键
            keys = pygame.key.get_pressed()
            if keys[pygame.K_SPACE]:
                welcome_page = False
                game_active = True

        # 游戏进行中
        elif game_active:
            # 玩家控制
            keys = pygame.key.get_pressed()
            if keys[pygame.K_LEFT]:
                skier.move("left")
            if keys[pygame.K_RIGHT]:
                skier.move("right")

            # 生成障碍物
            if random.random() < 0.05:
                obstacles.append(Obstacle())

            # 更新障碍物
            for obstacle in obstacles[:]:
                obstacle.move()
                if skier.rect.colliderect(obstacle.rect):
                    if obstacle.type == "ice":
                        game_active = False
                    else:
                        score += 50
                        obstacles.remove(obstacle)
                if obstacle.rect.top > HEIGHT:
                    obstacles.remove(obstacle)
                    if obstacle.type == "ice":
                        score += 10

            # 绘制游戏界面
            screen.blit(bg_surface, (0, 0))
            screen.blit(skier.image, skier.rect)
            for obstacle in obstacles:
                screen.blit(obstacle.image, obstacle.rect)

            # 显示得分
            score_text = font.render(f"得分: {score}", True, (255, 255, 255))
            screen.blit(score_text, (10, 10))

        # 游戏结束界面
        else:
            screen.fill((0, 100, 255))
            end_text = font.render(f"游戏结束!最终得分: {score}", True, (255, 255, 255))
            screen.blit(end_text, (WIDTH//2-150, HEIGHT//2))
            restart_text = font.render("按R重新开始", True, (255, 255, 255))
            screen.blit(restart_text, (WIDTH//2-100, HEIGHT//2+50))

            # 重新开始逻辑
            keys = pygame.key.get_pressed()
            if keys[pygame.K_r]:
                game_active = True
                score = 0
                obstacles = []
                skier = Skier()

        pygame.display.update()
        clock.tick(60)

if __name__ == "__main__":
    main()

View Code

3.我发现中文显示有问题。

提出了问题,deepseek也给出可行的解决方案,我使用了他给的方案2 ,因为自定义字体可以使得游戏画面更优。还贴心的给出了注意事项。

4.我提出了背景修改意见,欢迎页面和结束页面背景是视频,游戏页面背景是静态图片。

deepseek也爽快完成了效果。

图片[1]-体验用ai做了个python小游戏-牛翰网

import pygame
import cv2
import numpy as np
import random

# 初始化游戏
pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("哈尔滨冰雪大冒险")
clock = pygame.time.Clock()

# 加载视频背景
video = cv2.VideoCapture("harbin_winter.mp4")  # 欢迎页面和结束页面的背景视频

# 加载图片背景
game_bg = pygame.image.load("snow_bg.jpg")  # 游戏界面的背景图片
game_bg = pygame.transform.scale(game_bg, (WIDTH, HEIGHT))

# 加载游戏素材
player_img = pygame.image.load("skier.png")
ice_img = pygame.image.load("ice_block.png")
flag_img = pygame.image.load("finish_flag.png")

# 加载背景音乐
pygame.mixer.init()
welcome_music = pygame.mixer.Sound("welcome_music.mp3")  # 欢迎页面音乐
game_music = pygame.mixer.Sound("game_music.mp3")        # 游戏界面音乐
end_music = pygame.mixer.Sound("end_music.mp3")          # 结束页面音乐

# 设置音乐音量
welcome_music.set_volume(0.5)
game_music.set_volume(0.5)
end_music.set_volume(0.5)

# 视频帧转换函数
def get_video_frame():
    ret, frame = video.read()
    if not ret:  # 如果视频播放完毕
        video.set(cv2.CAP_PROP_POS_FRAMES, 0)  # 重置到开头
        ret, frame = video.read()
    frame = cv2.resize(frame, (WIDTH, HEIGHT))  # 调整尺寸
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 颜色空间转换
    return pygame.surfarray.make_surface(frame.swapaxes(0, 1))  # 转为Pygame Surface

# 玩家类
class Skier:
    def __init__(self):
        self.image = pygame.transform.scale(player_img, (60, 60))
        self.rect = self.image.get_rect(center=(WIDTH//2, HEIGHT-100))
        self.speed = 8

    def move(self, direction):
        if direction == "left" and self.rect.left > 0:
            self.rect.x -= self.speed
        elif direction == "right" and self.rect.right < WIDTH:
            self.rect.x += self.speed

# 障碍物类
class Obstacle:
    def __init__(self):
        self.type = random.choice(["ice", "flag"])
        self.image = ice_img if self.type == "ice" else flag_img
        self.image = pygame.transform.scale(self.image, (40, 40))
        self.rect = self.image.get_rect(center=(random.randint(20, WIDTH-20), -20))
        self.speed = 5

    def move(self):
        self.rect.y += self.speed

def main():
    skier = Skier()
    obstacles = []
    score = 0
    font = pygame.font.Font(None, 36)

    # 游戏状态变量
    game_active = False
    welcome_page = True  # 初始为欢迎页面

    # 当前播放的音乐
    current_music = None

    while True:
        # 事件处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                video.release()
                pygame.quit()
                return

            # 检测空格键按下事件
            if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                if welcome_page or not game_active:  # 在欢迎页面或结束页面按空格键
                    welcome_page = False
                    game_active = True
                    score = 0
                    obstacles = []
                    skier = Skier()
                    print("游戏开始!")

        # 欢迎页面
        if welcome_page:
            if current_music != welcome_music:
                pygame.mixer.stop()  # 停止当前音乐
                welcome_music.play(-1)  # 循环播放欢迎音乐
                current_music = welcome_music

            bg_surface = get_video_frame()  # 使用视频背景
            screen.blit(bg_surface, (0, 0))

            # 绘制标题文字
            title_font = pygame.font.Font(None, 72)
            title_text = title_font.render("哈尔滨冰雪大冒险", True, (255, 255, 255))
            title_rect = title_text.get_rect(center=(WIDTH//2, HEIGHT//3))
            screen.blit(title_text, title_rect)

            # 绘制提示文字
            tip_font = pygame.font.Font(None, 36)
            tip_text = tip_font.render("按空格键开始游戏", True, (255, 255, 255))
            tip_rect = tip_text.get_rect(center=(WIDTH//2, HEIGHT//2))
            screen.blit(tip_text, tip_rect)

        # 游戏进行中
        elif game_active:
            if current_music != game_music:
                pygame.mixer.stop()  # 停止当前音乐
                game_music.play(-1)  # 循环播放游戏音乐
                current_music = game_music

            # 使用图片背景
            screen.blit(game_bg, (0, 0))

            # 玩家控制
            keys = pygame.key.get_pressed()
            if keys[pygame.K_LEFT]:
                skier.move("left")
            if keys[pygame.K_RIGHT]:
                skier.move("right")

            # 生成障碍物
            if random.random() < 0.05:
                obstacles.append(Obstacle())

            # 更新障碍物
            for obstacle in obstacles[:]:
                obstacle.move()
                if skier.rect.colliderect(obstacle.rect):
                    if obstacle.type == "ice":
                        game_active = False
                    else:
                        score += 50
                        obstacles.remove(obstacle)
                if obstacle.rect.top > HEIGHT:
                    obstacles.remove(obstacle)
                    if obstacle.type == "ice":
                        score += 10

            # 绘制玩家和障碍物
            screen.blit(skier.image, skier.rect)
            for obstacle in obstacles:
                screen.blit(obstacle.image, obstacle.rect)

            # 显示得分
            score_text = font.render(f"得分: {score}", True, (255, 255, 255))
            screen.blit(score_text, (10, 10))

        # 游戏结束界面
        else:
            if current_music != end_music:
                pygame.mixer.stop()  # 停止当前音乐
                end_music.play(-1)  # 循环播放结束音乐
                current_music = end_music

            bg_surface = get_video_frame()  # 使用视频背景
            screen.blit(bg_surface, (0, 0))

            # 绘制结束文字
            end_text = font.render(f"游戏结束!最终得分: {score}", True, (255, 255, 255))
            screen.blit(end_text, (WIDTH//2-150, HEIGHT//2))
            restart_text = font.render("按空格键重新开始", True, (255, 255, 255))
            screen.blit(restart_text, (WIDTH//2-100, HEIGHT//2+50))

        pygame.display.update()
        clock.tick(60)

if __name__ == "__main__":
    main()

View Code

5.提出增加更多游戏元素。

deepseek增加了加速道具,护盾道具,磁铁道具,减速道具。

图片[1]-体验用ai做了个python小游戏-牛翰网

import pygame
import cv2
import numpy as np
import random
import math

# 初始化游戏
pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("哈尔滨冰雪大冒险")
clock = pygame.time.Clock()

# 加载视频背景
video = cv2.VideoCapture("harbin_winter.mp4")

# 加载图片背景
game_bg = pygame.image.load("snow_bg.jpg")
game_bg = pygame.transform.scale(game_bg, (WIDTH, HEIGHT))

# 加载游戏素材
player_img = pygame.image.load("skier.png")
ice_img = pygame.image.load("ice_block.png")
flag_img = pygame.image.load("finish_flag.png")
boost_img = pygame.image.load("boost.png")  # 加速道具
shield_img = pygame.image.load("shield.png")  # 护盾道具
magnet_img = pygame.image.load("magnet.png")  # 磁铁道具
slow_img = pygame.image.load("slow.png")  # 减速道具

# 加载背景音乐
pygame.mixer.init()
welcome_music = pygame.mixer.Sound("welcome_music.mp3")
game_music = pygame.mixer.Sound("game_music.mp3")
end_music = pygame.mixer.Sound("end_music.mp3")

# 设置音乐音量
welcome_music.set_volume(0.5)
game_music.set_volume(0.5)
end_music.set_volume(0.5)

# 视频帧转换函数
def get_video_frame():
    ret, frame = video.read()
    if not ret:
        video.set(cv2.CAP_PROP_POS_FRAMES, 0)
        ret, frame = video.read()
    frame = cv2.resize(frame, (WIDTH, HEIGHT))
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    return pygame.surfarray.make_surface(frame.swapaxes(0, 1))

# 玩家类
class Skier:
    def __init__(self):
        self.image = pygame.transform.scale(player_img, (60, 60))
        self.rect = self.image.get_rect(center=(WIDTH//2, HEIGHT-100))
        self.speed = 8
        self.shield = False  # 护盾状态
        self.magnet = False  # 磁铁状态
        self.boost = False  # 加速状态
        self.boost_timer = 0  # 加速剩余时间

    def move(self, direction):
        if direction == "left" and self.rect.left > 0:
            self.rect.x -= self.speed
        elif direction == "right" and self.rect.right < WIDTH:
            self.rect.x += self.speed

    def update(self):
        if self.boost:
            self.boost_timer -= 1
            if self.boost_timer <= 0:
                self.boost = False
                self.speed = 8

# 障碍物类
class Obstacle:
    def __init__(self):
        self.type = random.choice(["ice", "flag", "boost", "shield", "magnet", "slow"])
        self.image = self.get_image()
        self.image = pygame.transform.scale(self.image, (40, 40))
        self.rect = self.image.get_rect(center=(random.randint(20, WIDTH-20), -20))
        self.speed = 5

    def get_image(self):
        if self.type == "ice":
            return ice_img
        elif self.type == "flag":
            return flag_img
        elif self.type == "boost":
            return boost_img
        elif self.type == "shield":
            return shield_img
        elif self.type == "magnet":
            return magnet_img
        elif self.type == "slow":
            return slow_img

    def move(self):
        self.rect.y += self.speed

def main():
    skier = Skier()
    obstacles = []
    score = 0
    font = pygame.font.Font(None, 36)
    game_active = False
    welcome_page = True
    current_music = None
    slow_timer = 0  # 减速剩余时间

    while True:
        # 事件处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                video.release()
                pygame.quit()
                return

            if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                if welcome_page or not game_active:
                    welcome_page = False
                    game_active = True
                    score = 0
                    obstacles = []
                    skier = Skier()
                    slow_timer = 0

        # 欢迎页面
        if welcome_page:
            if current_music != welcome_music:
                pygame.mixer.stop()
                welcome_music.play(-1)
                current_music = welcome_music

            bg_surface = get_video_frame()
            screen.blit(bg_surface, (0, 0))

            title_font = pygame.font.Font(None, 72)
            title_text = title_font.render("哈尔滨冰雪大冒险", True, (255, 255, 255))
            title_rect = title_text.get_rect(center=(WIDTH//2, HEIGHT//3))
            screen.blit(title_text, title_rect)

            tip_font = pygame.font.Font(None, 36)
            tip_text = tip_font.render("按空格键开始游戏", True, (255, 255, 255))
            tip_rect = tip_text.get_rect(center=(WIDTH//2, HEIGHT//2))
            screen.blit(tip_text, tip_rect)

        # 游戏进行中
        elif game_active:
            if current_music != game_music:
                pygame.mixer.stop()
                game_music.play(-1)
                current_music = game_music

            screen.blit(game_bg, (0, 0))

            # 玩家控制
            keys = pygame.key.get_pressed()
            if keys[pygame.K_LEFT]:
                skier.move("left")
            if keys[pygame.K_RIGHT]:
                skier.move("right")

            # 生成障碍物和道具
            if random.random() < 0.05:
                obstacles.append(Obstacle())

            # 更新障碍物和道具
            for obstacle in obstacles[:]:
                obstacle.move()
                if skier.rect.colliderect(obstacle.rect):
                    if obstacle.type == "ice":
                        if not skier.shield:
                            game_active = False
                        else:
                            skier.shield = False
                    elif obstacle.type == "flag":
                        score += 50
                    elif obstacle.type == "boost":
                        skier.boost = True
                        skier.speed = 12
                        skier.boost_timer = 300  # 加速持续5秒
                    elif obstacle.type == "shield":
                        skier.shield = True
                    elif obstacle.type == "magnet":
                        skier.magnet = True
                    elif obstacle.type == "slow":
                        slow_timer = 300  # 减速持续5秒
                    obstacles.remove(obstacle)
                if obstacle.rect.top > HEIGHT:
                    obstacles.remove(obstacle)
                    if obstacle.type == "ice":
                        score += 10

            # 磁铁效果
            if skier.magnet:
                for obstacle in obstacles[:]:
                    if obstacle.type == "flag":
                        dx = skier.rect.centerx - obstacle.rect.centerx
                        dy = skier.rect.centery - obstacle.rect.centery
                        distance = math.hypot(dx, dy)
                        if distance < 200:  # 吸引范围
                            obstacle.rect.x += dx * 0.1
                            obstacle.rect.y += dy * 0.1

            # 减速效果
            if slow_timer > 0:
                slow_timer -= 1
                for obstacle in obstacles:
                    obstacle.speed = 2
            else:
                for obstacle in obstacles:
                    obstacle.speed = 5

            # 更新玩家状态
            skier.update()

            # 绘制玩家和障碍物
            screen.blit(skier.image, skier.rect)
            for obstacle in obstacles:
                screen.blit(obstacle.image, obstacle.rect)

            # 显示得分和状态
            score_text = font.render(f"得分: {score}", True, (255, 255, 255))
            screen.blit(score_text, (10, 10))
            if skier.shield:
                shield_text = font.render("护盾: 激活", True, (0, 255, 0))
                screen.blit(shield_text, (10, 50))
            if skier.magnet:
                magnet_text = font.render("磁铁: 激活", True, (0, 255, 255))
                screen.blit(magnet_text, (10, 90))
            if skier.boost:
                boost_text = font.render("加速: 激活", True, (255, 0, 0))
                screen.blit(boost_text, (10, 130))
            if slow_timer > 0:
                slow_text = font.render("减速: 激活", True, (255, 255, 0))
                screen.blit(slow_text, (10, 170))

        # 游戏结束界面
        else:
            if current_music != end_music:
                pygame.mixer.stop()
                end_music.play(-1)
                current_music = end_music

            bg_surface = get_video_frame()
            screen.blit(bg_surface, (0, 0))

            end_text = font.render(f"游戏结束!最终得分: {score}", True, (255, 255, 255))
            screen.blit(end_text, (WIDTH//2-150, HEIGHT//2))
            restart_text = font.render("按空格键重新开始", True, (255, 255, 255))
            screen.blit(restart_text, (WIDTH//2-100, HEIGHT//2+50))

        pygame.display.update()
        clock.tick(60)

if __name__ == "__main__":
    main()

View Code

总结:

deepseek的代码输出能力完全没有问题,对于需求的分析也很精确。给出的修改提示和建议也非常有用。我的结论,deepseek完全可以作为生产力工具给程序员提供更快的代码输出,也可以帮助程序员学习新的知识点,通过项目一点点增加功能打磨代码。

最后给出我最终的代码(我没有加上更多元素)

https://github.com/edzjx/snows-deepseek

 

来源链接:https://www.cnblogs.com/edzjx/p/18725469

© 版权声明
THE END
支持一下吧
点赞13 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容