python開發日誌2[局域網石頭剪刀布]完整代碼

局域網石頭剪刀布


心力憔悴。。。
寫了2個半小時。
也就6kb
感覺這種東西不適合OIer
交給普通的程序員估計一個小時夠了。
我居然編寫+調試花了2個半小時。。
平常10kb的c++代碼我只需要一個小時多
python這種精簡的語言。。
其實還好是python,如果用c++寫的話
6kb的代碼就估計需要30kb了。。
python : c++ = 1 : 5

  1. 我打算exe打包公開上來,但是好像在32位兼容問題上出了點問題。過一段時間再發
  2. 源代碼公開如下(如果自己用直接拷走,如果要轉發請註明出處,謝謝!)

服務器

#MuYun編寫自2018.10.17
#RPS server(居然寫了我一個半小時)
import threading
import socket
import time
import os
from time import sleep
from os import system

flag= [0,0]
rps = [0,0]
seve = []
game = []
gamer = []


class thread1(threading.Thread):
    def __init__(self, addr, nub):
        threading.Thread.__init__(self)
        self.addr = addr
        self.nub = nub
    def run(self):
        Re = socket.socket()
        ports = 12344
        #print(self.addr[0])
        Re.connect((self.addr[0],ports))
        name=(Re.recv(1024)).decode()
        game.append(name)
        seve[self.nub].send((name).encode())
        while 1:
            while flag[self.nub]:
                pass
            recd=(Re.recv(1024)).decode()
            rps[self.nub]=int(recd[0])
            flag[self.nub]=1
            seve[self.nub].send(("OK").encode())
        



print("loading...")

s = socket.socket()         # 創建 socket 對象
host = socket.gethostname() # 獲取本地主機名
ip = socket.gethostbyname(host)
port = 12345                # 設置端口
s.bind((ip, port))        # 綁定端口
system("cls")
print("MuYun_RPS server version 1.0")
print("初始化完成!服務器的IP地址爲",ip,"。")
print("正在等待客戶端連接...")

s.listen(2) #最大連接數
for i in [0,1]:
    c,addr = s.accept()
    seve.append(c)
    print("被連接-->來自",addr)
    gamer.append(addr)
    print("正在建立穩定的對話..")
    player=thread1(addr,i)
    player.start()
    print("第",i+1,"個玩家就緒")
sleep(0.5)
seve[0].send("start".encode())
seve[1].send("srart".encode())
system("cls")
print("服務器ip爲",ip,"遊戲即將開始")
print("玩家1 ip:",gamer[0]," name:",game[0])
print("玩家2 ip:",gamer[1]," name:",game[1])
print("等待玩家決策...")
t=0
while 1:
    if (flag[0])and(flag[1]):
        if(rps[0]==rps[1]):
            t=t+1
            print("第",t,"場平局,玩家一:",rps[0],"玩家2:",rps[1])
            print("等待玩家決策...")
            flag[0]=0
            flag[1]=0
            seve[0].send(("0"+str(rps[1])+str(t)+game[1]).encode())
            seve[1].send(("0"+str(rps[0])+str(t)+game[0]).encode())
            continue
        if(rps[0]==1 and rps[1]==2 or rps[0]==2 and rps[1]==3 or rps[0]==3 and rps[1]==1):
            t=t+1
            print("第",t,"場玩家一獲勝,玩家一:",rps[0],"玩家2:",rps[1])
            print("等待玩家決策...")
            flag[0]=0
            flag[1]=0
            seve[0].send(("1"+str(rps[1])+str(t)+game[1]).encode())
            seve[1].send(("2"+str(rps[0])+str(t)+game[0]).encode())
            continue
        t=t+1
        print("第",t,"場玩家二獲勝,玩家一:",rps[0],"玩家2:",rps[1])
        print("等待玩家決策...")
        flag[0]=0
        flag[1]=0
        seve[0].send(("2"+str(rps[1])+str(t)+game[1]).encode())
        seve[1].send(("1"+str(rps[0])+str(t)+game[0]).encode())
        continue



客戶端

#MuYun編寫自2018.10.17
#RPS client 居然寫了40分鐘。。。
import threading
import socket
import time
import os
from time import sleep
from os import system

rps = [0,"石頭","剪刀","布"]

print("MuYun_RPS client version 1.0")
sends = socket.socket()
recvs = socket.socket()
name = input("請輸入你的名字:")
servip = input("請輸入要連接的服務器ip:")
servport = 12345
host = socket.gethostname() # 獲取本地主機名
ip = socket.gethostbyname(host)
port = 12344
print("連接中...")
sends.bind((ip,port))
sends.listen(2)
recvs.connect((servip,servport))
dd,addr = sends.accept()
dd.send((name).encode())
reply = (recvs.recv(1024)).decode()
print("服務器回話:",reply)
if(reply!=name):
    print("服務器回話不正確!!!")
    system("pause")
    exit()
print("連接成功!!!")
print("正在等待另一個玩家...")
reply = (recvs.recv(1024)).decode()
system("cls")
print("遊戲開始!!")
while 1:
    decision=input("請君決策(1.石頭,2.剪刀,3布):")
    while int(decision[0]) not in [1,2,3]:
        print("錯誤的決策!!!")
        decision=input("請決策(1.石頭,2.剪刀,3布):")
    dd.send((decision).encode())
    print("正在發送至服務器...")
    reply = (recvs.recv(1024)).decode()
    while reply!="OK":
        reply = (recvs.recv(1024)).decode()
    print("服務器已接收!")
    print("正在等待對方決策或者服務器延遲...")
    result = (recvs.recv(1024)).decode()
    print("對方(",result[3:],")出了 ",rps[int(result[1])],"  。")
    print("你(",name,")出了 ",rps[int(decision[0])]," 。")
    print("這是第 ",result[2]," 場遊戲。")
    if(result[0]=="0"):
        print("平局!!!再來一次吧!")
    if(result[0]=="1"):
        print("你贏了!!繼續碾壓他!")
    if(result[0]=="2"):
        print("你敗了!沒事,讓讓他!")
    print("========分割線========")
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章