Last active
August 29, 2015 14:06
-
-
Save jdoig/37b6f1fcf9840a8949d6 to your computer and use it in GitHub Desktop.
WIP Tamigochi (about 50-60 mins in)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
import time | |
from datetime import datetime, timedelta | |
from random import randint | |
STATES = { | |
'happy': lambda a: ('happy','prrrr') if not a else ( | |
'sad', 'pffft'), | |
'hungry': lambda a: ('happy', 'nom') if a == 'feed' else ( | |
'sad', "no I'm hungry!"), | |
'poopy': lambda a: ('happy', 'Mmmmm') if a == 'clean' else ( | |
'sad', 'wipe me!'), | |
'sleepy': lambda a: ('happy', 'Zzzzz') if a == 'rest' else ( | |
'sad', 'yawn'), | |
'dead': lambda a: ('dead', '...') | |
} | |
class TamigochiState(object): | |
def __init__(self, name, t_time=None): | |
self.time = t_time | |
self.name = name | |
self.f = STATES[name] | |
def __str__(self): | |
return self.name | |
@classmethod | |
def default(cls, time=datetime.now() + timedelta(seconds=5)): | |
return cls('happy', time) | |
@classmethod | |
def rand(cls): | |
states = STATES.keys() | |
state = states[randint(0, len(states) - 1)] | |
return cls(state) | |
def simulate(tami): | |
last = tami[0].time | |
state = tami[0] | |
chance = [TamigochiState.default()] if state.name == 'happy' else [] | |
while True: | |
nxt = last + timedelta(seconds=randint(4, 8)) | |
state = TamigochiState.rand() | |
state.time = nxt | |
tami.append(state) | |
if state.name == "dead": | |
if chance: | |
tami.pop() | |
tami.append(chance.pop()) | |
else: | |
return sorted(tami, key=lambda t: t.time) | |
last = nxt | |
if __name__ == '__main__': | |
start = datetime.now() | |
tam = simulate([TamigochiState.default(start)]) | |
currently = tam[0] | |
while currently: | |
ipt = raw_input("Tamigochi: ") | |
valid = [t for t in tam if t.time >= datetime.now()] | |
if not valid or valid[0].name == 'dead': | |
print "Tamigochi has died!" | |
sys.exit() | |
currently = valid[0] | |
if ipt in ['feed', 'clean', 'rest']: | |
actioned = currently.f(ipt) | |
print actioned[1] | |
if actioned[0] != 'sad': | |
tam = simulate([TamigochiState(actioned[0],datetime.now())]) | |
else: | |
print currently | |
time.sleep(0.1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment