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-*- importrandom importsys fromcopyimportdeepcopy #生成随机拼图 jigsaw=[chr(i)foriinrange(65,74)] random.shuffle(jigsaw) palace={} foriinrange(9): ifjigsaw[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]} #移动方块 defmove_square(square,pledic): in_switch=bool() zero_switch=bool() fork,vinpledic.items(): pledic[k][1]=k #玩家操作,移动的方块(输入的字符) ifv[0]==square: in_key=k in_val=v in_switch=True #找到字符所在,并作标记 ifv[2]==0: zero=v[1] zero_k=k zero_v=v zero_switch=True ifzero_switch==in_switch: #与空方块交换位置 ifzero%3==in_val[1]%3andabs(zero-in_val[1])<=3: pledic[in_key],pledic[zero_k]=zero_v,in_val ifabs(zero-in_val[1])==1and((zero+in_val[1])-1)%3!=0: pledic[in_key],pledic[zero_k]=zero_v,in_val returnpledic #游戏检测 defcheck_palace(dic): right_count=0 ifdic[9][2]==0: fork,vindic.items(): ifk==ord(v[0])-64: right_count+=1 ifright_count==8: returnTrue returnFalse #输出 defprint_palace(dic): printdic[1][0],dic[2][0],dic[3][0] printdic[4][0],dic[5][0],dic[6][0] printdic[7][0],dic[8][0],dic[9][0] #进行游戏 defplay_palace(palace): ple=deepcopy(palace) print_palace(ple) play_dic={} whileTrue: try: square=raw_input('inputA-H:') iford(square.upper())>=65andord(square.upper())<=74: play_dic=move_square(square.upper(),ple) print_palace(play_dic) ifcheck_palace(play_dic): break else: print'Pleaseagaininput' exceptTypeError: print'Pleaseagaininput' continue print"AllRight!YouWin!!" sys.exit() if__name__=='__main__': play_palace(palace)
最后执行结果,得出如下图
$python9palace.py DF GCH EAB inputA-H:f DF GCH EAB inputA-H:c DCF GH EAB inputA-H:
相关内容
- 暂无相关文章
评论关闭