因此,我正在用 Python 构建这个简单的游戏,并且我决定引入一个允许调节地图大小的新功能(guizero waffle)。在第 16 行 (waffle.height = waffle.width = Levelsizenumber.value =int(e)) 我添加了根据滑块(也是 guizero 部分)更改华夫饼大小的代码。这以某种方式破坏了第 56 行中的代码(pixel.color = '#ff0000')。我试过同时使用十六进制颜色和默认接受的单词。扩散函数中的每一行都有效,除了实际绘制由扩散算法决定的像素的那一行。不显示错误消息。有什么建议么?(代码如下)
from guizero import Waffle, App, PushButton, Window, Text, Slider
"""This is supposed to be a simple minigame where you try to protect against fires"""
def startgame():
startmenu.hide()
app.show()
print(Speednumber.value)
app.repeat(int(Speednumber.value), propagate)
# Level size
def level(e):
waffle.height = waffle.width = Levelsizenumber.value =int(e)
# Fire speed choose func
def firespeedchoose(a):
Speednumber.value = a
# change "n", the ignition number
def ignitions(slider_value):
n = int(slider_value)
return n
# picks a box's adjacent box (includes diagonals): the x and y differences are less than 2, at least one of them is 1
def adjacent(pixel): # and if it is neutral
first_x = pixel.x
first_y = pixel.y
print("Yup, adjacent works")
for second_pixel in pixels:
second_x = second_pixel.x
second_y = second_pixel.y
x_dif = abs(first_x - second_x)
y_dif = abs(first_y - second_y)
if x_dif < 2 and y_dif < 2 and (x_dif == 1 or y_dif == 1) and second_pixel.color == "green":
print("Adjacent is sending a value")
return second_pixel
return pixel # else it returns the original pixel
# dictates the fire spread: picks a random cell adjacent to a fire cell and makes it a fire cell, for all fire cells
def propagate():
print("propagate do be running")
spreadables = []
for source in pixels:
print("The first loop in spreadable works")
if source.color == "#ff0000":
spreadables.append(adjacent(source))
print("It reached that if stuff in propagate")
for pixel in spreadables:
print("Its coloring stuff")
pixel.color = '#ff0000'
"""This ignites the fire"""
def lighter(slider_value):
Ignitioncount.value = int(slider_value)
print("Lighter is running")
a = int(Ignitioncount.value) + 1
for i in range(0, a):
x1 = randint(0, int(waffle.height)-1)
y1 = randint(0, int(waffle.height)-1)
waffle.set_pixel(x1, y1, "#ff0000")
def menubuttonthing():
waffle.set_all("green")
app.hide()
scoremenu.hide()
startmenu.show()
"""this resets the whole dam thing"""
def resetthething():
waffle.set_all("green")
lighter(Ignitioncount.value)
Speednumber.value = Speedslider.value
print(Speednumber.value)
app.show()
scoremenu.hide()
"""i hid the score menu so that i could use the function
for both buttons(the score menu and the game itself)"""
"""this kinda protects against the fire"""
def protec(a, b):
thepixelcolor = waffle.get_pixel(a, b)
if thepixelcolor != "#ff0000":
waffle.set_pixel(a, b, "blue")
"""Score system"""
def scoresystem():
score = 0
for height in range(waffle.height):
for lenght in range(waffle.width):
if waffle.get_pixel(height, lenght) == "blue":
score -= 1
if waffle.get_pixel(height, lenght) == "green":
score += 1
app.hide()
scoremenu.show()
Actualscore.value = score
"""basic GUI setup"""
app = App(layout="grid", height=625, width=500)
# place waffle her if level size doesnt work
restbutton = PushButton(app, text="Reset", command=resetthething, grid=[1, 2])
propagatebutton = PushButton(app, text="Propagate", command=propagate, grid=[1, 3])
scorebutton = PushButton(app, text="Score", command=scoresystem, grid=[1, 4])
"""Start menu stuff"""
startmenu = Window(app, title="Welcome", height=500, width=550)
introtext = Text(startmenu, text="Welcome to this tiny random game")
Instructions = Text(startmenu, size=9, text="Instructions: The objective is to protect as much of the forest(green) ")
Instructions2 = Text(startmenu, size=9,
text=" while using the least water (left mouse click that turns healthy forest into protected blue areas)")
Instructions3 = Text(startmenu, size=9, text="from the fire(red)")
Numberofignitions = Text(startmenu, size=10, text="Choose the difficulty")
Ignitioncount = Text(startmenu, size=9, text="0")
Ignitionslider = Slider(startmenu, start=0, end=5, command=lighter)
# Fire speed
Speed = Text(startmenu, size=10, text="Choose the speed")
Speednumber = Text(startmenu, size=10, text="750")
Speedslider = Slider(startmenu, start=250, end=2000, command=firespeedchoose)
# Waffle size
Levelsize = Text(startmenu, size=10, text="Choose the level size")
Levelsizenumber = Text(startmenu, size=10, text="20") #Works as a variable
Levelsizeslide = Slider(startmenu, start=0, end=40, command=level)
# Start
startbutton = PushButton(startmenu, text="Start", command=startgame)
# credits
credits = Text(startmenu, text="Made by The Cool Guy 468 and Kidplayer_666", size=8)
"""Score stuff"""
scoremenu = Window(app)
Scoretext = Text(scoremenu, text="your score is")
Actualscore = Text(scoremenu, text="0")
restbutton2 = PushButton(scoremenu, text="Reset", command=resetthething)
menubutton = PushButton(scoremenu, text="Menu", command=menubuttonthing)
# Waffle setup here for experimental purposes, aka, level size testing
waffle = Waffle(app, pad=0, grid=[1, 1], height=int(Levelsizenumber.value), width=int(Levelsizenumber.value),
color="green", command=protec, dim=25)
"""Pixel shuffler"""
pixels = []
for x in range(waffle.width):
for y in range(waffle.height):
pixels.append(waffle.pixel(x, y))
shuffle(pixels)
"""just starting the app"""
print(Speednumber.value)
startmenu.show()
scoremenu.hide()
app.hide()
app.display()