首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么不是BytesIO?

什么不是BytesIO?
EN

Stack Overflow用户
提问于 2022-04-23 19:58:43
回答 1查看 55关注 0票数 0

我对这个网站和游戏有点陌生,我希望能得到一些帮助。所以我做了这个空间入侵者克隆,大约180行对,当我在Pycharm上运行它时,它工作得很好。因此,我决定尝试进一步测试它,并尝试将其转换为一个.exe文件,这正是我的问题开始的地方。每次我尝试运行.exe时,都会出现以下消息

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "main.py", line 62, in <module>
    font = pygame.font.Font('freesansbold.ttf',32)
TypeError: expected str, bytes or os.PathLike object, not BytesIO 

我使用了freeCodeCamp.org.org的模板并应用了我自己的习惯,下面是一个您感兴趣的视频:https://www.youtube.com/watch?v=FfWpgLFMI7w&t=7041s

下面也是代码:

代码语言:javascript
运行
复制
import math
import random

import pygame
from pygame import mixer

# Initialize the pygame
pygame.init()

# Create the screen
screen = pygame.display.set_mode((600, 400))



# Background Sound

mixer.music.load('Here he comes.mp3')
mixer.music.play(-1)



# Title and icon
pygame.display.set_caption("Defender of The Blue")
icon = pygame.image.load("Submarine of Vengeance.png")
pygame.display.set_icon(icon)

# Player
playerImg = pygame.image.load('Protagonist.png')
playerX = 250
playerY = 300
playerX_change = 0

# Enemy
enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
num_of_enemies = 6

for i in range(num_of_enemies):
    enemyImg.append(pygame.image.load('Antagonist.png'))
    enemyX.append(random.randint(0, 500))
    enemyY.append(random.randint(10, 100))
    enemyX_change.append(0.1)
    enemyY_change.append(20)

# Energy Blast

# Ready - You can't see the bullet state on the screen
# Fire - The blast is currently moving
energyblastImg = pygame.image.load('energy-blasts.png')
energyblastX = 0
energyblastY = 300
energyblastX_change = 0
energyblastY_change = 1
energyblast_state = "ready"

# score

score_value = 0
font = pygame.font.Font('freesansbold.ttf',32)
textX = 10
textY = 10
game_over_font = pygame.font.Font('freesansbold.ttf',50)
# Game Over Text

def show_score(x,y):
    score = font.render("Score :" + str(score_value),True, (250,100,0))
    screen.blit(score, (x, y))

def game_over_text():
    game_over_text = game_over_font.render("GAME OVER",True, (250,0,0))
    screen.blit(game_over_text, (150, 100))


def player(x, y):
    screen.blit(playerImg, (x, y))


def enemy(x, y, i):
    screen.blit(enemyImg[i], (x, y))


def fire_energyblast(x, y):
    global energyblast_state
    energyblast_state = "fire"
    screen.blit(energyblastImg, (x + -1, y + 10))


def isCollison(enemyX, enemyY, energyblastX, energyblastY):
    distance = math.sqrt((math.pow(enemyX - energyblastX, 2)) + (math.pow(enemyY - energyblastY, 2)))
    if distance < 27:
        return True
    else:
        return False


# Game Loop
running = True
while running:

    # RGB = Red, Green, Blue
    screen.fill((0, 0, 128))

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

        # if keystroke is pressed check whether its right or left
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -1
            if event.key == pygame.K_RIGHT:
                playerX_change = 1
            if event.key == pygame.K_SPACE:
                if energyblast_state is "ready":
                    energyblast_sound = mixer.Sound('Energy Blast.mp3')
                    energyblast_sound.play()
                    # Get the current x coordinate of the submarine
                    energyblastX = playerX
                    fire_energyblast(energyblastX, energyblastY)

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0

    # 5 = 5 + -0.1 -> 5 = 5 - 0.1
    # 5 = 5 + 0.1

    # Checking for boundaries of submarine so it doesn't go out of bounds
    playerX += playerX_change

    if playerX <= 0:
        playerX = 0
    elif playerX >= 500:
        playerX = 500

    # enemy movement
    for i in range(num_of_enemies):
        # Game Over
        if enemyY[i] > 272:
            for j in range(num_of_enemies):
                enemyY[j] = 2000
            game_over_text()
            break
        enemyX[i] += enemyX_change[i]
        if enemyX[i] <= 0:
            enemyX_change[i] = 1
            enemyY[i] += enemyY_change[i]
        elif enemyX[i] >= 500:
            enemyX_change[i] = -1
            enemyY[i] += enemyY_change[i]

        # Collision
        collison = isCollison(enemyX[i], enemyY[i], energyblastX, energyblastY)
        if collison:
            explosion_Sound = mixer.Sound('Explode.mp3')
            explosion_Sound.play()
            energyblastY = 300
            energyblast_state = "ready"
            score_value += 50
            enemyX[i] = random.randint(0, 500)
            enemyY[i] = random.randint(10, 100)

        enemy(enemyX[i],enemyY[i], i)

    # energy blast movement
    if energyblastY <= 0:
        energyblastY = 300
        energyblast_state = "ready"

    if energyblast_state is "fire":
        fire_energyblast(energyblastX, energyblastY)
        energyblastY -= energyblastY_change


    player(playerX, playerY)
    show_score(textX,textY)
    pygame.display.update()

我不太清楚BytesIO是什么。就像有东西用了两次,然后被取消了吗?我怎么才能改变这个?

EN

回答 1

Stack Overflow用户

发布于 2022-04-24 00:06:42

您是否确定"freesansbold.ttf“已下载,并位于您试图运行的代码所在的目录中,如果由于任何原因无法这样做,您应该能够替换

代码语言:javascript
运行
复制
font = pygame.font.Font('freesansbold.ttf',32)

使用

代码语言:javascript
运行
复制
font = pygame.font.Font('(file path)freesansbold.ttf',32)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71983191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档