校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識(shí)庫 > python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋

python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋

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

本文實(shí)例為大家分享了python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋的具體代碼,供大家參考,具體內(nèi)容如下

服務(wù)器端:

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()


# 走棋函數(shù)
def callPos(event):
    global turn
    global MyTurn
    if MyTurn == -1:  # 第一次確認(rèn)自己的角色
        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("服務(wù)器走的位置", pos)
        label1["text"] = "服務(wù)器走的位置" + 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


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


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


# 畫對(duì)方棋子
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


# 判斷整個(gè)棋盤的輸贏
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:  # 接受客戶端發(fā)送的消息
        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':  # 連接服務(wù)器的請(qǐng)求
            print('client 連接服務(wù)器!')
            label1["text"] = 'client連接服務(wù)器成功,請(qǐng)你走棋!'
        elif a[0] == 'exit':
            print('client對(duì)方退出!')
            label1["text"] = 'client對(duì)方退出,游戲結(jié)束!'
        elif a[0] == 'over':
            print('對(duì)方贏信息!')
            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():  # 啟動(dòng)新線程來接受客戶端消息
    thread = threading.Thread(target=receiveMessage, args=())
    thread.setDaemon(True)
    thread.start()


if __name__ == '__main__':
    root = Tk()
    root.title("網(wǎng)絡(luò)五子棋v2.0-服務(wù)器端")
    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="服務(wù)器端...")
    label1.pack()
    button1 = Button(root, text="退出游戲")
    button1.bind("Button-1>", callExit)
    button1.pack()
    # 創(chuàng)建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("網(wǎng)絡(luò)五子棋v2.0--UDP客戶端")
imgs = [PhotoImage(file='./images/BlackStone.png'), PhotoImage(file='./images/WhiteStone.png')]
turn = 0
MyTurn = -1


# 畫對(duì)方棋子
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


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


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


# 走棋函數(shù)
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('對(duì)方退出!')
            label1["text"] = '對(duì)方退出!游戲結(jié)束!'
        elif a[0] == 'over':
            print('對(duì)方贏信息!')
            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"] = "服務(wù)器走的位置" + p[0] + p[1]
            drawOtherChess(x, y)
    s.close()


# 啟動(dòng)線程接受客戶端消息
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()
    # 創(chuàng)建UDP
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    port = 8000
    host = 'localhost'
    pos = 'join|'
    sendMessage(pos)
    startNewThread()
    root.mainloop()

游戲執(zhí)行頁面:

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • python游戲?qū)崙?zhàn)項(xiàng)目之智能五子棋
  • Python五子棋小游戲?qū)嵗窒?/li>
  • python編寫五子棋游戲
  • python實(shí)現(xiàn)雙人五子棋(終端版)
  • Python tkinter制作單機(jī)五子棋游戲
  • python實(shí)現(xiàn)簡單的五子棋游戲
  • python游戲?qū)崙?zhàn)項(xiàng)目之智能五子棋簡易版

標(biāo)簽:衡水 湖州 中山 呼和浩特 江蘇 駐馬店 股票 畢節(jié)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋》,本文關(guān)鍵詞  python,實(shí)現(xiàn),網(wǎng)絡(luò),五子棋,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋》相關(guān)的同類信息!
  • 本頁收集關(guān)于python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美无砖专区一中文字| 亚洲电影视频在线| 欧美性xxxxx极品少妇| 国产一区二三区| 亚洲国产一区二区三区| 久久蜜臀精品av| 欧美亚洲国产一区在线观看网站| 久久99精品国产麻豆不卡| 亚洲特级片在线| 精品国产乱码久久久久久图片| 欧美性猛交xxxx乱大交退制版| 国产在线播放一区二区三区| 亚洲成人av资源| 伊人婷婷欧美激情| 中文字幕电影一区| 精品对白一区国产伦| 欧美日韩国产免费| 蜜臀av一级做a爰片久久| 久久久久久久久蜜桃| 91美女蜜桃在线| 成人听书哪个软件好| 国产一区二区在线电影| 日本亚洲天堂网| 午夜精品一区二区三区三上悠亚| 综合久久给合久久狠狠狠97色| 久久久久久黄色| 精品国内片67194| 日韩一区二区中文字幕| 欧美老女人在线| 日本福利一区二区| 99re这里只有精品6| 成人性视频网站| 成人激情动漫在线观看| 成人高清免费观看| 国产成人精品亚洲日本在线桃色| 久久91精品久久久久久秒播| 日av在线不卡| 精品中文字幕一区二区| 美女高潮久久久| 免费欧美日韩国产三级电影| 日韩电影在线免费观看| 日韩精品一二三区| 日韩精品一区第一页| 日韩精品一二区| 久久精工是国产品牌吗| 日韩成人免费看| 美脚の诱脚舐め脚责91| 久久66热偷产精品| 国产成人av电影在线播放| 成人一区二区三区在线观看| www.亚洲色图| 91黄色免费版| 欧美一区二区三区四区五区| 欧美精品日韩精品| 日韩欧美你懂的| 国产日韩欧美亚洲| 日韩理论电影院| 亚洲午夜日本在线观看| 免费精品视频在线| 国产美女精品一区二区三区| 成人精品一区二区三区四区 | 国产一区二区三区免费观看| 国产乱妇无码大片在线观看| 不卡大黄网站免费看| 在线视频国内一区二区| 欧美日韩国产三级| 精品美女一区二区| 亚洲欧洲精品一区二区三区| 亚洲成人综合视频| 国产综合成人久久大片91| 成人av电影在线网| 欧美系列日韩一区| 日韩精品一区国产麻豆| 中文字幕 久热精品 视频在线 | 国产精品视频在线看| 亚洲一级二级三级| 韩国v欧美v亚洲v日本v| av欧美精品.com| 日韩午夜在线播放| 中文字幕成人av| 偷窥少妇高潮呻吟av久久免费| 国内精品在线播放| 91福利资源站| 久久免费看少妇高潮| 欧美视频在线一区二区三区| 亚洲婷婷国产精品电影人久久| 亚洲精品乱码久久久久久久久 | 欧美国产一区二区| 一区二区在线观看视频| 国内精品在线播放| 欧美丝袜第三区| 久久综合久久99| 亚洲国产精品尤物yw在线观看| 国产电影一区在线| 91精选在线观看| 中文字幕综合网| 国产精品一区二区在线播放 | 一区二区三区高清在线| 国产伦精品一区二区三区视频青涩| 色综合久久久久综合99| 欧美va亚洲va| 亚洲国产成人91porn| 风间由美一区二区av101| 91精品国产综合久久蜜臀| 亚洲人成精品久久久久| 国产一区二区福利视频| 亚洲综合色网站| 日韩欧美黄色影院| 欧日韩精品视频| 欧美日韩久久久| 日韩毛片在线免费观看| 国产激情一区二区三区| 日韩一区二区三区免费观看 | 午夜精品一区二区三区免费视频| 成人在线视频一区| 精品久久久久久久久久久久包黑料 | 青青草国产成人99久久| 色综合天天做天天爱| 欧美激情中文字幕一区二区| 久久精品国产精品青草| 欧美精品视频www在线观看| 一区二区三区在线不卡| 99国产欧美另类久久久精品| 亚洲精品一区二区三区影院| 日本不卡高清视频| 欧美日韩亚州综合| 亚洲成a人片综合在线| 在线观看国产日韩| 在线精品视频免费播放| 久久精品国产精品青草| 免费精品视频在线| 成人h动漫精品| 国产精品久久久久影院亚瑟| 国产91精品一区二区麻豆亚洲| 精品剧情在线观看| 黄网站免费久久| 国产亚洲精品久| 懂色av噜噜一区二区三区av | 亚洲精品一二三区| 91麻豆文化传媒在线观看| 亚洲欧美日韩系列| 在线观看中文字幕不卡| 亚洲综合在线第一页| 欧美体内she精高潮| 偷拍亚洲欧洲综合| 欧美v日韩v国产v| 国产福利一区二区| 日韩毛片精品高清免费| 日本久久电影网| 亚洲成人一区二区在线观看| 欧美一区二区三区不卡| 国产综合色产在线精品| 国产精品人妖ts系列视频| 成人黄色国产精品网站大全在线免费观看| 日本一区二区三区四区在线视频 | 国产一区二区在线观看免费| 国产欧美综合色| av电影一区二区| 亚洲bt欧美bt精品| 欧美r级在线观看| 成人91在线观看| 亚洲自拍偷拍综合| 日韩欧美一二三区| 成人免费视频app| 亚洲综合免费观看高清完整版在线| 欧美丰满少妇xxxbbb| 国产精品18久久久久久久久| 亚洲丝袜自拍清纯另类| 欧美日韩国产综合一区二区三区 | 欧美精品一区二区在线播放| www.日韩精品| 日韩成人午夜精品| 亚洲国产激情av| 欧美性猛交xxxxxx富婆| 久久国产综合精品| 中文字幕永久在线不卡| 欧美日韩成人一区二区| 国产中文一区二区三区| 一区2区3区在线看| 久久久蜜桃精品| 91极品视觉盛宴| 国产美女在线观看一区| 亚洲一二三区在线观看| 久久久亚洲午夜电影| 91黄色免费版| 成人在线视频一区二区| 日韩精品电影在线| 亚洲人快播电影网| 欧美草草影院在线视频| 在线观看日韩国产| 国产精品一区二区久激情瑜伽| 亚洲成人1区2区| 国产精品免费视频一区| 日韩免费观看高清完整版| 色综合久久99| 国产很黄免费观看久久| 日韩黄色免费网站| 亚洲精品欧美综合四区| 中文字幕国产一区| 日本三级亚洲精品|