婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python實現網絡五子棋

python實現網絡五子棋

熱門標簽:看懂地圖標注方法 打印谷歌地圖標注 蘇州人工外呼系統軟件 電話機器人貸款詐騙 廣東旅游地圖標注 淮安呼叫中心外呼系統如何 電話外呼系統招商代理 京華圖書館地圖標注 佛山通用400電話申請

本文實例為大家分享了python實現網絡五子棋的具體代碼,供大家參考,具體內容如下

服務器端:

import os
import socket
import threading

from tkinter import *
from tkinter.messagebox import *


def drawQiPan():
    for i in range(0, 15):
        cv.create_line(20, 20 + 40 * i, 580, 20 + 40 * i, width=2)
    for i in range(0, 15):
        cv.create_line(20 + 40 * i, 20, 20 + 40 * i, 580, width=2)
    cv.pack()


# 走棋函數
def callPos(event):
    global turn
    global MyTurn
    if MyTurn == -1:  # 第一次確認自己的角色
        MyTurn = turn
    else:
        if MyTurn != turn:
            showinfo(title="提示", message="還沒輪到自己下棋")
            return
    # print("clicked at",event.x,event.y,true)
    x = event.x // 40
    y = event.y // 40
    print("clicked at", x, y, turn)
    if maps[x][y] != " ":
        showinfo(title="提示", message="已有棋子")
    else:
        img1 = images[turn]
        cv.create_image((x * 40 + 20, y * 40 + 20), image=img1)
        cv.pack()
        maps[x][y] = str(turn)
        pos = str(x) + "," + str(y)
        sendMessage("move|" + pos)
        print("服務器走的位置", pos)
        label1["text"] = "服務器走的位置" + pos
        # 輸出輸贏信息
        if win_lose():
            if turn == 0:
                showinfo(title="提示", message="黑方你贏了")
                sendMessage("over|黑方你贏了")
            else:
                showinfo(title="提示", message="白方你贏了")
                sendMessage("over|白方你贏了")
        # 換下一方走棋
        if turn == 0:
            turn = 1
        else:
            turn = 0


# 發送消息
def sendMessage(pos):
    global s
    global addr
    s.sendto(pos.encode(), addr)


# 退出函數
def callExit(event):
    pos = "exit|"
    sendMessage(pos)
    os.exit()


# 畫對方棋子
def drawOtherChess(x, y):
    global turn
    img1 = images[turn]
    cv.create_image((x * 40 + 20, y * 40 + 20), image=img1)
    cv.pack()
    maps[x][y] = str(turn)
    # 換下一方走棋
    if turn == 0:
        turn = 1
    else:
        turn = 0


# 判斷整個棋盤的輸贏
def win_lose():
    a = str(turn)
    print("a=", a)
    for i in range(0, 11):
        for j in range(0, 11):
            if maps[i][j] == a and maps[i + 1][j + 1] == a and maps[i + 2][j + 2] == a and maps[i + 3][j + 3] == a and \

                    maps[i + 4][j + 4] == a:
                print("x=y軸上形成五子連珠")
                return True
    for i in range(4, 15):
        for j in range(0, 11):
            if maps[i][j] == a and maps[i - 1][j + 1] == a and maps[i - 2][j + 2] == a and maps[i - 3][j + 3] == a and \

                    maps[i - 4][j + 4] == a:
                print("x=-y軸上形成五子連珠")
                return True
    for i in range(0, 15):
        for j in range(4, 15):
            if maps[i][j] == a and maps[i][j - 1] == a and maps[i][j - 2] == a and maps[i][j - 2] == a and maps[i][
                j - 4] == a:
                print("Y軸上形成了五子連珠")
                return True
    for i in range(0, 11):
        for j in range(0, 15):
            if maps[i][j] == a and maps[i + 1][j] == a and maps[i + 2][j] == a and maps[i + 3][j] == a and maps[i + 4][
                j] == a:
                print("X軸形成五子連珠")
                return True
    return False


# 輸出map地圖
def print_map():
    for j in range(0, 15):
        for i in range(0, 15):
            print(maps[i][j], end=' ')
        print('w')


# 接受消息
def receiveMessage():
    global s
    while True:  # 接受客戶端發送的消息
        global addr
        data, addr = s.recvfrom(1024)
        data = data.decode('utf-8')
        a = data.split("|")
        if not data:
            print('client has exited!')
            break
        elif a[0] == 'join':  # 連接服務器的請求
            print('client 連接服務器!')
            label1["text"] = 'client連接服務器成功,請你走棋!'
        elif a[0] == 'exit':
            print('client對方退出!')
            label1["text"] = 'client對方退出,游戲結束!'
        elif a[0] == 'over':
            print('對方贏信息!')
            label1["text"] = data.split("|")[0]
            showinfo(title="提示", message=data.split("1")[1])
        elif a[0] == 'move':
            print('received:', data, 'from', addr)
            p = a[1].split(",")
            x = int(p[0])
            y = int(p[1])
            print(p[0], p[1])
            label1["text"] = "客戶端走的位置" + p[0] + p[1]
            drawOtherChess(x, y)
    s.close()


def startNewThread():  # 啟動新線程來接受客戶端消息
    thread = threading.Thread(target=receiveMessage, args=())
    thread.setDaemon(True)
    thread.start()


if __name__ == '__main__':
    root = Tk()
    root.title("網絡五子棋v2.0-服務器端")
    images = [PhotoImage(file='./images/BlackStone.png'), PhotoImage(file='./images/WhiteStone.png')]
    turn = 0
    MyTurn = -1
    maps = [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "] for y in range(15)]
    cv = Canvas(root, bg='green', width=610, height=610)
    drawQiPan()
    cv.bind("Button-1>", callPos)
    cv.pack()
    label1 = Label(root, text="服務器端...")
    label1.pack()
    button1 = Button(root, text="退出游戲")
    button1.bind("Button-1>", callExit)
    button1.pack()
    # 創建UDP SOCKET
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind(('localhost', 8000))
    addr = ('localhost', 8000)
    startNewThread()
    root.mainloop()

客戶端:

from tkinter import *
from tkinter.messagebox import *
import socket
import threading
import os

# 主程序
root = Tk()
root.title("網絡五子棋v2.0--UDP客戶端")
imgs = [PhotoImage(file='./images/BlackStone.png'), PhotoImage(file='./images/WhiteStone.png')]
turn = 0
MyTurn = -1


# 畫對方棋子
def drawOtherChess(x, y):
    global turn
    img1 = imgs[turn]
    cv.create_image((x * 40 + 20, y * 40 + 20), image=img1)
    cv.pack()
    maps[x][y] = str(turn)
    # 換下一方走棋
    if turn == 0:
        turn = 1
    else:
        turn = 0


# 發送消息
def sendMessage(position):
    global s
    s.sendto(position.encode(), (host, port))


# 退出函數
def callExit(event):
    position = "exit|"
    sendMessage(position)
    os.exit()


# 走棋函數
def callback(event):
    global turn
    global MyTurn
    if MyTurn == -1:
        MyTurn = turn
    else:
        if MyTurn != turn:
            showinfo(title="提示", message="還沒輪到自己走棋")
            return
    # print("clicked at",event.x,event.y)
    x = event.x // 40
    y = event.y // 40
    print("clicked at", x, y, turn)
    if maps[x][y] != " ":
        showinfo(title="提示", message="已有棋子")
    else:
        img1 = imgs[turn]
        cv.create_image((x * 40 + 20, y * 40 + 20), image=img1)
        cv.pack()
        maps[x][y] = str(turn)
        position = str(x) + ',' + str(y)
        sendMessage("move|" + position)
        print("客戶端走的位置", position)
        label1["text"] = "客戶端走的位置" + position
        # 輸出輸贏信息
        if win_lose():
            if turn == 0:
                showinfo(title="提示", message="黑方你贏了")
                sendMessage("over|黑方你贏了!")
            else:
                showinfo(title="提示", message="白方你贏了!")
                sendMessage("over|白方你贏了!")
        # 換下一方走棋:
        if turn == 0:
            turn = 1
        else:
            turn = 0


# 畫棋盤
def drawQiPan():  # 畫棋盤
    for i in range(0, 15):
        cv.create_line(20, 20 + 40 * i, 580, 20 + 40 * i, width=2)
    for i in range(0, 15):
        cv.create_line(20 + 40 * i, 20, 20 + 40 * i, 580, width=2)
    cv.pack()


# 輸贏判斷
def win_lose():
    a = str(turn)
    print("a=", a)
    for i in range(0, 11):
        for j in range(0, 11):
            if maps[i][j] == a and maps[i + 1][j + 1] == a and maps[i + 2][j + 2] == a and maps[i + 3][j + 3] == a and \

                    maps[i + 4][j + 4] == a:
                print("x=y軸上形成五子連珠")
                return True
    for i in range(4, 15):
        for j in range(0, 11):
            if maps[i][j] == a and maps[i - 1][j + 1] == a and maps[i - 2][j + 2] == a and maps[i - 3][j + 3] == a and \

                    maps[i - 4][j + 4] == a:
                print("x=-y軸上形成五子連珠")
                return True
    for i in range(0, 15):
        for j in range(4, 15):
            if maps[i][j] == a and maps[i][j - 1] == a and maps[i][j - 2] == a and maps[i][j - 2] == a and maps[i][
                j - 4] == a:
                print("Y軸上形成了五子連珠")
                return True
    for i in range(0, 11):
        for j in range(0, 15):
            if maps[i][j] == a and maps[i + 1][j] == a and maps[i + 2][j] == a and maps[i + 3][j] == a and maps[i + 4][
                j] == a:
                print("X軸形成五子連珠")
                return True
    return False


# 接受消息
def receiveMessage():  # 接受消息
    global s
    while True:
        data = s.recv(1024).decode('utf-8')
        a = data.split("|")
        if not data:
            print('server has exited!')
            break
        elif a[0] == 'exit':
            print('對方退出!')
            label1["text"] = '對方退出!游戲結束!'
        elif a[0] == 'over':
            print('對方贏信息!')
            label1["text"] = data.split("|")[0]
            showinfo(title="提示", message=data.split("|")[1])
        elif a[0] == 'move':
            print('received:', data)
            p = a[1].split(",")
            x = int(p[0])
            y = int(p[1])
            print(p[0], p[1])
            label1["text"] = "服務器走的位置" + p[0] + p[1]
            drawOtherChess(x, y)
    s.close()


# 啟動線程接受客戶端消息
def startNewThread():
    thread = threading.Thread(target=receiveMessage, args=())
    thread.setDaemon(True)
    thread.start()


if __name__ == '__main__':
    # 主程序
    maps = [[" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "] for y in range(15)]
    cv = Canvas(root, bg='green', width=610, height=610)
    drawQiPan()
    cv.bind("Button-1>", callback)
    cv.pack()
    label1 = Label(root, text="客戶端...")
    label1.pack()
    button1 = Button(root, text="退出游戲")
    button1.bind("Button-1>", callExit)
    button1.pack()
    # 創建UDP
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    port = 8000
    host = 'localhost'
    pos = 'join|'
    sendMessage(pos)
    startNewThread()
    root.mainloop()

游戲執行頁面:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • python游戲實戰項目之智能五子棋
  • Python五子棋小游戲實例分享
  • python編寫五子棋游戲
  • python實現雙人五子棋(終端版)
  • Python tkinter制作單機五子棋游戲
  • python實現簡單的五子棋游戲
  • python游戲實戰項目之智能五子棋簡易版

標簽:衡水 湖州 中山 呼和浩特 江蘇 駐馬店 股票 畢節

巨人網絡通訊聲明:本文標題《python實現網絡五子棋》,本文關鍵詞  python,實現,網絡,五子棋,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python實現網絡五子棋》相關的同類信息!
  • 本頁收集關于python實現網絡五子棋的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲1区2区3区视频| 在线播放日韩导航| 国产人伦精品一区二区| 日本视频免费一区| 色噜噜夜夜夜综合网| 亚洲视频一区在线| 99精品视频在线观看免费| 国产午夜亚洲精品理论片色戒| 午夜电影一区二区| 欧美日韩国产一区| 亚洲高清免费观看高清完整版在线观看 | 天堂va蜜桃一区二区三区漫画版| 99re热视频这里只精品| 综合激情网...| 97精品久久久久中文字幕| 欧美zozozo| 国内精品国产三级国产a久久| 欧美日韩国产美| 午夜视频一区二区| 日韩一区二区三区观看| 精品一区二区免费| 欧美激情一区不卡| 91黄色免费网站| 亚洲私人黄色宅男| 欧美综合亚洲图片综合区| 亚洲激情欧美激情| 欧美日产在线观看| 老司机精品视频导航| 久久久久久亚洲综合| 成人性生交大片免费看中文| 国产精品二三区| 欧美日韩视频在线第一区| 性感美女久久精品| 26uuu精品一区二区三区四区在线| 夫妻av一区二区| 一区二区三区国产精品| 欧美一区三区二区| 国产精品一卡二卡在线观看| 国产精品盗摄一区二区三区| 色菇凉天天综合网| 男女性色大片免费观看一区二区 | 日韩欧美一区在线观看| 国产一区二区久久| 国产日韩一级二级三级| 国产一区欧美日韩| 樱花影视一区二区| 日韩精品一区二| 99视频在线精品| 视频一区中文字幕国产| 久久精品视频在线看| 在线观看亚洲a| 久久不见久久见中文字幕免费| 久久精品亚洲乱码伦伦中文 | 国产精品亚洲一区二区三区妖精| 久久久综合视频| 欧美视频一区二区三区四区 | 日韩美女视频一区| 91精品国产综合久久福利| 成人性生交大片免费看在线播放 | 国产成人一级电影| 日韩国产一区二| 中文字幕乱码日本亚洲一区二区| 欧美日本韩国一区| 国产91精品露脸国语对白| 日韩一区精品字幕| 亚洲女同一区二区| 久久理论电影网| 69精品人人人人| 色天使久久综合网天天| 国产一区二区三区黄视频 | 国产一区二区三区黄视频| 亚洲国产一区二区视频| 久久影院电视剧免费观看| 欧美午夜在线观看| 不卡的电视剧免费网站有什么| 日欧美一区二区| 一区二区三区四区在线播放| 国产女人aaa级久久久级| 6080yy午夜一二三区久久| 色94色欧美sute亚洲线路一久| 国产成人一区二区精品非洲| 精品一区二区久久久| 亚洲国产精品一区二区尤物区| 亚洲精品老司机| 中文字幕视频一区二区三区久| 亚洲人成网站影音先锋播放| 一区二区在线观看av| 亚洲电影欧美电影有声小说| 日韩精品久久理论片| 国产综合色视频| 岛国av在线一区| 色天天综合久久久久综合片| 欧美区在线观看| 久久这里只精品最新地址| 国产精品国产成人国产三级 | 午夜精品成人在线视频| 蜜臀av亚洲一区中文字幕| 精品一区二区三区免费| 99国产精品一区| 欧美性色综合网| 日韩一区二区三| 国产欧美一区二区精品性| 1区2区3区精品视频| 亚洲国产cao| 国产揄拍国内精品对白| 99v久久综合狠狠综合久久| 91精品国产麻豆国产自产在线| 久久综合视频网| 一区二区在线电影| 蜜臀av一区二区三区| 99视频精品在线| 欧美一级久久久久久久大片| 国产精品久久久久四虎| 亚洲一区二区三区在线播放| 国产麻豆精品视频| 欧美日韩日本视频| 欧美激情综合在线| 五月婷婷激情综合网| 成人国产一区二区三区精品| 91麻豆精品国产91久久久使用方法| 欧美韩国日本一区| 蜜桃久久久久久| 色婷婷av一区二区三区gif| 精品久久国产字幕高潮| 亚洲天堂免费看| 韩国中文字幕2020精品| 日本韩国欧美一区二区三区| 精品成人私密视频| 亚洲成av人影院在线观看网| 成人aaaa免费全部观看| 日韩一区二区在线看片| 亚洲欧美日韩中文字幕一区二区三区| 久久99蜜桃精品| 欧美色图激情小说| 国产精品国产三级国产普通话蜜臀 | 日韩欧美三级在线| 一级女性全黄久久生活片免费| 国产电影一区二区三区| 日韩免费性生活视频播放| 一区二区三区国产精华| 99热99精品| 国产性做久久久久久| 久久精品久久99精品久久| 欧美日韩一区二区三区不卡| 中文字幕在线不卡| 成人在线视频一区| 久久久五月婷婷| 国产在线精品一区二区夜色| 91精品国产品国语在线不卡| 香蕉久久一区二区不卡无毒影院| 色综合久久中文字幕| 中文字幕一区二| 成人免费三级在线| 日本一区二区免费在线观看视频| 欧美a级理论片| 欧美一级免费观看| 视频在线观看国产精品| 6080午夜不卡| 蜜臀91精品一区二区三区 | 国产日韩av一区二区| 国产美女av一区二区三区| 久久综合999| 国产久卡久卡久卡久卡视频精品| 久久综合九色综合97婷婷| 久久9热精品视频| 久久久一区二区| 国产91在线观看丝袜| 国产精品美女久久久久久久久| av欧美精品.com| 18涩涩午夜精品.www| 欧美体内she精视频| 亚洲午夜久久久久久久久久久| 欧美丝袜自拍制服另类| 天堂一区二区在线免费观看| 91麻豆精品国产自产在线| 蜜臀精品久久久久久蜜臀| 久久品道一品道久久精品| 成人在线视频首页| 亚洲欧洲精品天堂一级| 色天使色偷偷av一区二区| 午夜精品久久久久久久| 日韩精品最新网址| 成人免费黄色在线| 一区二区三区鲁丝不卡| 3atv在线一区二区三区| 国产一区二区三区综合| 中文字幕成人av| 欧美亚洲丝袜传媒另类| 免费av成人在线| 国产精品久久久一本精品 | 欧美伊人久久大香线蕉综合69| 亚洲国产精品久久久久婷婷884| 欧美日韩免费视频| 国产一区二区福利| 亚洲精品欧美专区| 日韩精品一区二区三区老鸭窝| 成人av在线一区二区三区| 亚洲国产一区二区三区青草影视| 精品美女一区二区| 色综合久久综合网|