记得上学时,经常喜欢玩射击游戏:雷电。这是个很经典的小游戏,要自己写代码实现还是很难的,对于一个新手来说,恐怕更是毫无头绪。
但是如果有AI加持,会不会很难呢?答案是并不难。先看效果:
下面来体验一下具体步骤吧:
1. 输入提示词:写个射击游戏python代码
很快,GPT就可以返回结果:
2. 调试代码,发现没有图片和声音,那也没关系,让GPT加上:写个射击游戏python代码,要有游戏声音和游戏图片,如果中枪会死掉。GPT给出了代码,但是同时也需要我们自己补充
在调试中间报了一个小错误:
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
WARNING: Failed to write executable - trying to use .deleteme logic
ERROR: Could not install packages due to an OSError: [WinError 2] 系统找不到指定的文件。: 'C:\\Python311\\Scripts\\normalizer.exe' -> 'C:\\Python311\\Scripts\\normalizer.exe.deleteme'
经过GPT提示,可能是运行 pip install pygame时,没有权限导致的。
针对这种情况,可以通过以管理员身份运行来解决,命令如下:pip install pygame --user
3.补充游戏图片和声音,素材很多,网上可以搜到,不过拓云智能里也有(https://console.tuoyunai.com)
4. 继续尝试,发现还有问题,碰到敌人不会死,因此还要再加上要求:写个射击游戏python代码,要有游戏声音和游戏图片,如果中枪会死掉,子弹撞到敌人会爆炸,被敌人撞到会死。
终于代码写好了(感兴趣可以尝试亲自尝试):
#
# write by 拓云智能,一个便宜又好用的AI平台。登录网址:https://console.tuoyunai.com
#
import pygame
import sys
import random
import time # 导入时间模块
# 初始化Pygame
pygame.init()
# 设置游戏窗口的尺寸和标题
window_width = 800
window_height = 600
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("射击游戏")
# 加载背景图片
background_img = pygame.image.load("background.jpg")
background_img = pygame.transform.scale(background_img, (window_width, window_height))
# 加载游戏图片
player_img = pygame.image.load("player.png")
player_img = pygame.transform.scale(player_img, (50, 50))
enemy_img = pygame.image.load("enemy.png")
enemy_img = pygame.transform.scale(enemy_img, (50, 50))
bullet_img = pygame.image.load("bullet.png")
bullet_img = pygame.transform.scale(bullet_img, (10, 20))
# 加载爆炸图片
explosion_img = pygame.image.load("explosion.png")
explosion_img = pygame.transform.scale(explosion_img, (50, 50))
# 加载游戏声音
pygame.mixer.init()
shoot_sound = pygame.mixer.Sound("shoot.wav")
hit_sound = pygame.mixer.Sound("hit.wav")
# 玩家
player_x = window_width // 2 - 25
player_y = window_height - 70
player_speed = 3
# 子弹
bullets = []
# 敌人
enemies = []
# 得分
score = 0
# 玩家生命值
player_lives = 300
# 创建玩家矩形对象
player_rect = player_img.get_rect()
player_rect.topleft = (player_x, player_y)
# 创建敌人
def create_enemy():
enemy_x = random.randint(0, window_width - 50)
enemy_y = 50 # 将初始y坐标设置为负数
return {"x": enemy_x, "y": enemy_y}
# 游戏主循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= player_speed
if keys[pygame.K_RIGHT] and player_x < window_width - 50:
player_x += player_speed
# 发射子弹
if keys[pygame.K_SPACE]:
bullet_x = player_x + 20
bullet_y = player_y
bullets.append({"x": bullet_x, "y": bullet_y})
shoot_sound.play()
# 移动子弹
for bullet in bullets:
bullet["y"] -= 10
# 移动敌人
for enemy in enemies:
enemy["y"] += 5
# 创建新敌人
if random.randint(0, 100) < 5:
enemies.append(create_enemy())
# 移除超出边界的子弹和敌人
bullets = [bullet for bullet in bullets if 0 < bullet["y"] < window_height]
enemies = [enemy for enemy in enemies if 0 < enemy["y"] < window_height]
# 检测碰撞
for bullet in bullets:
for enemy in enemies:
if (
bullet["x"] < enemy["x"] + 50
and bullet["x"] + 10 > enemy["x"]
and bullet["y"] < enemy["y"] + 50
and bullet["y"] + 20 > enemy["y"]
):
bullets.remove(bullet)
enemies.remove(enemy)
score += 1
hit_sound.play()
# 绘制爆炸效果
window.blit(explosion_img, (enemy["x"], enemy["y"]))
time.sleep(0.003) # 添加延迟
# 检测是否与敌人相撞
for enemy in enemies:
if (
player_rect.colliderect(pygame.Rect(enemy["x"], enemy["y"], 50, 50))
and player_lives > 0
):
player_lives -= 1
enemies.remove(enemy)
hit_sound.play()
elif player_lives == 0:
running = False
# 清空窗口并绘制背景图片
window.blit(background_img, (0, 0))
# 绘制玩家
window.blit(player_img, (player_x, player_y))
# 绘制子弹
for bullet in bullets:
window.blit(bullet_img, (bullet["x"], bullet["y"]))
# 绘制敌人
for enemy in enemies:
window.blit(enemy_img, (enemy["x"], enemy["y"]))
# 显示得分
font = pygame.font.Font(None, 36)
text = font.render(f"得分: {score}", True, (255, 255, 255))
window.blit(text, (10, 10))
pygame.display.update()
# 游戏结束
pygame.quit()
sys.exit()