大家好,我是全村的希望

今天的主题是让 chatGPT 来帮我们写一个打飞机的游戏

记得我刚学 Python 的时候,看的那本很经典的入门书《Python 编程:从入门到实践》,里面就有小项目就是教你编写一个打飞机的游戏

我那时候是对着书一个一个敲的代码,花了大半天的时间

现在有了 ChatGPT,让他来帮我们写一个,一起来看下效果怎么样

8b46214cbcae4a44690af3ac463180b4.png

代码如下:

import sys
import random
import pygame
from pygame.locals import QUIT, KEYDOWN, K_ESCAPE, K_SPACE

pygame.init()

FPS = 60  # 游戏帧率
fps_clock = pygame.time.Clock()

WINDOW_SIZE = (400, 600)  # 游戏窗口大小
WINDOW = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption('Space Shooter')

PLAYER_IMG = pygame.image.load('player_ship.png')  # 玩家飞船图片
ENEMY_IMG = pygame.image.load('enemy_ship.png')  # 敌人飞船图片
BULLET_IMG = pygame.image.load('bullet.png')  # 子弹图片

class Enemy:
    def __init__(self):
        self.x = random.randint(0, WINDOW_SIZE[0] - ENEMY_IMG.get_width())
        self.y = -ENEMY_IMG.get_height()
        self.speed = random.randint(2, 5)

    def update(self):
        self.y += self.speed  # 更新敌人位置

    def draw(self):
        WINDOW.blit(ENEMY_IMG, (self.x, self.y))  # 绘制敌人

class Bullet:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 10

    def update(self):
        self.y -= self.speed  # 更新子弹位置

    def draw(self):
        WINDOW.blit(BULLET_IMG, (self.x, self.y))  # 绘制子弹

def main():
    player_pos = [WINDOW_SIZE[0] // 2, WINDOW_SIZE[1] - 60]  # 玩家初始位置
    enemies = []  # 敌人列表
    bullets = []  # 子弹列表

    enemy_spawn_counter = 0  # 敌人生成计数器

    while True:
        WINDOW.fill((0, 0, 0))

        for event in pygame.event.get():
            if event.type == QUIT:  # 退出事件
                pygame.quit()
                sys.exit()

            if event.type == KEYDOWN:  # 按键事件
                if event.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()

                if event.key == K_SPACE:  # 空格键发射子弹
                    bullet_x = player_pos[0] + PLAYER_IMG.get_width() // 2 - BULLET_IMG.get_width() // 2
                    bullet_y = player_pos[1] - BULLET_IMG.get_height()
                    bullets.append(Bullet(bullet_x, bullet_y))

        keys = pygame.key.get_pressed()

        # 控制玩家移动
        if keys[pygame.K_LEFT]:
            player_pos[0] -= 5
        if keys[pygame.K_RIGHT]:
            player_pos[0] += 5
        if keys[pygame.K_UP]:
            player_pos[1] -= 5
        if keys[pygame.K_DOWN]:
            player_pos[1] += 5

        # 限制玩家飞船在窗口内移动

因为 chatGPT 的回答有长度限制,超过限制部分,直接和他说继续,他就能继续上面的回答

76ad14054ff124b3f1310e6530697a58.png
player_pos[0] = max(min(player_pos[0], WINDOW_SIZE[0] - PLAYER_IMG.get_width()), 0)
    player_pos[1] = max(min(player_pos[1], WINDOW_SIZE[1] - PLAYER_IMG.get_height()), 0)

    # 添加敌人
    enemy_spawn_counter += 1
    if enemy_spawn_counter >= 60:
        enemy_spawn_counter = 0
        enemies.append(Enemy())

    # 更新敌人
    for enemy in enemies:
        enemy.update()

    # 更新子弹
    for bullet in bullets:
        bullet.update()

    # 检查碰撞
    bullets[:] = [bullet for bullet in bullets if bullet.y > 0]  # 移除离开屏幕的子弹
    enemies[:] = [enemy for enemy in enemies if enemy.y < WINDOW_SIZE[1]]  # 移除离开屏幕的敌人

    for bullet in bullets:
        for enemy in enemies:
            if (
                bullet.x >= enemy.x
                and bullet.x <= enemy.x + ENEMY_IMG.get_width()
                and bullet.y >= enemy.y
                and bullet.y <= enemy.y + ENEMY_IMG.get_height()
            ):
                enemies.remove(enemy)
                bullets.remove(bullet)
                break

    # 绘制玩家飞船
    WINDOW.blit(PLAYER_IMG, player_pos)

    # 绘制敌人飞船
    for enemy in enemies:
        enemy.draw()

    # 绘制子弹
    for bullet in bullets:
        bullet.draw()

    pygame.display.update()  # 更新显示
    fps_clock.tick(FPS)  # 控制游戏帧率

这段代码是一个简单的打飞机游戏,添加了敌人的生成、移动和碰撞检测。当子弹与敌人碰撞时,敌人和子弹都会消失

两句话,整个代码已经生成了!!

可以看到代码注释还挺完整的,这里我故意对他做个了小小的测试,我故意没有放玩家飞船图片,子弹图片。然后将运行报错的提示发给chatGPT

2df048af053843e0282467c08a6a92bf.png

哈哈😄 他还挺不好意思的,然后告诉我要自己去提供图片,放到项目中

我随便在网上找了三个图片放进去,然后运行,来看下效果

哈哈哈😂效果还不错,图片我是随便找的,所以看着有点大...

可以看到ChatGPT是一个很强大的工具,很多行业将被重塑,也会出现很多新的行业职业,这是我们普通人最大的机会,希望每个人都能抓住。

而且ChatGPT的发展速度非常之快,最后的短板已经补上了,ChatGPT已经可以联网了

52b8ff1a4ccbeacdb4c86f95609bbe10.jpeg

你能想象这是过去一周发生的时候吗?!

我最近也一直在熟悉ChatGPT,还建了一个自己的圈子

抓住这次变革,让自己成为最早入局,最早驾驭ChatGPT那部分人

9a760508bacd850f5d83f6ef6022c52a.png

25fa92c15973b3261d380757bc8145ee.png

chatGPT 每个人都应该掌握的技能

ChatGPT插件系统正式开放,不用写代码,人人都是程序员

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐