Python编程中的GUI
下面是一个用Python写的井字棋游戏代码,有人能教我怎么把它做成图形界面(GUI)形式,并且加一个重置选项,还能在最后显示谁赢了吗?比如说是X赢了还是O赢了?
棋盘的表示是这样的: " 1 | 2 | 3\n-----------\n 4 | 5 | 6\n-----------\n 7 | 8 | 9"
我们用一个列表来检查棋盘的状态:[1,2,3,4,5,6,7,8,9,1,4,7,2,5,8,3,6,9,1,5,9,3,5,7]
可用的位置是从1到9的数字。
这里有一个处理玩家移动的函数,叫做moveHandler,它需要棋盘、可用的位置、检查棋盘的列表、当前玩家和一个数字作为参数。
if player==1:
check="X"
else:
check="O"
while spaces.count(n)==0:
print "\nInvalid Space"
n=playerinput(player)
spaces=spaces.remove(n)
board=board.replace(str(n),check)
for c in range(len(checkboard)):
if checkboard[c]==n:
checkboard[c]=check
status = checkwinner(checkboard,check)
return board,status
还有一个检查赢家的函数,叫做checkwinner,它会用到三个变量a、b和c,初始值分别是0、1和2。
while a<=21:
combo = [checkboard[a],checkboard[b],checkboard[c]]
if combo.count(check) == 3:
status =1
break
else:
status =0
a+=3
b+=3
c+=3
return status
再有一个函数叫做playerinput,用来获取玩家的输入。它会提示玩家选择一个位置,并把输入的内容转成整数。
except ValueError:
print "Invalid Space"
key = playerinput(player)
return key
整个游戏会在一个无限循环中进行,也就是说它会一直运行,直到游戏结束。
player = len(spaces)%2 +1
if player == 1:
player = 2
else:
player =1
print "\n\n" + board
key = playerinput(player)
board,status =moveHandler(board,spaces,checkboard,player,key)
if status == 1:
print '\n\nPlayer ' + str(player) + ' is the winner!!!'
print board
break
elif len(spaces)==0:
print "No more spaces left. Game ends in a TIE!!!"
print board
break
else:
continue
2 个回答
可以去看看这个Python的维基页面,上面有关于不同图形用户界面(GUI)工具包的信息。我推荐你先了解一下wxPython,然后再继续深入学习。
首先,你需要选择一个图形用户界面(GUI)工具包(Python支持很多这样的工具包),用它来把棋盘画成一个3 x 3的方格。然后,你要修改一下playerinput
函数,让它可以接受当前玩家通过双击他们想下的空格来输入。
接着,你需要把print
语句改成在GUI界面上显示信息。
不过,如果游戏能够更好地响应玩家发起的事件,而不是自己控制事件的流程,那就更好了——这才是实际的GUI应用应该有的样子,而不是在一个本来是命令行交互程序的基础上简单地加一个界面。
每个任务都比较重要,尤其是我在最后一段提到的整体重构,这些都取决于你选择的GUI工具包的具体情况——所以你可能想先从选择工具包开始,然后把问题分解成不同的小任务(“每个问题问一个”,因为后面可能会出现很多问题;-)。
关于Python的GUI选择,StackOverflow上有很多相关的问题,所以我建议你先去看看这些,而不是再问一个新问题。我个人最喜欢的是PyQt(不过我现在越来越多地使用一个简单的基于浏览器的界面,配合一个本地服务器),其他流行的选择还有wxPython、Tkinter、PyGtk等,具体可以在这里找到——祝你好运!