1、批作业中发现的一些函数用法
1、ord和chr
print ord('a')
print chr(97)
输出:
97
a
2、color的表示方法(http://en.wikipedia.org/wiki/Web_colors)
#ffffff:共6位十六进制数表示某种颜色,每两位分别对应RGB,记得前面加#
代码:
import simplegui
message = "Welcome!"
# Handler to draw on canvas
def draw(canvas):
canvas.draw_text(message, [50,112], 48, "#ffff00")
# Create a frame and assign callbacks to event handlers
frame = simplegui.create_frame("Home", 300, 200)
frame.set_draw_handler(draw)
# start the frame
frame.start()
可以按如下方法产生随机的颜色:
print hex(random.randint(0, 16777215))
print "#" + hex(random.randint(0, 16777215))[2:]
其中1677215 == 256*256*256-1,是6位16进制数做能表示的最大整数
输出是随机的:
0x2ae5db
#698d07
2、发现的牛人的作业(http://www.codeskulptor.org/#user38_M3zf9pxi0U_6.py)
牛人使用图片代替了原来的文本绘制,并且将牌变成了2排。
3、基于Class的Memory实现(http://www.codeskulptor.org/#exercises_classes_tile_selected_solution.py)
1、Tile类
Tile类是表示一张牌的类,它的数据包括牌的数值、所处位置、翻开与否3种信息(都在init函数中初始化),能绘制自己(当牌翻开时绘制数字,反之绘制绿色背面),判断鼠标是否点中自己,令自己翻开或合上,有了这些信息,就可以通过游戏逻辑来使用这张牌了。下图给出了Tile的基本框架:
2、事件触发
1、建立frame,绘制游戏次数,
2、各种handler:注册游戏开始按钮,注册绘制图案handler,注册鼠标点击handler这几项,
3、对应这些handler是各种events:点击游戏开始按钮执行new_game(),绘制图案则执行draw(),点击鼠标执行mouseclick()。
new_game():构造16张随机的纸牌,有一个列表来保存起来,对他们初始化值和位置,它们一开始都是合上的,初始化游戏次数turns=0,游戏状态state=0,并将游戏次数显示出来。
draw():对保存纸牌的列表做循环,将16张牌绘制出来。
mouseclick():这是游戏的关键,点击一张纸牌后,首先判断点到的是哪一张纸牌,由于Tile可以根据鼠标的位置判断时候被选中,可以对纸牌列表做循环找出哪张纸牌被选中。然后根据当前情况翻开或合上以前的纸牌,具体内容在游戏逻辑中说明。
4、开始游戏:首先要new_game()一下,然后frame.start()
可以看看以下代码:
3、游戏逻辑
在mouseclick()事件处理中,首先找出哪张纸牌被点中了,若该牌已经被翻开,则什么都不干,用return语句返回即可。
若该牌未被翻开,则首先将该牌翻开,然后查看state(保存了之前翻开几张牌的信息):
1、若(state==0)之前一张牌也没有翻开,则设置(state=1)状态为翻开了一张牌,并将这次翻出的牌保存给一个全局变量1,以备以后用;
2、若(state==1)之前翻过一张牌,则设置(state=2)状态为翻开了两张牌,并将游戏次数turns+1,将用文本输出;并将这次翻开的牌保存给另一全局变量2;
3、若(state==2)之前已经翻过2张牌,则设置(state=1)状态为翻开了一张牌,判断全局变量1、全局变量2是否相同,不相同则将那2张全局牌合起来;然后将这次的牌保存给全局变量1.
以上便完成了游戏逻辑,可以看看下面的代码:
4、总结