1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
import pygame
from GameEngine import GameEngineElement
from constants import MENU_PATH, NORTH, SOUTH, EAST, WEST, RIGHT, LEFT
from gettext import gettext as _
class Profile(GameEngineElement):
def __init__(self, recall_string=None, name_entry_cb=None):
GameEngineElement.__init__(self)
self.name = ""
self.dungeon_id = "al1.txt"
self.position = (-1, -1)
self.playerFacing=NORTH
# 4 types of stats and difficulties
self.problem_stats = {}
self.difficulty = {}
for stat in ['mult', 'div', 'geo', 'shop']:
# Each type of stat has 3 "levels" easy, medium, hard
# Shop uses level for too much, too little, exact
self.problem_stats[stat] = [(0,0), (0,0), (0,0)]
#Difficulty: 1=Easy 2=Meduim(default) 3=Hard
self.difficulty[stat] = 2
self.puzzlesSolved=0
self.inventory = []
if recall_string:
self.load_from_json_string( recall_string )
if self.name == "":
self.name_cb = name_entry_cb
self.add_to_engine()
def load_from_json_string( self, recall_string ):
print "TO BE IMPLEMENTED"
def dump_to_json_string( self ):
print "TO BE IMPLEMENTED"
def update_problem_stat( self, p_type, level, correct ):
assert( p_type in self.problem_stats )
assert( level >= 0 and level < len(self.problem_stats) - 1 )
correct, wrong = self.problem_stats[p_type][level]
if correct:
self.problem_stats[p_type][level] = (correct + 1, wrong)
else:
self.problem_stats[p_type][level] = (correct, wrong + 1)
def move_to(self, x, y):
self.position = (x, y)
def turn(self, dir):
if dir == RIGHT:
self.playerFacing = (self.playerFacing - 1) % 4
elif dir == LEFT:
self.playerFacing = (self.playerFacing + 1) % 4
def give_item(self, item):
self.inventory.append(item)
def add_to_engine(self):
super( Profile, self).add_to_engine()
self.background_img = pygame.image.load(MENU_PATH+"mafh_splash.gif")
def remove_from_engine(self):
super( Profile, self).remove_from_engine()
del self.background_img
def event_handler(self, event):
"""
Handles user input (used only for name entry)
"""
if event.type == pygame.KEYDOWN:
if pygame.key.name(event.key)=='backspace':
self.name = self.name[0:-1]
return True
elif pygame.key.name(event.key)=='return':
self.remove_from_engine()
self.name_cb()
return True
else:
self.name+=event.unicode
return True
def draw(self, screen):
"""
Draws user input for name to the screen
"""
font = pygame.font.Font(None, 32)
text=font.render(self.name,True,(0,0,0))
textRect=(400,400,400,400)
screen.blit(self.background_img,(0,0,1200,900))
screen.fill((150,150,255),(250,250,600,400))
screen.blit(font.render(_("Enter name:"),True,(0,0,0)),(300,300,20,20))
screen.blit(font.render(_("Return to continue"),True,(0,0,0)),(500,500,20,20))
screen.blit(text, textRect)
|