需求:

现在要做这样一个拼图游戏, 有一个九宫格, 其中有8个方块, 还有一个空位, 点击其中一个方块, 它会往空位移动... 顺序排列8个方块则游戏通关

结构规划:游戏数据结构

玩家操作

逻辑部分

通关检测

输出部分

主程序

实现构思:用字母 A, B, C, ... H 表示8个方块; 字母 I 表示第9个宫格, 即空位, 它实质上也是个方块

拼图数据结构是由一系列字典元素构成的: {1:[...],2:[]...,9:[]}, 其中 KEY number 表示正确的位置信息

字典元素是一个列表, 包含: [拼图符号, 实时位置信息, 状态标志(空/非空)]

当点击其中一个位置的方块时, 如果周围的方块存在 KEY x or y[n+1][2]==0 ,则修改该方块和空格的->当前位置信息及状态标志, 也就是和 KEY x or y 交换当前位置信息及状态标志. (反过来也可以检测:标志为0周围可移动的方块)

直到所有元素都通过正确的位置信息验证, 其中 KEY9 的状态一直是 0, 并且是空方块

用 Python 实现, 操作: 输入某个方块(A), 程序移动(A)方块, 打印出结果,源码如下:#!/usr/bin/python

# -*- coding: utf-8 -*-

import random

import sys

from copy import deepcopy

# 生成随机拼图

jigsaw = [chr(i) for i in range(65,74)]

random.shuffle(jigsaw)

palace = {}

for i in range(9):

if jigsaw[i] == 'I':

palace[i+1]=([' ', i+1, 0])

else:

palace[i+1]=([jigsaw[i], i+1, 1])

# 测试用数据

# palace = {1: ['A', 1, 1], 2: ['B', 2, 1], 3: ['C', 3, 1], 4: ['D', 4, 1], 5: ['E', 5, 1], 6: ['F', 6, 1], 7: ['G', 7, 1], 8: [' ', 8, 0], 9: ['H', 9, 1]}

# 移动方块

def move_square(square, pledic):

in_switch  = bool()

zero_switch  = bool()

for k,v in pledic.items():

pledic[k][1] = k

# 玩家操作, 移动的方块(输入的字符)

if v[0] == square:

in_key = k

in_val = v

in_switch = True

# 找到字符所在, 并作标记

if v[2] == 0:

zero = v[1]

zero_k = k

zero_v = v

zero_switch =True

if zero_switch == in_switch:

# 与空方块交换位置

if zero % 3 == in_val[1] % 3 and abs(zero - in_val[1]) <= 3:

pledic[in_key], pledic[zero_k] = zero_v, in_val

if abs(zero - in_val[1]) == 1 and ((zero+in_val[1])-1)%3 != 0:

pledic[in_key], pledic[zero_k] = zero_v, in_val

return pledic

#  游戏检测

def check_palace(dic):

right_count = 0

if dic[9][2] == 0:

for k,v in dic.items():

if k == ord(v[0])-64:

right_count +=1

if right_count == 8:

return True

return False

# 输出

def print_palace(dic):

print dic[1][0],dic[2][0],dic[3][0]

print dic[4][0],dic[5][0],dic[6][0]

print dic[7][0],dic[8][0],dic[9][0]

# 进行游戏

def play_palace(palace):

ple = deepcopy(palace)

print_palace(ple)

play_dic={}

while True:

try:

square = raw_input('input A-H:')

if ord(square.upper()) >= 65 and ord(square.upper()) <= 74:

play_dic = move_square(square.upper(), ple)

print_palace(play_dic)

if check_palace(play_dic):

break

else:

print 'Please again input'

except TypeError:

print 'Please again input'

continue

print "All Right! You Win!!"

sys.exit()

if __name__=='__main__':

play_palace(palace)

最后执行结果,得出如下图$ python 9palace.py

D F

G C H

E A B

input A-H:f

D   F

G C H

E A B

input A-H:c

D C F

G   H

E A B

input A-H:

python拼图_Python实现, 命令行下的拼图游戏相关推荐

  1. python 参数_python脚本命令行参数解析

    前言 在python命令行参数的解析模块中,我们常用的就是sys内置模块,但该模块的功能过于原始单一,很多具体的逻辑功能还得靠我们自己手动实现,实在较为麻烦.在这里向大家推荐一个好用的参数解析的模块a ...

  2. python单步调试工具_linux-pdb命令行下python断点调试工具

    一般地,我们可以使用如下的方式进入调试(比如我们要调试的源文件为hello.py): 1. 在命令行启动目标程序,加上-m参数. python -m pdb hello.py 这样程序会自动停在第一行 ...

  3. python代码命令行tab补齐_Python在命令行下Tab键自动补全脚本

    摘要 由于写shell命令习惯了Tab补全,其实我个人认为这不是应该有的一个恶习,基础开始我们不应该想着Tab去自动补全,我们应该趁这时候来多多记忆基础的东西.唉,恶习难改...... 老实说我也是网 ...

  4. 命令行下 pdb 调试 Python 程序

    官方参考网站 The Python Debugger : https://docs.python.org/3/library/pdb.html gdb 调试命令的使用及总结:https://blog. ...

  5. 修复python命令行下接收不到参数的问题

    由于之前安装过多个python版本,导致出现了在命令行下直接给py文件传递参数的时候接收不到,即使重新卸载安装也没有解决. 解决办法: 修改如下图路径下的键值为:"D:\Python27\p ...

  6. python登录微信客户端_命令行下的微信客户端

    _____ _ _ _____ _ _ ___ _____ |_ _| | | / __ \| | | | / _ \_ _| | | | | | | / \/| |_| |/ /_\ \| | | ...

  7. python3.8.2numpy版本,如何查看安装python和numpy的版本,numpy版本的选择,命令行下查看pyth...

    如何查看安装python和numpy的版本,numpy版本的选择,命令行下查看pyth 命令行下查看python和numpy的版本和安装位置 1.查看python版本 方法一: python -V 注 ...

  8. python做彩色字_python在命令行打印彩色文字

    [Python] 纯文本查看 复制代码#!/usr/bin/python # -*- coding: UTF-8 -*- import ctypes def echo(*o,c=7,sep=' ',e ...

  9. Python必备基本技能——命令行参数args详解

    Python必备基本技能--命令行参数args详解 1. 效果图 2. 源码 2.1 简单命令行参数 2.1 轮廓检测源代码 参考 这篇博客将介绍一项开发人员.工程师和计算机科学家必备的技能--命令行 ...

最新文章

  1. Mac下PHP7.1+Nginx安装和配置
  2. Java中常见的异常
  3. [原创]一起来做网页游戏---前言
  4. 【计算理论】下推自动机 PDA 及 计算示例
  5. linux pppd源码下载_pppd源代码分析
  6. java gui 层次结构_javaGUI教学图形界面的层次结构.ppt
  7. android litepal可以指定存储目录吗,Android数据库LitePal的基本用法详解
  8. spring下jndi配置
  9. C# DataTable的詳細用法
  10. 获取行信息_论文推荐 | 周乐韬,黄丁发,袁林果,等:基于状态和残差的北斗基准站观测数据表达与信息分级...
  11. qprocess 最小化启动外部程序_程序员易踩的 9 大坑,教你识别
  12. 基于JAVA+SpringMVC+Mybatis+MYSQL的进销存管理系统
  13. 使用TopShelf做windows服务安装 ---安装参数解释
  14. ASP.NET OAuth 2.0 新手上路
  15. android studio和IDE如何自定义module路径
  16. 安装3dmax2020版本注意事项
  17. 3d公式算法计算机,最新3d万能计算定胆公式来了
  18. c语言选猴王链表,C语言程序设计-猴子选大王[链表应用]
  19. Krypital Group(金氪资本)宣布完成对Ambrus Studio的战略投资
  20. python数据处理----pandas导入和导入文件

热门文章

  1. 最具中产气质的“网易考拉”,离“中国版Costco”还有多远?
  2. android软件更新模块实现的技术和方法,Android APK签名原理及方法
  3. cisco 交换机 定期 自动 备份配置 -linux,交换机定时自动备份配置文件的方法
  4. haproxy服务启动命令_HaProxy安装和常用命令
  5. python面试经典题_16道Python经典面试题及答案
  6. 对象属性的调用_PyQt5面向对象编程,类和类的继承
  7. Python编程4道练习题
  8. Python高阶函数用法
  9. python 类的绑定方法和非绑定方法
  10. 5种方法实现“反转字符串”