python拼图游戏代码的理解_Python加pyGame实现的简单拼图游戏实例

本文实例讲述了Python加pyGame实现的简单拼图游戏。分享给大家供大家参考。具体实现方法如下:

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(‘pic.bmp’)

gameRect = gameImage.get_rect()

设置窗口

windowSurface = pygame.display.set_mode((gameRect.width, gameRect.height))

pygame.display.set_caption(‘拼图’)

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(colDstcellWidth, rowDstcellHeight, cellWidth, cellHeight)

if gameBoard[i] == -1:

continue

rowArea = int(gameBoard[i] / VHNUMS)

colArea = int(gameBoard[i] % VHNUMS)

rectArea = pygame.Rect(colAreacellWidth, rowAreacellHeight, cellWidth, cellHeight)

windowSurface.blit(gameImage, rectDst, rectArea)

for i in range(VHNUMS+1):

pygame.draw.line(windowSurface, BLACK, (icellWidth, 0), (icellWidth, gameRect.height))

for i in range(VHNUMS+1):

pygame.draw.line(windowSurface, BLACK, (0, icellHeight), (gameRect.width, icellHeight))

pygame.display.update()

mainClock.tick(FPS)

希望本文所述对大家的Python程序设计有所帮助。

Original: https://blog.csdn.net/weixin_34357697/article/details/113982263
Author: Aviationbamboo
Title: python拼图游戏代码的理解_Python加pyGame实现的简单拼图游戏实例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/781740/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 零钱兑换问题

    零钱兑换问题 作者:Grey 原文地址: 博客园:零钱兑换问题 CSDN:零钱兑换问题 题目描述 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,…

    Python 2023年10月19日
    042
  • React Native集成CodePush热更新

    作为一款以JavaScript语音为基础跨平台开发框架,React Native本身已经具备了动态更新的能力,不过官方却没有提供一套标准的动态更新方案。因为一个标准的动态更新方案,…

    Python 2023年11月8日
    036
  • python flask搭建高可用的MVC框架

    众所周知,Python的两大web框架为Django和Flask框架。Django框架大而全,而Flask是轻量级的框架,很多扩展功能需要自己写。 在开始之前,先了解一下flask…

    Python 2023年8月13日
    050
  • Python进阶——网课不愁系列AI换脸技术

    俗话说的好: 网络一线牵,珍惜这段缘!网络的水很深,年轻人你把握不住,众所周知照片是可以P的,但是”视频”是”P”不了的(狗头保命)…

    Python 2023年8月1日
    046
  • java调python画图_Python Matplotlib plot 绘图

    1、绘制x和y点 plot()函数用于在图中绘制点(标记)。 默认情况下,plot()函数在点到点之间画一条线。 该函数具有用于在图中指定点的参数。 参数1是一个数组,其中包含x轴…

    Python 2023年9月5日
    042
  • Python Pandas数据结构

    一、概念 1.1Series和DataFrame pandas的数据结构有两大核心:Series和DataFrame。 Series:是一维数组和Numpy中一维数组类似,这两种一…

    Python 2023年8月8日
    055
  • 【笔记】PyTorch快速入门:基础部分合集

    Tensors Tensors贯穿PyTorch始终 和多维数组很相似,一个特点是可以硬件加速 有很多方式 直接给值 data = [[1,2],[3,4]] x_data = t…

    Python 2023年10月26日
    055
  • python学习:各种推导式玩法-推导式套路

    除了最简单的列表推导式和生成器表达式,其实还有字典推导式、集合推导式等等。 下面是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式。 variable = [out_ex…

    Python 2023年6月9日
    054
  • Node.js躬行记(22)——Node环境升级日志

    公司之前所有的 Node 项目,其环境都是 8.9.4 版本,发布于 2018 年的一个比较古老的版本。 老版本有两个比较明显的问题: 之前在开发项目时就遇到第三方包自身的问题,必…

    Python 2023年10月23日
    032
  • slenium录制python pytest脚本

    插件下载 https://www.crx4chrome.com/crx/77585/ ; 添加Selenium扩展 1、谷歌浏览器输入扩展程地址:chrome://extensio…

    Python 2023年9月12日
    037
  • 一篇文章带你掌握主流数据库框架——MyBatis

    一篇文章带你掌握主流数据库框架——MyBatis MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 在之前的文章中我们学习了MYSQL和JDBC…

    Python 2023年10月22日
    038
  • 使用nuitka打包python代码为exe可执行程序

    文章目录 前言 一、nuitka是什么? 二、nuitka打包流程 * 我的python环境 1.下载C编译器 2.下载Nuitka 3.使用nuitka简单打包python代码 …

    Python 2023年8月2日
    089
  • 12、pandas 数据类型转换

    本章内容 Pandas所支持的数据类型 转换数据类型的思路 astype()函数 pd.to_numeric函数 pd.to_datetime函数 pd.to_timedelta函…

    Python 2023年8月17日
    047
  • Python连锁药店营业额数据分析实验

    前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击跳转人工智能学习资料) 一、题目 附件drug. order_ detai 1.x…

    Python 2023年8月26日
    065
  • label studio导出CoNLL格式后处理数据

    一、label studio使用 最近在做命名实体识别的东西,需要进行数据标注,一开始用的doccano。doccano的启动需要开启两个终端,一个是打开webserver的端口,…

    Python 2023年10月26日
    045
  • 重新认识下JVM级别的本地缓存框架Guava Cache(3)——探寻实现细节与核心机制

    大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 通过《重新认识下J…

    Python 2023年10月14日
    041
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球