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(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)

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

  1. python拼图游戏_Python加pyGame实现的简单拼图游戏实例

    import pygame, sys, random from pygame.locals import * # 一些常量 WINDOWWIDTH = 500 WINDOWHEIGHT = 500 B ...

  2. python拼图游戏代码的理解_Python编写的数字拼图游戏(含爬山算法人机对战功能)...

    数字拼图游戏与拼图游戏原理一致,把打乱了的数字或图片经移动,拼成给定的目标数字或图片,其中总有一个空的地方,让相邻(上下左右)的方块移动,直至达到目标. 游戏代码由浙江温州永嘉县教师发展中心应根球老师 ...

  3. python推箱子代码详细讲解_Python使用tkinter模块实现推箱子游戏

    前段时间用C语言做了个字符版的推箱子,着实是比较简陋.正好最近用到了Python,然后想着用Python做一个图形界面的推箱子.这回可没有C那么简单,首先Python的图形界面我是没怎么用过,在网上找 ...

  4. python拼图游戏代码的理解_有意思的JS(1)拼图游戏 玩法介绍及其代码实现

    我是你们的索儿呀,很幸运我的文章能与你相见,愿萌新能直观的感受到Javascript的趣味性,愿有一定基础者有所收获,愿大佬不吝赐教 拼图游戏是一张图片分为若干块,打乱次序,将其中一块变为空白块,其只 ...

  5. python3小游戏代码教程_Python3制作仿“经典90坦克大战”小游戏|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

  6. python解析json文件案例_Python加载带有注释的Json文件实例

    由于json文件不支持注释,所以如果在json文件中标记了注释,则使用python中的json.dump()无法加载该json文件. 本文旨在解决当定义"//"为json注释时,如 ...

  7. python 抢票代码 猫眼演出_Python爬虫-猫眼电影排行

    爬虫的目标 爬取猫眼电影TOP100的电影名称,时间,评分,图片等信息 抓取分析 查看网页源代码,找到对应的目标信息,发现一部电影对应的源代码是一个dd节点 抓取首页 为了方便,这里先抓取第一页的内容 ...

  8. 记事本贪吃蛇游戏代码_如何用Python10分钟绘制贪吃蛇小游戏?

    贪吃蛇是一款经典的益智游戏,有PC和手机等多种版本,既简单又耐玩.玩家通过上下左右键控制蛇的方向,寻找食物,每吃到一次食物,就能得到一定的积分,而且蛇的身体会越来越长.随着蛇的身体变长,游戏的难度就会 ...

  9. python自己制作节奏大师游戏_使用pygame制作一个简单的游戏

    翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novice to Professional&g ...

最新文章

  1. 2021年春季学期-信号与系统-第十四次作业参考答案-第二小题参考答案
  2. 当前不会命中断点 源代码与原始版本不一致
  3. Simulating fire sales in a system of banks and asset managers(模拟银行和资产管理系统的折价销售)
  4. OS / 几个常用的操作系统进程调度算法
  5. SAP CRM Survey调查问卷的模型设计原理解析
  6. php怎么把字符转成大写,php怎么把字符串转换为大写
  7. xmind-HTTP协议
  8. tempdb数据库清理_如何检测和防止TempDB数据库意外增长
  9. linux tcl是什么系统,基于Linux 及Tcl / Tk 的数控系统人机界面的实现
  10. Katalon Recorder 自动录制 Selenium 爬虫脚本
  11. 计算机主机的税收,税控电脑
  12. 将CNKI的caj格式下载成为pdf
  13. html自我介绍怎么弄,用html设计一个自我介绍的静态网页
  14. Ubuntu+Tesla M40上OpenCL问题解决过程
  15. 【Web Design The Missing Link】Chatty APIs
  16. 嵌入式arm板linux路由表设置
  17. Unable to set custom 'dev_loss_tmo' value in RHEL7
  18. 安卓开发SlidingDrawer实现抽屉效果
  19. DexGuard 与 ProGuard区别
  20. 小学数学思维导图模板

热门文章

  1. SAP UI5 应用读取 CSRF token 的 HTTP head 请求逻辑解析
  2. webpack VS Node.js - 二者对 require 功能的实现区别
  3. SAP Spartacus 的 CSS 架构
  4. SAP Spartacus 数据类型定义汇总
  5. 关于有朋友询问,Spartacus,Fiori,SAP UI5这些术语的关系
  6. rxjs fromEvent的用法
  7. SAP Cloud for Customer的Data Source测试
  8. json格式的字符串序列化和反序列化的一些高级用法
  9. where is page layout xml template being initialized - hard code in ctr
  10. Amount Format in SAP Fiori Opportunity