0

我正在尝试制作那个 flappybirdAI 教程,但我无法控制我的工作,因为我无法从中获得预览。

我正在使用本教程: https ://www.youtube.com/watch?v=ps55secj7iU&list= PLzMcBGfZo4-lwGZWXz5Qgta_YNX3_vLS2&index=2(这也是我在 16:52 时的实际状态,他在哪里打开预览)

这是存储库: https ://github.com/techwithtim/NEAT-Flappy-Bird

它已完成并且可以正常工作,但我不知道预览是如何开始的。我已经尝试将我的新培训文件添加到该存储库中(无法从中获得评论)并且还尝试使用我自己的 package.json 创建一个新的(评论不起作用)

在我发现的每个教程中,package.json 似乎都是必要的,但在那个存储库中没有“.json”。

那么有人可以帮我从那个正在运行的文件中预览一下吗?(我可以顺便运行它而不会出现错误。)

那是我的实际代码:

import pygame
import neat
import time
import os
import random

WIN_WIDTH = 500
WIN_HEIGHT = 800


#was ist wirklich ein pivotpunkt muss definiert werden. wsl nach prozenten der Laenge der Linie

BIRD_IMGS = [pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "bird1.png"))), pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "bird2.png"))), pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "bird3.png")))]  #scale ist für die Vergrößerung des Vogelbildes, load laed ein Bild in die Liste
PIPE_IMG = pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "pipe.png")))
BASE_IMG = pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "base.png")))
BG_IMG = pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "bg.png")))

class Bird:
    IMGS = BIRD_IMGS
    MAX_ROTATION = 25 #max rotationswinkel
    ROT_VEL = 20 #rotation per frame
    ANIMATION_TIME = 5

    def __init__(self, x, y): # initialdaten des Vogels
        self.x = x #startposition Vogel
        self.y = y
        self.tilt = 0 #wie viel ist das Bild gekippt
        self.tick_count = 0
        self.vel = 0 #geschwindigkeit Bild
        self.height = self.y
        self.img_count = 0 #welches Vogelbild wird gerade gezeigt? Für die Animation wichtig
        self.img = self.IMGS[0] #Bild bird1.png von oben

    def jump(self):
        self.vel = -10.5 #negativ, weil der Ursprung der Koordinatien links oben ist
        self.tick_count = 0 #wann das letzte mal gesprungen? wird zurückgesetzt um das physische Verhalten danach auszurichten (vllt wie lange ist der Einstieg her)
        self.height = self.y #von wo aus springt der Vogel (vllt wo Einstiegspunkt)    

    def move(self): #hier wird jeden Frame gesagt, dass der Vogel bewegt werden soll
        self.tick_count += 1

        d = self.vel*self.tick_count + 1.5*self.tick_count**2 #macht den Parabelflug bzw die Geschwindigkeitsbewegung die das verursacht

        if d >= 16: #Geschwindigkeitsgrenze
            d = 16

        if d < 0: #Geschwindigkeit über 0, addiere Geschwindigkeit nach oben
            d -= 2  
        
        self.y = self.y + d #berechnet in welche Richtung der Vogel Geschwindigkeit hat

        if d < 0 or self.y < self.height + 50:
            if self.tilt < self.MAX_ROTATION:
                self.tilt = self.MAX_ROTATION #limitert die Rotation des Bildes
        else:
            if self.tilt > -90:
                self.tilt -= self.ROT_VEL
        
    def draw(self, win):
        self.img_count += 1

        if self.img_count < self.ANIMATION_TIME: #Animation_Time ist die Anzahl an Frames solange ein Bild bleiben soll. damit ein gleichmäßiges Flattern entsteht, vervielfacht sich diese Zeit ich gleichen Abständen. Beim Fallen schlägt der Vogel mit keinen Flügeln mehr.
            self.img = self.IMGS[0]
        elif self.img_count < self.ANIMATION_TIME*2:
            self.img = self.IMGS[1]
        elif self.img_count < self.ANIMATION_TIME*3:
            self.img = self.IMGS[2]
        elif self.img_count < self.ANIMATION_TIME*4:
            self.img = self.IMGS[1]
        elif self.img_count == self.ANIMATION_TIME*4 +1:
            self.img = self.IMGS[0]
            self.img_count = 0

        if self.tilt <= -80:
            self.img = self.IMGS[1]
            self.img_count = self.ANIMATION_TIME*2 #dadurch flattert der Vogel beim Sturzflug nicht

        rotated_image = pygame.transform.rotate(self.img, self.tilt)
        new_rect = rotated_image.get_rect(center=self.img.get_rect(topleft = (self.x, self.y)).center) #rotiert das Bild von der Mitte aus und nicht von links oben
        win.blit(rotated_image, new_rect.topleft) #Bild wird in das win(dow) geladen. blit ist wsl das schnelle kopieren und verschieben von Speicherinhalten

    def get_mask(self): #Kollision mit Objekten
        return pygame.mask.from_surface(self.img)


def draw_window(win, bird): #zeichnet das Window
    win.blit(BG_IMG, (0, 0)) #blit ist die Zeichenfunktion
    bird.draw(win)
    pygame.display.update() #refresht den Display


def main(): #main loop vom Spiel
    bird = Bird(200, 200)
    win = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT)) #erstellt das Window

    run = True
    while run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False

        draw_window(win, bird)

    pygame.quit()
    quit()

main()

这是包含所有内容的界面: 文件 mytry.py 是我在整个过程中唯一更改的内容。它显示的问题也在 flappy_bird.py 中显示为问题,但它仍然可以在那里工作。

4

1 回答 1

0

对我来说,预览会在工作区启动后自动打开。

您能否尝试单击Ports 5900,6080状态栏(右下角)中的 ?它会在左侧面板中打开一个端口列表,您可以在其中单击端口 6080 旁边显示的世界地球,从而打开预览。请查看您的浏览器是否阻止弹出窗口。

于 2021-09-09T19:11:05.477 回答