97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
from PIL import Image
|
|
import logging
|
|
import pygame
|
|
import gameUtils
|
|
import NoPELib
|
|
import random
|
|
import json
|
|
|
|
def normalDist(difficulty):
|
|
"""
|
|
This function generates a random number between 0-1
|
|
that should be used to get a font with a difficulty
|
|
equal to or less than the number returned.
|
|
"""
|
|
# Create a random number between 0-1
|
|
v = random.randint(-1000, 1000) / 1000
|
|
# Redistribute the number
|
|
v = v**3
|
|
# Shift the number based on game difficulty
|
|
difficulty = difficulty * 1.5 - 0.25
|
|
v += difficulty
|
|
# Cap it to be 0-1 again and return
|
|
return min(max(v, 0), 1)
|
|
|
|
class Game(gameUtils.Game):
|
|
def __init__(self, *args, **kwargs):
|
|
"""
|
|
Ran when the game starts.
|
|
|
|
You have access to the following variables:
|
|
self.surf (pygame.Surface): This is the surface you draw onto.
|
|
self.pm (NoPELib.PlayerManager): This is where your players are stored.
|
|
self.cfg (dict): Everything from the `game.toml` file. You can access it like this: self.details['title']
|
|
"""
|
|
|
|
# Don't remove this. It does important things. :3
|
|
super().__init__(*args, **kwargs)
|
|
|
|
# A value between 0-1 that defines which fonts the game will use
|
|
self.gameDifficulty = 0
|
|
# The actual text in the captcha, used to check what the user typed
|
|
self.currentCaptchaText = ''
|
|
# The image of the captcha
|
|
self.currentCaptchaImg = ''
|
|
|
|
self.fonts = {}
|
|
|
|
# I haven't finished this yet, you might want to create
|
|
# an object or something, I don't know. Keep in mind you
|
|
# have to load all of the font files for use later.
|
|
with open(f'./fonts/fonts.json', 'r') as f:
|
|
j = json.loads(f.read())
|
|
|
|
#for fontData in j:
|
|
# self.fonts.update()
|
|
|
|
def createCaptcha(self):
|
|
"""
|
|
Use PIL (https://pillow.readthedocs.io/en/stable/handbook/tutorial.html)
|
|
to draw the fonts, add noise, random shapes, transforms etc. based on
|
|
self.gameDifficulty
|
|
"""
|
|
pass
|
|
|
|
def onEvent(self, event):
|
|
"""
|
|
Ran when an event is fired.
|
|
|
|
Args:
|
|
event (pygame.Event): The event that was fired.
|
|
"""
|
|
if event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_1:
|
|
self.gameDifficulty -= 0.1
|
|
elif event.key == pygame.K_2:
|
|
self.gameDifficulty += 0.1
|
|
elif event.key == pygame.K_3:
|
|
self.createCaptcha()
|
|
print(self.gameDifficulty)
|
|
|
|
def update(self):
|
|
"""
|
|
Ran once per frame, put your drawing code and any
|
|
game logic that should be ran once per frame in here.
|
|
"""
|
|
|
|
# Don't remove this. It does important things. :3
|
|
super().update()
|
|
|
|
self.surf.fill((0, 0, 0))
|
|
|
|
def close(self):
|
|
"""
|
|
Ran when the game closes.
|
|
"""
|
|
pass
|