首页 > 编程语言 >Python制作一个中秋赏月的拼图小游戏

Python制作一个中秋赏月的拼图小游戏

时间:2024-09-15 17:23:49浏览次数:3  
标签:cubenum Python 拼图 小游戏 board blackCell event pygame

中秋节是中国四大传统节日之一,主要活动包括赏月、吃月饼、玩花灯、赏桂花、饮桂花酒等。

给大家分享用Python制作的一个中秋的拼图小游戏

图片

图片

模块安装

pip install pygame

实例代码

import pygame, sys, randomfrom pygame.locals import *# 一些常量# WINDOW_WIDTH = 30# WINDOW_HEIGHT = 10BACKG_ROUND_COLOR = (255, 255, 255)BLUE = (0, 0, 255)BLACK = (0, 0, 0)leng = 40cubenum = 3totalnum = cubenum * cubenummaxtime = 100# 退出def close():    pygame.quit()    sys.exit()# 随机生成游戏盘面def newGameBoard():    board = []    for i in range(totalnum):        board.append(i)    blackCell = totalnum - 1    board[blackCell] = -1    for i in range(maxtime):        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 % cubenum == 0:        return blackCell    board[blackCell - 1], board[blackCell] = board[blackCell], board[blackCell - 1]    return blackCell - 1# 若空白图像块不在最右边,则将空白块右边的块移动到空白块位置def moveLeft(board, blackCell):    if blackCell % cubenum == cubenum - 1:        return blackCell    board[blackCell + 1], board[blackCell] = board[blackCell], board[blackCell + 1]    return blackCell + 1# 若空白图像块不在最上边,则将空白块上边的块移动到空白块位置def moveDown(board, blackCell):    if blackCell < cubenum:        return blackCell    board[blackCell - cubenum], board[blackCell] = board[blackCell], board[blackCell - cubenum]    return blackCell - cubenum# 若空白图像块不在最下边,则将空白块下边的块移动到空白块位置def moveUp(board, blackCell):    if blackCell >= totalnum - cubenum:        return blackCell    board[blackCell + cubenum], board[blackCell] = board[blackCell], board[blackCell + cubenum]    return blackCell + cubenum# 是否完成def isFinished(board, blackCell):    for i in range(totalnum - 1):        if board[i] != i:            return False    return True# 初始化pygame.init()mainClock = pygame.time.Clock()# 加载图片# 放一张本地图片gameobject = pygame.image.load(r"D:\Users\Downloads\0815(1).png")gameRect = gameobject.get_rect()print(gameRect)# 设置窗口,窗口的宽度和高度取决于图片的宽高windowSurface = pygame.display.set_mode((gameRect.width, gameRect.height))pygame.display.set_caption('python拼图中秋快乐-度假的小鱼')cellWidth = int(gameRect.width / cubenum)cellHeight = int(gameRect.height / cubenum)finish = FalsegameBoard, blackCell = newGameBoard()# 游戏主循环while True:    for event in pygame.event.get():        if event.type == QUIT:            close()        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 * cubenum            if (                    index == blackCell - 1 or index == blackCell + 1 or index == blackCell - cubenum or index == blackCell + cubenum):                gameBoard[blackCell], gameBoard[index] = gameBoard[index], gameBoard[blackCell]                blackCell = index    if (isFinished(gameBoard, blackCell)):        gameBoard[blackCell] = totalnum - 1        finish = True    windowSurface.fill(BACKG_ROUND_COLOR)    for i in range(totalnum):        rowDst = int(i / cubenum)        colDst = int(i % cubenum)        rectDst = pygame.Rect(colDst * cellWidth, rowDst * cellHeight, cellWidth, cellHeight)        if gameBoard[i] == -1:            continue        rowArea = int(gameBoard[i] / cubenum)        colArea = int(gameBoard[i] % cubenum)        rectArea = pygame.Rect(colArea * cellWidth, rowArea * cellHeight, cellWidth, cellHeight)        windowSurface.blit(gameobject, rectDst, rectArea)    for i in range(cubenum + 1):        pygame.draw.line(windowSurface, BLACK, (i * cellWidth, 0), (i * cellWidth, gameRect.height))    for i in range(cubenum + 1):        pygame.draw.line(windowSurface, BLACK, (0, i * cellHeight), (gameRect.width, i * cellHeight))    pygame.display.update()    mainClock.tick(leng)

注释:

游戏框取决于图片大小。

文末福利

最后,给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的朋友们一点帮助!

 Python大礼包:《2024年最新Python全套学习资料包】点这里免费领取

包括:Python激活码+安装包、Python
web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习

标签:cubenum,Python,拼图,小游戏,board,blackCell,event,pygame
From: https://blog.csdn.net/m0_62283350/article/details/142286068

相关文章

  • python剧本杀服务预约平台管理系统 2110w毕业设计项目源码lw
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python的subplots 多图处理变模糊
    在使用Python的Matplotlib库中的subplots功能来创建多个子图时,有时可能会遇到图像变得模糊或分辨率降低的问题。这通常是由于几个不同的因素引起的,包括图像尺寸设置、DPI(每英寸点数)设置、保存图像时使用的文件格式和参数等。下面,我将详细解释这些因素,并提供一些改进图像质量......
  • 搞懂这27个问题,让你秒变 Python 高手!
    01.为什么使用缩进来分组语句?GuidovanRossum认为使用缩进进行分组非常优雅,并且大大提高了普通Python程序的清晰度。大多数人在一段时间后就学会并喜欢上这个功能。由于没有开始/结束括号,因此解析器感知的分组与人类读者之间不会存在分歧。偶尔C程序员会遇到像这样的......
  • 学习Python第一步,先安装Python,最新安装教程!
      随着人工智能,网络爬虫,大数据分析等业务模式的流行,Python依靠拥有各种开源库,且入门容易等特性越来越火爆。想到就去做,赶紧下载Python学习起来,本文将详细介绍Python编程环境的搭建。Python的版本选择目前Python有两个版本,一个是2.x,一个是3.x,这两个版本并不兼容。由于在20......
  • 【Python基础学习】16个必知必会的Python教程
    介绍Python是一门用途广泛的编程语言,它具有大量的库和框架。有一些鲜为人知的Python编码技巧和库可以让你作为开发人员的工作更为轻松,编写代码更高效。本文中将探讨一些鲜为人知的Python技巧,这些技巧非常有用,但并不广为人知。通过学习和使用这些技巧,可以帮你节省时......
  • 【Python基础】Python迭代器与生成器(两种强大工具)
    本文收录于《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢!文章目录一、前言二、迭代器2.1创建迭代器2.2自定义迭代器2.3处理大型文件三、生成器四、生成器表达式五、实际应用案例5.1数据库查询5.2网络数据流处理六、总结一......
  • Python计数:defaultdict和Counter
    使用Python内置的defaultdict和Counter能方便的实现计数等操作题目:3289.数字小镇中的捣蛋鬼fromtypingimportListfromcollectionsimportdefaultdict,CounterclassSolution:defgetSneakyNumbers(self,nums:List[int])->List[int]:counter=Count......
  • 【webshell 检测工具】ShellSweep:一种 PowerShell/Python/Lua 工具,用于检测指定目录下
    原创Ots安全“ShellSweep”是一个PowerShell/Python/Lua工具,旨在检测指定目录中的潜在WebShell文件。ShellSheep及其工具套件会计算文件内容的熵,以估计文件成为WebShell的可能性。熵值越高,随机性就越强,这是WebShell中常见的加密或混淆代码的特征。它仅处理具有某些......
  • 简单有趣的python小程序(涵源代码)
    目录tkinter计算器2.计算题练习猜数字烦人的程序无法拒绝的请假条。。。爬虫你想看豆瓣评分前十的电影?WXpython记事本(可保存)​编辑数字逻辑解方程tkinter计算器importtkinterastkimporttkinter.messageboxasmroot=tk.Tk()root.title("计算器")......
  • 【楚怡杯】职业院校技能大赛 “Python程序开发”数据分析练习
    基础操作(1)用字典数据类型创建DataFrame。(2)将创建的Dataframe的索引设置为,ABCD。并且命名为“索引”。(3)在下面新增一行。然后删除。(4)增加新的属性列,列名设置为‘port’,值均为1。(5)取出1991和1994年的数据。(6)获取前‘state’和‘year’的数据。(7)查看每一列数据的数据格式,并......