最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python?pygame實現五子棋雙人聯(lián)機

 更新時間:2022年05月04日 11:22:16   作者:-小黃怪-  
這篇文章主要為大家詳細介紹了python?pygame實現五子棋雙人聯(lián)機,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了python pygame實現五子棋雙人聯(lián)機的具體代碼,供大家參考,具體內容如下

同一局域網內,服務端開啟時,另一機器將IP地址HOST改為服務端對應的IP地址、端口號與服務端的保持一致即可實現雙人聯(lián)機。(IP地址查詢方式:菜單欄輸入cmd,cmd窗口輸入ipconfig找到無線網絡下的IPv4地址)

服務端:

# -*- coding: utf-8 -*-
"""
Created on Tue Jun ?8 14:03:09 2021

@author: Administrator
"""
import pygame
import sys
from pygame.locals import *
from collections import Counter
from socket import *
from time import ctime
import json
import select
import socket

#界面初始化
screen=pygame.display.set_mode((400,450))
pygame.display.set_caption('五子棋')
pygame.init()

#圖片導入
img_board=pygame.image.load('F:/images/五子棋/chess_board.png')
img_bchess=pygame.image.load('F:/images/五子棋/black_chess.jpg')
img_wchess=pygame.image.load('F:/images/五子棋/white_chess.jpg')

#顏色
white=(255,255,255)
black=(0,0,0)

#用于傳送的數據
msg=[]

#棋盤定義
chess_board=[[]]
def set_chess_board():
? ? x,y=0,0
? ? while True:
? ? ? ? if x==400:
? ? ? ? ? ? x=0
? ? ? ? ? ? y+=40
? ? ? ? ? ? if y<400:
? ? ? ? ? ? ? ? chess_board.append([])
? ? ? ? if y==400:
? ? ? ? ? ? break
? ? ? ? chess_board[-1].append([x,y])
? ? ? ? x+=40
set_chess_board()

#棋盤格子是否落子
chess_exist=[[0 for i in range(10)]for j in range(10)]
#黑白棋子初始化
black_chess,white_chess=[],[]
#棋子類型
chess_kind=1 ? ?#1為黑棋,0為白棋
wcx,wcy,bcx,bcy=[],[],[],[] ? #white_chess_x

def draw_board():
? ? for i in chess_board:
? ? ? ? for j in i:
? ? ? ? ? ? screen.blit(img_board,(j[0],j[1]))
? ? ? ? ? ? pygame.display.update()

#默認棋子類型為1
def set_chess():
? ? if event.type==MOUSEBUTTONDOWN:
? ? ? ? pos=pygame.mouse.get_pos()
? ? ? ? for i in range(len(chess_board)):
? ? ? ? ? ? for j in range(len(chess_board[i])):
? ? ? ? ? ? ? ? if chess_board[i][j][0]<pos[0]<chess_board[i][j][0]+40 and chess_board[i][j][1]<pos[1]<chess_board[i][j][1]+40:
? ? ? ? ? ? ? ? ? ? if chess_exist[i][j]==0:
? ? ? ? ? ? ? ? ? ? ? ? black_chess.append([i,j])
? ? ? ? ? ? ? ? ? ? ? ? bcx.append(black_chess[-1][0])
? ? ? ? ? ? ? ? ? ? ? ? bcy.append(black_chess[-1][1])
? ? ? ? ? ? ? ? ? ? ? ? msg.extend((i,j))
? ? ? ? ? ? ? ? ? ? ? ? chess_exist[i][j]=1
? ? ? ? ? ? ? ? ? ? ? ? pygame.display.update()
? ? ? ? ? ? ? ? ? ? ? ? return 1

def draw_chess():
? ? for i in white_chess:
? ? ? ? screen.blit(img_wchess,(i[1]*40,i[0]*40))
? ? for i in black_chess:
? ? ? ? screen.blit(img_bchess,(i[1]*40,i[0]*40))
? ? pygame.display.update()

def row_column_win(x,m,n,chess):
? ? for i in x:
? ? ? ? if x[i]>=5:
? ? ? ? ? ? xy=[]
? ? ? ? ? ? for j in chess:
? ? ? ? ? ? ? ? if j[m]==i:
? ? ? ? ? ? ? ? ? ? xy.append(j[n])
? ? ? ? ? ? xy.sort()
? ? ? ? ? ? count=0
? ? ? ? ? ? for j in range(len(xy)-1):
? ? ? ? ? ? ? ? if xy[j]+1==xy[j+1]:
? ? ? ? ? ? ? ? ? ? count+=1
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? count=0
? ? ? ? ? ? if count>=4:
? ? ? ? ? ? ? ? return 1

def xiejiao_win(chess):
? ? x,y=[],[]
? ? chess.sort()
? ? for i in chess:
? ? ? ? x.append(i[0])
? ? ? ? y.append(i[1])
? ? c,first,last=0,0,0
? ? for i in range(len(x)-1):
? ? ? ? if x[i+1]!=x[i]:
? ? ? ? ? ? if x[i]+1==x[i+1]:
? ? ? ? ? ? ? ? c+=1
? ? ? ? ? ? ? ? last=i+1
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? if c<4:
? ? ? ? ? ? ? ? ? ? first=i+1
? ? ? ? ? ? ? ? ? ? c=0
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? last=i
? ? ? ? ? ? ? ? ? ? print(last)
? ? ? ? ? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? last=i+1
? ? if c>=4:
? ? ? ? dis=[]
? ? ? ? for i in range(first,last+1):
? ? ? ? ? ? dis.append(x[i]-y[i])
? ? ? ? count=Counter(dis)
? ? ? ? for i in count:
? ? ? ? ? ? if count[i]>=5:
? ? ? ? ? ? ? ? return 1
? ? ? ? dis=[]
? ? ? ? x2=[i*(-1) for i in x]
? ? ? ? for i in range(first,last+1):
? ? ? ? ? ? dis.append(x2[i]-y[i])
? ? ? ? count=Counter(dis)
? ? ? ? for i in count:
? ? ? ? ? ? if count[i]>=5:
? ? ? ? ? ? ? ? return 1

def gameover():
? ? wcx_count,wcy_count,bcx_count,bcy_count=Counter(wcx),Counter(wcy),Counter(bcx),Counter(bcy)
? ? if row_column_win(wcx_count,0,1,white_chess)==1:
? ? ? ? return 0
? ? elif row_column_win(bcx_count,0,1,black_chess)==1:
? ? ? ? return 1
? ? elif row_column_win(wcy_count,1,0,white_chess)==1:
? ? ? ? return 0
? ? elif row_column_win(bcy_count,1,0,black_chess)==1:
? ? ? ? return 1
? ? elif xiejiao_win(white_chess)==1:
? ? ? ? return 0
? ? elif xiejiao_win(black_chess)==1:
? ? ? ? return 1

def draw_text(text,x,y,size):
? ? pygame.font.init()
? ? fontObj=pygame.font.SysFont('SimHei',size )
? ? textSurfaceObj=fontObj.render(text, True, white,black)
? ? textRectObj=textSurfaceObj.get_rect()
? ? textRectObj.center=(x,y)
? ? screen.blit(textSurfaceObj, textRectObj)
? ? pygame.display.update()

#定義服務器名稱
HOST = '0.0.0.0'
PORT = 400
BUFSIZE = 1024
ADDR = (HOST,PORT)

#定義服務器屬性
tcpsersock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpsersock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) ?# 對socket的配置重用ip和端口號
tcpsersock.bind(ADDR)
tcpsersock.listen(1)
inputs=[tcpsersock]
print(inputs)

draw_board()
settable=1
link=False
while True:
? ? rs,ws,es=select.select(inputs, [], [],0)
? ? for r in rs:
? ? ? ? if r is tcpsersock:
? ? ? ? ? ? link=True
? ? ? ? ? ? print('new ser')
? ? ? ? ? ? tcpcliscock, addr = tcpsersock.accept()
? ? ? ? ? ? inputs.append(tcpcliscock)
? ? ? ? else:
? ? ? ? ? ? data,addr=r.recvfrom(BUFSIZE)
? ? ? ? ? ? disconnected=not data
? ? ? ? ? ? draw_text('你的回合',200,420,15)
? ? ? ? ? ? if disconnected:
? ? ? ? ? ? ? ? inputs.remove(r)
? ? ? ? ? ? ? ? draw_text('對手掉線',200,420,15)
? ? ? ? ? ? ? ? while True:
? ? ? ? ? ? ? ? ? ? for event in pygame.event.get():
? ? ? ? ? ? ? ? ? ? ? ? if event.type==QUIT:
? ? ? ? ? ? ? ? ? ? ? ? ? ? pygame.quit()
? ? ? ? ? ? ? ? ? ? ? ? ? ? sys.exit()
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? data=json.loads(data)
? ? ? ? ? ? ? ? settable=1
? ? ? ? ? ? ? ? white_chess.append(data)
? ? ? ? ? ? ? ? wcx.append(data[0])
? ? ? ? ? ? ? ? wcy.append(data[1])
? ? for event in pygame.event.get():
? ? ? ? if event.type==QUIT:
? ? ? ? ? ? pygame.quit()
? ? ? ? ? ? sys.exit()
? ? ? ? ? ? tcpsersock.close()
? ? ? ? if link==True:
? ? ? ? ? ? if settable==1:
? ? ? ? ? ? ? ? if set_chess()==1:
? ? ? ? ? ? ? ? ? ? draw_text('對手回合',200,420,15)
? ? ? ? ? ? ? ? ? ? settable=0
? ? ? ? ? ? ? ? ? ? msg1=json.dumps(msg)
? ? ? ? ? ? ? ? ? ? tcpcliscock.sendto(msg1.encode(),ADDR)
? ? ? ? ? ? ? ? ? ? msg=[] ? ? ??
? ? draw_chess()
? ? if gameover()==1:
? ? ? ? draw_text('你贏了!',200,420,15)
? ? ? ? while True:
? ? ? ? ? ? for event in pygame.event.get():
? ? ? ? ? ? ? ? if event.type==QUIT:
? ? ? ? ? ? ? ? ? ? pygame.quit()
? ? ? ? ? ? ? ? ? ? sys.exit()
? ? elif gameover()==0:
? ? ? ? draw_text('你輸了!',200,420,15)
? ? ? ? while True:
? ? ? ? ? ? for event in pygame.event.get():
? ? ? ? ? ? ? ? if event.type==QUIT:
? ? ? ? ? ? ? ? ? ? pygame.quit()
? ? ? ? ? ? ? ? ? ? sys.exit()
tcpcliscock.close()
tcpsersock.close()

客戶端:

# -*- coding: utf-8 -*-
"""
Created on Tue Jun ?8 14:03:09 2021

@author: Administrator
"""
import pygame
import sys
from pygame.locals import *
from collections import Counter
from socket import *
from time import ctime
import json
import select
import socket
import time

#界面初始化
screen=pygame.display.set_mode((400,450))
pygame.display.set_caption('五子棋')
pygame.init()

#圖片導入
img_board=pygame.image.load('F:/images/五子棋/chess_board.png')
img_bchess=pygame.image.load('F:/images/五子棋/black_chess.jpg')
img_wchess=pygame.image.load('F:/images/五子棋/white_chess.jpg')

#顏色
white=(255,255,255)
black=(0,0,0)

#用于傳送的數據
msg=[]

#棋盤定義
chess_board=[[]]
def set_chess_board():
? ? x,y=0,0
? ? while True:
? ? ? ? if x==400:
? ? ? ? ? ? x=0
? ? ? ? ? ? y+=40
? ? ? ? ? ? if y<400:
? ? ? ? ? ? ? ? chess_board.append([])
? ? ? ? if y==400:
? ? ? ? ? ? break
? ? ? ? chess_board[-1].append([x,y])
? ? ? ? x+=40
set_chess_board()

#棋盤格子是否落子
chess_exist=[[0 for i in range(10)]for j in range(10)]
#黑白棋子初始化
black_chess,white_chess=[],[]
#棋子類型
chess_kind=1 ? ?#1為黑棋,0為白棋
wcx,wcy,bcx,bcy=[],[],[],[] ? #white_chess_x

def draw_board():
? ? for i in chess_board:
? ? ? ? for j in i:
? ? ? ? ? ? screen.blit(img_board,(j[0],j[1]))
? ? ? ? ? ? pygame.display.update()

#默認棋子類型為0
def set_chess():
? ? if event.type==MOUSEBUTTONDOWN:
? ? ? ? pos=pygame.mouse.get_pos()
? ? ? ? for i in range(len(chess_board)):
? ? ? ? ? ? for j in range(len(chess_board[i])):
? ? ? ? ? ? ? ? if chess_board[i][j][0]<pos[0]<chess_board[i][j][0]+40 and chess_board[i][j][1]<pos[1]<chess_board[i][j][1]+40:
? ? ? ? ? ? ? ? ? ? if chess_exist[i][j]==0:
? ? ? ? ? ? ? ? ? ? ? ? white_chess.append([i,j])
? ? ? ? ? ? ? ? ? ? ? ? wcx.append(white_chess[-1][0])
? ? ? ? ? ? ? ? ? ? ? ? wcy.append(white_chess[-1][1])
? ? ? ? ? ? ? ? ? ? ? ? msg.extend((i,j))
? ? ? ? ? ? ? ? ? ? ? ? chess_exist[i][j]=1
? ? ? ? ? ? ? ? ? ? ? ? pygame.display.update()
? ? ? ? ? ? ? ? ? ? ? ? return 1

def draw_chess():
? ? for i in white_chess:
? ? ? ? screen.blit(img_wchess,(i[1]*40,i[0]*40))
? ? for i in black_chess:
? ? ? ? screen.blit(img_bchess,(i[1]*40,i[0]*40))
? ? pygame.display.update()

def row_column_win(x,m,n,chess):
? ? for i in x:
? ? ? ? if x[i]>=5:
? ? ? ? ? ? xy=[]
? ? ? ? ? ? for j in chess:
? ? ? ? ? ? ? ? if j[m]==i:
? ? ? ? ? ? ? ? ? ? xy.append(j[n])
? ? ? ? ? ? xy.sort()
? ? ? ? ? ? count=0
? ? ? ? ? ? for j in range(len(xy)-1):
? ? ? ? ? ? ? ? if xy[j]+1==xy[j+1]:
? ? ? ? ? ? ? ? ? ? count+=1
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? count=0
? ? ? ? ? ? if count>=4:
? ? ? ? ? ? ? ? return 1

def xiejiao_win(chess):
? ? x,y=[],[]
? ? chess.sort()
? ? for i in chess:
? ? ? ? x.append(i[0])
? ? ? ? y.append(i[1])
? ? c,first,last=0,0,0
? ? for i in range(len(x)-1):
? ? ? ? if x[i+1]!=x[i]:
? ? ? ? ? ? if x[i]+1==x[i+1]:
? ? ? ? ? ? ? ? c+=1
? ? ? ? ? ? ? ? last=i+1
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? if c<4:
? ? ? ? ? ? ? ? ? ? first=i+1
? ? ? ? ? ? ? ? ? ? c=0
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? last=i
? ? ? ? ? ? ? ? ? ? print(last)
? ? ? ? ? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? last=i+1
? ? if c>=4:
? ? ? ? dis=[]
? ? ? ? for i in range(first,last+1):
? ? ? ? ? ? dis.append(x[i]-y[i])
? ? ? ? count=Counter(dis)
? ? ? ? for i in count:
? ? ? ? ? ? if count[i]>=5:
? ? ? ? ? ? ? ? return 1
? ? ? ? dis=[]
? ? ? ? x2=[i*(-1) for i in x]
? ? ? ? for i in range(first,last+1):
? ? ? ? ? ? dis.append(x2[i]-y[i])
? ? ? ? count=Counter(dis)
? ? ? ? for i in count:
? ? ? ? ? ? if count[i]>=5:
? ? ? ? ? ? ? ? return 1

def gameover():
? ? wcx_count,wcy_count,bcx_count,bcy_count=Counter(wcx),Counter(wcy),Counter(bcx),Counter(bcy)
? ? if row_column_win(wcx_count,0,1,white_chess)==1:
? ? ? ? return 1
? ? elif row_column_win(bcx_count,0,1,black_chess)==1:
? ? ? ? return 0
? ? elif row_column_win(wcy_count,1,0,white_chess)==1:
? ? ? ? return 1
? ? elif row_column_win(bcy_count,1,0,black_chess)==1:
? ? ? ? return 0
? ? elif xiejiao_win(white_chess)==1:
? ? ? ? return 1
? ? elif xiejiao_win(black_chess)==1:
? ? ? ? return 0

def draw_text(text,x,y,size):
? ? pygame.font.init()
? ? fontObj=pygame.font.SysFont('SimHei',size )
? ? textSurfaceObj=fontObj.render(text, True, white,black)
? ? textRectObj=textSurfaceObj.get_rect()
? ? textRectObj.center=(x,y)
? ? screen.blit(textSurfaceObj, textRectObj)
? ? pygame.display.update()

#定義客戶端名稱
HOST = '10.203.111.180'
PORT = 400
BUFSIZE = 1024
ADDR = (HOST,PORT)

#連接服務器
tcpCliSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpCliSock.connect(ADDR)
inputs=[tcpCliSock]

draw_board()
settable=0
while True:
? ? rs,ws,es=select.select(inputs,[],[],0)
? ? for r in rs:
? ? ? ? if r is tcpCliSock:
? ? ? ? ? ? data,addr = r.recvfrom(BUFSIZE)
? ? ? ? ? ? draw_text('你的回合',200,420,15)
? ? ? ? ? ? data=json.loads(data)
? ? ? ? ? ? settable=1
? ? ? ? ? ? black_chess.append(data)
? ? ? ? ? ? bcx.append(data[0])
? ? ? ? ? ? bcy.append(data[1])
? ? for event in pygame.event.get():
? ? ? ? if event.type==QUIT:
? ? ? ? ? ? tcpCliSock.close()
? ? ? ? ? ? pygame.quit()
? ? ? ? ? ? sys.exit()
? ? ? ? if settable==1:
? ? ? ? ? ? if set_chess()==1:
? ? ? ? ? ? ? ? draw_text('對手回合',200,420,15)
? ? ? ? ? ? ? ? settable=0
? ? ? ? ? ? ? ? msg1=json.dumps(msg)
? ? ? ? ? ? ? ? tcpCliSock.sendto(msg1.encode(),ADDR)
? ? ? ? ? ? ? ? msg=[]
? ? draw_chess()
? ? if gameover()==1:
? ? ? ? draw_text('你贏了!',200,420,15)
? ? ? ? while True:
? ? ? ? ? ? for event in pygame.event.get():
? ? ? ? ? ? ? ? if event.type==QUIT:
? ? ? ? ? ? ? ? ? ? pygame.quit()
? ? ? ? ? ? ? ? ? ? sys.exit()
? ? elif gameover()==0:
? ? ? ? draw_text('你輸了!',200,420,15)
? ? ? ? while True:
? ? ? ? ? ? for event in pygame.event.get():
? ? ? ? ? ? ? ? if event.type==QUIT:
? ? ? ? ? ? ? ? ? ? pygame.quit()
? ? ? ? ? ? ? ? ? ? sys.exit()

背景:

黑棋:

白棋:

效果演示:

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

相關文章

  • Python?property裝飾器使用案例介紹

    Python?property裝飾器使用案例介紹

    這篇文章主要介紹了Python?@property裝飾器的用法,在Python中,可以通過@property裝飾器將一個方法轉換為屬性,從而實現用于計算的屬性,下面文章圍繞主題展開更多相關詳情,感興趣的小伙伴可以參考一下
    2022-10-10
  • 如何使用celery進行異步處理和定時任務(django)

    如何使用celery進行異步處理和定時任務(django)

    文章介紹了Celery的基本概念、安裝方法、如何使用Celery進行異步任務處理以及如何設置定時任務,通過Celery,可以在Web應用中處理后臺任務,如發(fā)送郵件、視頻轉碼等,而不阻塞Web請求,文章還提到了啟動Celery worker和beat的命令以及任務和定時任務的執(zhí)行效果
    2025-01-01
  • python批量翻譯excel表格中的英文

    python批量翻譯excel表格中的英文

    本文主要介紹了python批量翻譯excel表格中的英文,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • python裝飾器"@"使用實例深入探究

    python裝飾器"@"使用實例深入探究

    這篇文章主要為大家介紹了python裝飾器"@"使用實例深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Python散點圖與折線圖繪制過程解析

    Python散點圖與折線圖繪制過程解析

    這篇文章主要介紹了Python散點圖與折線圖繪制過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • python中np.multiply()、np.dot()和星號(*)三種乘法運算的區(qū)別詳解

    python中np.multiply()、np.dot()和星號(*)三種乘法運算的區(qū)別詳解

    這篇文章主要介紹了python中np.multiply()、np.dot()和星號(*)三種乘法運算的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 使用python實現回文數的四種方法小結

    使用python實現回文數的四種方法小結

    今天小編就為大家分享一篇使用python實現回文數的四種方法小結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python詞云的正確實現方法實例

    Python詞云的正確實現方法實例

    這篇文章主要給大家介紹了關于Python詞云的正確實現方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Django URL傳遞參數的方法總結

    Django URL傳遞參數的方法總結

    這篇文章主要介紹了Django URL傳遞參數的方法總結,需要的朋友可以參考下
    2016-08-08
  • 利用python實時刷新基金估值效果(摸魚小工具)

    利用python實時刷新基金估值效果(摸魚小工具)

    這篇文章主要介紹了利用python實時刷新基金估值(摸魚小工具),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09

最新評論

南宁市| 自贡市| 阳高县| 卫辉市| 佛冈县| 常熟市| 凌源市| 拉萨市| 龙海市| 七台河市| 桂东县| 武乡县| 容城县| 凉山| 依兰县| 武乡县| 兰州市| 饶平县| 正宁县| 巫溪县| 灵璧县| 香港| 兰溪市| 建德市| 出国| 安化县| 探索| 兰西县| 梓潼县| 广河县| 巴彦县| 天气| 清河县| 麻江县| 马边| 昌黎县| 都昌县| 井冈山市| 新安县| 石台县| 枣强县|