AI写代码系列(4):怎样用AI写雷电小游戏

记得上学时,经常喜欢玩射击游戏:雷电。这是个很经典的小游戏,要自己写代码实现还是很难的,对于一个新手来说,恐怕更是毫无头绪。

但是如果有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()
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值