Add 25 levels, make Outputs None by default, add DIY mode, auto evaluate on changes, difficulty indication in level selector, fix task label overflowing

This commit is contained in:
csd4ni3l
2025-10-14 11:17:15 +02:00
parent f4054fafa8
commit 2915d36763
4 changed files with 243 additions and 22 deletions

View File

@@ -17,6 +17,8 @@ LOGICAL_GATES = {
}
LEVELS = [
# EASY
[
[2, "INPUT", 1],
[1, "AND"],
@@ -25,14 +27,201 @@ LEVELS = [
[
[1, "INPUT", 1],
[1, "INPUT", 0],
[1, "AND"],
[1, "OR"],
[1, "OUTPUT", 0]
],
[
[2, "INPUT", 1],
[1, "NAND"],
[1, "OUTPUT", 0]
],
[
[1, "INPUT", 0],
[1, "INPUT", 1],
[1, "INPUT", 0],
[1, "XOR"],
[1, "OUTPUT", 1]
],
[
[2, "INPUT", 1],
[1, "INPUT", 0],
[1, "AND"],
[1, "OR"],
[1, "OUTPUT", 1]
],
# INTERMEDIATE
[
[2, "INPUT", 0],
[1, "INPUT", 1],
[1, "NOR"],
[1, "AND"],
[1, "OUTPUT", 1]
],
[
[2, "INPUT", 1],
[1, "INPUT", 0],
[1, "XNOR"],
[1, "OR"],
[1, "OUTPUT", 1]
],
[
[2, "INPUT", 1],
[2, "INPUT", 0],
[1, "OR"],
[1, "AND"],
[1, "XOR"],
[1, "OUTPUT", 0]
],
[
[3, "INPUT", 1],
[1, "INPUT", 0],
[2, "NAND"],
[1, "OR"],
[1, "OUTPUT", 1]
],
[
[4, "INPUT", 0],
[2, "NOR"],
[1, "AND"],
[1, "OUTPUT", 1]
],
[
[2, "INPUT", 1],
[2, "INPUT", 0],
[2, "XOR"],
[1, "XNOR"],
[1, "OUTPUT", 1]
],
[
[3, "INPUT", 1],
[1, "INPUT", 0],
[1, "AND"],
[1, "NAND"],
[1, "OR"],
[1, "OUTPUT", 1]
],
[
[2, "INPUT", 0],
[2, "INPUT", 1],
[1, "NOR"],
[1, "AND"],
[1, "XOR"],
[1, "OUTPUT", 1]
],
[
[4, "INPUT", 0],
[1, "INPUT", 1],
[2, "OR"],
[1, "NAND"],
[1, "OUTPUT", 0]
],
[
[2, "INPUT", 1],
[2, "INPUT", 0],
[1, "XNOR"],
[1, "NOR"],
[1, "AND"],
[1, "OUTPUT", 0]
],
# HARD
[
[3, "INPUT", 1],
[2, "INPUT", 0],
[1, "AND"],
[1, "OR"],
[1, "NAND"],
[1, "XOR"],
[1, "OUTPUT", 1]
],
[
[2, "INPUT", 1],
[2, "INPUT", 0],
[3, "NAND"],
[1, "OR"],
[1, "OUTPUT", 0]
],
[
[4, "INPUT", 0],
[2, "INPUT", 1],
[2, "NOR"],
[1, "XOR"],
[1, "XNOR"],
[1, "OUTPUT", 1]
],
[
[3, "INPUT", 1],
[3, "INPUT", 0],
[2, "AND"],
[1, "OR"],
[1, "NAND"],
[1, "XOR"],
[1, "OUTPUT", 0]
],
[
[4, "INPUT", 1],
[2, "INPUT", 0],
[2, "XOR"],
[1, "NAND"],
[1, "NOR"],
[1, "XNOR"],
[1, "OUTPUT", 1]
],
# Extra Hard
[
[2, "INPUT", 1],
[2, "INPUT", 0],
[1, "AND"],
[1, "OR"],
[1, "NAND"],
[1, "XOR"],
[1, "OUTPUT", 0],
[1, "OUTPUT", 1]
],
[
[3, "INPUT", 1],
[3, "INPUT", 0],
[2, "XOR"],
[1, "AND"],
[1, "NAND"],
[1, "OR"],
[1, "OUTPUT", 1],
[1, "OUTPUT", 0]
],
[
[4, "INPUT", 1],
[2, "INPUT", 0],
[2, "NOR"],
[2, "XNOR"],
[1, "AND"],
[1, "OR"],
[2, "OUTPUT", 1],
],
[
[3, "INPUT", 1],
[3, "INPUT", 0],
[2, "NAND"],
[2, "XOR"],
[1, "NOR"],
[1, "AND"],
[1, "OUTPUT", 0],
[1, "OUTPUT", 1]
],
[
[4, "INPUT", 1],
[4, "INPUT", 0],
[2, "AND"],
[2, "OR"],
[1, "XOR"],
[1, "NAND"],
[1, "NOR"],
[1, "XNOR"],
[1, "OUTPUT", 1],
[1, "OUTPUT", 0]
]
]

View File

@@ -7,8 +7,8 @@ import pyglet.display
def generate_task_text(level):
text = "Task: You need to use "
text += f"{', '.join([f'{requirement[0]} {requirement[1]} gate(s)' for requirement in level if not requirement[1] in ['INPUT', 'OUTPUT']])}"
text += f" to result in {', '.join([f'{requirement[0]} OUTPUT gate(s) with value {requirement[2]}' for requirement in level if requirement[1] == 'OUTPUT'])}"
text += ', '.join([f'{requirement[0]} {requirement[1]} gate(s)' for requirement in level if not requirement[1] in ['INPUT', 'OUTPUT']])
text += f"\nResult: {', '.join([f'{requirement[0]} OUTPUT gate(s) with value {requirement[2]}' for requirement in level if requirement[1] == 'OUTPUT'])}"
return text