体验用ai做了个python小游戏

何小豆儿在此  金牌会员 | 2025-2-19 22:44:24 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 853|帖子 853|积分 2559

写在前面:

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

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

1.设立游戏建立配景

 

 
 
我使用了深度思考

整个深度思索的过程,让我相识到deepseek为啥选择pygame库,为啥选择网络物品得分的模式。主要是我前面的提示词:小学生。我觉得符合我预期。
很快他就生成了python代码
  1. import pygame
  2. import random
  3. # 初始化游戏
  4. pygame.init()
  5. WIDTH, HEIGHT = 800, 600
  6. screen = pygame.display.set_mode((WIDTH, HEIGHT))
  7. pygame.display.set_caption("哈尔滨冰雪大冒险")
  8. clock = pygame.time.Clock()
  9. # 加载哈尔滨元素素材
  10. bg = pygame.image.load("snow_bg.jpg")  # 冰雪大世界背景
  11. player_img = pygame.image.load("skier.png")  # 滑雪运动员
  12. ice_img = pygame.image.load("ice_block.png")  # 冰障碍物
  13. flag_img = pygame.image.load("finish_flag.png")  # 终点旗
  14. # 颜色定义
  15. WHITE = (255, 255, 255)
  16. BLUE = (0, 100, 255)
  17. # 玩家类
  18. class Skier:
  19.     def __init__(self):
  20.         self.image = pygame.transform.scale(player_img, (60, 60))
  21.         self.rect = self.image.get_rect(center=(WIDTH//2, HEIGHT-100))
  22.         self.speed = 8
  23.     def move(self, direction):
  24.         if direction == "left" and self.rect.left > 0:
  25.             self.rect.x -= self.speed
  26.         elif direction == "right" and self.rect.right < WIDTH:
  27.             self.rect.x += self.speed
  28. # 障碍物类
  29. class Obstacle:
  30.     def __init__(self):
  31.         self.type = random.choice(["ice", "flag"])
  32.         self.image = ice_img if self.type == "ice" else flag_img
  33.         self.image = pygame.transform.scale(self.image, (40, 40))
  34.         self.rect = self.image.get_rect(center=(random.randint(20, WIDTH-20), -20))
  35.         self.speed = 5
  36.     def move(self):
  37.         self.rect.y += self.speed
  38. # 游戏主循环
  39. def main():
  40.     skier = Skier()
  41.     obstacles = []
  42.     score = 0
  43.     font = pygame.font.Font(None, 36)
  44.     game_active = True
  45.     while True:
  46.         for event in pygame.event.get():
  47.             if event.type == pygame.QUIT:
  48.                 pygame.quit()
  49.                 return
  50.         if game_active:
  51.             keys = pygame.key.get_pressed()
  52.             if keys[pygame.K_LEFT]:
  53.                 skier.move("left")
  54.             if keys[pygame.K_RIGHT]:
  55.                 skier.move("right")
  56.             # 生成障碍物
  57.             if random.random() < 0.05:  # 5%概率生成
  58.                 obstacles.append(Obstacle())
  59.             # 移动障碍物
  60.             for obstacle in obstacles:
  61.                 obstacle.move()
  62.                 if skier.rect.colliderect(obstacle.rect):
  63.                     if obstacle.type == "ice":
  64.                         game_active = False
  65.                     else:
  66.                         score += 50
  67.                         obstacles.remove(obstacle)
  68.                 if obstacle.rect.top > HEIGHT:
  69.                     obstacles.remove(obstacle)
  70.                     if obstacle.type == "ice":
  71.                         score += 10
  72.             # 更新界面
  73.             screen.blit(bg, (0, 0))
  74.             screen.blit(skier.image, skier.rect)
  75.             for obstacle in obstacles:
  76.                 screen.blit(obstacle.image, obstacle.rect)
  77.             # 显示得分
  78.             score_text = font.render(f"得分: {score}", True, WHITE)
  79.             screen.blit(score_text, (10, 10))
  80.         else:
  81.             # 游戏结束界面
  82.             screen.fill(BLUE)
  83.             end_text = font.render("游戏结束!最终得分: " + str(score), True, WHITE)
  84.             screen.blit(end_text, (WIDTH//2-150, HEIGHT//2))
  85.             restart_text = font.render("按R重新开始", True, WHITE)
  86.             screen.blit(restart_text, (WIDTH//2-100, HEIGHT//2+50))
  87.             keys = pygame.key.get_pressed()
  88.             if keys[pygame.K_r]:
  89.                 game_active = True
  90.                 score = 0
  91.                 obstacles = []
  92.                 skier = Skier()
  93.         pygame.display.update()
  94.         clock.tick(60)
  95. if __name__ == "__main__":
  96.     main()
复制代码
View Code代码的完备度非常好,拷贝图片素材基本就可以运行了。代码中有注释,方便阅读代码。他还给出了后续的建议。游戏就是避障,然后接住游戏元素得分。碰到障碍物游戏结束,提示分数,提示按R键继续游戏。逻辑比力简单。


 
2.增加功能

在这个基础上,我对deepseek提了一些要求,大概觉得有题目的让他解决。总体上都解决了。而且结果我以为满足。
1.要求增加视频作为配景。

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


  1. import pygame
  2. import cv2  # 新增OpenCV库
  3. import numpy as np
  4. import random
  5. # 初始化游戏
  6. pygame.init()
  7. WIDTH, HEIGHT = 800, 600
  8. screen = pygame.display.set_mode((WIDTH, HEIGHT))
  9. pygame.display.set_caption("哈尔滨冰雪大冒险")
  10. clock = pygame.time.Clock()
  11. # 加载视频背景(新增部分)
  12. video = cv2.VideoCapture("harbin_winter.mp4")  # 准备哈尔滨冬季主题视频
  13. video_width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
  14. video_height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
  15. # 加载其他素材(保持原有)
  16. player_img = pygame.image.load("skier.png")
  17. ice_img = pygame.image.load("ice_block.png")
  18. flag_img = pygame.image.load("finish_flag.png")
  19. # 视频帧转换函数(新增)
  20. def get_video_frame():
  21.     ret, frame = video.read()
  22.     if not ret:  # 如果视频播放完毕
  23.         video.set(cv2.CAP_PROP_POS_FRAMES, 0)  # 重置到开头
  24.         ret, frame = video.read()
  25.     frame = cv2.resize(frame, (WIDTH, HEIGHT))  # 调整尺寸
  26.     frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 颜色空间转换
  27.     return pygame.surfarray.make_surface(frame.swapaxes(0, 1))  # 转为Pygame Surface
  28. # 玩家类(保持原有)
  29. class Skier:
  30.     # ... 原有代码不变 ...
  31. # 障碍物类(保持原有)
  32. class Obstacle:
  33.     # ... 原有代码不变 ...
  34. # 修改后的游戏主循环
  35. def main():
  36.     skier = Skier()
  37.     obstacles = []
  38.     score = 0
  39.     font = pygame.font.Font(None, 36)
  40.     game_active = True
  41.     while True:
  42.         # 处理事件(保持原有)
  43.         for event in pygame.event.get():
  44.             if event.type == pygame.QUIT:
  45.                 video.release()  # 新增:释放视频资源
  46.                 pygame.quit()
  47.                 return
  48.         # 获取视频背景帧(新增部分)
  49.         bg_surface = get_video_frame()
  50.         if game_active:
  51.             # ... 原有游戏逻辑保持不变 ...
  52.             # 更新界面(修改背景部分)
  53.             screen.blit(bg_surface, (0, 0))  # 替换原来的bg
  54.             screen.blit(skier.image, skier.rect)
  55.             # ... 其余绘制逻辑保持不变 ...
  56.         else:
  57.             # 游戏结束界面(可以保持原有)
  58.             # ... 原有代码 ...
  59.         pygame.display.update()
  60.         clock.tick(60)
  61. if __name__ == "__main__":
  62.     main()
复制代码
View Code 
2.我让增加了一个接待页面。

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

  1. import pygame
  2. import cv2
  3. import numpy as np
  4. import random
  5. # 初始化游戏
  6. pygame.init()
  7. WIDTH, HEIGHT = 800, 600
  8. screen = pygame.display.set_mode((WIDTH, HEIGHT))
  9. pygame.display.set_caption("哈尔滨冰雪大冒险")
  10. clock = pygame.time.Clock()
  11. # 加载视频背景
  12. video = cv2.VideoCapture("harbin_winter.mp4")
  13. video_width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
  14. video_height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
  15. # 加载游戏素材
  16. player_img = pygame.image.load("skier.png")
  17. ice_img = pygame.image.load("ice_block.png")
  18. flag_img = pygame.image.load("finish_flag.png")
  19. # 视频帧转换函数
  20. def get_video_frame():
  21.     ret, frame = video.read()
  22.     if not ret:
  23.         video.set(cv2.CAP_PROP_POS_FRAMES, 0)
  24.         ret, frame = video.read()
  25.     frame = cv2.resize(frame, (WIDTH, HEIGHT))
  26.     frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
  27.     return pygame.surfarray.make_surface(frame.swapaxes(0, 1))
  28. # 玩家类
  29. class Skier:
  30.     def __init__(self):
  31.         self.image = pygame.transform.scale(player_img, (60, 60))
  32.         self.rect = self.image.get_rect(center=(WIDTH//2, HEIGHT-100))
  33.         self.speed = 8
  34.     def move(self, direction):
  35.         if direction == "left" and self.rect.left > 0:
  36.             self.rect.x -= self.speed
  37.         elif direction == "right" and self.rect.right < WIDTH:
  38.             self.rect.x += self.speed
  39. # 障碍物类
  40. class Obstacle:
  41.     def __init__(self):
  42.         self.type = random.choice(["ice", "flag"])
  43.         self.image = ice_img if self.type == "ice" else flag_img
  44.         self.image = pygame.transform.scale(self.image, (40, 40))
  45.         self.rect = self.image.get_rect(center=(random.randint(20, WIDTH-20), -20))
  46.         self.speed = 5
  47.     def move(self):
  48.         self.rect.y += self.speed
  49. def main():
  50.     skier = Skier()
  51.     obstacles = []
  52.     score = 0
  53.     font = pygame.font.Font(None, 36)
  54.     # 新增游戏状态变量
  55.     game_active = False
  56.     welcome_page = True  # 新增欢迎页面状态
  57.     while True:
  58.         # 获取视频背景帧
  59.         bg_surface = get_video_frame()
  60.         # 事件处理
  61.         for event in pygame.event.get():
  62.             if event.type == pygame.QUIT:
  63.                 video.release()
  64.                 pygame.quit()
  65.                 return
  66.         # 欢迎页面逻辑
  67.         if welcome_page:
  68.             screen.blit(bg_surface, (0, 0))
  69.             # 绘制标题文字
  70.             title_font = pygame.font.Font(None, 72)
  71.             title_text = title_font.render("哈尔滨冰雪大冒险", True, (255, 255, 255))
  72.             title_rect = title_text.get_rect(center=(WIDTH//2, HEIGHT//3))
  73.             screen.blit(title_text, title_rect)
  74.             # 绘制提示文字
  75.             tip_font = pygame.font.Font(None, 36)
  76.             tip_text = tip_font.render("按空格键开始游戏", True, (255, 255, 255))
  77.             tip_rect = tip_text.get_rect(center=(WIDTH//2, HEIGHT//2))
  78.             screen.blit(tip_text, tip_rect)
  79.             # 检测空格键
  80.             keys = pygame.key.get_pressed()
  81.             if keys[pygame.K_SPACE]:
  82.                 welcome_page = False
  83.                 game_active = True
  84.         # 游戏进行中
  85.         elif game_active:
  86.             # 玩家控制
  87.             keys = pygame.key.get_pressed()
  88.             if keys[pygame.K_LEFT]:
  89.                 skier.move("left")
  90.             if keys[pygame.K_RIGHT]:
  91.                 skier.move("right")
  92.             # 生成障碍物
  93.             if random.random() < 0.05:
  94.                 obstacles.append(Obstacle())
  95.             # 更新障碍物
  96.             for obstacle in obstacles[:]:
  97.                 obstacle.move()
  98.                 if skier.rect.colliderect(obstacle.rect):
  99.                     if obstacle.type == "ice":
  100.                         game_active = False
  101.                     else:
  102.                         score += 50
  103.                         obstacles.remove(obstacle)
  104.                 if obstacle.rect.top > HEIGHT:
  105.                     obstacles.remove(obstacle)
  106.                     if obstacle.type == "ice":
  107.                         score += 10
  108.             # 绘制游戏界面
  109.             screen.blit(bg_surface, (0, 0))
  110.             screen.blit(skier.image, skier.rect)
  111.             for obstacle in obstacles:
  112.                 screen.blit(obstacle.image, obstacle.rect)
  113.             # 显示得分
  114.             score_text = font.render(f"得分: {score}", True, (255, 255, 255))
  115.             screen.blit(score_text, (10, 10))
  116.         # 游戏结束界面
  117.         else:
  118.             screen.fill((0, 100, 255))
  119.             end_text = font.render(f"游戏结束!最终得分: {score}", True, (255, 255, 255))
  120.             screen.blit(end_text, (WIDTH//2-150, HEIGHT//2))
  121.             restart_text = font.render("按R重新开始", True, (255, 255, 255))
  122.             screen.blit(restart_text, (WIDTH//2-100, HEIGHT//2+50))
  123.             # 重新开始逻辑
  124.             keys = pygame.key.get_pressed()
  125.             if keys[pygame.K_r]:
  126.                 game_active = True
  127.                 score = 0
  128.                 obstacles = []
  129.                 skier = Skier()
  130.         pygame.display.update()
  131.         clock.tick(60)
  132. if __name__ == "__main__":
  133.     main()
复制代码
View Code的
3.我发现中文显示有题目。

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

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

deepseek也爽快完成了结果。
  1. import pygame
  2. import cv2
  3. import numpy as np
  4. import random
  5. # 初始化游戏
  6. pygame.init()
  7. WIDTH, HEIGHT = 800, 600
  8. screen = pygame.display.set_mode((WIDTH, HEIGHT))
  9. pygame.display.set_caption("哈尔滨冰雪大冒险")
  10. clock = pygame.time.Clock()
  11. # 加载视频背景
  12. video = cv2.VideoCapture("harbin_winter.mp4")  # 欢迎页面和结束页面的背景视频
  13. # 加载图片背景
  14. game_bg = pygame.image.load("snow_bg.jpg")  # 游戏界面的背景图片
  15. game_bg = pygame.transform.scale(game_bg, (WIDTH, HEIGHT))
  16. # 加载游戏素材
  17. player_img = pygame.image.load("skier.png")
  18. ice_img = pygame.image.load("ice_block.png")
  19. flag_img = pygame.image.load("finish_flag.png")
  20. # 加载背景音乐
  21. pygame.mixer.init()
  22. welcome_music = pygame.mixer.Sound("welcome_music.mp3")  # 欢迎页面音乐
  23. game_music = pygame.mixer.Sound("game_music.mp3")        # 游戏界面音乐
  24. end_music = pygame.mixer.Sound("end_music.mp3")          # 结束页面音乐
  25. # 设置音乐音量
  26. welcome_music.set_volume(0.5)
  27. game_music.set_volume(0.5)
  28. end_music.set_volume(0.5)
  29. # 视频帧转换函数
  30. def get_video_frame():
  31.     ret, frame = video.read()
  32.     if not ret:  # 如果视频播放完毕
  33.         video.set(cv2.CAP_PROP_POS_FRAMES, 0)  # 重置到开头
  34.         ret, frame = video.read()
  35.     frame = cv2.resize(frame, (WIDTH, HEIGHT))  # 调整尺寸
  36.     frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 颜色空间转换
  37.     return pygame.surfarray.make_surface(frame.swapaxes(0, 1))  # 转为Pygame Surface
  38. # 玩家类
  39. class Skier:
  40.     def __init__(self):
  41.         self.image = pygame.transform.scale(player_img, (60, 60))
  42.         self.rect = self.image.get_rect(center=(WIDTH//2, HEIGHT-100))
  43.         self.speed = 8
  44.     def move(self, direction):
  45.         if direction == "left" and self.rect.left > 0:
  46.             self.rect.x -= self.speed
  47.         elif direction == "right" and self.rect.right < WIDTH:
  48.             self.rect.x += self.speed
  49. # 障碍物类
  50. class Obstacle:
  51.     def __init__(self):
  52.         self.type = random.choice(["ice", "flag"])
  53.         self.image = ice_img if self.type == "ice" else flag_img
  54.         self.image = pygame.transform.scale(self.image, (40, 40))
  55.         self.rect = self.image.get_rect(center=(random.randint(20, WIDTH-20), -20))
  56.         self.speed = 5
  57.     def move(self):
  58.         self.rect.y += self.speed
  59. def main():
  60.     skier = Skier()
  61.     obstacles = []
  62.     score = 0
  63.     font = pygame.font.Font(None, 36)
  64.     # 游戏状态变量
  65.     game_active = False
  66.     welcome_page = True  # 初始为欢迎页面
  67.     # 当前播放的音乐
  68.     current_music = None
  69.     while True:
  70.         # 事件处理
  71.         for event in pygame.event.get():
  72.             if event.type == pygame.QUIT:
  73.                 video.release()
  74.                 pygame.quit()
  75.                 return
  76.             # 检测空格键按下事件
  77.             if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
  78.                 if welcome_page or not game_active:  # 在欢迎页面或结束页面按空格键
  79.                     welcome_page = False
  80.                     game_active = True
  81.                     score = 0
  82.                     obstacles = []
  83.                     skier = Skier()
  84.                     print("游戏开始!")
  85.         # 欢迎页面
  86.         if welcome_page:
  87.             if current_music != welcome_music:
  88.                 pygame.mixer.stop()  # 停止当前音乐
  89.                 welcome_music.play(-1)  # 循环播放欢迎音乐
  90.                 current_music = welcome_music
  91.             bg_surface = get_video_frame()  # 使用视频背景
  92.             screen.blit(bg_surface, (0, 0))
  93.             # 绘制标题文字
  94.             title_font = pygame.font.Font(None, 72)
  95.             title_text = title_font.render("哈尔滨冰雪大冒险", True, (255, 255, 255))
  96.             title_rect = title_text.get_rect(center=(WIDTH//2, HEIGHT//3))
  97.             screen.blit(title_text, title_rect)
  98.             # 绘制提示文字
  99.             tip_font = pygame.font.Font(None, 36)
  100.             tip_text = tip_font.render("按空格键开始游戏", True, (255, 255, 255))
  101.             tip_rect = tip_text.get_rect(center=(WIDTH//2, HEIGHT//2))
  102.             screen.blit(tip_text, tip_rect)
  103.         # 游戏进行中
  104.         elif game_active:
  105.             if current_music != game_music:
  106.                 pygame.mixer.stop()  # 停止当前音乐
  107.                 game_music.play(-1)  # 循环播放游戏音乐
  108.                 current_music = game_music
  109.             # 使用图片背景
  110.             screen.blit(game_bg, (0, 0))
  111.             # 玩家控制
  112.             keys = pygame.key.get_pressed()
  113.             if keys[pygame.K_LEFT]:
  114.                 skier.move("left")
  115.             if keys[pygame.K_RIGHT]:
  116.                 skier.move("right")
  117.             # 生成障碍物
  118.             if random.random() < 0.05:
  119.                 obstacles.append(Obstacle())
  120.             # 更新障碍物
  121.             for obstacle in obstacles[:]:
  122.                 obstacle.move()
  123.                 if skier.rect.colliderect(obstacle.rect):
  124.                     if obstacle.type == "ice":
  125.                         game_active = False
  126.                     else:
  127.                         score += 50
  128.                         obstacles.remove(obstacle)
  129.                 if obstacle.rect.top > HEIGHT:
  130.                     obstacles.remove(obstacle)
  131.                     if obstacle.type == "ice":
  132.                         score += 10
  133.             # 绘制玩家和障碍物
  134.             screen.blit(skier.image, skier.rect)
  135.             for obstacle in obstacles:
  136.                 screen.blit(obstacle.image, obstacle.rect)
  137.             # 显示得分
  138.             score_text = font.render(f"得分: {score}", True, (255, 255, 255))
  139.             screen.blit(score_text, (10, 10))
  140.         # 游戏结束界面
  141.         else:
  142.             if current_music != end_music:
  143.                 pygame.mixer.stop()  # 停止当前音乐
  144.                 end_music.play(-1)  # 循环播放结束音乐
  145.                 current_music = end_music
  146.             bg_surface = get_video_frame()  # 使用视频背景
  147.             screen.blit(bg_surface, (0, 0))
  148.             # 绘制结束文字
  149.             end_text = font.render(f"游戏结束!最终得分: {score}", True, (255, 255, 255))
  150.             screen.blit(end_text, (WIDTH//2-150, HEIGHT//2))
  151.             restart_text = font.render("按空格键重新开始", True, (255, 255, 255))
  152.             screen.blit(restart_text, (WIDTH//2-100, HEIGHT//2+50))
  153.         pygame.display.update()
  154.         clock.tick(60)
  155. if __name__ == "__main__":
  156.     main()
复制代码
View Code

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

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

  1. import pygame
  2. import cv2
  3. import numpy as np
  4. import random
  5. import math
  6. # 初始化游戏
  7. pygame.init()
  8. WIDTH, HEIGHT = 800, 600
  9. screen = pygame.display.set_mode((WIDTH, HEIGHT))
  10. pygame.display.set_caption("哈尔滨冰雪大冒险")
  11. clock = pygame.time.Clock()
  12. # 加载视频背景
  13. video = cv2.VideoCapture("harbin_winter.mp4")
  14. # 加载图片背景
  15. game_bg = pygame.image.load("snow_bg.jpg")
  16. game_bg = pygame.transform.scale(game_bg, (WIDTH, HEIGHT))
  17. # 加载游戏素材
  18. player_img = pygame.image.load("skier.png")
  19. ice_img = pygame.image.load("ice_block.png")
  20. flag_img = pygame.image.load("finish_flag.png")
  21. boost_img = pygame.image.load("boost.png")  # 加速道具
  22. shield_img = pygame.image.load("shield.png")  # 护盾道具
  23. magnet_img = pygame.image.load("magnet.png")  # 磁铁道具
  24. slow_img = pygame.image.load("slow.png")  # 减速道具
  25. # 加载背景音乐
  26. pygame.mixer.init()
  27. welcome_music = pygame.mixer.Sound("welcome_music.mp3")
  28. game_music = pygame.mixer.Sound("game_music.mp3")
  29. end_music = pygame.mixer.Sound("end_music.mp3")
  30. # 设置音乐音量
  31. welcome_music.set_volume(0.5)
  32. game_music.set_volume(0.5)
  33. end_music.set_volume(0.5)
  34. # 视频帧转换函数
  35. def get_video_frame():
  36.     ret, frame = video.read()
  37.     if not ret:
  38.         video.set(cv2.CAP_PROP_POS_FRAMES, 0)
  39.         ret, frame = video.read()
  40.     frame = cv2.resize(frame, (WIDTH, HEIGHT))
  41.     frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
  42.     return pygame.surfarray.make_surface(frame.swapaxes(0, 1))
  43. # 玩家类
  44. class Skier:
  45.     def __init__(self):
  46.         self.image = pygame.transform.scale(player_img, (60, 60))
  47.         self.rect = self.image.get_rect(center=(WIDTH//2, HEIGHT-100))
  48.         self.speed = 8
  49.         self.shield = False  # 护盾状态
  50.         self.magnet = False  # 磁铁状态
  51.         self.boost = False  # 加速状态
  52.         self.boost_timer = 0  # 加速剩余时间
  53.     def move(self, direction):
  54.         if direction == "left" and self.rect.left > 0:
  55.             self.rect.x -= self.speed
  56.         elif direction == "right" and self.rect.right < WIDTH:
  57.             self.rect.x += self.speed
  58.     def update(self):
  59.         if self.boost:
  60.             self.boost_timer -= 1
  61.             if self.boost_timer <= 0:
  62.                 self.boost = False
  63.                 self.speed = 8
  64. # 障碍物类
  65. class Obstacle:
  66.     def __init__(self):
  67.         self.type = random.choice(["ice", "flag", "boost", "shield", "magnet", "slow"])
  68.         self.image = self.get_image()
  69.         self.image = pygame.transform.scale(self.image, (40, 40))
  70.         self.rect = self.image.get_rect(center=(random.randint(20, WIDTH-20), -20))
  71.         self.speed = 5
  72.     def get_image(self):
  73.         if self.type == "ice":
  74.             return ice_img
  75.         elif self.type == "flag":
  76.             return flag_img
  77.         elif self.type == "boost":
  78.             return boost_img
  79.         elif self.type == "shield":
  80.             return shield_img
  81.         elif self.type == "magnet":
  82.             return magnet_img
  83.         elif self.type == "slow":
  84.             return slow_img
  85.     def move(self):
  86.         self.rect.y += self.speed
  87. def main():
  88.     skier = Skier()
  89.     obstacles = []
  90.     score = 0
  91.     font = pygame.font.Font(None, 36)
  92.     game_active = False
  93.     welcome_page = True
  94.     current_music = None
  95.     slow_timer = 0  # 减速剩余时间
  96.     while True:
  97.         # 事件处理
  98.         for event in pygame.event.get():
  99.             if event.type == pygame.QUIT:
  100.                 video.release()
  101.                 pygame.quit()
  102.                 return
  103.             if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
  104.                 if welcome_page or not game_active:
  105.                     welcome_page = False
  106.                     game_active = True
  107.                     score = 0
  108.                     obstacles = []
  109.                     skier = Skier()
  110.                     slow_timer = 0
  111.         # 欢迎页面
  112.         if welcome_page:
  113.             if current_music != welcome_music:
  114.                 pygame.mixer.stop()
  115.                 welcome_music.play(-1)
  116.                 current_music = welcome_music
  117.             bg_surface = get_video_frame()
  118.             screen.blit(bg_surface, (0, 0))
  119.             title_font = pygame.font.Font(None, 72)
  120.             title_text = title_font.render("哈尔滨冰雪大冒险", True, (255, 255, 255))
  121.             title_rect = title_text.get_rect(center=(WIDTH//2, HEIGHT//3))
  122.             screen.blit(title_text, title_rect)
  123.             tip_font = pygame.font.Font(None, 36)
  124.             tip_text = tip_font.render("按空格键开始游戏", True, (255, 255, 255))
  125.             tip_rect = tip_text.get_rect(center=(WIDTH//2, HEIGHT//2))
  126.             screen.blit(tip_text, tip_rect)
  127.         # 游戏进行中
  128.         elif game_active:
  129.             if current_music != game_music:
  130.                 pygame.mixer.stop()
  131.                 game_music.play(-1)
  132.                 current_music = game_music
  133.             screen.blit(game_bg, (0, 0))
  134.             # 玩家控制
  135.             keys = pygame.key.get_pressed()
  136.             if keys[pygame.K_LEFT]:
  137.                 skier.move("left")
  138.             if keys[pygame.K_RIGHT]:
  139.                 skier.move("right")
  140.             # 生成障碍物和道具
  141.             if random.random() < 0.05:
  142.                 obstacles.append(Obstacle())
  143.             # 更新障碍物和道具
  144.             for obstacle in obstacles[:]:
  145.                 obstacle.move()
  146.                 if skier.rect.colliderect(obstacle.rect):
  147.                     if obstacle.type == "ice":
  148.                         if not skier.shield:
  149.                             game_active = False
  150.                         else:
  151.                             skier.shield = False
  152.                     elif obstacle.type == "flag":
  153.                         score += 50
  154.                     elif obstacle.type == "boost":
  155.                         skier.boost = True
  156.                         skier.speed = 12
  157.                         skier.boost_timer = 300  # 加速持续5秒
  158.                     elif obstacle.type == "shield":
  159.                         skier.shield = True
  160.                     elif obstacle.type == "magnet":
  161.                         skier.magnet = True
  162.                     elif obstacle.type == "slow":
  163.                         slow_timer = 300  # 减速持续5秒
  164.                     obstacles.remove(obstacle)
  165.                 if obstacle.rect.top > HEIGHT:
  166.                     obstacles.remove(obstacle)
  167.                     if obstacle.type == "ice":
  168.                         score += 10
  169.             # 磁铁效果
  170.             if skier.magnet:
  171.                 for obstacle in obstacles[:]:
  172.                     if obstacle.type == "flag":
  173.                         dx = skier.rect.centerx - obstacle.rect.centerx
  174.                         dy = skier.rect.centery - obstacle.rect.centery
  175.                         distance = math.hypot(dx, dy)
  176.                         if distance < 200:  # 吸引范围
  177.                             obstacle.rect.x += dx * 0.1
  178.                             obstacle.rect.y += dy * 0.1
  179.             # 减速效果
  180.             if slow_timer > 0:
  181.                 slow_timer -= 1
  182.                 for obstacle in obstacles:
  183.                     obstacle.speed = 2
  184.             else:
  185.                 for obstacle in obstacles:
  186.                     obstacle.speed = 5
  187.             # 更新玩家状态
  188.             skier.update()
  189.             # 绘制玩家和障碍物
  190.             screen.blit(skier.image, skier.rect)
  191.             for obstacle in obstacles:
  192.                 screen.blit(obstacle.image, obstacle.rect)
  193.             # 显示得分和状态
  194.             score_text = font.render(f"得分: {score}", True, (255, 255, 255))
  195.             screen.blit(score_text, (10, 10))
  196.             if skier.shield:
  197.                 shield_text = font.render("护盾: 激活", True, (0, 255, 0))
  198.                 screen.blit(shield_text, (10, 50))
  199.             if skier.magnet:
  200.                 magnet_text = font.render("磁铁: 激活", True, (0, 255, 255))
  201.                 screen.blit(magnet_text, (10, 90))
  202.             if skier.boost:
  203.                 boost_text = font.render("加速: 激活", True, (255, 0, 0))
  204.                 screen.blit(boost_text, (10, 130))
  205.             if slow_timer > 0:
  206.                 slow_text = font.render("减速: 激活", True, (255, 255, 0))
  207.                 screen.blit(slow_text, (10, 170))
  208.         # 游戏结束界面
  209.         else:
  210.             if current_music != end_music:
  211.                 pygame.mixer.stop()
  212.                 end_music.play(-1)
  213.                 current_music = end_music
  214.             bg_surface = get_video_frame()
  215.             screen.blit(bg_surface, (0, 0))
  216.             end_text = font.render(f"游戏结束!最终得分: {score}", True, (255, 255, 255))
  217.             screen.blit(end_text, (WIDTH//2-150, HEIGHT//2))
  218.             restart_text = font.render("按空格键重新开始", True, (255, 255, 255))
  219.             screen.blit(restart_text, (WIDTH//2-100, HEIGHT//2+50))
  220.         pygame.display.update()
  221.         clock.tick(60)
  222. if __name__ == "__main__":
  223.     main()
复制代码
View Code总结:

deepseek的代码输出能力完全没有题目,对于需求的分析也很准确。给出的修改提示和建议也非常有用。我的结论,deepseek完全可以作为生产力工具给程序员提供更快的代码输出,也可以资助程序员学习新的知识点,通过项目一点点增加功能打磨代码。
最后给出我终极的代码(我没有加上更多元素)
https://github.com/edzjx/snows-deepseek


 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

何小豆儿在此

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表