UPDATE: I was doing peer evaluation for this and I found one implementation which is better than mine. It uses classes. Check it here:
__author__ = 'RK Kuppala'
# implementation of card game - Memory
import simplegui
import random
num_list = []
exposed = []
state = 0
first_pick = 0
second_pick = 0
moves = 0
# helper function to initialize globals
def init():
global num_list, exposed, moves
moves = 0
num_list = [i%8 for i in range(16)]
random.shuffle(num_list)
exposed = [False for i in range(16)]
pass
# define event handlers
def mouseclick(pos):
global state, first_pick, second_pick, moves
this_pick = int(pos[0] / 50)
if state == 0:
first_pick = this_pick
exposed[first_pick] = True
state = 1
moves += 1
elif state == 1:
if not exposed[this_pick]:
second_pick = int(pos[0] / 50)
exposed[second_pick] = True
state = 2
moves += 1
elif state == 2:
if not exposed[this_pick]:
if num_list[first_pick] == num_list[second_pick]:
pass
else:
exposed[first_pick] = False
exposed[second_pick] = False
first_pick = this_pick
exposed[first_pick] = True
state = 1
moves += 1
l.set_text("Moves = " + str(moves))
pass
# cards are logically 50x100 pixels in size
def draw(canvas):
offset = 50
hor_pos = -25
for i in range(len(num_list)):
hor_pos += offset
canvas.draw_text(str(num_list[i]), [hor_pos, 50], 30, "White")
exposed_pos = -50
for i in exposed:
exposed_pos += offset
if not i:
canvas.draw_polygon([(exposed_pos, 0), (exposed_pos + 50, 0), (exposed_pos + 50, 100), (exposed_pos + 0, 100)], 10, "White", "Orange")
# create frame and add a button and labels
frame = simplegui.create_frame("Memory", 800, 100)
frame.add_button("Restart", init)
l=frame.add_label("Moves = 0")
# initialize global variables
init()
# register event handlers
frame.set_mouseclick_handler(mouseclick)
frame.set_draw_handler(draw)
# get things rolling
frame.start()
No comments:
Post a Comment