婷婷综合国产,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
    热久久国产精品| 久久99精品国产.久久久久| 一区二区三区在线视频免费| 视频在线在亚洲| 91原创在线视频| 中文字幕一区二区三区四区| 国内精品不卡在线| 日韩一区二区三| 亚洲电影激情视频网站| 欧美亚洲动漫精品| 亚洲高清中文字幕| 欧美久久一二三四区| 午夜精品久久久久久久| 91麻豆精品国产自产在线| 视频一区中文字幕国产| 欧美一级二级在线观看| 秋霞午夜av一区二区三区 | 亚洲bdsm女犯bdsm网站| 欧美色精品在线视频| 午夜精品视频一区| 色综合久久99| 亚洲午夜一区二区三区| 欧美顶级少妇做爰| 韩国成人福利片在线播放| 久久精品亚洲麻豆av一区二区| 国产精品中文有码| 亚洲欧美综合网| 欧美综合视频在线观看| 日韩综合在线视频| 91精品一区二区三区久久久久久 | 国产成人午夜精品5599| 亚洲美女淫视频| 欧美成人福利视频| 不卡一区二区三区四区| 秋霞国产午夜精品免费视频 | 中文在线免费一区三区高中清不卡| 色婷婷久久久久swag精品 | 日产欧产美韩系列久久99| 国产女人水真多18毛片18精品视频 | 久久精品亚洲精品国产欧美| 99精品视频在线播放观看| 日本91福利区| 一片黄亚洲嫩模| 久久久久久久电影| 日韩写真欧美这视频| 顶级嫩模精品视频在线看| 亚洲电影在线播放| 日韩免费看的电影| 欧美人与禽zozo性伦| 91网页版在线| 久久机这里只有精品| 亚洲欧美日韩国产综合在线| 欧美三级乱人伦电影| 精品国产一区二区三区忘忧草 | 亚洲欧美日韩久久| 美女在线视频一区| 欧美性欧美巨大黑白大战| 亚洲靠逼com| 精品不卡在线视频| 欧美电影免费提供在线观看| 一区二区三区蜜桃| 欧洲一区二区三区免费视频| 亚洲欧美激情视频在线观看一区二区三区 | 4438亚洲最大| 亚洲综合精品久久| 欧美理论电影在线| 亚洲综合色自拍一区| 成人黄页在线观看| 中文字幕精品一区| 国产精品综合一区二区| 丁香啪啪综合成人亚洲小说| 国产一区二区三区高清播放| 欧美男生操女生| 日韩亚洲欧美高清| 亚洲国产欧美一区二区三区丁香婷| 亚洲成av人片在线观看无码| 99九九99九九九视频精品| 久久免费午夜影院| 亚洲一本大道在线| 蜜臀久久99精品久久久画质超高清 | 欧美日韩黄色一区二区| 午夜精品福利视频网站| 国产日韩欧美麻豆| 91视频国产观看| 亚洲va韩国va欧美va精品| 欧美xfplay| 麻豆国产欧美日韩综合精品二区| 一区二区三区国产| 日韩免费高清av| 大胆亚洲人体视频| 亚洲一区二区在线观看视频| 在线不卡a资源高清| 极品瑜伽女神91| 一区二区三区av电影| 日韩精品一区国产麻豆| 99热这里都是精品| 丝袜亚洲另类丝袜在线| 久久精品人人做人人爽人人| 欧美日韩在线三区| 成人影视亚洲图片在线| 青青草国产精品亚洲专区无| 欧美日本韩国一区二区三区视频 | 中文字幕日韩精品一区| 欧美日韩在线免费视频| 国产在线播放一区二区三区| 亚洲免费观看高清完整版在线观看熊 | 亚洲永久免费av| 久久久影院官网| 欧美久久免费观看| 成人黄动漫网站免费app| 日韩高清电影一区| 日韩毛片一二三区| 久久精品一区二区三区不卡| 日本一区二区三区在线不卡| 日韩视频在线观看一区二区| 色诱亚洲精品久久久久久| 韩国女主播一区| 青青草精品视频| 亚洲第一激情av| 亚洲精品videosex极品| 欧美激情综合五月色丁香小说| 欧美日韩免费高清一区色橹橹| 久久老女人爱爱| 欧美一区二区性放荡片| 欧美午夜影院一区| 91理论电影在线观看| 成人久久18免费网站麻豆| 国产黑丝在线一区二区三区| 美女视频免费一区| 精品国产电影一区二区| 国产精品夜夜嗨| 视频一区二区欧美| 亚洲制服欧美中文字幕中文字幕| 亚洲国产一区在线观看| 免费成人在线观看| 国产精品久久久久影院亚瑟 | 99久久精品国产毛片| 亚洲男女一区二区三区| 国产精品国产三级国产有无不卡| 欧美综合视频在线观看| 欧美综合视频在线观看| 在线观看免费成人| 欧美亚洲综合网| 欧美情侣在线播放| 日韩国产一二三区| 欧美日韩国产另类不卡| 欧美吻胸吃奶大尺度电影| 在线精品视频小说1| 精品国产3级a| 国产偷v国产偷v亚洲高清| 国产精品三级在线观看| 一区二区三区四区av| 一区二区在线观看av| 午夜精品福利一区二区三区av| 奇米综合一区二区三区精品视频| 久久国产综合精品| 国产91露脸合集magnet| 色婷婷精品久久二区二区蜜臂av | 亚洲欧洲美洲综合色网| www.久久久久久久久| 欧美日韩精品高清| 精品粉嫩超白一线天av| 国产精品福利一区二区三区| 亚洲综合在线电影| 日韩精品国产欧美| 国产精品1区2区3区| 91在线看国产| 国产精品久久福利| 一区二区三区欧美| 麻豆精品久久精品色综合| 国产成人在线色| 欧美视频一区在线| 亚洲精品一区二区三区福利| aaa国产一区| 94-欧美-setu| 精品sm捆绑视频| 亚洲成av人片在线观看无码| 91视频一区二区| 久久亚洲影视婷婷| 亚洲国产成人av| 不卡电影免费在线播放一区| 日韩欧美一二三| 亚洲综合av网| 成人丝袜视频网| 日韩精品在线看片z| 亚洲午夜精品一区二区三区他趣| 精品一区二区三区在线播放| 欧美在线综合视频| 视频一区在线播放| 欧美在线观看视频一区二区| 久久久99久久精品欧美| 日韩激情视频在线观看| 久久精品久久综合| 91女神在线视频| 国产精品蜜臀av| 国产自产视频一区二区三区| 欧美一区在线视频| 国产高清成人在线| 日韩欧美国产麻豆| 奇米777欧美一区二区|