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

两句话,ChatGPT帮我写一个打飞机的游戏

大家好,我是全村的希望

今天的主题是让 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插件系统正式开放,不用写代码,人人都是程序员

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [论文解析] Cones: Concept Neurons in Diffusion Models for Customized Generation
  • formily实践经验和踩坑
  • 论文题目<mark>
  • Linux基础操作 常用命令 Centos
  • async 与 await
  • 深入理解【正则化的L1-lasso回归和L2-岭回归】以及相关代码复现
  • Linux内核设计与实现第四章学习笔记
  • <c++> 四、模板初阶
  • 两种编程思维
  • 图书馆管理系统(Java编写,思路及源代码)
  • 算法练习:动态规划(最长公共子串问题)
  • 【lm401】解决malloc动态申请内存时内存不足的问题
  • 【Python】ChineseCalendar包简介
  • 前端八股——JS高级学习
  • 【CSS系列】第二章 · CSS选择器
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • C++类中的特殊成员函数
  • Java IO学习笔记一
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • ReactNativeweexDeviceOne对比
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • ubuntu 下nginx安装 并支持https协议
  • 计算机在识别图像时“看到”了什么?
  • 讲清楚之javascript作用域
  • 聊聊directory traversal attack
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 每天10道Java面试题,跟我走,offer有!
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • gunicorn工作原理
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • "无招胜有招"nbsp;史上最全的互…
  • # 透过事物看本质的能力怎么培养?
  • #Linux(make工具和makefile文件以及makefile语法)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (十一)c52学习之旅-动态数码管
  • (四)进入MySQL 【事务】
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .NET 5种线程安全集合
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 常见的偏门问题
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net开发日常笔记(持续更新)
  • .NET轻量级ORM组件Dapper葵花宝典
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法