0

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()
jottbe
  • 4,228
  • 1
  • 15
  • 31
  • 1
    Can you please provide the error message you're getting, including a full stack trace if you have one - Also, giving line numbers often doesn't work, as things can shift getting them onto the web. Also, it's a pain to try to count 56 lines down in a page of text. Better to provide a line of code from your code rather than stating a line number. – CryptoFool Oct 23 '20 at 21:06
  • Alright. The line that is giving an error is pixel.color = '#ff0000' . This line is in the propagate function. It just gives a ton of errors in guizero modules and it’s referenced the line mentioned. – Kidplayer_666 Oct 23 '20 at 21:12

0 Answers0