gpt4 book ai didi

python - Pygame 和 Open AI 实现

转载 作者:行者123 更新时间:2023-12-04 15:38:23 27 4
gpt4 key购买 nike

我和我的同学决定尝试将 AI 代理应用到我们自己的游戏中。我的 friend 已经根据以前的项目完成了大部分代码,我想知道 PyGame 和 OpenAI 将如何协同工作。已尝试进行一些研究,但无法真正找到有关此特定主题的任何有用信息。有人说这很难实现,但有人说它有效。无论哪种方式,我都想知道您对这个项目的看法,以及如果是您,您会如何处理这个问题。

游戏非常基础(只有一个输入)和线性难度。基本上你只是试图躲避以屏幕为中心的角色(你)产生的绿色方 block 。绿色方 block 之间的空间相同,这意味着产卵率完全相同。这是代码,但它没有很好地清理或抛光,但我们的第一个示例:

    import pygame
import time

start_time = time.time()
pygame.init()

win_dim = 800
win = pygame.display.set_mode((win_dim, win_dim))


class Char:

def __init__(self, x, y, dim, score):

self.x = x
self.y = y

self.dim = dim
self.score = score

self.vsp = 0

def draw_char(self, color):

pygame.draw.rect(win, (color[0], color[1], color[2]), (self.x, self.y, self.dim, self.dim))

def jump(self):

keys = pygame.key.get_pressed()

if keys[pygame.K_SPACE] and self.y == 400:
self.vsp = 5

self.y -= self.vsp

if self.y < 400:
self.vsp -= 0.15
else:
self.y = 400


class Cactus:

def __init__(self, dim):

self.dim = dim

self.cac = []
self.speed = 0

def startcac(self, x):

if x % 100 == 0:

stop_time = time.time()
self.cac.append(801)


for i in range(0, len(self.cac)):

if self.speed < 4:
self.speed = 1 + x * 0.0005
else:
self.speed == 10

self.cac[i] -= self.speed
pygame.draw.rect(win, (0, 200, 0), (self.cac[i], 400, 20, 20))

try:
if self.cac[0] < 0:
self.cac.pop(0)
except IndexError:
pass


def collision(self, blob_cords):

if any(i in [int(i) for i in self.cac] for i in [i for i in range(380, 421)]) and blob_cords[1] >= 380:
self.cac = []

dist = 0

if len(self.cac) >= 2:
# print(self.cac[-1] - self.cac[-2], blob.x - 1)
for i in self.cac:
if i > 400 + 20:
dist = (i - 400 - 20) / (self.cac[-1] - self.cac[-2])

break

if dist <= 1:
print(dist)
print(self.speed / 4)




blob = Char(400, 400, 20, 0)
# "player"
cac = Cactus(20)
# obstacle

x = 1


if __name__ == '__main__':

game = True
while game:
pygame.time.delay(1)

for event in pygame.event.get():
if event.type == pygame.QUIT:
game = False

# Draws things on screen

win.fill((0, 0, 0))
blob.jump()
blob.draw_char([150, 0, 0])
cac.startcac(x)
x += 1
cac.collision((blob.x, blob.y))

# Updates movements and events

# Update display

pygame.display.update()

pygame.QUIT()

对于草率的代码真的很抱歉,如果甚至需要的话,但是非常感谢一些开始或改造项目的指导。

谢谢!

最佳答案

PyGame 和 OpenAI-Gym 可以很好地协同工作。我无法评论您发布的游戏代码,这完全取决于您。如果游戏成功,那就成功了。

但要使用 PyGame 创建 AI 代理,您需要先将您的环境转换为 Gym 环境。这可以通过遵循此 guide 来完成.

之后您可以使用 RL 库来实现您的代理。我的推荐是Stable-Baselines这是 openai-baselines 的一个很好的分支,更容易使用。

如果你想要一些东西作为你作业的引用,可以看看这个小 project我刚才做过。我创建了 BlockDude 游戏的再现并将其转换为 OpenAI Gym。然后我在这个 colab 中使用了 stable-baselines笔记本。

关于python - Pygame 和 Open AI 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58974034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com