写在前面:
最近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[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库,怎么引用素材
  - 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[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也爽快完成了结果。
  - 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增加了加速道具,护盾道具,磁铁道具,减速道具。
  - 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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |