我们尝试使用ChatGPT在行空板上制作一款小游戏(做什么由ChatGPT产生),简介,背景Logo图片,Python代码均由ChatGPT生成。我只做文件名等细节调整,不修改代码本身逻辑。由ChatGPT生成的部分用<>文字提示
首先我们生成一个游戏背景图片( 我发现ChatGPT在生成图片时对中文的理解不是很正确,所以这里使用了英文
<原计划Prompt :设计一个四人竞速游戏广告,动画风格,活泼可爱行,大色块,图片尺寸为320x240>
<实际使用Prompt : design a 4 players race game's ad, cartoon style, cute, 320x240>
代码部分经过了几轮迭代,这里只保留prompt和最后生成的代码
<Prompt : 用pygame设计一个最多四个人参与,每人只有一个按钮的游戏>
这时ChatGPT生成了一个圆点赛跑的游戏,但是有两个问题,
1 行空板的屏幕比较小只有320x240像素
2 因为圆点都堆在一起了,不好看,于是
<Prompt : 修改 width = 240 height = 320 让四个玩家分别位于屏幕四个角>
在修改后的代码中,游戏窗口的尺寸变为了 240x320,四个玩家分别位于屏幕的四个角落。每个玩家的位置由 x 和 y 坐标来确定,并且玩家的圆形半径也相应减小。每个玩家的得分显示在他们的圆形上方。
<Prompt : 每当按键按下玩家的园就像中心移动一个像素,先移动到中心者为胜>
在修改后的代码中,添加了一个 get_move_direction 方法,用于判断圆形在 x 轴和 y 轴上的移动方向。每当按键被按下时,圆形根据移动方向移动一个像素。当圆形的中心移动到屏幕中心时,该玩家将被声明为获胜者,并显示相应的文本。
但是此时还有问题,当第一名到达终点后其他圆点仍然可以移动(这个逻辑没有错,比如赛跑就是大家都要到达终点)但是因为这个游戏没有计时机制所以当第一名到达时游戏就结束了)
<Prompt : 有人移动到中心后其他人不可再移动,弹出对话框显示胜利者,点击按钮重启游戏>
在修改后的代码中,添加了一个 can_move 属性来跟踪每个玩家是否可以移动。只有在 can_move 为 True 的情况下,玩家才能根据按键移动。当有玩家的圆形移动到屏幕中心后,该玩家的 can_move 被设为 False,其他玩家将无法再移动。此时,游戏将弹出一个对话框显示胜利者,并提供一个按钮来重启游戏。
这时的问题是游戏重启时所有圆点没有回到初始位置
<Prompt : 重启游戏时,所有圆点都回到初始位置>
在修改后的代码中,给每个玩家添加了 start_x 和 start_y 属性,用于保存初始位置的坐标。在 reset 方法中,我将玩家的位置重置为初始位置,并将 can_move 属性设置为 True,以允许他们移动。
这样,当游戏重新开始时,所有玩家的圆点都会回到初始位置
<Prompt : 在游戏首次开始前加载一张图片作为logo>
在上述代码中,添加了几行用于加载和绘制logo图像的代码。这里需要把"logo.png"替换为实际的图像文件名,并确保该图像文件与Python脚本文件位于同一目录下。
此代码将在游戏开始前加载并显示logo图像。一旦游戏开始,logo图像将被覆盖,并显示圆点玩家。
最后给这个游戏配上一个文字简介
<Prompt : 给这个游戏写一个简介>
<以下文字由ChatGPT生成>
游戏名称:圆点追逐
简介:
《圆点追逐》是一款简单而有趣的多人游戏,玩家需要通过操作圆点来赢得比赛。每个玩家控制一个彩色的圆点,目标是尽快将自己的圆点移动到屏幕中央的目标位置。第一个成功到达目标位置的玩家将获得胜利。
游戏规则:
1. 游戏中有四名玩家,每个玩家控制一个圆点,颜色分别为红色、绿色、蓝色和黄色。
2. 圆点初始位置分别位于屏幕的四个角落。
3. 玩家可以使用指定的按键来控制圆点的移动。按下相应的按键,圆点将朝着屏幕中央移动。
4. 圆点的移动速度相同,且沿直线移动。
5. 当圆点到达屏幕中央的目标位置时,该玩家获胜并游戏结束。
6. 游戏结束后,将弹出一个消息框显示获胜玩家的信息,并自动重置游戏。
游戏特点:
1. 简单易懂的游戏规则,适合所有年龄段的玩家。
2. 多人游戏模式,最多支持四名玩家同时参与。
3. 独特的玩法,要在快速移动的情况下准确控制圆点到达目标位置,增加了游戏的挑战性。
4. 界面简洁美观,绚丽的圆点和动态效果提供了愉快的游戏体验。
《圆点追逐》是一款简单而又富有竞争性的游戏,玩家可以与朋友们一起玩耍,比拼谁能最先将自己的圆点移动到目标位置。快来挑战你的反应速度和操作技巧,在这个有趣的游戏世界中取得胜利吧!
<结束>
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
import time
import pygame
import random
import tkinter as tk
from tkinter import messagebox
Board().begin()
import pygame
import random
import tkinter as tk
from tkinter import messagebox
# 游戏初始化
pygame.init()
width = 240
height = 320
screen = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()
# 颜色定义
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
# 玩家类
class Player:
def __init__(self, color, button, x, y):
self.color = color
self.score = 0
self.button = button
self.start_x = x
self.start_y = y
self.x = x
self.y = y
self.can_move = True
def draw(self):
pygame.draw.circle(screen, self.color, (self.x, self.y), 40)
def update(self):
if self.can_move:
self.x += self.get_move_direction(self.x, width // 2)
self.y += self.get_move_direction(self.y, height // 2)
self.score += 1
if self.x == width // 2 and self.y == height // 2:
self.can_move = False
show_winner(self)
def get_move_direction(self, current_pos, target_pos):
if current_pos < target_pos:
return 1
elif current_pos > target_pos:
return -1
else:
return 0
def reset(self):
self.score = 0
self.x = self.start_x
self.y = self.start_y
self.can_move = True
def show_winner(player):
root = tk.Tk()
root.withdraw()
messagebox.showinfo("游戏结束", f"玩家 {players.index(player) + 1} 获胜!")
restart_game()
def restart_game():
for player in players:
player.reset()
# 创建玩家对象
players = [
Player(RED, pygame.K_a, 40, 40),
Player(GREEN, pygame.K_s, width - 40, 40),
Player(BLUE, pygame.K_k, 40, height - 40),
Player(YELLOW, pygame.K_l, width - 40, height - 40)
]
# 加载logo图像
logo_image = pygame.image.load("Race4.png") # 替换为你实际的图像文件名
logo_rect = logo_image.get_rect()
logo_rect.center = (width // 2, height // 2)
running = True
while running:
# 绘制logo
screen.blit(logo_image, logo_rect)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
for player in players:
if pygame.key.get_pressed()[player.button]:
player.update()
for player in players:
player.draw()
score_text = pygame.font.SysFont(None, 20).render(str(player.score), True, player.color)
screen.blit(score_text, (player.x - 10, player.y - 30))
pygame.display.flip()
clock.tick(60)
pygame.quit()
伦**2024.03.19
666
许培享2024.01.07
学习学习