《python和pygame游戏开发指南》之memorypuzzle.py分析
前段时间学习C语言,感觉那玩意儿,太底层了。
最近,感觉孩子们都爱玩游戏,因此,在想,要吸引他们的注意力,可能就要让他们玩游戏。因此,想,如何用电脑做游戏呢,为此,就用python,象那些前辈用basic做游戏一样,先让他们玩python写的小游戏,成功的吸引他们的兴趣,再慢慢的教他们python编程。这样慢慢的吸引他们走上正轨。
如是,我就开始学python.我受了《程序员的呐喊》作者的影响,一直不太喜欢python,非常喜欢ruby,可关键是现在大家用ruby的人太少了。搞网页编程,我又不喜欢。
于是读python.今天看看这个memorypuzzle.py程序。
这个程序读了有一段时间了。今天再拿起来,感觉写得真好。
因为作者出了书,来解释这个程序,这就只从我的角度来分析程序。
先是要玩几把这个游戏,我还给游戏加了一段音乐,让它循环播放《丑小鸭》。
程序的主循环是这样
1。先画好程序的面板,并把所有方块都盖上。作者用一个二维数据存储面板,其中二维数组的元素又是一个数组,其中有形状和颜色两项。再用另一个二维数组来控制方块是否已经打开了。
2。无限循环
捕获到鼠标事件,记住鼠标的动作和位置
根据鼠标的位置转为面板二维数组的下标
如果鼠标范围在面板上
如果只是放在面板上,并且方块没有打开,且没有单击动作就高亮显示
如果点击了方块
将该方块是否显示的标志暂时改为显示
如果是某对点击中的第一次,就设置好第一次点击标志
否则,判断本次显示的方块颜色+形状是否与上次的颜色+形状一致。
如果不一致,就把本次和上次已经打开的方块都关上
如果一致,判断是否全都翻转了,如果全翻转了,就显示下一局。
整个程序的逻辑很简单。
我把全部源程序放在后面,感觉老外的程序就好象一篇英语文章。或许,我应该再去学学写作。
# Memory Puzzle
# By Al Sweigart al@inventwithpython.com
# http://inventwithpython.com/pygame
# Released under a "Simplified BSD" license
#hello ok
import random, pygame, sys
from pygame.locals import *
FPS = 30 # frames per second, the general speed of the program
WINDOWWIDTH = 640 # size of window's width in pixels
WINDOWHEIGHT = 480 # size of windows' height in pixels
REVEALSPEED = 8 # speed boxes' sliding reveals and covers
BOXSIZE = 40 # size of box height & width in pixels
GAPSIZE = 10 # size of gap between boxes in pixels
BOARDWIDTH = 4 # number of columns of icons
BOARDHEIGHT = 3 # number of rows of icons
assert (BOARDWIDTH * BOARDHEIGHT) % 2 == 0, 'Board needs to have an even number of boxes for pairs of matches.'
XMARGIN = int((WINDOWWIDTH - (BOARDWIDTH * (BOXSIZE + GAPSIZE))) / 2)
YMARGIN = int((WINDOWHEIGHT - (BOARDHEIGHT * (BOXSIZE + GAPSIZE))) / 2)
# R G B
GRAY = (100, 100, 100)
NAVYBLUE = ( 60, 60, 100)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 255)
YELLOW = (255, 255, 0)
ORANGE = (255, 128, 0)
PURPLE = (255, 0, 255)
CYAN = ( 0, 255, 255)
BGCOLOR = NAVYBLUE
LIGHTBGCOLOR = GRAY
BOXCOLOR = WHITE
HIGHLIGHTCOLOR &#