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程序设计有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

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

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

  3. python获取游戏窗口_python中pygame针对游戏窗口的显示方法实例分析(附源码)

    本文实例讲述了python中pygame针对游戏窗口的显示方法.分享给大家供大家参考,具体如下: 在这篇教程中,我将给出一个demo演示: 当我们按下键盘的'f'键的时候,演示的窗口会切换到全屏显示和 ...

  4. python编的俄罗斯方块游戏_Python使用pygame模块编写俄罗斯方块游戏的代码实例

    文章先介绍了关于俄罗斯方块游戏的几个术语. 边框--由10*20个空格组成,方块就落在这里面. 盒子--组成方块的其中小方块,是组成方块的基本单元. 方块--从边框顶掉下的东西,游戏者可以翻转和改变位 ...

  5. python实现消消乐游戏_Python制作宝石消消乐小游戏

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 图片来由于网络 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原 ...

  6. jquery实现上下左右键盘监听_python 使用pygame工具包实现贪吃蛇游戏(多彩版)

    今天我们用python和python的工具包pygame来编写一个贪吃蛇的小游戏 贪吃蛇游戏功能介绍 贪吃蛇的游戏规则如下: 通过上下左右键或者WASD键来移动蛇来,让它吃到食物,每吃到食物,蛇的长度 ...

  7. python pygame鼠标点击_Python中pygame的mouse鼠标事件用法实例

    本文实例讲述了Python中pygame的mouse鼠标事件用法.分享给大家供大家参考,具体如下: pygame.mouse提供了一些方法获取鼠标设备当前的状态 ''' pygame.mouse.ge ...

  8. python七彩同心圆_用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏---七彩同心圆 用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便 ...

  9. python神经网络训练玩游戏_python – 如何训练神经网络来玩2048游戏?

    我想训练神经网络玩2048游戏.我知道NN对于像2048这样的状态游戏来说不是一个好选择,但是我想要实现NN将像经验丰富的人类一样玩游戏,即仅在三个方向上移动游戏. 但由于我们不知道有效输出,我无法弄 ...

最新文章

  1. hadoop 添加删除机器以及设置免密登录
  2. Python 进阶_闭包 amp; 装饰器
  3. 小卡片遇热就变机器人,不插电就能运动,哈佛加州理工新研究登上Nature子刊...
  4. [leetcode] Pow(x, n)
  5. OpenCV关于hog特征向量的个数
  6. 内存稳定性测试_内存条选择两条8G还是单条16G?通过对比浅谈该如何选择
  7. UDP 组播---基本概念
  8. asp.net网页中导出EXCEL,WORD的环境设置验证实例
  9. 新突破!CVPR2019接收论文:新的基于自编码变换的无监督表示学习方法—AET
  10. Linux启动过程综述(转)
  11. 欧瑞变频器800参数设置_(完整版)ACS800变频器参数设定
  12. revit2019 导出obj_Revit模型转obj模型插件
  13. 完整的连接器设计手册_工业连接器如何选型
  14. 计算机工程师难度排名,【2018一级造价工程师考试各个科目的难度排行榜】- 环球网校...
  15. python实现KNN算法并可视化展示
  16. 基于心电的疲劳分析论文
  17. ubuntu如何安装有道词典
  18. Oracle的profile
  19. 读书笔记:汇编语言 第三版 王爽 清华出版社 章十六 章十七 章十八
  20. 免费领取中高职组计算机检测维修与数据恢复国赛考题

热门文章

  1. 银行交易风控中的案件处理流程
  2. UPNP端口映射Android实现
  3. MongoDB 复制集那点事儿
  4. 实战:利用requests库、lxml库的etree,采用xpath方法抓取boss直聘网岗位信息
  5. Python的boss直聘职位信息数据分析系统
  6. Android通过网络实现简易轮播图
  7. 苹果锻造者Jonathan Ive
  8. access 数据库 mysql数据库_如何将Access数据库移植到MySQL数据库
  9. HCNP H12 223
  10. python笔试题奥特曼打怪兽_2019阿里校招测评题,光明小学完全图最短路径问题(python实现)...