Hexdraw half-done

This commit is contained in:
jona605a
2020-08-06 17:20:30 +02:00
parent f45e900f4c
commit e7eca869e4
4 changed files with 93 additions and 8 deletions

BIN
boardHexTest.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -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

View File

@ -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

View File

@ -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])
"""