能够越来越熟练使用python语言实现小游戏,很感激!在实现过程中,最主要的是分清逻辑关系,设置好变量,将大步骤细分成小步骤逐步解决。这样不仅容易知道哪里出错,也会因为完成某个小步骤获得成就感,从而很有动力坚持下去!(生活的问题跟编程有很多相似之处!果然学问有很多共通之处)
Memory顾名思义挑战记忆力,将数值一样牌的2个2个配对翻出,用最短的次数内翻出所有牌者胜利。
游戏时我总结了个小技巧:四个四个翻,默念对应的数,这样很容易想起数值前后有哪些数。(你也许有更好的记忆方法,欢迎分享哦~~)
编程思路如下:
1. 首先使用在canvas.draw_polygon函数绘制16个卡片;
2. 再设置鼠标点击实现卡片翻转,显示数字;
3. 这些都没问题后,再编写代码实现规则。游戏过程中有3种状态,第一种为初始状态state=0,点击翻转对应卡片;第二种,为已翻转1个卡片,点击后翻转第2个卡片;在第三种状态下,先判断两个已显示的卡片数字是否相同,从而判断是否翻回去,否则一直显示,再翻转点击的卡片,同时状态切换至状态2.
4. 最后设置翻转了多少回,改变左边的Turns,可以从中获悉谁用的回数少,判断胜负。
这是游戏界面截图(界面简陋,现在注重实现~~后面再一点点讲究美观吧~):
实现代码如下:
#Memory.py
import simplegui
import random
# helper function to initialize globals
def new_game():
global deck_val, state, exposed, t
state, t = 0, 0
deck_val = [i%8 for i in range(16)]
random.shuffle(deck_val)
exposed = [False for i in range(16)]
label.set_text("Turns = "+str(t))
# define event handlers
def mouseclick(pos):
# add game state logic here
global state, choice, click1, click2, t
choice = int(pos[0]/50)
if state ==0:
state = 1
click1 = choice
exposed[click1] = True
elif state ==1:
if not exposed[choice]:
state = 2
click2 = choice
exposed[click2] = True
elif state == 2:
if not exposed[choice]:
state = 1
if not deck_val[click1] == deck_val[click2]:
exposed[click1] = exposed[click2] = False
click1 = choice
exposed[click1] = True
t+=1
label.set_text("Turns = "+str(t))
# cards are logically 50x100 pixels in size
def draw(canvas):
global exposed
for i in range(16):
if exposed[i]:
canvas.draw_polygon([(50*i, 0),(50*i+50,0),(50*i+50,100),(50*i,100)],3,'White','Gray')
canvas.draw_text(str(deck_val[i]), (50*i+20,60), 30, 'White')
else:
canvas.draw_polygon([(50*i, 0),(50*i+50,0),(50*i+50,100),(50*i,100)],3,'White','Green')
pass
# create frame and add a button and labels
frame = simplegui.create_frame("Memory", 800, 100)
frame.add_button("Reset", new_game)
label = frame.add_label("Turns = 0")
# register event handlers
frame.set_mouseclick_handler(mouseclick)
frame.set_draw_handler(draw)
# get things rolling
new_game()
frame.start()
# Always remember to review the grading rubric