import json from PIL import Image, ImageDraw, ImageFont from funcs import logThis, getName border = 100 placement = [0,0] rotation = 0 def drawImage(channel): logThis("Drawing blackjack table",channel) with open("resources/games/games.json", "r") as f: data = json.load(f) fnt = ImageFont.truetype('resources/futura-bold.ttf', 50) fntSmol = ImageFont.truetype('resources/futura-bold.ttf', 40) borderSmol = int(border/3.5) table = Image.open("resources/games/blackjackTable.png") placement = [2,1,3,0,4] textImage = ImageDraw.Draw(table) hands = data["blackjack games"][channel]["user hands"] dealerBusted = data["blackjack games"][channel]["dealer busted"] dealerBlackjack = data["blackjack games"][channel]["dealer blackjack"] try: if data["blackjack games"][channel]["all standing"] == False: dealerHand = drawHand(data["blackjack games"][channel]["dealer hand"],True,False,False) else: dealerHand = drawHand(data["blackjack games"][channel]["dealer hand"],False,dealerBusted,dealerBlackjack) except: logThis("Error drawing dealer hand (error code 1341a)") table.paste(dealerHand,(800-borderSmol,20-borderSmol),dealerHand) for x in range(len(hands)): key, value = list(hands.items())[x] key = getName(key) logThis("drawing "+key+"'s hand") userHand = drawHand(value["hand"],False,value["busted"],value["blackjack"]) try: if value["split"] == 3: table.paste(userHand,(32-borderSmol+(384*placement[x]),280-borderSmol),userHand) userOtherHand = drawHand(value["other hand"]["hand"],False,value["other hand"]["busted"],value["other hand"]["blackjack"]) table.paste(userOtherHand,(32-borderSmol+(384*placement[x]),420-borderSmol),userOtherHand) userThirdHand = drawHand(value["third hand"]["hand"],False,value["third hand"]["busted"],value["third hand"]["blackjack"]) table.paste(userThirdHand,(32-borderSmol+(384*placement[x]),560-borderSmol),userThirdHand) userFourthHand = drawHand(value["fourth hand"]["hand"],False,value["fourth hand"]["busted"],value["fourth hand"]["blackjack"]) table.paste(userFourthHand,(32-borderSmol+(384*placement[x]),700-borderSmol),userFourthHand) elif value["split"] == 2: table.paste(userHand,(32-borderSmol+(384*placement[x]),420-borderSmol),userHand) userOtherHand = drawHand(value["other hand"]["hand"],False,value["other hand"]["busted"],value["other hand"]["blackjack"]) table.paste(userOtherHand,(32-borderSmol+(384*placement[x]),560-borderSmol),userOtherHand) userThirdHand = drawHand(value["third hand"]["hand"],False,value["third hand"]["busted"],value["third hand"]["blackjack"]) table.paste(userThirdHand,(32-borderSmol+(384*placement[x]),700-borderSmol),userThirdHand) elif value["split"] == 1: table.paste(userHand,(32-borderSmol+(384*placement[x]),560-borderSmol),userHand) userOtherHand = drawHand(value["other hand"]["hand"],False,value["other hand"]["busted"],value["other hand"]["blackjack"]) table.paste(userOtherHand,(32-borderSmol+(384*placement[x]),700-borderSmol),userOtherHand) else: table.paste(userHand,(32-borderSmol+(384*placement[x]),680-borderSmol),userHand) except: logThis("Error drawing player hands (error code 1341b)") textWidth = fnt.getsize(key)[0] if textWidth < 360: textImage.text((32+(384*placement[x])+117-int(textWidth/2)-3,1010-3),key,fill=(0,0,0), font=fnt) textImage.text((32+(384*placement[x])+117-int(textWidth/2)+3,1010-3),key,fill=(0,0,0), font=fnt) textImage.text((32+(384*placement[x])+117-int(textWidth/2)-3,1010+3),key,fill=(0,0,0), font=fnt) textImage.text((32+(384*placement[x])+117-int(textWidth/2)+3,1010+3),key,fill=(0,0,0), font=fnt) textImage.text((32+(384*placement[x])+117-int(textWidth/2),1005),key,fill=(255,255,255), font=fnt) else: textWidth = fntSmol.getsize(key)[0] textImage.text((32+(384*placement[x])+117-int(textWidth/2)-2,1020-2),key,fill=(0,0,0), font=fntSmol) textImage.text((32+(384*placement[x])+117-int(textWidth/2)+2,1020-2),key,fill=(0,0,0), font=fntSmol) textImage.text((32+(384*placement[x])+117-int(textWidth/2)-2,1020+2),key,fill=(0,0,0), font=fntSmol) textImage.text((32+(384*placement[x])+117-int(textWidth/2)+2,1020+2),key,fill=(0,0,0), font=fntSmol) textImage.text((32+(384*placement[x])+117-int(textWidth/2),1015),key,fill=(255,255,255), font=fntSmol) logThis("Saving table image") table.save("resources/games/blackjackTables/blackjackTable"+channel+".png") return def drawHand(hand, dealer, busted, blackjack): logThis("Drawing hand "+str(hand)) fnt = ImageFont.truetype('resources/futura-bold.ttf', 200) fnt2 = ImageFont.truetype('resources/futura-bold.ttf', 120) length = len(hand) background = Image.new("RGBA", ((border*2)+691+(125*(length-1)),(border*2)+1065),(0,0,0,0)) textImage = ImageDraw.Draw(background) if dealer: img = Image.open("resources/games/cards/"+hand[0].upper()+".png") #rotation = (random.randint(-20,20)/10.0) img = img.rotate(rotation,expand = 1) #placement = [random.randint(-20,20),random.randint(-20,20)] background.paste(img,(border+placement[0],border+placement[1]),img) img = Image.open("resources/games/cards/red_back.png") #rotation = (random.randint(-20,20)/10.0) img = img.rotate(rotation,expand = 1) #placement = [random.randint(-20,20),random.randint(-20,20)] background.paste(img,(125+border+placement[0],border+placement[1]),img) else: for x in range(length): img = Image.open("resources/games/cards/"+hand[x].upper()+".png") #rotation = (random.randint(-20,20)/10.0) img = img.rotate(rotation,expand = 1) #placement = [random.randint(-20,20),random.randint(-20,20)] background.paste(img,(border+(x*125)+placement[0],border+placement[1]),img) w, h = background.size textHeight = 290+border #logThis("Drawing busted/blackjack") if busted: textWidth = fnt.getsize("BUSTED")[0] textImage.text((int(w/2)-int(textWidth/2)-10,textHeight+20-10),"BUSTED",fill=(0,0,0), font=fnt) textImage.text((int(w/2)-int(textWidth/2)+10,textHeight+20-10),"BUSTED",fill=(0,0,0), font=fnt) textImage.text((int(w/2)-int(textWidth/2)-10,textHeight+20+10),"BUSTED",fill=(0,0,0), font=fnt) textImage.text((int(w/2)-int(textWidth/2)+10,textHeight+20+10),"BUSTED",fill=(0,0,0), font=fnt) textImage.text((int(w/2)-int(textWidth/2)-5,textHeight-5),"BUSTED",fill=(255,255,255), font=fnt) textImage.text((int(w/2)-int(textWidth/2)+5,textHeight-5),"BUSTED",fill=(255,255,255), font=fnt) textImage.text((int(w/2)-int(textWidth/2)-5,textHeight+5),"BUSTED",fill=(255,255,225), font=fnt) textImage.text((int(w/2)-int(textWidth/2)+5,textHeight+5),"BUSTED",fill=(255,255,255), font=fnt) textImage.text((int(w/2)-int(textWidth/2),textHeight),"BUSTED",fill=(255,50,50), font=fnt) elif blackjack: textWidth = fnt2.getsize("BLACKJACK")[0] textImage.text((int(w/2)-int(textWidth/2)-6,textHeight+20-6),"BLACKJACK",fill=(0,0,0), font=fnt2) textImage.text((int(w/2)-int(textWidth/2)+6,textHeight+20-6),"BLACKJACK",fill=(0,0,0), font=fnt2) textImage.text((int(w/2)-int(textWidth/2)-6,textHeight+20+6),"BLACKJACK",fill=(0,0,0), font=fnt2) textImage.text((int(w/2)-int(textWidth/2)+6,textHeight+20+6),"BLACKJACK",fill=(0,0,0), font=fnt2) textImage.text((int(w/2)-int(textWidth/2)-3,textHeight-3),"BLACKJACK",fill=(255,255,255), font=fnt2) textImage.text((int(w/2)-int(textWidth/2)+3,textHeight-3),"BLACKJACK",fill=(255,255,255), font=fnt2) textImage.text((int(w/2)-int(textWidth/2)-3,textHeight+3),"BLACKJACK",fill=(255,255,255), font=fnt2) textImage.text((int(w/2)-int(textWidth/2)+3,textHeight+3),"BLACKJACK",fill=(255,255,255), font=fnt2) textImage.text((int(w/2)-int(textWidth/2),textHeight),"BLACKJACK",fill=(155,123,0), font=fnt2) #logThis("Returning resized image") return background.resize((int(w/3.5),int(h/3.5)),resample=Image.BILINEAR)