Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions games/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from .gamesman_classic import GamesmanClassic
from .gamesman_puzzles import GamesmanPuzzles
from .gamesman_one import GamesmanOne
from .gamesman_py import GamesmanPy
from .chess import RegularChessVariant
from .tootandotto import TootAndOtto
from .nim import NimVariant, nim_custom_start
Expand Down Expand Up @@ -266,6 +267,18 @@
},
gui='v3'),

'clobber': Game(
name='Clobber',
variants={
variant_id: Variant(
name=variant_id,
data_provider=GamesmanPy,
data_provider_game_id='clobber',
data_provider_variant_id=variant_id,
gui='v3') for variant_id in ['3x4', '3x6', '5x3', '5x4']
},
gui='v3'),

'clocksolitaire': Game(
name='Clock Solitaire',
variants= {
Expand Down Expand Up @@ -701,6 +714,27 @@
gui='v3',
),

'horses': Game(
name="Horses",
variants={
'regular': Variant(
name='Regular',
data_provider=GamesmanPy,
data_provider_game_id='horses',
data_provider_variant_id='regular',
gui='v3',
),
'misere': Variant(
name='Misere',
data_provider=GamesmanPy,
data_provider_game_id='horses',
data_provider_variant_id='misere',
gui='v3',
),
},
gui='v3',
),

'hopndrop': Game(
name="Hop N' Drop",
variants= {
Expand Down Expand Up @@ -1132,6 +1166,37 @@
gui='v3'
),

'pancakes': Game(
name="Pancakes",
variants={
'5': Variant(
name='5',
data_provider=GamesmanPy,
data_provider_game_id='pancakes',
data_provider_variant_id='5',
gui='v3'),
'6': Variant(
name='6',
data_provider=GamesmanPy,
data_provider_game_id='pancakes',
data_provider_variant_id='6',
gui='v3'),
'7': Variant(
name='7',
data_provider=GamesmanPy,
data_provider_game_id='pancakes',
data_provider_variant_id='7',
gui='v3'),
'8': Variant(
name='8',
data_provider=GamesmanPy,
data_provider_game_id='pancakes',
data_provider_variant_id='8',
gui='v3'),
},
is_two_player_game=False,
gui='v3'),

'ponghauki': Game(
name="Pong Hau K'i",
variants={
Expand Down
30 changes: 30 additions & 0 deletions games/gamesman_py.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import json, requests
from .models import DataProvider

class GamesmanPy(DataProvider):
# Use first url when running on a different machine,
# use second when running on main gamesman server.
#url = "https://nyc.cs.berkeley.edu:9004/"
url = "http://localhost:9004/"

def read_from_url(tempurl):
try:
response = requests.get(tempurl)
response.raise_for_status()
except Exception as err:
print(f'Error occurred: {err}')
return {}
return json.loads(response.content)

def start_position(puzzle_id, variant_id):
print("Test")
tempurl = f"{GamesmanPy.url}{puzzle_id}/{variant_id}/start/"
data = GamesmanPy.read_from_url(tempurl)
return {
'position': data.get('position', ''),
'autoguiPosition': data.get('autoguiPosition', '')
}

def position_data(puzzle_id, variant_id, position):
tempurl = f"{GamesmanPy.url}{puzzle_id}/{variant_id}/positions/?p={position}"
return GamesmanPy.read_from_url(tempurl)
98 changes: 98 additions & 0 deletions games/image_autogui_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,33 @@ def get_chungtoi(variant_id):
}
}

def get_clobber(variant_id):
def get_theme(cols, rows):
return {
"defaultTheme": "regular",
"themes": {
"regular": {
"space": [cols, rows],
"centers": [[0.5 + i % cols, 0.5 + i // cols] for i in range(rows * cols)],
"background": f"clobber/{variant_id}.svg",
"charImages": {
"x": {"image": "general/blackpiece.svg", "scale": 1},
"o": {"image": "general/whitepiece.svg", "scale": 1},
},
"arrowWidth": 0.1,
"sounds": {
"x": "general/slide.mp3",
},
"animationType": "simpleSlides",
}
}
}
match variant_id:
case '3x4': return get_theme(3, 4)
case '3x6': return get_theme(3, 6)
case '5x3': return get_theme(5, 3)
case '5x4': return get_theme(5, 4)

def get_clock_solitaire(variant_id):
scale = 1
arrowWidth = 0.15
Expand Down Expand Up @@ -1087,6 +1114,39 @@ def get_hobaggonu(variant_id):
}
}

def get_horses(variant_id):
centers = [
[100, 30],
[149.4975, 50.5025],
[170, 100],
[149.4975, 149.4975],
[100, 170],
[50.5025, 149.4975],
[30, 100],
[50.5025, 50.5025],
[100, 100],
]
return {
"defaultTheme": "regular",
"themes": {
"regular": {
"space": [200, 200],
"background": "horses/background.svg",
"centers": centers,
"charImages": {
"x": {"image": "general/bluepiece.svg", "scale": 25},
"o": {"image": "general/redpiece.svg", "scale": 25},
},
"arrowWidth": 2.5,
"sounds": {
"x": "general/place.mp3",
"y": "general/slide.mp3",
},
"animationType": "simpleSlides",
}
}
}

def get_jenga(variant_id):
return {
"defaultTheme": "simple",
Expand Down Expand Up @@ -1682,6 +1742,41 @@ def get_othello(variant_id):
}
}

def get_pancakes(variant_id):
rows = int(variant_id)
height = 1.25 * rows
centers = [[8, height - 0.5 - (1.25 * i)] for i in range(rows)]
space = [16, height]
return {
"defaultTheme": "regular",
"themes": {
"regular": {
"space": space,
"centers": centers,
"charImages": {
"1": {"image": "pancakes/pancake1.svg", "scale": 15},
"2": {"image": "pancakes/pancake2.svg", "scale": 15},
"3": {"image": "pancakes/pancake3.svg", "scale": 15},
"4": {"image": "pancakes/pancake4.svg", "scale": 15},
"5": {"image": "pancakes/pancake5.svg", "scale": 15},
"6": {"image": "pancakes/pancake6.svg", "scale": 15},
"7": {"image": "pancakes/pancake7.svg", "scale": 15},
"8": {"image": "pancakes/pancake8.svg", "scale": 15},
"a": {"image": "pancakes/pancake1f.svg", "scale": 15},
"b": {"image": "pancakes/pancake2f.svg", "scale": 15},
"c": {"image": "pancakes/pancake3f.svg", "scale": 15},
"d": {"image": "pancakes/pancake4f.svg", "scale": 15},
"e": {"image": "pancakes/pancake5f.svg", "scale": 15},
"f": {"image": "pancakes/pancake6f.svg", "scale": 15},
"g": {"image": "pancakes/pancake7f.svg", "scale": 15},
"h": {"image": "pancakes/pancake8f.svg", "scale": 15},
},
"sounds": {"x": "general/place.mp3"},
"animationType": "entityFade"
}
}
}

def get_pegsolitaire(variant_id):
scale = 18
arrowWidth = 2
Expand Down Expand Up @@ -2627,6 +2722,7 @@ def get_orbito(variant_id):
"chinesechess": get_chinesechess,
"chomp": get_chomp,
"chopsticks": get_chopsticks,
"clobber": get_clobber,
"clocksolitaire": get_clock_solitaire,
"connect4": get_connect4,
"connect4twist": get_connect4twist,
Expand All @@ -2650,6 +2746,7 @@ def get_orbito(variant_id):
"hareandhounds": get_hareandhounds,
"hexapawn": get_hexapawn,
"hobaggonu": get_hobaggonu,
"horses": get_horses,
"jan": get_jan,
"jenga": get_jenga,
"joust": get_joust,
Expand All @@ -2673,6 +2770,7 @@ def get_orbito(variant_id):
"oddoreven": get_oddoreven,
"orbito" : get_orbito,
"othello": get_othello,
"pancakes": get_pancakes,
"pegsolitaire": get_pegsolitaire,
"ponghauki": get_ponghauki,
"quickchess": get_quickchess,
Expand Down