在好例子网,分享、交流、成长!
您当前所在位置:首页Python 开发实例Python语言基础 → pygame13个小游戏代码

pygame13个小游戏代码

Python语言基础

下载此实例
  • 开发语言:Python
  • 实例大小:1.15M
  • 下载次数:19
  • 浏览次数:167
  • 发布时间:2024-07-12
  • 实例类别:Python语言基础
  • 发 布 人:非天夜翔
  • 文件格式:.rar
  • 所需积分:2
 相关标签: pygame game 小游戏 py 代码

实例介绍

【实例简介】13个小游戏

【实例截图】这是其中一个



9209 6 16 2022 2-01 simulate.py
12576 6 16 2022 2-02 slidepuzzle.py
18103 6 16 2022 2-03 squirrel.py
24984 6 16 2022 2-04 starpusher.py
18707 6 16 2022 2-05 tetromino.py
15654 6 16 2022 2-06 tetrominoforidiots.py
7796 6 16 2022 2-07 wormy.py
20073 6 16 2022 2-08 flippy.py
13590 6 16 2022 2-09 fourinarow.py
23105 6 16 2022 2-10 gemgem.py
19083 6 16 2022 2-11 inkspill.py
11406 6 16 2022 2-12 memorypuzzle.py
24005 6 16 2022 2-13 pentomino.py



【核心代码】
# Memory Puzzle, by Al Sweigart al@inventwithpython.com # (Requires Pygame) A simple memory matching game.   __version__ = 1 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 = 10 # number of columns of icons BOARDHEIGHT = 7 # 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 = BLUE
DONUT = 'donut' SQUARE = 'square' DIAMOND = 'diamond' LINES = 'lines' OVAL = 'oval'  ALLCOLORS = (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."  def main(): global FPSCLOCK, DISPLAYSURF
    pygame.init()
    FPSCLOCK = pygame.time.Clock()
    DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
    mousex = 0 # used to store x coordinate of mouse event  mousey = 0 # used to store y coordinate of mouse event  pygame.display.set_caption('Memory Game')
    mainBoard = getRandomizedBoard()
    revealedBoxes = generateRevealedBoxesData(False)
    firstSelection = None # stores the (x, y) of the first box clicked.   DISPLAYSURF.fill(BGCOLOR)
    startGameAnimation(mainBoard) while True: # main game loop  mouseClicked = False   DISPLAYSURF.fill(BGCOLOR) # drawing the window  drawBoard(mainBoard, revealedBoxes) for event in pygame.event.get(): # event handling loop  if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
                pygame.display.quit(); pygame.quit() # Display quit is a workaround for a Raspberry Pi bug.  sys.exit() elif event.type == MOUSEMOTION:
                mousex, mousey = event.pos elif event.type == MOUSEBUTTONUP:
                mousex, mousey = event.pos
                mouseClicked = True   boxx, boxy = getBoxAtPixel(mousex, mousey) if boxx != None and boxy != None: # The mouse is currently over a box.  if not revealedBoxes[boxx][boxy]:
                drawHighlightBox(boxx, boxy) if not revealedBoxes[boxx][boxy] and mouseClicked:
                revealBoxesAnimation(mainBoard, [(boxx, boxy)])
                revealedBoxes[boxx][boxy] = True # set the box as "revealed"  if firstSelection == None: # the current box was the first box clicked  firstSelection = (boxx, boxy) else: # the current box was the second box clicked  # Check if there is a match between the two icons.  icon1shape, icon1color = getShapeAndColor(mainBoard, firstSelection[0], firstSelection[1])
                    icon2shape, icon2color = getShapeAndColor(mainBoard, boxx, boxy) if icon1shape != icon2shape or icon1color != icon2color: # Icons don't match. Re-cover up both selections.  pygame.time.wait(1000) # 1000 milliseconds = 1 sec  coverBoxesAnimation(mainBoard, [(firstSelection[0], firstSelection[1]), (boxx, boxy)])
                        revealedBoxes[firstSelection[0]][firstSelection[1]] = False  revealedBoxes[boxx][boxy] = False  elif hasWon(revealedBoxes): # check if all pairs found  gameWonAnimation(mainBoard)
                        pygame.time.wait(2000) # Reset the board  mainBoard = getRandomizedBoard()
                        revealedBoxes = generateRevealedBoxesData(False) # Show the fully unrevealed board for a second.  drawBoard(mainBoard, revealedBoxes)
                        pygame.display.update()
                        pygame.time.wait(1000) # Replay the start game animation.  startGameAnimation(mainBoard)
                    firstSelection = None # reset firstSelection variable   # Redraw the screen and wait a clock tick.  pygame.display.update()
        FPSCLOCK.tick(FPS) def generateRevealedBoxesData(val):
    revealedBoxes = [] for i in range(BOARDWIDTH):
        revealedBoxes.append([val] * BOARDHEIGHT) return revealedBoxes def getRandomizedBoard(): # Get a list of every possible shape in every possible color.  icons = [] for color in ALLCOLORS: for shape in ALLSHAPES:
            icons.append( (shape, color) )
    random.shuffle(icons) # randomize the order of the icons list  numIconsUsed = int(BOARDWIDTH * BOARDHEIGHT / 2) # calculate how many icons are needed  icons = icons[:numIconsUsed] * 2 # make two of each  random.shuffle(icons) # Create the board data structure, with randomly placed icons.  board = [] for x in range(BOARDWIDTH):
        column = [] for y in range(BOARDHEIGHT):
            column.append(icons[0]) del icons[0] # remove the icons as we assign them  board.append(column) return board def splitIntoGroupsOf(groupSize, theList): # splits a list into a list of lists, where the inner lists have at  # most groupSize number of items.  result = [] for i in range(0, len(theList), groupSize):
        result.append(theList[i:i   groupSize]) return result def leftTopCoordsOfBox(boxx, boxy): # Convert board coordinates to pixel coordinates  left = boxx * (BOXSIZE   GAPSIZE)   XMARGIN
    top = boxy * (BOXSIZE   GAPSIZE)   YMARGIN return (left, top) 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 drawIcon(shape, color, boxx, boxy):
    quarter = int(BOXSIZE * 0.25) # syntactic sugar  half = int(BOXSIZE * 0.5) # syntactic sugar   left, top = leftTopCoordsOfBox(boxx, boxy) # get pixel coords from board coords  # Draw the shapes  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)) def getShapeAndColor(board, boxx, boxy): # shape value for x, y spot is stored in board[x][y][0]  # color value for x, y spot is stored in board[x][y][1]  return board[boxx][boxy][0], board[boxx][boxy][1] def drawBoxCovers(board, boxes, coverage): # Draws boxes being covered/revealed. "boxes" is a list  # of two-item lists, which have the x & y spot of the box.  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: # only draw the cover if there is an coverage  pygame.draw.rect(DISPLAYSURF, BOXCOLOR, (left, top, coverage, BOXSIZE))
    pygame.display.update()
    FPSCLOCK.tick(FPS) def revealBoxesAnimation(board, boxesToReveal): # Do the "box reveal" animation.  for coverage in range(BOXSIZE, (-REVEALSPEED) - 1, -REVEALSPEED):
        drawBoxCovers(board, boxesToReveal, coverage) def coverBoxesAnimation(board, boxesToCover): # Do the "box cover" animation.  for coverage in range(0, BOXSIZE   REVEALSPEED, REVEALSPEED):
        drawBoxCovers(board, boxesToCover, coverage) def drawBoard(board, revealed): # Draws all of the boxes in their covered or revealed state.  for boxx in range(BOARDWIDTH): for boxy in range(BOARDHEIGHT):
            left, top = leftTopCoordsOfBox(boxx, boxy) if not revealed[boxx][boxy]: # Draw a covered box.  pygame.draw.rect(DISPLAYSURF, BOXCOLOR, (left, top, BOXSIZE, BOXSIZE)) else: # Draw the (revealed) icon.  shape, color = getShapeAndColor(board, boxx, boxy)
                drawIcon(shape, color, boxx, boxy) def drawHighlightBox(boxx, boxy):
    left, top = leftTopCoordsOfBox(boxx, boxy)
    pygame.draw.rect(DISPLAYSURF, HIGHLIGHTCOLOR, (left - 5, top - 5, BOXSIZE 10, BOXSIZE 10), 4) def startGameAnimation(board): # Randomly reveal the boxes 8 at a time.  coveredBoxes = generateRevealedBoxesData(False)
    boxes = [] for x in range(BOARDWIDTH): for y in range(BOARDHEIGHT):
            boxes.append( (x, y) )
    random.shuffle(boxes)
    boxGroups = splitIntoGroupsOf(8, boxes)
    drawBoard(board, coveredBoxes) for boxGroup in boxGroups:
        revealBoxesAnimation(board, boxGroup)
        coverBoxesAnimation(board, boxGroup) def gameWonAnimation(board): # flash the background color when the player has won  coveredBoxes = generateRevealedBoxesData(True)
    color1 = LIGHTBGCOLOR
    color2 = BGCOLOR for i in range(13):
        color1, color2 = color2, color1 # swap colors  DISPLAYSURF.fill(color1)
        drawBoard(board, coveredBoxes)
        pygame.display.update()
        pygame.time.wait(300) def hasWon(revealedBoxes): # Returns True if all the boxes have been revealed, otherwise False  for i in revealedBoxes: if False in i: return False # return False if any boxes are covered.  return True   if __name__ == '__main__':
    main()

实例下载地址

pygame13个小游戏代码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警