m0_56343782 2023-05-02 20:44 采纳率: 42.9%
浏览 21
已结题

在python编写小游戏时遇到TypeError。

我在使用pgzrun进行游戏编程的时候,遇到了一个问题。
由于我的编程技术不太好,所以不知道如何解决。

游戏名字:
颜色选择小游戏

游戏玩法:
玩家需要在每个回合规定时间内点击7*7方格内所给出的一个随机颜色。如果点击正确则加1分,如果点击错误则游戏结束。玩家要尽可能的得到高分。

遇到问题:

Traceback (most recent call last):
  File "C:\Users\jiang\PycharmProjects\pythonProject12\venv\lib\site-packages\pgzero\game.py", line 217, in run
    self.mainloop()
  File "C:\Users\jiang\PycharmProjects\pythonProject12\venv\lib\site-packages\pgzero\game.py", line 256, in mainloop
    draw()
  File "C:/Users/jiang/PycharmProjects/pythonProject12/main1.py", line 100, in draw
    color=Actor(colors1[random.randint(0,48)])
  File "C:\Users\jiang\PycharmProjects\pythonProject12\venv\lib\site-packages\pgzero\actor.py", line 88, in __init__
    self.image = image
  File "C:\Users\jiang\PycharmProjects\pythonProject12\venv\lib\site-packages\pgzero\actor.py", line 103, in __setattr__
    return object.__setattr__(self, attr, value)
  File "C:\Users\jiang\PycharmProjects\pythonProject12\venv\lib\site-packages\pgzero\actor.py", line 218, in image
    self._orig_surf = self._surf = loaders.images.load(image)
  File "C:\Users\jiang\PycharmProjects\pythonProject12\venv\lib\site-packages\pgzero\loaders.py", line 121, in load
    p = os.path.join(self._root(), name)
  File "C:\Users\jiang\AppData\Local\Programs\Python\Python38\lib\ntpath.py", line 117, in join
    genericpath._check_arg_types('join', path, *paths)
  File "C:\Users\jiang\AppData\Local\Programs\Python\Python38\lib\genericpath.py", line 152, in _check_arg_types
    raise TypeError(f'{funcname}() argument must be str, bytes, or '
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'Actor'

游戏代码:

import pgzrun
import random
import threading
import time

# 定义窗口大小常量
WIDTH = 600
HEIGHT = 700

# 定义变量
temp = 0
time_ = 8.00
ans = None
score = 0
yy=0
_time_=8.00
# 定义角色
start = Actor('start')
start.x = WIDTH / 2
start.y = 500

restart = Actor('restart')
restart.x = WIDTH / 2
restart.y = HEIGHT / 2 - 200

colors = []
colors1 = []

# 创建颜色角色
for i in range(20):
    colors.append(Actor(str(i)))

# 初始化游戏状态
state = 1

# 创建颜色列表
for i in range(49):
    colors1.append(colors[random.randint(0, 19)])

# 随机选择一个颜色
color = colors1[random.randint(0, 48)]

# 定义 tick 函数
def tick():
    global time_, state
    if state == 2:
        time_ -= 0.01

# 定义 init 函数
def init():
    global state, start, restart, colors, color, colors1, temp, time_, ans, score,yy

    # 重置角色位置
    start.x = WIDTH / 2
    start.y = 500

    restart.x = WIDTH / 2
    restart.y = HEIGHT / 2 - 200

    # 清空颜色列表
    colors = []
    colors1 = []

    # 创建颜色角色
    for i in range(20):
        colors.append(Actor(str(i)))

    # 初始化游戏状态
    state = 1

    # 创建颜色列表
    for i in range(49):
        colors1.append(colors[random.randint(0, 19)])

    # 随机选择一个颜色
    color = colors1[random.randint(0, 48)]
    score = 0

# 定义 draw 函数
def draw():
    global state, start, restart, colors, color, colors1, temp, time_, ans, score,yy,_time_

    if state == 1:
        screen.blit('background', (0, 0))
        start.draw()

    elif state == 2:
        screen.blit('runningbackground', (0, 0))
        screen.draw.text(str(round(time_, 2)), (WIDTH / 2, 50), fontsize=48, color='purple')
        if yy==0:
            yy=1
            for b in range(7):
                for c in range(7):
                    colors1[temp]=Actor('c'+str(random.randint(1, 20)))
                    colors1[temp].x = 60 + b * 80
                    colors1[temp].y = 160 + c * 80
                    colors1[temp].draw()

                    temp = (temp + 1) % 49
            color=Actor(colors1[random.randint(0,48)])  #  这里是出错的地方
            color.x,color.y=WIDTH/2+50,50
            if _time_>0.75:
                _time_-=0.25
        color.draw()
        for b in range(7):
            for c in range(7):
                colors1[temp].draw()
                temp = (temp + 1) % 49


    else:
        restart.draw()
        screen.draw.text(str(round(score, 2)), (WIDTH / 2-100, 50), fontsize=48, color='purple')
# 定义 on_mouse_down 函数
def on_mouse_down(pos):
    global state, start, restart, colors, color, colors1, temp, time_, ans, score,yy
    yy=1
    if state == 1:
        if start.collidepoint(pos):
            state = 2
            yy=0
    elif state == 3:
        if restart.collidepoint(pos):
            init()
            state = 2

    elif state == 2:
        for i in range(49):
            if colors1[i].collidepoint(pos):
                if color != colors1[i]:
                    state = 3
                else:
                    score += 1
# 定义 timer 函数
def timer():
    global time_
    while True:
        time.sleep(0.01)
        tick()
def update():
    pass
# 创建线程并启动定时器
t = threading.Thread(target=timer)
t.start()

# 启动游戏
pgzrun.go()




对于这个问题我很是苦恼,希望热心的网友可以帮助我。我在这里提前说一声谢谢啦!

  • 写回答

1条回答 默认 最新

  • Bony- 2023-05-03 17:37
    关注

    以下回答参考GPT并且由Bony-整理:
    这个错误发生在创建Actor对象时。在draw函数中的这一行代码:

    color=Actor(colors1[random.randint(0,48)])
    

    在这里,你试图将Actor对象的image属性设置为colors1列表中一个随机位置上的Actor对象。但是,Actor对象不是一个字符串、字节串或os.PathLike对象,所以无法与文件系统路径拼接在一起,从而导致了TypeError错误。相反,应该将color属性设置为colors1列表中一个随机位置上的角色的image属性。因此,你可以将该行代码更改为:

    color = colors1[random.randint(0, 48)].image
    
    
    

    这将使程序从颜色角色中提取所需的图像,并将其赋值给color变量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月21日
  • 已采纳回答 5月13日
  • 创建了问题 5月2日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画