《python和pygame游戏开发指南》之memorypuzzle.py分析

本文分析了使用Python和pygame库编写的memorypuzzle.py游戏。通过这个游戏,作者旨在吸引孩子们对编程的兴趣。游戏逻辑简单,包括初始化面板、监听鼠标事件、检查点击方块匹配等步骤。当所有方块匹配成功后,游戏进入下一局。程序中还包含了音乐播放功能。代码结构清晰,易于理解,适合作为Python初学者的游戏编程入门示例。
摘要由CSDN通过智能技术生成

《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 &#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值