当前位置: 首页 > news >正文

驭码CodeRider 2.0 产品体验:在VSCode安装并创建一个雷电小游戏

驭码CodeRider 2.0 产品体验:在VSCode安装并创建一个雷电小游戏

CodeRider介绍

驭码CodeRider 是极狐GitLab 推出的基于生成式人工智能技术的新一代软件生产工具,为开发者提供自然语言生成代码、代码补全、代码调优纠错、单元测试生成、代码解释以及智能技术问答等功能。CodeRider 与 GitLab 深度融合,为企业提供软件开发全生命周期(SDLC)的支持,涵盖项目快速上手、企业文档库/代码仓智能问答、议题管理、合并请求智能辅助、代码智能评审、安全扫描智能解析、流水线管理等功能。CodeRider手册:CodeRider 产品介绍 | 极狐GitLab

在VSCode里安装注册CodeRider

安装CodeRider插件

首先在VSCode的插件里查找CodeRider

找到后,点击“Install”进行安装。

安装的时候弹出trust按钮,确认即可。

到极狐注册账户

到极狐注册账户,在VSCode的CodeRider里登录极狐账户。

极狐注册地址:

Sign up · JiHu GitLab

注意,极狐是免费使用90天

JihuLab.com 免费试用 90 天

注册 SaaS 即为您开通极狐GitLab AI 产品驭码CodeRider试用权限,
时长 90 天,点击了解驭码CodeRider。

极狐项目模版选择

注册jihulab极狐后,在最后的项目模版里,有spring hugo astro等多种选择,应该用哪个呢?

最终我选择了hugo 。因为它简单容易上手!

以下是AI告诉的选择建议:


模版选择建议

需求类型推荐模板理由
构建后端服务或微服务Spring强大的企业级功能,适合复杂业务逻辑
简单快速搭建博客或文档Hugo构建速度快,生态完善,操作简单
需要现代前端交互和性能优化Astro支持多框架,页面性能好,前端灵活

模版总结

  • Spring:适合后端开发,尤其是 Java 技术栈的企业级应用。
  • Hugo:适合快速生成静态内容网站,操作简单,性能优秀。
  • Astro:适合现代前端开发,支持多种框架,性能优化好。

根据项目需求和技术栈选择合适的模板。如果项目需要前后端分离,可以结合 Spring(后端)和 Hugo/Astro(前端)使用。如果有更多具体需求,可以进一步讨论!

极狐里设置ssh key(暂时非必须)

进入项目,提示要设置ssh key才能上传

SSH Keys

SSH keys allow you to establish a secure connection between your computer and GitLab. SSH fingerprints verify that the client is connecting to the correct host. Check the current instance configuration.

极狐里设置Access tokens

  1. User Settings
  2. Access tokens

Personal access tokens

创建新key Add a personal access token

给所有权限:api, read_api, read_user, create_runner, manage_runner, k8s_proxy, self_rotate, read_repository, write_repository, read_registry, write_registry, read_virtual_registry, write_virtual_registry, ai_features

Your new personal access token

xxx

Feed token

Your feed token authenticates you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar. It is visible in those feed URLs. It cannot be used to access any other data.

Incoming email token

Your incoming email token authenticates you when you create a new issue by email, and is included in your personal project-specific email addresses. It cannot be used to access any other data.

回到CodeRider设置

安装好CodeRider后,在插件里把它点出来,就会提醒登录。登录可以选择两种:

1、点击打开网站认证

CodeRider is requesting access to your account on jihulab.com.

2、使用个人token认证

token就是前面在极狐里设置的个人Access tokens

CodeRider 登录成功

登录成功后显示

尝试修改成中文(失败)

到配置里面,找到Coderider › Commit Message: Language ,先改成中文:

很遗憾,设为chinese后,还是英文.....

也许是因为我的vscode是英文的缘故吧。

CodeRider 使用技巧

在描述需求时,可通过输入 “@” 获取内容,或者 “#” 索引文件夹、文件。

  • @问题:检查当前项目中的代码或配置错误,以便于 Loom 修复。
  • @终端:执行终端操作。
  • @Git 提交:选择 Git 提交记录来完成操作。
  • #文件夹或文件:索引文件夹或文件内容作为上下文。

自然语言生成代码

您可以在 IDE 中使用自然语言描述您的编程需求,CodeRider 将根据需求指令生成代码建议。 在编辑器中生成代码时,CodeRider 将参考当前代码文件、整个项目仓相关代码内容(增强模式下)自动为您生成代码。您可以使用快捷键逐片段或整个模块接纳生成代码,也可以废弃当前代码建议。(快捷键及模式设置参考“代码智能实时补全”。) 在对话框中生成代码时,您可直接输入自然语言需求,CodeRider 将生成对应代码建议。特别地,当您“@代码仓知识库”并输入需求时,CodeRider 将针对指定的代码仓内容结合需求指令生成代码。您可以点击“在光标处插入”直接将生成代码插入到光标停留位置。

实践让CodeRider 帮助写个雷电小游戏

prompt直接写:帮我写一个类似雷电的游戏

效果尚可。

输出结果里面除了代码,还写了游戏架构,也就是游戏状态机,这挺不错!

游戏状态机的图:

graph TD
    A[游戏开始] --> B[主菜单]
    B -->|开始游戏| C[关卡进行中]
    C -->|完成关卡| D[关卡结束]
    D -->|继续| C
    D -->|返回菜单| B
    C -->|游戏结束| E[结算画面]
    E --> B
 

代码可以直接copy到编辑文件的图标处,挺方便。但是写入文件会弹出对话框让自己起文件名,这样自由度更高,但是需要手工去copy代码到合适的位置,这一点与其它AI辅助软件(Trae、auto-coder)比起来感觉繁琐。

后面又增加了一些功能,导致程序存在闪退问题,让CodeRider解决

prompt:这是雷电游戏的源代码,但是存在闪退问题,请解决

CodeRider 给出了修改的代码。

需要自己动手把代码粘过去,我不知道应该放在哪里,替换哪部分,于是我问

prompt:请给我完整的新代码,以方便我修改文件

于是它给出了全部的代码,将代码保存好,确实解决了闪退问题。

当然由于CodeRider 大部分时候还是喜欢只输出需要修改的代码,所以后面大部分时候是自己手工一点点把CodeRider 的代码copy过去的。

后面又增加了霰弹枪武器和自动发射,最终效果如图:

最终雷电游戏的python代码如下:

import pygame
import random
import sys
import math# 初始化pygame
pygame.init()# 屏幕设置
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 640
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("雷电游戏 Leidian Game")# 颜色定义
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
YELLOW = (255, 255, 0)
PURPLE = (200, 0, 200)
CYAN = (0, 255, 255)
ORANGE = (255, 165, 0)# 玩家飞机类
class Player(pygame.sprite.Sprite):def __init__(self):super().__init__()self.image = pygame.Surface((50, 40))self.image.fill(BLUE)self.rect = self.image.get_rect()self.rect.centerx = SCREEN_WIDTH // 2self.rect.bottom = SCREEN_HEIGHT - 10self.speed = 8self.health = 100def update(self):keys = pygame.key.get_pressed()if keys[pygame.K_LEFT] and self.rect.left > 0:self.rect.x -= self.speedif keys[pygame.K_RIGHT] and self.rect.right < SCREEN_WIDTH:self.rect.x += self.speedif keys[pygame.K_UP] and self.rect.top > 0:self.rect.y -= self.speedif keys[pygame.K_DOWN] and self.rect.bottom < SCREEN_HEIGHT:self.rect.y += self.speed# 子弹类
# class Bullet(pygame.sprite.Sprite):
#     def __init__(self, x, y, width=5, height=10, damage=1):
#         super().__init__()
#         self.image = pygame.Surface((width, height))
#         self.image.fill(WHITE)
#         self.rect = self.image.get_rect()
#         self.rect.centerx = x
#         self.rect.bottom = y
#         self.speed = 10
#         self.damage = damage#     def update(self):
#         self.rect.y -= self.speed
#         if self.rect.bottom < 0:
#             self.kill()
# 修改子弹类以支持横向移动
class Bullet(pygame.sprite.Sprite):def __init__(self, x, y, width=5, height=10, damage=1):super().__init__()self.image = pygame.Surface((width, height))self.image.fill(WHITE)  # 默认颜色,具体颜色由武器系统设置self.rect = self.image.get_rect()self.rect.centerx = xself.rect.bottom = yself.speed_y = -10  # 默认向上速度self.speed_x = 0    # 初始无横向移动self.damage = damagedef update(self):self.rect.y += self.speed_yself.rect.x += self.speed_xif (self.rect.bottom < 0 or self.rect.top > SCREEN_HEIGHT orself.rect.right < 0 or self.rect.left > SCREEN_WIDTH):self.kill()# 敌机类
class Enemy(pygame.sprite.Sprite):def __init__(self, enemy_type="normal"):super().__init__()self.enemy_type = enemy_typeif enemy_type == "normal":self.image = pygame.Surface((30, 30))self.image.fill(RED)self.health = 1self.speedy = random.randrange(2, 4)elif enemy_type == "fast":self.image = pygame.Surface((24, 24))self.image.fill(YELLOW)self.health = 1self.speedy = random.randrange(4, 7)elif enemy_type == "tank":self.image = pygame.Surface((40, 38))self.image.fill((100, 100, 255))self.health = 4self.speedy = random.randrange(1, 3)self.rect = self.image.get_rect()self.rect.x = random.randrange(SCREEN_WIDTH - self.rect.width)self.rect.y = random.randrange(-100, -40)def update(self):self.rect.y += self.speedyif self.rect.top > SCREEN_HEIGHT:self.rect.x = random.randrange(SCREEN_WIDTH - self.rect.width)self.rect.y = random.randrange(-100, -40)if self.enemy_type == "normal":self.speedy = random.randrange(2, 4)elif self.enemy_type == "fast":self.speedy = random.randrange(4, 7)elif self.enemy_type == "tank":self.speedy = random.randrange(1, 3)def take_damage(self, amount):self.health -= amountif self.health <= 0:self.kill()return Truereturn False# Boss敌机类
class BossEnemy(pygame.sprite.Sprite):def __init__(self, tier):super().__init__()self.enemy_type = "boss"self.image = pygame.Surface((80, 80))self.image.fill(PURPLE)self.rect = self.image.get_rect()self.rect.centerx = SCREEN_WIDTH // 2self.rect.y = -100self.speed = 1# self.health = tier * 100# self.max_health = tier * 100# self.attack_pattern = "move_down"# self.attack_timer = 0# self.tier = tierself.tier = max(1, tier)  # 确保tier至少为1self.health = self.tier * 100self.max_health = self.tier * 100  # 确保max_health永远不会为0self.attack_pattern = "move_down"self.attack_timer = 0def update(self):self._movement_pattern()self._attack_pattern()def _movement_pattern(self):if self.attack_pattern == "move_down":self.rect.y += self.speedif self.rect.top >= 100:self.attack_pattern = "left_right"elif self.attack_pattern == "left_right":self.rect.x += self.speed * (1 if self.rect.centerx < SCREEN_WIDTH // 2 else -1)if self.rect.left <= 0 or self.rect.right >= SCREEN_WIDTH:self.speed *= -1def _attack_pattern(self):self.attack_timer += 1if self.attack_timer % (60 - self.tier * 5) == 0:self._shoot_bullets()def _shoot_bullets(self):for angle in range(-30, 31, 15):bullet = EnemyBullet(self.rect.centerx, self.rect.bottom, speed=3, angle=math.radians(angle), damage=10)all_sprites.add(bullet)enemy_bullets.add(bullet)def take_damage(self, amount):self.health -= amountif self.health <= 0:self.kill()power_up = PowerUp(self.rect.centerx, self.rect.centery)all_sprites.add(power_up)power_ups.add(power_up)return Truereturn False# 敌机子弹类
class EnemyBullet(pygame.sprite.Sprite):def __init__(self, x, y, speed=3, angle=0, damage=10):super().__init__()self.image = pygame.Surface((8, 16))self.image.fill((255, 128, 0))self.rect = self.image.get_rect()self.rect.centerx = xself.rect.top = yself.speed = speedself.angle = angleself.damage = damageself.vx = speed * math.sin(angle)self.vy = speed * math.cos(angle)def update(self):self.rect.x += int(self.vx)self.rect.y += int(self.vy)if (self.rect.top > SCREEN_HEIGHT or self.rect.bottom < 0 or self.rect.right < 0 or self.rect.left > SCREEN_WIDTH):self.kill()# 激光类
class LaserBeam(pygame.sprite.Sprite):def __init__(self, x, y, width, height, damage=30):super().__init__()# 激光高度直接设为屏幕高度self.image = pygame.Surface((width, SCREEN_HEIGHT-4), pygame.SRCALPHA)# 创建渐变效果for i in range(width):alpha = 255 - int(i * 100 / width)pygame.draw.line(self.image, (0, 255, 255, alpha), (i, 0), (i, SCREEN_HEIGHT), 1)self.rect = self.image.get_rect()self.rect.x = x - width // 2  # 居中激光self.rect.y = 0  # 从屏幕顶部开始self.damage = damageself.lifetime = 30  # 激光持续时间def update(self):self.lifetime -= 1if self.lifetime <= 0:self.kill()def draw(self, surface):# 自定义绘制方法确保透明效果正确surface.blit(self.image, self.rect)# 道具类
class PowerUp(pygame.sprite.Sprite):def __init__(self, x, y, kind="weapon"):super().__init__()self.image = pygame.Surface((24, 24))self.image.fill(GREEN)self.rect = self.image.get_rect()self.rect.center = (x, y)self.kind = kindself.speed = 3def update(self):self.rect.y += self.speedif self.rect.top > SCREEN_HEIGHT:self.kill()# 武器系统
class WeaponSystem:def __init__(self, player):self.player = playerself.current_weapon = "single"self.weapon_cooldown = {"single": 10, "double": 15, "laser": 60,"shotgun": 20  # 霰弹枪冷却时间}self.cooldown = 0self.active_lasers = pygame.sprite.Group()self.auto_fire = False  # 新增自动射击模式标志# 武器颜色映射self.weapon_colors = {"single": WHITE,"double": YELLOW,"laser": (0, 255, 255),  # 青色"shotgun": ORANGE  # 霰弹枪子弹颜色}def update(self):if self.cooldown > 0:self.cooldown -= 1# 自动射击模式下持续发射子弹if self.auto_fire and self.cooldown <= 0:self._fire_weapon()# 新增方法处理武器发射逻辑def _fire_weapon(self):if self.current_weapon == "single":self._shoot_single()elif self.current_weapon == "double":self._shoot_double()elif self.current_weapon == "laser":self._shoot_laser()elif self.current_weapon == "shotgun":self._shoot_shotgun()self.cooldown = self.weapon_cooldown[self.current_weapon]def shoot(self):# 只在非自动模式下或手动触发时发射if not self.auto_fire and self.cooldown <= 0:self._fire_weapon()def _shoot_single(self):bullet = Bullet(self.player.rect.centerx, self.player.rect.top, 5, 20, damage=10)all_sprites.add(bullet)bullets.add(bullet)def _shoot_double(self):bullet_left = Bullet(self.player.rect.left + 10, self.player.rect.top, 5, 15, damage=8)bullet_right = Bullet(self.player.rect.right - 10, self.player.rect.top, 5, 15, damage=8)all_sprites.add(bullet_left, bullet_right)bullets.add(bullet_left, bullet_right)def _shoot_laser(self):# 创建贯穿全屏的激光# laser = LaserBeam(self.player.rect.centerx, 0, 8, damage=50)  # 更宽更强大的激光laser = LaserBeam(self.player.rect.centerx - 2, 0, 4, SCREEN_HEIGHT)all_sprites.add(laser)lasers.add(laser)# 新增霰弹枪射击方法def _shoot_shotgun(self):# 发射5发散弹,中间3发有20度扩散角度spread_angle = 20  # 扩散角度bullets_count = 5middle_bullet = bullets_count // 2for i in range(bullets_count):# 计算每发散弹的角度偏移angle_offset = (i - middle_bullet) * (spread_angle / middle_bullet)radian = math.radians(angle_offset)# 创建子弹并设置初始位置bullet = Bullet(x=self.player.rect.centerx,y=self.player.rect.top,width=8,  # 霰弹枪子弹稍大height=15,damage=6  # 单发伤害略低)bullet.image.fill(self.weapon_colors["shotgun"])  # 使用橙色# 设置子弹速度方向bullet.speed_x = 3 * math.sin(radian)  # 水平速度分量bullet.speed_y = -10  # 固定向上速度all_sprites.add(bullet)bullets.add(bullet)# 关卡系统
class LevelSystem:def __init__(self):self.current_level = 1self.enemy_count = 8self.enemy_speed_range = (1, 4)self.spawn_rate = 60self.timer = 0self.enemies_defeated = 0self.enemies_required = 20self.total_levels = 10  # 总关卡数def update(self):self.timer += 1if self.timer == 1 or (self.timer % self.spawn_rate == 0 and len(enemies) < self.enemy_count):self._spawn_enemy()if self._is_level_complete():self._next_level()def _spawn_enemy(self):enemy_types = ["normal", "fast", "tank"]weights = [0.6, 0.3, 0.1]enemy_type = random.choices(enemy_types, weights=weights)[0]enemy = Enemy(enemy_type)enemy.rect.x = random.randrange(SCREEN_WIDTH - enemy.rect.width)enemy.rect.y = random.randrange(-100, -40)all_sprites.add(enemy)enemies.add(enemy)def enemy_defeated(self, enemy_type):self.enemies_defeated += 1def _is_level_complete(self):return self.enemies_defeated >= self.enemies_requireddef is_game_complete(self):return self.current_level >= self.total_levelsdef _next_level(self):if self.is_game_complete():returnself.current_level += 1self.enemies_defeated = 0self.enemies_required = 20 + self.current_level * 5self.enemy_count = 8 + self.current_level * 2self.enemy_speed_range = (1, min(4 + self.current_level // 2, 8))self.spawn_rate = max(30, 60 - self.current_level * 5)# if self.current_level % 5 == 0:if self.current_level % 2 == 0:self._spawn_boss()self.enemies_required = 1def _spawn_boss(self):boss = BossEnemy(self.current_level // 5)all_sprites.add(boss)bosses.add(boss)enemies.add(boss)# 计分系统
class ScoreSystem:def __init__(self):self.score = 0self.multiplier = 1self.combo = 0self.combo_timer = 0self.high_score = 0def add_score(self, enemy_type):base_scores = {"normal": 100,"fast": 150,"tank": 200,"boss": 1000}self.combo += 1self.combo_timer = 180if self.combo >= 20:self.multiplier = 4elif self.combo >= 10:self.multiplier = 2else:self.multiplier = 1# self.score += base_scores[enemy_type] * self.multiplierself.score += base_scores.get(enemy_type, 0) * self.multiplier  # 使用get方法提供默认值以防万一def update(self):if self.combo_timer > 0:self.combo_timer -= 1else:self.combo = 0self.multiplier = 1def draw(self, screen):font = pygame.font.SysFont(None, 36)score_text = font.render(f"分数Sco: {self.score}", True, WHITE)screen.blit(score_text, (SCREEN_WIDTH - 150, 10))if self.multiplier > 1:combo_text = font.render(f"x{self.multiplier} {self.combo}连击连击", True, YELLOW)screen.blit(combo_text, (SCREEN_WIDTH - 150, 50))def draw_health_bar(surface, player, x=10, y=50, width=120, height=18):pygame.draw.rect(surface, WHITE, (x, y, width, height), 2)health_width = int(width * max(player.health, 0) / 100)color = GREEN if player.health > 50 else YELLOW if player.health > 20 else REDpygame.draw.rect(surface, color, (x+2, y+2, health_width-4, height-4))font = pygame.font.SysFont(None, 20)text = font.render(f'HP {player.health}', True, WHITE)surface.blit(text, (x + width//2 - 25, y+1))def draw_boss_health_bar(surface, boss):if not bosses:returnwidth = SCREEN_WIDTH - 40height = 15x = 20y = 20# 防止max_health为0的情况max_hp = max(1, boss.max_health)  # 确保分母不会为0current_hp = max(0, boss.health)  # 确保血量不会为负# 计算血条宽度health_width = int(width * current_hp / max_hp)# 绘制血条背景和外框pygame.draw.rect(surface, (50, 50, 50), (x, y, width, height))  # 背景pygame.draw.rect(surface, WHITE, (x, y, width, height), 2)      # 外框# 绘制当前血量color = (255, 0, 0)  # 红色血条pygame.draw.rect(surface, color, (x+2, y+2, health_width-4, height-4))# 绘制Boss血量和等级信息font = pygame.font.SysFont(None, 20)text = font.render(f'Boss HP {current_hp}/{max_hp} (LV:{boss.tier})', True, WHITE)surface.blit(text, (x + width//2 - text.get_width()//2, y-20))def draw_game_over(screen, win=False):screen.fill((0, 0, 0))font_large = pygame.font.SysFont(None, 72)font_small = pygame.font.SysFont(None, 36)title_text = font_large.render("游戏胜利Victory" if win else "游戏结束Game Over", True, GREEN if win else RED)score_text = font_small.render(f"最终分数Score: {score_system.score}", True, WHITE)restart_text = font_small.render("按空格键重新开始Press Space to Restart", True, WHITE)screen.blit(title_text, (SCREEN_WIDTH//2 - title_text.get_width()//2, SCREEN_HEIGHT//2 - 100))screen.blit(score_text, (SCREEN_WIDTH//2 - score_text.get_width()//2, SCREEN_HEIGHT//2))screen.blit(restart_text, (SCREEN_WIDTH//2 - restart_text.get_width()//2, SCREEN_HEIGHT//2 + 50))# 添加重置游戏函数
def reset_game():# 清空所有精灵组all_sprites.empty()enemies.empty()bullets.empty()lasers.empty()enemy_bullets.empty()power_ups.empty()bosses.empty()# 重置玩家global playerplayer = Player()all_sprites.add(player)# 重置系统global weapon_system, level_system, score_systemweapon_system = WeaponSystem(player)level_system = LevelSystem()score_system = ScoreSystem()# 生成初始敌人for i in range(5):level_system._spawn_enemy()# 重置游戏状态return "playing"# 创建精灵组
all_sprites = pygame.sprite.Group()
enemies = pygame.sprite.Group()
bullets = pygame.sprite.Group()
lasers = pygame.sprite.Group()
enemy_bullets = pygame.sprite.Group()
power_ups = pygame.sprite.Group()
bosses = pygame.sprite.Group()# 创建玩家和系统
player = Player()
all_sprites.add(player)
weapon_system = WeaponSystem(player)
level_system = LevelSystem()
score_system = ScoreSystem()# 初始敌机
for i in range(5):level_system._spawn_enemy()# 游戏主循环
clock = pygame.time.Clock()
running = True
game_state = "playing"  # playing, game_over, victory, pausewhile running:clock.tick(60)# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE and game_state == "playing":weapon_system.shoot()elif event.key == pygame.K_0:  # 按4切换自动射击模式weapon_system.auto_fire = not weapon_system.auto_fireelif event.key == pygame.K_1 and game_state == "playing":weapon_system.current_weapon = "single"elif event.key == pygame.K_2 and game_state == "playing":weapon_system.current_weapon = "double"elif event.key == pygame.K_3 and game_state == "playing":weapon_system.current_weapon = "laser"if event.key == pygame.K_4:  # 按4切换霰弹枪weapon_system.current_weapon = "shotgun"elif event.key == pygame.K_p and game_state == "playing":game_state = "pause"elif event.key == pygame.K_p and game_state == "pause":game_state = "playing"elif event.key == pygame.K_SPACE and game_state == "victory":game_state = reset_game()elif event.key == pygame.K_SPACE and game_state == "game_over":game_state = playing# 按住空格键持续射击if game_state == "playing" and pygame.key.get_pressed()[pygame.K_SPACE]:weapon_system.shoot()if game_state == "playing":# 更新系统all_sprites.update()weapon_system.update()level_system.update()score_system.update()# 检查游戏胜利条件if level_system.is_game_complete() and not bosses :# if level_system.is_game_complete() and not bosses and len(enemies) == 0:game_state = "victory"# 碰撞检测hits = pygame.sprite.groupcollide(bullets, enemies, True, False)for bullet, enemy_list in hits.items():for enemy in enemy_list:if enemy.take_damage(bullet.damage):score_system.add_score(enemy.enemy_type)level_system.enemy_defeated(enemy.enemy_type)hits = pygame.sprite.groupcollide(lasers, enemies, False, False)for laser, enemy_list in hits.items():for enemy in enemy_list:if enemy.take_damage(laser.damage):score_system.add_score(enemy.enemy_type)level_system.enemy_defeated(enemy.enemy_type)if pygame.sprite.spritecollide(player, enemies, True):player.health -= 1if player.health <= 0:game_state = "game_over"if pygame.sprite.spritecollide(player, enemy_bullets, True):player.health -= 5if player.health <= 0:game_state = "game_over"hits = pygame.sprite.spritecollide(player, power_ups, True)for powerup in hits:if weapon_system.current_weapon == "single":weapon_system.current_weapon = "double"elif weapon_system.current_weapon == "double":weapon_system.current_weapon = "laser"# 渲染screen.fill((0, 0, 0))all_sprites.draw(screen)score_system.draw(screen)draw_health_bar(screen, player)if bosses:draw_boss_health_bar(screen, bosses.sprites()[0])font = pygame.font.SysFont(None, 28)weapon_text = font.render(f"武器Weapon: {'普通' if weapon_system.current_weapon == 'single' else '双发' if weapon_system.current_weapon == 'double' else '激光'}", True, CYAN)screen.blit(weapon_text, (10, SCREEN_HEIGHT - 40))level_text = font.render(f"关卡Ka:{level_system.current_level}/{level_system.total_levels}", True, CYAN)screen.blit(level_text, (10, SCREEN_HEIGHT - 70))# 显示调试信息debug_font = pygame.font.SysFont(None, 20)debug_info = f"FPS: {int(clock.get_fps())}"debug_text = debug_font.render(debug_info, True, (200, 200, 200))screen.blit(debug_text, (10, 10))elif game_state == "pause":screen.fill((0, 0, 0))font = pygame.font.SysFont(None, 72)pause_text = font.render("游戏暂停Pause", True, WHITE)continue_text = pygame.font.SysFont(None, 36).render("按P键继续游戏", True, WHITE)screen.blit(pause_text, (SCREEN_WIDTH//2 - pause_text.get_width()//2, SCREEN_HEIGHT//2 - 50))screen.blit(continue_text, (SCREEN_WIDTH//2 - continue_text.get_width()//2, SCREEN_HEIGHT//2 + 30))elif game_state == "game_over":draw_game_over(screen, win=False)elif game_state == "victory":draw_game_over(screen, win=True)pygame.display.flip()pygame.quit()
sys.exit()

欢迎大家来玩哈!把这段代码存到本地,比如leidian.py,然后pip install pygame,最后就可以python leidian.py启动啦! 

雷电游戏操作提示:

把上面这段代码存到本地,比如leidian.py,然后pip install pygame,最后就可以python leidian.py启动啦! 

操作按键

1-4选择武器

按空格发射子弹

0自动发射子弹

alt-f4退出

alt+p 暂停

失败或过关后,按空格键重新开始!

总结

CodeRider 是非常不错的AI辅助编程工作,本次实践中,能够完成一个小项目的创建,个人感觉跟Roo Code、Cline等一线AI编程软件处于差不多的水平。

缺点方面,生成代码的自动保存、写入功能没有找到......不知道是没有,还是我操作不熟练的缘故。

相关文章:

  • 【Web】腾讯云 COS 静态网站部署与自定义域名 HTTPS 全流程
  • IIS 实现 HTTPS:OpenSSL证书生成与配置完整指南
  • DeepSeek-R1与Claude 4.0 Sonnet:开源与闭源大模型的商业生态博弈
  • Electron-vite【实战】MD 编辑器 -- 大纲区(含自动生成大纲,大纲缩进,折叠大纲,滚动同步高亮大纲,点击大纲滚动等)
  • PyCharm Python IDE
  • 【沉浸式解决问题】Idea运行Junit测试中scanner无法获取控制台的输入内容
  • 创建型设计模式
  • 25-Oracle 23ai DBMS_SEARCH — Ubiquitous Search(无处不在的搜索)
  • 软件架构期末复习
  • WinForm中实现Adobe PDF Reader实现旋转PDF功能
  • 从零打造前沿Web聊天组件:从设计到交互
  • PHP性能提升方案
  • 深入理解 Go 中的字节序(Endianness)检测代码
  • Qt::QueuedConnection详解
  • 前端框架vue3的变化之处
  • 2025 年 MQTT 技术趋势:驱动 AI 与物联网未来发展的关键动力
  • 基于YOLOv12的电力高空作业安全检测:为电力作业“保驾护航”,告别安全隐患!
  • Oracle 的 FORCE_LOGGING 特性
  • HTTP 响应状态码
  • DevSecOps实践:CI/CD流水线集成动态安全测试(DAST)工具
  • 财经大学网站建设/seo自然优化排名技巧
  • 顺义的网站建设公司/爬虫搜索引擎
  • dw做网站背景音乐/微信seo
  • 网站制作的管理/全球十大搜索引擎入口
  • 资料网站怎么做/最打动人心的广告语
  • 网站系统建设思想如何写/企业如何进行宣传和推广