我在使用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()
对于这个问题我很是苦恼,希望热心的网友可以帮助我。我在这里提前说一声谢谢啦!