大家好,我是全村的希望
今天的主题是让 chatGPT 来帮我们写一个打飞机的游戏
记得我刚学 Python 的时候,看的那本很经典的入门书《Python 编程:从入门到实践》,里面就有小项目就是教你编写一个打飞机的游戏
我那时候是对着书一个一个敲的代码,花了大半天的时间
现在有了 ChatGPT,让他来帮我们写一个,一起来看下效果怎么样
代码如下:
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 的回答有长度限制,超过限制部分,直接和他说继续,他就能继续上面的回答
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
哈哈 他还挺不好意思的,然后告诉我要自己去提供图片,放到项目中
我随便在网上找了三个图片放进去,然后运行,来看下效果
哈哈哈效果还不错,图片我是随便找的,所以看着有点大...
可以看到ChatGPT是一个很强大的工具,很多行业将被重塑,也会出现很多新的行业职业,这是我们普通人最大的机会,希望每个人都能抓住。
而且ChatGPT的发展速度非常之快,最后的短板已经补上了,ChatGPT已经可以联网了
你能想象这是过去一周发生的时候吗?!
我最近也一直在熟悉ChatGPT,还建了一个自己的圈子
抓住这次变革,让自己成为最早入局,最早驾驭ChatGPT那部分人
chatGPT 每个人都应该掌握的技能
ChatGPT插件系统正式开放,不用写代码,人人都是程序员