局域网石头剪刀布
心力憔悴。。。
写了2个半小时。
也就6kb
感觉这种东西不适合OIer
交给普通的程序员估计一个小时够了。
我居然编写+调试花了2个半小时。。
平常10kb的c++代码我只需要一个小时多
python这种精简的语言。。
其实还好是python,如果用c++写的话
6kb的代码就估计需要30kb了。。
python : c++ = 1 : 5
- 我打算exe打包公开上来,但是好像在32位兼容问题上出了点问题。过一段时间再发
- 源代码公开如下(如果自己用直接拷走,如果要转发请注明出处,谢谢!)
服务器
#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("========分割线========")