diff --git a/boardHexTest.png b/boardHexTest.png new file mode 100644 index 0000000..128fd0f Binary files /dev/null and b/boardHexTest.png differ diff --git a/funcs/__init__.py b/funcs/__init__.py index d770dbd..a80ec3e 100644 --- a/funcs/__init__.py +++ b/funcs/__init__.py @@ -1,6 +1,6 @@ """A collection of all Gwendolyn functions.""" -__all__ = ["helloFunc", "cap", "imageFunc", "logThis", "findWikiPage", "makeFiles", "emojiToNumber", "fiarReactionTest", "deleteGame", "stopServer", "checkBalance", "giveMoney", "addMoney", "triviaCountPoints", "triviaStart", "triviaAnswer", "blackjackShuffle", "blackjackStart", "blackjackPlayerDrawHand", "blackjackContinue", "blackjackFinish", "blackjackHit", "blackjackStand", "blackjackDouble", "blackjackSplit", "parseFourInARow", "fourInARowAI", "spellFunc", "monsterFunc", "nameGen", "tavernGen", "movieFunc", "roll_dice", "parseChar", "parseRoll", "critRoll", "parseDestiny", "parseHex", "addToDict", "getName", "getID"] +__all__ = ["helloFunc", "cap", "imageFunc", "logThis", "findWikiPage", "makeFiles", "emojiToNumber", "fiarReactionTest", "deleteGame", "stopServer", "checkBalance", "giveMoney", "addMoney", "triviaCountPoints", "triviaStart", "triviaAnswer", "blackjackShuffle", "blackjackStart", "blackjackPlayerDrawHand", "blackjackContinue", "blackjackFinish", "blackjackHit", "blackjackStand", "blackjackDouble", "blackjackSplit", "parseFourInARow", "fourInARowAI", "spellFunc", "monsterFunc", "nameGen", "tavernGen", "movieFunc", "roll_dice", "parseChar", "parseRoll", "critRoll", "parseDestiny", "parseHex", "hexAI", "addToDict", "getName", "getID"] from .miscFuncs import helloFunc, cap, imageFunc, logThis, findWikiPage, makeFiles, replaceMultiple, emojiToNumber, fiarReactionTest, deleteGame, stopServer, addToDict, getName, getID diff --git a/funcs/games/__init__.py b/funcs/games/__init__.py index e577d3e..329d3f3 100644 --- a/funcs/games/__init__.py +++ b/funcs/games/__init__.py @@ -1,9 +1,9 @@ """Functions for games Gwendolyn can play.""" -__all__ = ["checkBalance", "giveMoney", "addMoney","triviaCountPoints", "triviaStart", "triviaAnswer", "blackjackShuffle", "blackjackStart", "blackjackPlayerDrawHand", "blackjackContinue", "blackjackFinish", "blackjackHit", "blackjackStand", "blackjackDouble", "blackjackSplit", "parseFourInARow", "fourInARowAI", "parseHex"] +__all__ = ["checkBalance", "giveMoney", "addMoney","triviaCountPoints", "triviaStart", "triviaAnswer", "blackjackShuffle", "blackjackStart", "blackjackPlayerDrawHand", "blackjackContinue", "blackjackFinish", "blackjackHit", "blackjackStand", "blackjackDouble", "blackjackSplit", "parseFourInARow", "fourInARowAI", "parseHex","hexAI"] from .money import checkBalance, giveMoney, addMoney from .trivia import triviaCountPoints, triviaStart, triviaAnswer from .blackjack import blackjackShuffle, blackjackStart, blackjackPlayerDrawHand, blackjackContinue, blackjackFinish, blackjackHit, blackjackStand, blackjackDouble, blackjackSplit from .fourInARow import parseFourInARow, fourInARowAI -from .hex import parseHex, hexAI \ No newline at end of file +from .hex import parseHex, hexAI diff --git a/funcs/games/hexDraw.py b/funcs/games/hexDraw.py index 954e2b0..e5ac7b9 100644 --- a/funcs/games/hexDraw.py +++ b/funcs/games/hexDraw.py @@ -1,16 +1,101 @@ import json import math +import os from PIL import Image, ImageDraw, ImageFont -from funcs import logThis, getName +#from funcs import logThis, getName -def hexDraw(channel): - logThis("Drawing Hex board") +def drawHex(channel): + #logThis("Drawing Hex board") - with open("resources/games/hexGames.json", "r") as f: + # Defining all the variables + CANVAS_WIDTH = 800 + CANVAS_HEIGHT = 600 + SIDELENGTH = 25 + X_OFFSET = CANVAS_WIDTH/2 - 8*math.sqrt(3)*SIDELENGTH # The offsets centers the board in the picture + Y_OFFSET = CANVAS_HEIGHT/2 - 8*SIDELENGTH # The offsets are the coordinates of the upperleft point in the upperleftmost hexagon + hexagonwidth = math.sqrt(3) * SIDELENGTH # the whole width + hexagonheight = 1.5 * SIDELENGTH # not really the entire height, but the height difference between two layers + pieceColor = {1:(200,0,0),2:(0,0,200)} # player1 is red, player2 is blue + pieceDiameter = 30 + + fontsize = 15 + textcolor = (0,0,0) + fnt = ImageFont.truetype('resources/futura-bold.ttf', fontsize) + + # Creates the empty image + im = Image.new('RGB', size=(CANVAS_WIDTH, CANVAS_HEIGHT),color='lightgrey') + # 'd' is a shortcut to drawing on the image + d = ImageDraw.Draw(im,"RGBA") + + # Creates the hexagons + hexList = _scale_coordinates(generate_unit_hexagons, X_OFFSET, Y_OFFSET) # these two functions are defined below + for hexagon in hexList: + d.polygon(hexagon, fill = 'white',outline='black') + + board = [ [ 0 for i in range(11) ] for j in range(11) ] + board[0][0] = 1 + board[1][0] = 1 + board[2][1] = 1 + board[3][6] = 2 + board[2][5] = 2 + + # Draws the pieces from the board + for row in range(11): + for column in range(11): + if board[row][column] != 0: + x = X_OFFSET + hexagonwidth*(column + row/2 + 1/2) - pieceDiameter/2 + y = Y_OFFSET + hexagonheight*row + hexagonheight/2 - pieceDiameter/math.sqrt(2) + d.ellipse([(x,y),(x + pieceDiameter,y + pieceDiameter)], fill = pieceColor[board[row][column]]) + + # Writes "abc..", "123.." on the columns and rows + for i in range(11): + # Top letters + d.text( (X_OFFSET + hexagonwidth*i, Y_OFFSET-22) , "ABCDEFGHIJK"[i], font=fnt, fill=textcolor) + # Bottom letters + d.text( (X_OFFSET + hexagonwidth*(i+11.5/2), Y_OFFSET - 5 + 11*hexagonheight) , "ABCDEFGHIJK"[i], font=fnt, fill=textcolor) + # Left numbers + d.multiline_text( (X_OFFSET + hexagonwidth*i/2 - 24 -4*(i>8), Y_OFFSET + 6 + i*hexagonheight) , str(i+1), font=fnt, fill=textcolor, align="right") + # Right numbers + d.text( (X_OFFSET + hexagonwidth*(i/2+11) + 10 , Y_OFFSET + 6 + i*hexagonheight) , str(i+1), font=fnt, fill=textcolor) + + im.save("board"+channel+".png") + #im.save(filename="resources/games/hexBoards/board"+channel+".png") + + + +def generate_unit_hexagons(): + h = math.sqrt(3)/2 # Half the width of the hexagon + for y in range(11): + for x in [i*2+y for i in range(11)]: + x_ = x*h + y_ = y*1.5 + + yield [ + (x_, y_), + (x_+h, y_-0.5), + (x_+2*h, y_), + (x_+2*h, y_+1), + (x_+h, y_+1.5), + (x_, y_+1), + ] + +def _scale_coordinates(generator, x_offset, y_offset, side_length=25): + for coords in generator(): + yield [(x * side_length + x_offset, y * side_length + y_offset) for (x, y) in coords] + + + +if __name__ == '__main__': + drawHex("HexTest") + +""" + +with open("resources/games/hexGames.json", "r") as f: data = json.load(f) board = data[channel]["board"] + # Getting player names players = data[channel]["players"] if players[0] == "Gwendolyn": player1 = "Gwendolyn" @@ -20,6 +105,6 @@ def hexDraw(channel): player2 = "Gwendolyn" else: player2 = getName(players[1]) - +""" \ No newline at end of file