python拼图_Python实现, 命令行下的拼图游戏
需求:
現在要做這樣一個拼圖游戲, 有一個九宮格, 其中有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实现, 命令行下的拼图游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 对3.0 版本的python依赖无法满足
- 下一篇: 下列哪个适合做链栈_很多朋友在问:多层实
