Moved connections functions to a seperate file, in order to minimize clutter
This commit is contained in:
parent
892623e387
commit
76dae333e6
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1 +1,3 @@
|
||||||
.env
|
.env
|
||||||
|
tags
|
||||||
|
.ycm_extra_conf.py
|
||||||
|
|
45
bot.py
45
bot.py
|
@ -2,6 +2,7 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
|
from game_logic import connections as con
|
||||||
import re
|
import re
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
@ -79,28 +80,19 @@ async def stats(interaction: discord.Interaction, game, user: discord.User = Non
|
||||||
|
|
||||||
async for message in channel.history(limit=1000): # Limit can be adjusted
|
async for message in channel.history(limit=1000): # Limit can be adjusted
|
||||||
if message.author == user:
|
if message.author == user:
|
||||||
message_content = message.content.strip()
|
|
||||||
if message_content.startswith("Connections") and "Puzzle #" in message_content:
|
|
||||||
# Extract the puzzle number
|
|
||||||
puzzle_number_start = message_content.find("Puzzle #") + len("Puzzle #")
|
|
||||||
puzzle_number_end = message_content.find("\n", puzzle_number_start)
|
|
||||||
puzzle_number = message_content[puzzle_number_start:puzzle_number_end].strip()
|
|
||||||
|
|
||||||
# Extract the grid (assume the grid starts after the first two lines)
|
color_grid = con.extract_connections_grid( message.content)
|
||||||
grid_start = message_content.find("\n", message_content.find("Puzzle #")) + 1
|
|
||||||
grid_content = message_content[grid_start:].strip()
|
|
||||||
|
|
||||||
# Split the grid into lines
|
if color_grid:
|
||||||
color_grid = grid_content.split("\n")
|
|
||||||
|
|
||||||
guesses = check_connections_win(color_grid)
|
guesses = con.check_connections_win(color_grid)
|
||||||
|
|
||||||
total_games += 1
|
total_games += 1
|
||||||
|
|
||||||
if guesses > 0:
|
if guesses > 0:
|
||||||
total_guesses += guesses
|
total_guesses += guesses
|
||||||
wins += 1
|
wins += 1
|
||||||
perfect_game = is_perfect_game(color_grid)
|
perfect_game = con.is_perfect_game(color_grid)
|
||||||
if perfect_game:
|
if perfect_game:
|
||||||
perfects += 1
|
perfects += 1
|
||||||
|
|
||||||
|
@ -131,33 +123,6 @@ async def stats(interaction: discord.Interaction, game, user: discord.User = Non
|
||||||
ephemeral=True
|
ephemeral=True
|
||||||
)
|
)
|
||||||
|
|
||||||
def check_connections_win(color_grid):
|
|
||||||
"""
|
|
||||||
Check if the Connections game is a win and return the number of guesses.
|
|
||||||
A win is when there are exactly 4 groups of 4 colors each.
|
|
||||||
"""
|
|
||||||
# Flatten the color grid into a list of colors
|
|
||||||
uniform_rows = [row for row in color_grid if len(set(row)) == 1]
|
|
||||||
|
|
||||||
flattened_grid = ''.join(uniform_rows)
|
|
||||||
|
|
||||||
# Count the occurrences of each color in the grid
|
|
||||||
color_counts = Counter(flattened_grid)
|
|
||||||
|
|
||||||
# Check if there are exactly 4 different colors with 4 squares each
|
|
||||||
if len(color_counts) == 4 and all(count == 4 for count in color_counts.values()):
|
|
||||||
# A win: return the number of guesses (lines in the grid)
|
|
||||||
return len(color_grid)
|
|
||||||
return 0 # Not a win
|
|
||||||
|
|
||||||
def is_perfect_game(color_grid):
|
|
||||||
"""
|
|
||||||
Check if the Connections game is a perfect game (solved in 4 guesses, no mistakes).
|
|
||||||
"""
|
|
||||||
# A perfect game is one where the first 4 lines form perfect groups
|
|
||||||
if len(color_grid) == 4 and all(len(set(line)) == 1 for line in color_grid):
|
|
||||||
return True # It's a perfect game
|
|
||||||
return False
|
|
||||||
|
|
||||||
@bot.event
|
@bot.event
|
||||||
async def on_ready():
|
async def on_ready():
|
||||||
|
|
0
game_logic/__init__.py
Normal file
0
game_logic/__init__.py
Normal file
BIN
game_logic/__pycache__/__init__.cpython-313.pyc
Normal file
BIN
game_logic/__pycache__/__init__.cpython-313.pyc
Normal file
Binary file not shown.
BIN
game_logic/__pycache__/connections.cpython-313.pyc
Normal file
BIN
game_logic/__pycache__/connections.cpython-313.pyc
Normal file
Binary file not shown.
50
game_logic/connections.py
Normal file
50
game_logic/connections.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
|
def extract_connections_grid(message):
|
||||||
|
message_content = message.strip()
|
||||||
|
if message_content.startswith("Connections") and "Puzzle #" in message_content:
|
||||||
|
# Extract the puzzle number
|
||||||
|
puzzle_number_start = message_content.find("Puzzle #") + len("Puzzle #")
|
||||||
|
puzzle_number_end = message_content.find("\n", puzzle_number_start)
|
||||||
|
puzzle_number = message_content[puzzle_number_start:puzzle_number_end].strip()
|
||||||
|
|
||||||
|
# Extract the grid (assume the grid starts after the first two lines)
|
||||||
|
grid_start = message_content.find("\n", message_content.find("Puzzle #")) + 1
|
||||||
|
grid_content = message_content[grid_start:].strip()
|
||||||
|
|
||||||
|
# Split the grid into lines
|
||||||
|
color_grid = grid_content.split("\n")
|
||||||
|
return color_grid
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def check_connections_win(color_grid):
|
||||||
|
"""
|
||||||
|
Check if the Connections game is a win and return the number of guesses.
|
||||||
|
A win is when there are exactly 4 groups of 4 colors each.
|
||||||
|
"""
|
||||||
|
# Flatten the color grid into a list of colors
|
||||||
|
uniform_rows = [row for row in color_grid if len(set(row)) == 1]
|
||||||
|
|
||||||
|
flattened_grid = ''.join(uniform_rows)
|
||||||
|
|
||||||
|
# Count the occurrences of each color in the grid
|
||||||
|
color_counts = Counter(flattened_grid)
|
||||||
|
|
||||||
|
# Check if there are exactly 4 different colors with 4 squares each
|
||||||
|
if len(color_counts) == 4 and all(count == 4 for count in color_counts.values()):
|
||||||
|
# A win: return the number of guesses (lines in the grid)
|
||||||
|
return len(color_grid)
|
||||||
|
return 0 # Not a win
|
||||||
|
|
||||||
|
def is_perfect_game(color_grid):
|
||||||
|
"""
|
||||||
|
Check if the Connections game is a perfect game (solved in 4 guesses, no mistakes).
|
||||||
|
"""
|
||||||
|
# A perfect game is one where the first 4 lines form perfect groups
|
||||||
|
if len(color_grid) == 4 and all(len(set(line)) == 1 for line in color_grid):
|
||||||
|
return True # It's a perfect game
|
||||||
|
return False
|
||||||
|
|
Loading…
Reference in a new issue