啦迩 发表于 2025-6-9 10:51:11

体验用ai做了个python小游戏

写在前面:

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

deepinseek :用来生成python代码
即梦:用来生成图片素材
Remove.bg:用来对生成的图片素材去除背景
pixabay.com:用来下载音乐素材
 
游戏建立步骤

1.设立游戏建立背景

 

 
 
我使用了深度思考

整个深度思索的过程,让我了解到deepseek为啥选择pygame库,为啥选择收集物品得分的模式。主要是我前面的提示词:小学生。我觉得符合我预期。
很快他就生成了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:
                skier.move("left")
            if keys:
                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:
                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库,怎么引用素材


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个状态。逻辑没毛病。还贴心的提供修改说明和建议。

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:
                welcome_page = False
                game_active = True

      # 游戏进行中
      elif game_active:
            # 玩家控制
            keys = pygame.key.get_pressed()
            if keys:
                skier.move("left")
            if keys:
                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:
                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也爽快完成了效果。
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:
                skier.move("left")
            if keys:
                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增加了加速道具,护盾道具,磁铁道具,减速道具。

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:
                skier.move("left")
            if keys:
                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


 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 体验用ai做了个python小游戏