Cleaned up code
This commit is contained in:
39
game.py
39
game.py
@ -25,6 +25,12 @@ def normalDist(difficulty):
|
||||
# Cap it to be 0-1 again and return
|
||||
return min(max(v, 0), 1)
|
||||
|
||||
def PIL2PG(pilImage: Image) -> pygame.Surface:
|
||||
"""
|
||||
Converts a PIL image to a Pygame surface.
|
||||
"""
|
||||
return pygame.image.fromstring(pilImage.tobytes(), pilImage.size, pilImage.mode)
|
||||
|
||||
class Font:
|
||||
def __init__(self, data, fontSize):
|
||||
self.font = ImageFont.truetype(os.path.join('./fonts/', data['file']), fontSize)
|
||||
@ -50,7 +56,7 @@ class Game(gameUtils.Game):
|
||||
# The actual text in the captcha, used to check what the user typed
|
||||
self.currentCaptchaText = ''
|
||||
# The image of the captcha
|
||||
self.currentCaptchaImg = ''
|
||||
self.currentCaptchaImg = pygame.Surface((0, 0))
|
||||
|
||||
self.fonts = []
|
||||
self.Drawsurface = Image.new("RGB",(800,220),(255,255,255))
|
||||
@ -81,21 +87,37 @@ class Game(gameUtils.Game):
|
||||
to draw the fonts, add noise, random shapes, transforms etc. based on
|
||||
self.gameDifficulty
|
||||
"""
|
||||
self.Drawsurface = Image.new("RGB",(800,220),(255,255,255)) # creates a surface to draw the fonts on
|
||||
draw = ImageDraw.Draw(self.Drawsurface) # creates an object to let us draw to the surface
|
||||
# Create a surface for that captcha
|
||||
drawSurface = Image.new("RGB", (800,220), (255,255,255))
|
||||
# Create a drawing object
|
||||
draw = ImageDraw.Draw(drawSurface)
|
||||
|
||||
# Temporarily stores the current captcha text
|
||||
captcha = ''
|
||||
# Get a random cpatcha length
|
||||
capLength = random.randint(3, 6)
|
||||
for i in range(capLength):
|
||||
# Calculate the base X position of this character
|
||||
# TODO: Make this better, I'm not too happy with my implementation here.
|
||||
x = self.size[0] / (capLength + 3)
|
||||
x *= i
|
||||
# Get the selected difficulty for this character
|
||||
charDiff = normalDist(self.gameDifficulty)
|
||||
# Pick a random font based on that difficulty
|
||||
font = random.choice(self.fontsByDifficulty(charDiff))
|
||||
# Pick a random character
|
||||
char = random.choice(font.alphabet)
|
||||
draw.ellipse((x, 10, x+5, 15), fill = 'blue', outline ='blue')
|
||||
draw.text((x, 10), char, font=font.font, fill=(0,0,0)) #actually draws the text
|
||||
# Draw the selected character, with the selected font
|
||||
draw.text((x, 10), char, font=font.font, fill=(0,0,0))
|
||||
# Append the character to the captcha
|
||||
captcha += char
|
||||
|
||||
# Store the correct captcha text
|
||||
self.currentCaptchaText = captcha
|
||||
|
||||
# Store the created image
|
||||
self.currentCaptchaImg = PIL2PG(drawSurface)
|
||||
|
||||
print(captcha)
|
||||
|
||||
def onEvent(self, event):
|
||||
@ -123,13 +145,8 @@ class Game(gameUtils.Game):
|
||||
# Don't remove this. It does important things. :3
|
||||
super().update()
|
||||
|
||||
#self.textTest = ImageFont.truetype("./fonts/"+self.fonts[2]["file"],200) #loads the font
|
||||
|
||||
self.pygameConvert = pygame.image.fromstring(self.Drawsurface.tobytes(), self.Drawsurface.size, self.Drawsurface.mode) #converts the pillow image to a pygame image
|
||||
#no, there wasn't an easier way I could find to achieve this, stab me
|
||||
|
||||
self.surf.fill((0, 0, 0)) #sets the background colour
|
||||
self.surf.blit(gameUtils.centre(self.pygameConvert,self.size)) #draws the text to center of the screen
|
||||
self.surf.blit(gameUtils.centre(self.currentCaptchaImg, self.size)) #draws the text to center of the screen
|
||||
#TODO: actually scale the text, however, more work needs to be done on the actual function of the game first
|
||||
|
||||
def close(self):
|
||||
|
||||
Reference in New Issue
Block a user