Skip to content

Instantly share code, notes, and snippets.

@jdoig
Last active August 29, 2015 14:06
Show Gist options
  • Save jdoig/37b6f1fcf9840a8949d6 to your computer and use it in GitHub Desktop.
Save jdoig/37b6f1fcf9840a8949d6 to your computer and use it in GitHub Desktop.
WIP Tamigochi (about 50-60 mins in)
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