上山打老虎 发表于 2021-6-23 21:59:44

Python实现, 命令行下的拼图游戏

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

[*]游戏数据结构
[*]玩家操作
[*]逻辑部分
[*]通关检测
[*]输出部分
[*]主程序
实现构思:

[*]用字母 A, B, C, ... H 表示8个方块; 字母 I 表示第9个宫格, 即空位, 它实质上也是个方块
[*]拼图数据结构是由一系列字典元素构成的: {1:[...],2:[]...,9:[]}, 其中 KEY number 表示正确的位置信息
[*]字典元素是一个列表, 包含: [拼图符号, 实时位置信息, 状态标志(空/非空)]
[*]当点击其中一个位置的方块时, 如果周围的方块存在 KEY x or y==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 =
random.shuffle(jigsaw)
palace = {}
for i in range(9):
if jigsaw == 'I':

      palace=([' ', i+1, 0])
    else:
      palace=(, 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
      # 玩家操作, 移动的方块(输入的字符)
      if v == square:
            in_key = k
            in_val = v
            in_switch = True

      # 找到字符所在, 并作标记
      if v == 0:
            zero = v
            zero_k = k
            zero_v = v
            zero_switch =True  if zero_switch == in_switch:

      # 与空方块交换位置
      if zero % 3 == in_val % 3 and abs(zero - in_val) <= 3:
            pledic, pledic = zero_v, in_val
      if abs(zero - in_val) == 1 and ((zero+in_val)-1)%3 != 0:
            pledic, pledic = zero_v, in_val  return pledic

游戏检测

  def check_palace(dic):
  right_count = 0
  if dic == 0:

      for k,v in dic.items():
            if k == ord(v)-64:
                right_count +=1
      if right_count == 8:
            return True
    return False
输出

  def print_palace(dic):
  print dic,dic,dic
  print dic,dic,dic
  print dic,dic,dic

进行游戏

  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:

页: [1]
查看完整版本: Python实现, 命令行下的拼图游戏