Python 程序员过中秋Python+pygame 制作拼图小游戏(附源码:5源码)
又是一年中秋至一花好月 圆夜,佳文当共鉴。Python+ pygame制作拼图小游戏;
制作一个自己的拼图小游戏,看看几步可以观赏到月亮。
文章目录
1. 引言
1.1 编写目的
1.2 术语
1.3 项目开发环境
2. 业务概述
3 pygame 简单介绍
4 . 代码介绍
4.1安装 pygame
5. 源码
6. 打包成exe应用程序分享给好友
1. 引言
1.1 编写目的
本文档是对Python语言制作拼图小游戏界面功能需求进行分析归纳,作为软件开发项目的需求标准
1.2 术语
1. 鼠标单击图片码:5源码)
1.3 项目开发环境
开发语言:python+pygame
开发环境:windows
开发工具:Pycharm
2. 业务概述
疫情原因大多数漂泊在外的码农么都回不了家了,制作一个自己的拼图小游戏,看看几步可以观赏到月亮。
3 pygame 简单介绍
Pygame 是一个专门用来开发游戏的 Python 模块,主要为开发、设计 2D 电子游戏而生,它是一个免费、开源的第三方软件包,支持多种操作系统,具有良好的跨平台性(比如 Windows、Linux、Mac 等)。Pygame 是 Pete Shinners 在 SDL(Simple DirectMedia Layer,一套开源的跨平台多媒体开发库)基础上开发而来,其目的是取代 PySDL。
Pygame 可以看做是对 SDL 的封装,在 SDL 库基础上提供了各种 Python 的 API接口。目前 SDL 主要用于多媒体领域,比如开发游戏、模拟器、媒体播放器等。
通过 Pygame 我们能够创建各种各样的游戏和多媒体程序,但相比于开发大型 3D 游戏来说,它更擅长与开发 2D 游戏,比如扫雷、纸牌游戏、贪吃蛇、超级马里奥、飞机大战等,如果是 3D 游戏,可以选择一些功能更为全面的 Python 游戏开发库,比如 Panda3D(迪士尼开发的3D游戏引擎),PyOgre(Ogre 3D渲染引擎)等。 Python 作为一门解释型语言并不适合开发大型的 3D 游戏,但 Python 通过对其他语言的接口封装,使自身具备了开发大型 3D 游戏的能力,例如 Panda3D 的底层是用 C++ 语言编写的。一些较为知名的 3D 游戏,比如魔兽世界、文明帝国4、战地风云2,这些游戏都是使用 Python 语言开发的,而国内较为知名的“阴阳师”手游,也是由 Python 语言开发而成。
4 . 代码介绍
4.1安装 pygame
pip install pygame
5. 源码
# -*- coding: utf-8 -*- # @Time : 2022-09-08 14:03 # @Author : hyh # @File : 中秋拼图.py # @Software : PyCharm import pygame, sys, random from pygame.locals import * # 一些常量 WINDOWWIDTH = 500 WINDOWHEIGHT = 500 BACKGROUNDCOLOR = (255, 255, 255) BLUE = (0, 0, 255) BLACK = (0, 0, 0) FPS = 40 VHNUMS = 3 CELLNUMS = VHNUMS * VHNUMS MAXRANDTIME = 100 # 退出 def terminate(): pygame.quit() sys.exit() # 随机生成游戏盘面 def newGameBoard(): board = [] for i in range(CELLNUMS): board.append(i) blackCell = CELLNUMS - 1 board[blackCell] = -1 for i in range(MAXRANDTIME): direction = random.randint(0, 3) if (direction == 0): blackCell = moveLeft(board, blackCell) elif (direction == 1): blackCell = moveRight(board, blackCell) elif (direction == 2): blackCell = moveUp(board, blackCell) elif (direction == 3): blackCell = moveDown(board, blackCell) return board, blackCell # 若空白图像块不在最左边,则将空白块左边的块移动到空白块位置 def moveRight(board, blackCell): if blackCell % VHNUMS == 0: return blackCell board[blackCell - 1], board[blackCell] = board[blackCell], board[blackCell - 1] return blackCell - 1 # 若空白图像块不在最右边,则将空白块右边的块移动到空白块位置 def moveLeft(board, blackCell): if blackCell % VHNUMS == VHNUMS - 1: return blackCell board[blackCell + 1], board[blackCell] = board[blackCell], board[blackCell + 1] return blackCell + 1 # 若空白图像块不在最上边,则将空白块上边的块移动到空白块位置 def moveDown(board, blackCell): if blackCell < VHNUMS: return blackCell board[blackCell - VHNUMS], board[blackCell] = board[blackCell], board[blackCell - VHNUMS] return blackCell - VHNUMS # 若空白图像块不在最下边,则将空白块下边的块移动到空白块位置 def moveUp(board, blackCell): if blackCell >= CELLNUMS - VHNUMS: return blackCell board[blackCell + VHNUMS], board[blackCell] = board[blackCell], board[blackCell + VHNUMS] return blackCell + VHNUMS # 是否完成 def isFinished(board, blackCell): for i in range(CELLNUMS - 1): if board[i] != i: return False return True # 初始化 pygame.init() mainClock = pygame.time.Clock() # 加载图片 gameImage = pygame.image.load('C:/Users/Administrator/Desktop/csdn/image/12.jpg') gameRect = gameImage.get_rect() # 设置窗口,窗口的宽度和高度取决于图片的宽高 windowSurface = pygame.display.set_mode((gameRect.width, gameRect.height)) pygame.display.set_caption('python拼图中秋快乐-度假的鱼') cellWidth = int(gameRect.width / VHNUMS) cellHeight = int(gameRect.height / VHNUMS) finish = False gameBoard, blackCell = newGameBoard() # 游戏主循环 while True: for event in pygame.event.get(): if event.type == QUIT: terminate() if finish: continue if event.type == KEYDOWN: if event.key == K_LEFT or event.key == ord('a'): blackCell = moveLeft(gameBoard, blackCell) if event.key == K_RIGHT or event.key == ord('d'): blackCell = moveRight(gameBoard, blackCell) if event.key == K_UP or event.key == ord('w'): blackCell = moveUp(gameBoard, blackCell) if event.key == K_DOWN or event.key == ord('s'): blackCell = moveDown(gameBoard, blackCell) if event.type == MOUSEBUTTONDOWN and event.button == 1: x, y = pygame.mouse.get_pos() col = int(x / cellWidth) row = int(y / cellHeight) index = col + row * VHNUMS if ( index == blackCell - 1 or index == blackCell + 1 or index == blackCell - VHNUMS or index == blackCell + VHNUMS): gameBoard[blackCell], gameBoard[index] = gameBoard[index], gameBoard[blackCell] blackCell = index if (isFinished(gameBoard, blackCell)): gameBoard[blackCell] = CELLNUMS - 1 finish = True windowSurface.fill(BACKGROUNDCOLOR) for i in range(CELLNUMS): rowDst = int(i / VHNUMS) colDst = int(i % VHNUMS) rectDst = pygame.Rect(colDst * cellWidth, rowDst * cellHeight, cellWidth, cellHeight) if gameBoard[i] == -1: continue rowArea = int(gameBoard[i] / VHNUMS) colArea = int(gameBoard[i] % VHNUMS) rectArea = pygame.Rect(colArea * cellWidth, rowArea * cellHeight, cellWidth, cellHeight) windowSurface.blit(gameImage, rectDst, rectArea) for i in range(VHNUMS + 1): pygame.draw.line(windowSurface, BLACK, (i * cellWidth, 0), (i * cellWidth, gameRect.height)) for i in range(VHNUMS + 1): pygame.draw.line(windowSurface, BLACK, (0, i * cellHeight), (gameRect.width, i * cellHeight)) pygame.display.update() mainClock.tick(FPS)
6. 打包成exe应用程序分享给好友
1. 安装pyinstaller
pip install pyinstaller
2. 直接cmd切换到这个脚本的目录下执行命令:
pip install pyinstaller
F参数表示覆盖打包,这样在打包时,不管我们打包几次,都是最新的,这个记住就行,固定命令。
3. 双击exe就可以启动了哈 来试试最快几步可以观赏到圆月
代码中的源图片可以保存下载