From 87f4c44976e559579a0b1adcd0ef0ca22aa8e8c9 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 5 Jul 2015 19:22:33 -0700 Subject: [PATCH] else --- .GitImages/basegame.png | Bin 0 -> 30827 bytes BaseGame/README.md | 10 ++++ BaseGame/basegame.py | 112 ++++++++++++++++++++++++++++++++++++++++ Keyboard/keyboard.pyw | 75 +++++++++++++++++++++++++++ TKdraw/README.md | 2 +- 5 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 .GitImages/basegame.png create mode 100644 BaseGame/README.md create mode 100644 BaseGame/basegame.py create mode 100644 Keyboard/keyboard.pyw diff --git a/.GitImages/basegame.png b/.GitImages/basegame.png new file mode 100644 index 0000000000000000000000000000000000000000..15f657c18d3682f5949c3a96fdf6ab0fbbcaa5c8 GIT binary patch literal 30827 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 QpT(|E!P+WSO3#A-9~qT$k^lez literal 0 HcmV?d00001 diff --git a/BaseGame/README.md b/BaseGame/README.md new file mode 100644 index 0000000..b086b79 --- /dev/null +++ b/BaseGame/README.md @@ -0,0 +1,10 @@ +BaseGame +======= + +Practice your ability to convert numbers between two bases. + +Edit the `DEFAULT_` variables at the top of the script to however you like them. While playing, you can enter "!" to play on different settings. Enter "?" to receive the answer to the current round. + +

+ basegame +

\ No newline at end of file diff --git a/BaseGame/basegame.py b/BaseGame/basegame.py new file mode 100644 index 0000000..0782ba0 --- /dev/null +++ b/BaseGame/basegame.py @@ -0,0 +1,112 @@ +import random +import shutil + +DEFAULT_FROMBASE = 10 +DEFAULT_TOBASE = 16 +DEFAULT_LOWER = 0 +DEFAULT_UPPER = 1000 + + +TERMINALWIDTH = shutil.get_terminal_size().columns + +def basex(number, base, alphabet='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'): + """Converts an integer to a different base string.""" + alphabet = alphabet[:base] + if not isinstance(number, (int, str)): + raise TypeError('number must be an integer') + number = int(number) + based = '' + sign = '' + if number < 0: + sign = '-' + number = -number + if 0 <= number < len(alphabet): + return sign + alphabet[number] + while number != 0: + number, i = divmod(number, len(alphabet)) + based = alphabet[i] + based + return sign + based + +def changebase(number, frombase, tobase): + number = str(number) + result = int(number, frombase) + return basex(result, tobase) + +def intinput(prompt, greaterthan=None): + ''' Prompt for input until the user enters an int ''' + while True: + result = input(prompt) + try: + i = int(result) + if greaterthan is None or i > greaterthan: + return i + except ValueError: + pass + +def configuration(): + frombase = intinput(' From base: ', 1) + tobase = intinput(' To base: ', 1) + lower = intinput('Lower bound: ') + upper = intinput('Upper bound: ', lower) + return { + 'frombase': frombase, + 'tobase': tobase, + 'lower': lower, + 'upper': upper, + } + +def calcpoints(solution, lower, upper, maxpoints): + ''' + 1/2 of the maxpoints are granted automatically. + The other 1/2 points depends on how large the number + you had to guess was. + ''' + basescore = int(maxpoints / 2) + 1 + bonus = (solution - lower) / (upper - lower) + bonus *= basescore + bonus = int(bonus) + return basescore + bonus + +def playgame(): + c= { + 'frombase': DEFAULT_FROMBASE, + 'tobase': DEFAULT_TOBASE, + 'lower': DEFAULT_LOWER, + 'upper': DEFAULT_UPPER, + } + print('\n"!" to reconfigure, "?" to give up') + score = 0 + while True: + number = random.randint(c['lower'], c['upper']) + prompt = changebase(number, 10, c['frombase']) + solution = changebase(number, 10, c['tobase']).lower() + prompt = 'b%d -> b%d : %s = ' % (c['frombase'], c['tobase'], prompt) + + cursor = len(prompt) + 1 + scoretext = '(score: %d)' % score + spacer = ' ' * (TERMINALWIDTH - (len(scoretext) + cursor)) + prompt = prompt + spacer + scoretext + prompt += '\b' * (TERMINALWIDTH - cursor) + + correctness = False + while not correctness: + guess = input(prompt).lower() + guess = guess.lstrip('0') + if guess == '!': + c = configuration() + correctness = True + print() + if guess == '?': + if c['frombase'] != 10 and c['tobase'] != 10: + b10 = ' (b10= %d)' % number + else: + b10 = '' + print('%s= %s%s'% (' '*(cursor-3), solution, b10)) + correctness = True + if guess == solution: + maxpoints = int((c['upper'] - c['lower']) ** 0.5) + score += calcpoints(number, c['lower'],c['upper'],maxpoints) + correctness = True + +if __name__ == '__main__': + playgame() \ No newline at end of file diff --git a/Keyboard/keyboard.pyw b/Keyboard/keyboard.pyw new file mode 100644 index 0000000..0999b35 --- /dev/null +++ b/Keyboard/keyboard.pyw @@ -0,0 +1,75 @@ +import tkinter + +class Keyboard: + def __init__(self): + self.windowtitle = 'Keyboard' + + self.keywidth = 30 + self.keyspace = 5 + self.keys = self.build_keydict() + + self.t = tkinter.Tk() + self.t.title(self.windowtitle) + self.w = (self.keywidth + self.keyspace) * 16 + self.h = (self.keywidth + self.keyspace) * 6 + self.screenwidth = self.t.winfo_screenwidth() + self.screenheight = self.t.winfo_screenheight() + self.windowwidth = self.w + self.windowheight = self.h + self.windowx = (self.screenwidth-self.windowwidth) / 2 + self.windowy = ((self.screenheight-self.windowheight) / 2) - 27 + self.geometrystring = '%dx%d+%d+%d' % ( + self.windowwidth, self.windowheight, self.windowx, self.windowy) + self.t.geometry(self.geometrystring) + + self.c = tkinter.Canvas(self.t) + self.c.pack(expand=True, fill='both') + + self.build_qwerty() + + self.t.bind('', self.press) + self.t.bind('', self.release) + + def mainloop(self): + self.t.mainloop() + + def press(self, event): + c = event.char.lower() + if c in self.keys: + self.c.itemconfig(self.keys[c], fill='#f00') + + def release(self, event): + c = event.char.lower() + if c in self.keys: + self.c.itemconfig(self.keys[c], fill='systembuttonface') + + def build_keydict(self): + mainy = self.keywidth + w = self.keywidth + self.keyspace + rows = [ + {'c':'`1234567890-=', 'x':w, 'y':mainy}, + {'c':'qwertyuiop[]\\', 'x':w*1.5, 'y':mainy+w}, + {'c':'asdfghjkl;\'', 'x':w*1.8, 'y':mainy+(w*2)}, + {'c':'zxcvbnm,./', 'x':w*2.4, 'y':mainy+(w*3)}, + {'c':' ', 'x':w, 'y':mainy+(w*4)} + ] + + keys = {} + for row in rows: + for ki in range(len(row['c'])): + k = row['c'][ki] + keys[k] = (row['x'] + ((self.keywidth + self.keyspace) * ki), row['y']) + return keys + + def build_qwerty(self): + w = self.keywidth + for k in self.keys: + x = self.keys[k][0] + y = self.keys[k][1] + self.keys[k] = self.c.create_rectangle(x, y, x+w, y+w) + self.c.create_text(x+(w/2), y+(w/2), text=k) + + + +k = Keyboard() +k.mainloop() \ No newline at end of file diff --git a/TKdraw/README.md b/TKdraw/README.md index 3aca3c7..c611718 100644 --- a/TKdraw/README.md +++ b/TKdraw/README.md @@ -4,5 +4,5 @@ TKDraw Unfortunately, there's no TKErase ...

- ASCII + tkdraw

\ No newline at end of file