首页 > 其他 > 详细

第一个小游戏:井字棋

时间:2019-12-15 10:03:20      阅读:91      评论:0      收藏:0      [点我收藏+]
若有转载请注明出处!
先介绍一下吧,本人现在还在上大二,博客更多的是记录自己跟随课程的学习成果,其中也会有一些老师的印记,但更多的都是自己课下花了大量时间和心血的结果,所以希望各位看官转载注明出处,真的谢谢!

昨天用python实现了自己第一个有界面的小游戏,虽然用java也可以做出来,但之前没有去想这件事情,而且由于个人原因,使用java写的图形界面都用于实验课了(若你是东大软件人,东软云医院,你懂得),
昨天实验课上将自己的原来的逻辑稍微优化了下,并添加了图形界面,初步完成了井字棋的功能(其实就是三字连线),有兴趣的可以自己运行一遍,看自己能不能下过电脑吧!

# 不谷尉
from tkinter import *
from tkinter import messagebox as msgbox


def luozi0():
    global human, BOARD
    B0[text] = human
    BOARD[0] = human
    Over = winner()
    if not Over:
        computer_move()
        winner()


def luozi1():
    global human, BOARD
    B1[text] = human
    BOARD[1] = human
    Over = winner()
    if not Over:
        computer_move()
        winner()


def luozi2():
    global human, BOARD
    B2[text] = human
    BOARD[2] = human
    Over = winner()
    if not Over:
        computer_move()
        winner()


def luozi3():
    global human, BOARD
    B3[text] = human
    BOARD[3] = human
    Over = winner()
    if not Over:
        computer_move()
        winner()


def luozi4():
    global human, BOARD
    B4[text] = human
    BOARD[4] = human
    Over = winner()
    if not Over:
        computer_move()
        winner()


def luozi5():
    global human, BOARD
    B5[text] = human
    BOARD[5] = human
    Over = winner()
    if not Over:
        computer_move()
        winner()


def luozi6():
    global human, BOARD
    B6[text] = human
    BOARD[6] = human
    Over = winner()
    if not Over:
        computer_move()
        winner()


def luozi7():
    global human, BOARD
    B7[text] = human
    BOARD[7] = human
    Over = winner()
    if not Over:
        computer_move()
        winner()


def luozi8():
    global human, BOARD
    B8[text] = human
    BOARD[8] = human
    Over = winner()
    if not Over:
        computer_move()
        winner()


def restart():
    global BOARD, computer, human
    computer =  
    human =  
    for i in range(9):
        BOARD[i] = EMPTY
        Bus[i][text] = EMPTY
    winnerlabel[text] = 未知
    if not askyesno():
        computer_move()


def askyesno():
    global human, computer
    bl = msgbox.askyesno("YesNo", "是否选择先手?")
    if bl:
        human, computer = O, X
        return True
    else:
        computer, human = O, X
        return False


X = "X"
O = "O"
EMPTY = " "
WAYS_TO_WIN = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6),
               (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6))
BEST_MOVES = (4, 0, 2, 6, 8, 1, 3, 5, 7)

BOARD = []  # 棋盘
for i in range(9):
    BOARD.append(EMPTY)

root = Tk()
root.title(井字棋)
root.geometry(240x350)
Bus = []
computer =  
human =  
Label(root, text=赢家:, width=6, height=3).grid(row=4, column=1)
winnerlabel = Label(root, text=未知, width=6, height=3)
winnerlabel.grid(row=4, column=2)
winnerlabel.pack
reButton = Button(root, text=重新开始, width=6, height=2, bg=red, fg=blue, command=restart).grid(row=4, column=0)
B0 = Button(root, text=EMPTY, width=10, height=5, bg=green, fg=black, command=luozi0)
B1 = Button(root, text=EMPTY, width=10, height=5, bg=yellow, fg=black, command=luozi1)
B2 = Button(root, text=EMPTY, width=10, height=5, bg=green, fg=black, command=luozi2)
B3 = Button(root, text=EMPTY, width=10, height=5, bg=yellow, fg=black, command=luozi3)
B4 = Button(root, text=EMPTY, width=10, height=5, bg=green, fg=black, command=luozi4)
B5 = Button(root, text=EMPTY, width=10, height=5, bg=yellow, fg=black, command=luozi5)
B6 = Button(root, text=EMPTY, width=10, height=5, bg=green, fg=black, command=luozi6)
B7 = Button(root, text=EMPTY, width=10, height=5, bg=yellow, fg=black, command=luozi7)
B8 = Button(root, text=EMPTY, width=10, height=5, bg=green, fg=black, command=luozi8)
Bus.append(B0)
Bus.append(B1)
Bus.append(B2)
Bus.append(B3)
Bus.append(B4)
Bus.append(B5)
Bus.append(B6)
Bus.append(B7)
Bus.append(B8)

for Bi in range(0, 9):
    Bus[Bi].grid(row=Bi//3, column=Bi % 3)


# 产生合法走棋位置序列,即未落子的位置序列
def legal_moves():
    global BOARD
    moves = []
    for square in range(0, 9):
        if BOARD[square] == EMPTY:
            moves.append(square)
    return moves


def winner():
    global BOARD
    for row in WAYS_TO_WIN:
        if BOARD[row[0]] == BOARD[row[1]] == BOARD[row[2]] != EMPTY:
            winner = BOARD[row[0]]
            print("胜利者是" + winner)
            if human == winner:
                winnerlabel[text] = 玩家
            elif computer == winner:
                winnerlabel[text] = 电脑
            return winner
    if EMPTY not in BOARD:
        print("平局")
        winnerlabel[text] = 平局
        return TIE


def isFull():
    for i in BOARD:
        if i == EMPTY:
            return False
    return True


# 电脑下棋
def computer_move():
    global computer, human
    for move in legal_moves():
        BOARD[move] = computer
        Bus[move][text] = computer
        if winner() == computer:
            print("电脑下棋位置。。。", move)
            return True
        # 取消走棋方案
        BOARD[move] = EMPTY
        Bus[move][text] = EMPTY

    for move in legal_moves():
        BOARD[move] = human
        Bus[move][text] = human
        if winner() == human:
            print("电脑下棋位置。。。", move)
            BOARD[move] = computer
            Bus[move][text] = computer
            return True
        # 取消走棋方案
        BOARD[move] = EMPTY
        Bus[move][text] = EMPTY

    for move in BEST_MOVES:
        if move in legal_moves():
            BOARD[move] = computer
            Bus[move][text] = computer
            return True


if not askyesno():
    computer_move()
root.mainloop()

 



第一个小游戏:井字棋

原文:https://www.cnblogs.com/bu-5-gu-2-wei-0/p/12041909.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!