Compare commits
5 Commits
ae6c23b6b7
...
f36bce66e2
| Author | SHA1 | Date | |
|---|---|---|---|
| f36bce66e2 | |||
| f625c80fd3 | |||
| db7faca3d9 | |||
| 11b1dad78b | |||
| 3471e41272 |
@ -5,11 +5,10 @@
|
|||||||
{"file": "Vampire Wars.ttf", "alphabet": "abcdefghijklmnopqrstuvwxyz0123456789", "difficulty": 0.1},
|
{"file": "Vampire Wars.ttf", "alphabet": "abcdefghijklmnopqrstuvwxyz0123456789", "difficulty": 0.1},
|
||||||
{"file": "CloisterBlack.ttf", "alphabet": "0123456789", "difficulty": 0.1},
|
{"file": "CloisterBlack.ttf", "alphabet": "0123456789", "difficulty": 0.1},
|
||||||
{"file": "Noxlock-Free.otf", "alphabet": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "difficulty": 0.2},
|
{"file": "Noxlock-Free.otf", "alphabet": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "difficulty": 0.2},
|
||||||
{"file": "CloisterBlack.ttf", "alphabet": "abcdefghijklmnopqrstuvwxyz", "difficulty": 0.3},
|
{"file": "CloisterBlack.ttf", "alphabet": "abcdefghijklmnopqrstuvwxyz", "difficulty": 0.5},
|
||||||
{"file": "LEDLIGHT.otf", "alphabet": "abcdefghijklmnopqrstuvwxyz", "difficulty": 0.4},
|
{"file": "LEDLIGHT.otf", "alphabet": "abcdefghijklmnopqrstuvwxyz", "difficulty": 0.4},
|
||||||
{"file": "Flame on Black.ttf", "alphabet": "z0123456789!?/#<>", "difficulty": 0.5},
|
{"file": "Flame on Black.ttf", "alphabet": "0123456789!?/#<>", "difficulty": 0.5},
|
||||||
{"file": "CloisterBlack.ttf", "alphabet": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "difficulty": 0.6},
|
{"file": "CloisterBlack.ttf", "alphabet": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "difficulty": 0.6},
|
||||||
{"file": "mevno2.ttf", "alphabet": "abcdefghijklmnopqrstuvwxyz", "difficulty": 0.8},
|
|
||||||
{"file": "CloisterBlack.ttf", "alphabet": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "difficulty": 0.8},
|
{"file": "CloisterBlack.ttf", "alphabet": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "difficulty": 0.8},
|
||||||
{"file": "RoyalInitialen.ttf", "alphabet": "abcdefghijklmnopqrstuvwxyz", "difficulty": 0.8},
|
{"file": "RoyalInitialen.ttf", "alphabet": "abcdefghijklmnopqrstuvwxyz", "difficulty": 0.8},
|
||||||
{"file": "DeathMohawk_PERSONAL_USE_ONLY.otf", "alphabet": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "difficulty": 1.0}
|
{"file": "DeathMohawk_PERSONAL_USE_ONLY.otf", "alphabet": "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "difficulty": 1.0}
|
||||||
|
|||||||
BIN
fonts/mevno2.ttf
BIN
fonts/mevno2.ttf
Binary file not shown.
20
game.py
20
game.py
@ -58,14 +58,14 @@ class Captcha:
|
|||||||
# anthing below this index should appear green.
|
# anthing below this index should appear green.
|
||||||
|
|
||||||
def addChar(self, char, font):
|
def addChar(self, char, font):
|
||||||
self.chars.append(char.upper())
|
self.chars.append(char)
|
||||||
self.fonts.append(font)
|
self.fonts.append(font)
|
||||||
|
|
||||||
def match(self, char):
|
def match(self, char):
|
||||||
if self.charIdx == len(self.chars):
|
if self.charIdx == len(self.chars):
|
||||||
return True, True
|
return True, True
|
||||||
|
|
||||||
matches = char.upper() == self.chars[self.charIdx]
|
matches = char.upper() == self.chars[self.charIdx].upper()
|
||||||
print(f'{char.upper()} == {self.chars[self.charIdx]}')
|
print(f'{char.upper()} == {self.chars[self.charIdx]}')
|
||||||
if matches:
|
if matches:
|
||||||
self.charIdx += 1
|
self.charIdx += 1
|
||||||
@ -97,6 +97,8 @@ class Game(gameUtils.Game):
|
|||||||
self.timerStart = 0
|
self.timerStart = 0
|
||||||
# Holds how much time the user has in total (not updated)
|
# Holds how much time the user has in total (not updated)
|
||||||
self.timerLength = 0
|
self.timerLength = 0
|
||||||
|
# Used for animating the red flash on the current character if the users enters it wrong.
|
||||||
|
self.lastWrong = 0
|
||||||
|
|
||||||
self.fonts = []
|
self.fonts = []
|
||||||
self.Drawsurface = Image.new("RGB",(800,220),(255,255,255))
|
self.Drawsurface = Image.new("RGB",(800,220),(255,255,255))
|
||||||
@ -163,7 +165,7 @@ class Game(gameUtils.Game):
|
|||||||
|
|
||||||
# Start the timer
|
# Start the timer
|
||||||
self.timerStart = time.perf_counter()
|
self.timerStart = time.perf_counter()
|
||||||
self.timerLength = random.randint(5, 10)
|
self.timerLength = random.randint(7, 15)
|
||||||
|
|
||||||
def onEvent(self, event):
|
def onEvent(self, event):
|
||||||
"""
|
"""
|
||||||
@ -184,6 +186,8 @@ class Game(gameUtils.Game):
|
|||||||
|
|
||||||
elif event.unicode != '' and event.unicode in alphabet:
|
elif event.unicode != '' and event.unicode in alphabet:
|
||||||
correct, finished = self.currentCaptcha.match(event.unicode)
|
correct, finished = self.currentCaptcha.match(event.unicode)
|
||||||
|
if not correct:
|
||||||
|
self.lastWrong = time.perf_counter()
|
||||||
print(correct)
|
print(correct)
|
||||||
if finished:
|
if finished:
|
||||||
self.createCaptcha()
|
self.createCaptcha()
|
||||||
@ -194,9 +198,17 @@ class Game(gameUtils.Game):
|
|||||||
game logic that should be ran once per frame in here.
|
game logic that should be ran once per frame in here.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.surf.fill((0, 0, 0)) #sets the background colour
|
r = 1 - min(time.perf_counter() - self.lastWrong, 1)
|
||||||
|
|
||||||
|
self.surf.fill((r * 255, 0, 0)) #sets the background colour
|
||||||
self.surf.blit(gameUtils.centre(self.currentCaptchaImg, 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
|
#TODO: actually scale the text, however, more work needs to be done on the actual function of the game first
|
||||||
|
|
||||||
|
if self.currentCaptcha is not None:
|
||||||
|
x1 = self.size[0] / 2 - self.currentCaptchaImg.size[0] / 2
|
||||||
|
y = self.size[1] / 2 + self.currentCaptchaImg.size[1] / 2
|
||||||
|
x2 = x1 + (self.currentCaptcha.charIdx / len(self.currentCaptcha.chars)) * self.currentCaptchaImg.size[0]
|
||||||
|
pygame.draw.line(self.surf, (0, 255, 0), (x1, y), (x2, y), 5)
|
||||||
|
|
||||||
if self.timerLength != 0:
|
if self.timerLength != 0:
|
||||||
timeLeft = self.timerLength - (time.perf_counter() - self.timerStart)
|
timeLeft = self.timerLength - (time.perf_counter() - self.timerStart)
|
||||||
|
|||||||
Reference in New Issue
Block a user