下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
@R_301_5565@ pygame,random,sysfrom pygame.locals @R_301_5565@ *FPS = 30BoxwIDth = 3Boxheight = 2assert BoxwIDth*Boxheight%2 == 0,'board number needs to be even'winx = 640winy = 480between = 10Boxsize = 40xmargin = int((winx-(Boxsize+between)*BoxwIDth)/2)ymargin = int((winy-(Boxsize+between)*Boxheight)/2)speed = 8#color inusenavyblue = (60,60,100)#dispfillwhite = (255,255,255)#boardcoverblue = (0,255) #highlighrect#icons colorred = (255,0)yellow = (255,0)purple = (255,255)green = (0,0)gray = (0,255)#icons shaperectan = 'rectan'lines = 'lines'circ = 'circ'poly = 'poly'allcolor = (red,yellow,purple,green)allshape = (rectan,lines,circ,poly)assert len(allcolor)*len(allshape*2)>= BoxwIDth*Boxheight,'board is too big for the number of color and shape'def main(): global fpsclock,disp pygame.init() disp = pygame.display.set_mode((winx,winy)) pygame.display.set_caption('memory puzzle') fpsclock = pygame.time.Clock() disp.fill(navyblue) reveal = getrevealed(False) mainboard = randomboard() drawboard(mainboard,reveal) startanimation(mainboard) first = None mousex = 0 mousey = 0 while True: mouseclicked = False disp.fill(navyblue) drawboard(mainboard,reveal) for event in pygame.event.get(): if event.type == QUIT or ( event.type == KEYUP and event.key == K_ESCAPE): pygame.quit() sys.exit() elif event.type == MOUSEMOTION: mousex,mousey = event.pos elif event.type == MOUSEbuttonUP: mousex,mousey = event.pos mouseclicked = True Boxx,Boxy = getpixel(mousex,mousey) if Boxx!=None and Boxy!= None: if not reveal[Boxx][Boxy]: highlighrect(Boxx,Boxy) if not reveal[Boxx][Boxy] and mouseclicked: revealboardanimation(mainboard,[(Boxx,Boxy)]) reveal[Boxx][Boxy] = True if first == None: first = (Boxx,Boxy) else: icon1shape,icon1color = getshapeandcolor(mainboard,first[0],first[1]) icon2shape,icon2color = getshapeandcolor(mainboard,Boxx,Boxy) if icon1shape!= icon2shape or icon1color!= icon2color: pygame.time.wait(1000) coverboardanimation(mainboard,[(first[0],first[1]),(Boxx,Boxy)]) reveal[first[0]][first[1]] = False reveal[Boxx][Boxy] = False elif haswon(reveal): wonanimation(mainboard) pygame.time.wait(2000) mainboard = randomboard() startanimation(mainboard) reveal = getrevealed(False) drawboard(mainboard,reveal) first = None pygame.display.update() fpsclock.tick(FPS) def leftop(Boxx,Boxy): left = xmargin + Boxx*(Boxsize + between) top = ymargin + Boxy*(Boxsize + between) return left,top def highlighrect(Boxx,Boxy): left,top = leftop(Boxx,Boxy) pygame.draw.rect(disp,blue,(left-between/2,top-between/2,Boxsize+between,Boxsize+between),4) def randomboard(): Box = [] for shape in allshape: for color in allcolor: Box.append((shape,color)) random.shuffle(Box) iconsnum = BoxwIDth*Boxheight/2 icons = Box[:iconsnum]*2 random.shuffle(icons) board = [] for Boxx in range(BoxwIDth): column = [] for Boxy in range(Boxheight): column.append(icons[0]) del icons[0] board.append(column) return board def getrevealed(val): revealedBox = [] for i in range(BoxwIDth): revealedBox.append([val]*Boxheight) return revealedBoxdef getpixel(x,y): for Boxx in range(BoxwIDth): for Boxy in range(Boxheight): left,Boxy) b = pygame.Rect((left,top,Boxsize,Boxsize)) if b.collIDepoint(x,y): return(Boxx,Boxy) return(None,None)def split(group,theList): result = [] for i in range(0,len(theList),group): result.append(theList[i:group+i]) random.shuffle(result) return resultdef getshapeandcolor(board,Boxy): return board[Boxx][Boxy][0],board[Boxx][Boxy][1]def drawicon(shape,color,Boxy) if shape == rectan: pygame.draw.rect(disp,(left+5,top+5,Boxsize-10,Boxsize-10)) elif shape == lines: for i in range(0,10): pygame.draw.line(disp,(left+i,top),(left,top+i)) pygame.draw.line(disp,(left+Boxsize-i,top+Boxsize),(left+Boxsize,top+Boxsize-i)) elif shape == circ: pygame.draw.circle(disp,(left+Boxsize/2,top+Boxsize/2),Boxsize/2-5) elif shape == poly: pygame.draw.polygon(disp,((left+Boxsize/2,top+Boxsize/2))) def drawoneboard(board,Boxes,coverage): for Box in Boxes: shape,color = getshapeandcolor(board,Box[0],Box[1]) left,top = leftop(Box[0],Box[1]) pygame.draw.rect(disp,navyblue,Boxsize)) drawicon(shape,Box[1]) if coverage>0: pygame.draw.rect(disp,white,coverage,Boxsize)) pygame.display.update() fpsclock.tick(FPS)def coverboardanimation(board,Boxcover): for coverage in range(0,Boxsize+speed,speed): drawoneboard(board,Boxcover,coverage)def revealboardanimation(board,Boxreveal): for coverage in range(Boxsize,-speed-1,-speed): drawoneboard(board,Boxreveal,coverage)def drawboard(board,revealBox): for Boxx in range(BoxwIDth): for Boxy in range(Boxheight): left,Boxy) if not revealBox[Boxx][Boxy]: pygame.draw.rect(disp,Boxsize)) else: shape,Boxy) drawicon(shape,Boxy)def startanimation(board): Boxes = [] for Boxx in range(BoxwIDth): for Boxy in range(Boxheight): Boxes.append((Boxx,Boxy)) random.shuffle(Boxes) revealBox = getrevealed(False) drawboard(board,revealBox) Boxgroups = split(8,Boxes) for Boxgroup in Boxgroups: revealboardanimation(board,Boxgroup) pygame.time.wait(300) coverboardanimation(board,Boxgroup) pygame.display.update() fpsclock.tick(FPS) def wonanimation(board): color1 = gray color2 = navyblue revealBox = getrevealed(True) for i in range(13): color1,color2 = color2,color1 drawboard(board,revealBox) disp.fill(color1) pygame.time.wait(300) pygame.display.update()def haswon(reveal): for i in reveal: if False in i: return False return True if __name__ == '__main__': main()
以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的pygame memory puzzle全部内容,希望文章能够帮你解决pygame memory puzzle所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)