Python编程中的GUI

0 投票
2 回答
509 浏览
提问于 2025-04-16 02:00

下面是一个用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 个回答

1

可以去看看这个Python的维基页面,上面有关于不同图形用户界面(GUI)工具包的信息。我推荐你先了解一下wxPython,然后再继续深入学习。

5

首先,你需要选择一个图形用户界面(GUI)工具包(Python支持很多这样的工具包),用它来把棋盘画成一个3 x 3的方格。然后,你要修改一下playerinput函数,让它可以接受当前玩家通过双击他们想下的空格来输入。

接着,你需要把print语句改成在GUI界面上显示信息。

不过,如果游戏能够更好地响应玩家发起的事件,而不是自己控制事件的流程,那就更好了——这才是实际的GUI应用应该有的样子,而不是在一个本来是命令行交互程序的基础上简单地加一个界面。

每个任务都比较重要,尤其是我在最后一段提到的整体重构,这些都取决于你选择的GUI工具包的具体情况——所以你可能想先从选择工具包开始,然后把问题分解成不同的小任务(“每个问题问一个”,因为后面可能会出现很多问题;-)。

关于Python的GUI选择,StackOverflow上有很多相关的问题,所以我建议你先去看看这些,而不是再问一个新问题。我个人最喜欢的是PyQt(不过我现在越来越多地使用一个简单的基于浏览器的界面,配合一个本地服务器),其他流行的选择还有wxPython、Tkinter、PyGtk等,具体可以在这里找到——祝你好运!

撰写回答