当前位置: 首页 > wzjs >正文

北京网站建设价格web网站设计

北京网站建设价格,web网站设计,济南网络推广公司,哪个网站公司做的《Pygame实现记忆拼图游戏13》中实现鼠标点击图案后会显示图案的功能,接下来实现的是比较两个图案是否相同的功能,如果相同,则会一直显示这两个图案,否则在显示了这两个不同的图案之后,会遮盖这两个图案,如…

《Pygame实现记忆拼图游戏13》中实现鼠标点击图案后会显示图案的功能,接下来实现的是比较两个图案是否相同的功能,如果相同,则会一直显示这两个图案,否则在显示了这两个不同的图案之后,会遮盖这两个图案,如图1所示。

图1 比较两个选中的图案

实现以上功能的步骤是:首先判断用户是第一次选中图案还是第二次选中图案,如果是第一次选中,则记录该图案;如果用户是第二次选中图案,接下来则获取这两次选择图案的形状和颜色,并进行比较(选中这两个图案,此时图案就会显示);如果两次选择的形状和颜色不同,最后遮盖这两个图案,等待用户继续选择。

1 判断用户是第一次选中图案还是第二次选中图案

在main()函数中,接着《Pygame实现记忆拼图游戏13》中提到的代码,判断用户是第一次选中图案还是第二次选中图案,如图2所示。

图2 判断用户是第一次选中图案还是第二次选中图案的代码

其中,第40行代码中判断第一次选择的标志firstSelection是否是None,如果是则说明是第一次选择,此时通过第41行代码记录第一次选中图案的列数boxx和行数boxy。第一次选择的标志firstSelection在while True循环之外定义,初始值是None。

2 获取两次选择图案的形状和颜色

如果用户是第二次选择图案,则获取两次选择图案的形状和颜色,代码如图3所示。

图3 获取两次选择图案的形状和颜色的代码

其中,第42行代码中的else与图2中的if匹配,表示用户是第二次选择图案;第43-44行代码通过自定义函数getShapeAndColor()获取第一次选择图案的形状和颜色;第45-48行代码获取第二次选择图案的形状和颜色。

相关链接1 自定义函数getShapeAndColor()的相关资料,请参考

《Pygame实现记忆拼图游戏6》

3 遮盖选中的图案

接下来比较两个图案的形状和颜色,如果不相同,则将这两个图案遮盖(因为选中后这两个图案就显示了),如果相同,则不进行任何处理(因为选中后这两个图案就显示了)。代码如图4所示。

题4 遮盖选中图案的代码

其中,第48行代码比较两个图案的形状和颜色;如果不相同,第50行代码首先监听1秒钟;第51-53行代码通过自定义函数coverBoxesAnimation()遮盖选中的两个颜色;第54-55行代码将这两个图案的状态恢复为“遮盖”;第56行代码将第一次选择的标志firstSelection恢复为None。

相关链接2 自定义函数coverBoxesAnimation()的相关资料,请参考

《Pygame实现记忆拼图游戏9》

4 完整代码

添加上述功能后的完整代码如下所示。

import pygame
import os
from pygame.locals import *
import randomdef main():global DISPLAYSURFglobal FPSCLOCKFPSCLOCK = pygame.time.Clock()DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))pygame.display.set_caption('Memory Puzzle')mainBoard = getRandomizedBoard()revealedBoxes = generateRevealedBoxesData(False)startGameAnimation(mainBoard)mousex = 0 mousey = 0firstSelection = Nonewhile True:mouseClicked = Falsefor event in pygame.event.get():if event.type == QUIT:pygame.quit()os.sys.exit()elif event.type == MOUSEMOTION:mousex, mousey = event.poselif event.type == MOUSEBUTTONUP:mousex, mousey = event.posmouseClicked = Trueboxx, boxy = getBoxAtPixel(mousex, mousey)DISPLAYSURF.fill(BGCOLOR)drawBoard(mainBoard, revealedBoxes)if boxx != None and boxy != None:if not revealedBoxes[boxx][boxy]:drawHighlightBox(boxx, boxy)if not revealedBoxes[boxx][boxy] and mouseClicked:revealBoxesAnimation(mainBoard, [(boxx, boxy)])revealedBoxes[boxx][boxy] = Trueif firstSelection == None: firstSelection = (boxx, boxy)else: icon1shape, icon1color = getShapeAndColor(mainBoard,\firstSelection[0], \firstSelection[1])icon2shape, icon2color = getShapeAndColor(mainBoard, \boxx, \boxy)if icon1shape != icon2shape or icon1color != icon2color:pygame.time.wait(1000)coverBoxesAnimation(mainBoard, \[(firstSelection[0], firstSelection[1]), \(boxx, boxy)])revealedBoxes[firstSelection[0]][firstSelection[1]] = FalserevealedBoxes[boxx][boxy] = FalsefirstSelection = Nonepygame.display.update()def getBoxAtPixel(x, y):for boxx in range(BOARDWIDTH):for boxy in range(BOARDHEIGHT):left, top = leftTopCoordsOfBox(boxx, boxy)boxRect = pygame.Rect(left, top, BOXSIZE, BOXSIZE)if boxRect.collidepoint(x, y):return (boxx, boxy)return (None, None)def drawHighlightBox(boxx, boxy):left, top = leftTopCoordsOfBox(boxx, boxy)pygame.draw.rect(DISPLAYSURF, HIGHLIGHTCOLOR, \(left - 5, top - 5, BOXSIZE + 10, BOXSIZE + 10), 4)def getRandomizedBoard():icons = []for color in ALLCOLORS:for shape in ALLSHAPES:icons.append( (shape, color) )random.shuffle(icons) numIconsUsed = int(BOARDWIDTH * BOARDHEIGHT / 2) icons = icons[:numIconsUsed] * 2 random.shuffle(icons)board = []for x in range(BOARDWIDTH):column = []for y in range(BOARDHEIGHT):column.append(icons[0])del icons[0] board.append(column)return boarddef startGameAnimation(board):coveredBoxes = generateRevealedBoxesData(False)drawBoard(board, coveredBoxes)boxes = []for x in range(BOARDWIDTH):for y in range(BOARDHEIGHT):boxes.append( (x, y) )random.shuffle(boxes)boxGroups = splitIntoGroupsOf(8, boxes)for boxGroup in boxGroups:revealBoxesAnimation(board, boxGroup)coverBoxesAnimation(board, boxGroup)def revealBoxesAnimation(board, boxesToReveal):for coverage in range(BOXSIZE, (-REVEALSPEED) - 1, -REVEALSPEED):drawBoxCovers(board, boxesToReveal, coverage)def coverBoxesAnimation(board, boxesToCover):for coverage in range(0, BOXSIZE + REVEALSPEED, REVEALSPEED):drawBoxCovers(board, boxesToCover, coverage)def drawBoxCovers(board, boxes, coverage):for box in boxes:left, top = leftTopCoordsOfBox(box[0], box[1])pygame.draw.rect(DISPLAYSURF, BGCOLOR, (left, top, BOXSIZE, BOXSIZE))shape, color = getShapeAndColor(board, box[0], box[1])drawIcon(shape, color, box[0], box[1])if coverage > 0: pygame.draw.rect(DISPLAYSURF, BOXCOLOR, \(left, top, coverage, BOXSIZE))pygame.display.update()FPSCLOCK.tick(FPS)def splitIntoGroupsOf(groupSize, theList):result = []for i in range(0, len(theList), groupSize):result.append(theList[i:i + groupSize])return resultdef leftTopCoordsOfBox(boxx, boxy):left = boxx * (BOXSIZE + GAPSIZE) + XMARGINtop = boxy * (BOXSIZE + GAPSIZE) + YMARGINreturn (left, top)def drawBoard(board, revealed):for boxx in range(BOARDWIDTH):for boxy in range(BOARDHEIGHT):left, top = leftTopCoordsOfBox(boxx, boxy)if not revealed[boxx][boxy]:pygame.draw.rect(DISPLAYSURF, BOXCOLOR, \(left, top, BOXSIZE, BOXSIZE))else:shape, color = getShapeAndColor(board, boxx, boxy)drawIcon(shape, color, boxx, boxy)def generateRevealedBoxesData(val):revealedBoxes = []for i in range(BOARDWIDTH):revealedBoxes.append([val] * BOARDHEIGHT)return revealedBoxesdef getShapeAndColor(board, boxx, boxy):return board[boxx][boxy][0], board[boxx][boxy][1]
def drawIcon(shape, color, boxx, boxy):quarter = int(BOXSIZE * 0.25) half =    int(BOXSIZE * 0.5)  left, top = leftTopCoordsOfBox(boxx, boxy) if shape == DONUT:pygame.draw.circle(DISPLAYSURF, color, \(left + half, top + half), half - 5)pygame.draw.circle(DISPLAYSURF, BGCOLOR, \(left + half, top + half), quarter - 5)elif shape == SQUARE:pygame.draw.rect(DISPLAYSURF, color, \(left + quarter, top + quarter, BOXSIZE - half, BOXSIZE - half))elif shape == DIAMOND:pygame.draw.polygon(DISPLAYSURF, color, \((left + half, top), \(left + BOXSIZE - 1, top + half), \(left + half, top + BOXSIZE - 1), \(left, top + half)))elif shape == LINES:for i in range(0, BOXSIZE, 4):pygame.draw.line(DISPLAYSURF, color,\(left, top + i), (left + i, top))pygame.draw.line(DISPLAYSURF, color, \(left + i, top + BOXSIZE - 1), \(left + BOXSIZE - 1, top + i))elif shape == OVAL:pygame.draw.ellipse(DISPLAYSURF, color, \(left, top + quarter, BOXSIZE, half))
pygame.init()
WINDOWWIDTH = 640 
WINDOWHEIGHT = 480BOARDWIDTH = 10 
BOARDHEIGHT = 7
assert (BOARDWIDTH * BOARDHEIGHT) % 2 == 0, \'Board needs to have an even number of boxes for pairs of matches.'BOXSIZE = 40
GAPSIZE = 10
REVEALSPEED = 8
FPS = 30
XMARGIN = int((WINDOWWIDTH - (BOARDWIDTH * (BOXSIZE + GAPSIZE))) / 2)
YMARGIN = int((WINDOWHEIGHT - (BOARDHEIGHT * (BOXSIZE + GAPSIZE))) / 2)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)DONUT = 'donut'
SQUARE = 'square'
DIAMOND = 'diamond'
LINES = 'lines'
OVAL = 'oval'BGCOLOR = NAVYBLUE
BOXCOLOR = WHITE
HIGHLIGHTCOLOR = BLUEALLCOLORS = (RED, GREEN, BLUE, YELLOW, ORANGE, PURPLE, CYAN)
ALLSHAPES = (DONUT, SQUARE, DIAMOND, LINES, OVAL)
assert len(ALLCOLORS) * len(ALLSHAPES) * 2 >= BOARDWIDTH * BOARDHEIGHT, \"Board is too big for the number of shapes/colors defined."if __name__ == '__main__':main()

http://www.dtcms.com/wzjs/120133.html

相关文章:

  • 培训学校网站微信广告朋友圈投放
  • 专门做消防器材的网站徐州seo管理
  • 江苏建设局的资质办理网站怎么在平台上做推广
  • 广州设计企业网站抚顺seo
  • 中文企业网站html模板seo sem优化
  • 合肥疫情最新消息今天商丘搜索引擎优化
  • zblog和wordpress2016关键词优化排名软件s
  • 中国大良网站建设seo网络优化教程
  • 企业网站系统设计论文企业网站建设要多少钱
  • 靠谱毕设代做网站阿里云模板建站
  • 百度没有收录我的网站百度搜索推广平台
  • 用户体验度好的网站贷款客户大数据精准获客
  • 网站备案 取名资讯通不过网络科技公司
  • 自己做商城网站 哪种好推广小程序拿佣金
  • 朗润装饰成都装修公司广州seo优化排名公司
  • 有关做详情页的参考网站百度旗下产品
  • 手机端网站建设步骤产品推广软文范文
  • 做网站优化给业务员提成微信裂变营销软件
  • 微信公众平台小程序怎么用seo中文意思
  • ofbiz做的网站自助建站系统软件
  • asp.net网站开发详解搜索引擎付费推广
  • 南昌网站设计公司seo的搜索排名影响因素有
  • 做网站要会什么百度搜索推广方法
  • 四川学校网站建设公网络优化师
  • 通州网站制作济南网站优化培训
  • 面料 做网站seo快速提升排名
  • 滑动网站介绍网络营销的短文
  • 网站建设需要个体营业执照360推广登录平台
  • 陇南网站制作seo大牛
  • 做网站 违法百度推广外推联系方式