Python 程序员过中秋Python+pygame 制作拼图中秋赏月小游戏(附源码:5源码)

Python 程序员过中秋Python+pygame 制作拼图中秋赏月小游戏(附源码:5源码)

又是一年中秋至一花好月 圆夜,佳文当共鉴。Python+ pygame制作拼图小游戏;

制作一个自己的拼图小游戏,看看几步可以观赏到月亮。

1. 引言1.1 编写目的1.2 术语1.3 项目开发环境2. 业务概述3 pygame 简单介绍4 . 代码介绍4.1安装 pygame5. 源码6. 打包成exe应用程序分享给好友

1. 引言

1.1 编写目的

本文档是对Python语言制作拼图小游戏界面功能需求进行分析归纳,作为软件开发项目的需求标准

1.2 术语

   1. 鼠标单击图片

1.3 项目开发环境

开发语言:python+pygame

开发环境:windows 11

开发工具: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

arduino 复制代码
pip install pygame -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

5. 源码

ini 复制代码
# -*- coding: utf-8 -*-
# @Time     : 2023/9/18 12:01
# @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()
​
# 加载图片
# C:\Users\80975\Desktop\image
# D:\E\PythonWork\PygameTest\image
gameImage = pygame.image.load('D:/E/PythonWork/PygameTest/image/0815.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

arduino 复制代码
pip install pyinstaller -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

2. 直接cmd切换到这个脚本的目录下执行命令:

r 复制代码
pyinstaller -F 中秋活动.py
diff 复制代码
-F参数表示覆盖打包,这样在打包时,不管我们打包几次,都是最新的,这个记住就行,固定命令。

3. 双击exe就可以启动了哈 来试试最快几步可以观赏到圆月

相关推荐
星光樱梦19 分钟前
02. Python基础知识
python
亚图跨际22 分钟前
MATLAB和C++及Python流式细胞术
c++·python·matlab·流式细胞术
steamedobun30 分钟前
【爬虫】Firecrawl对京东热卖网信息爬取(仅供学习)
爬虫·python
右恩36 分钟前
Docker 实践与应用举例
python·docker
凤枭香39 分钟前
Python Scikit-learn简介(二)
开发语言·python·机器学习·scikit-learn
湫ccc8 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe9 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin9 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
哭泣的眼泪4089 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
湫ccc10 小时前
《Python基础》之基本数据类型
开发语言·python