So, I'm building this simple game in Python, and I decided to introduce a new feature that allows for regulating the map size (a guizero waffle). In line 16 (waffle.height = waffle.width = Levelsizenumber.value =int(e)
) I added code that changed the waffle size according to a slider (also a guizero part). This somehow broke code in line 56 (pixel.color = '#ff0000'
). I've tried using both hexadecimal colour and just the words that are accepted by default. Every other line in the spreading function works except the one that is actually to paint the pixel that was decided by the spreading algorithm. Any suggestions? (code bellow)
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()