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

View File

@ -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
from .hex import parseHex, hexAI

View File

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