✨ Hexdraw half-done
This commit is contained in:
BIN
boardHexTest.png
Normal file
BIN
boardHexTest.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
@ -1,6 +1,6 @@
|
|||||||
"""A collection of all Gwendolyn functions."""
|
"""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
|
from .miscFuncs import helloFunc, cap, imageFunc, logThis, findWikiPage, makeFiles, replaceMultiple, emojiToNumber, fiarReactionTest, deleteGame, stopServer, addToDict, getName, getID
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
"""Functions for games Gwendolyn can play."""
|
"""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 .money import checkBalance, giveMoney, addMoney
|
||||||
from .trivia import triviaCountPoints, triviaStart, triviaAnswer
|
from .trivia import triviaCountPoints, triviaStart, triviaAnswer
|
||||||
|
@ -1,16 +1,101 @@
|
|||||||
import json
|
import json
|
||||||
import math
|
import math
|
||||||
|
import os
|
||||||
|
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
from funcs import logThis, getName
|
#from funcs import logThis, getName
|
||||||
|
|
||||||
def hexDraw(channel):
|
def drawHex(channel):
|
||||||
logThis("Drawing Hex board")
|
#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)
|
data = json.load(f)
|
||||||
|
|
||||||
board = data[channel]["board"]
|
board = data[channel]["board"]
|
||||||
|
# Getting player names
|
||||||
players = data[channel]["players"]
|
players = data[channel]["players"]
|
||||||
if players[0] == "Gwendolyn":
|
if players[0] == "Gwendolyn":
|
||||||
player1 = "Gwendolyn"
|
player1 = "Gwendolyn"
|
||||||
@ -22,4 +107,4 @@ def hexDraw(channel):
|
|||||||
player2 = getName(players[1])
|
player2 = getName(players[1])
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
Reference in New Issue
Block a user