人类已经无法阻止 R 来下五子棋了~~可以联机了。
目前还可能有bug ,期待高手来修正。
<br />
par(bg=rgb(.88,.75,.60))<br />
plot(1:19,type="n",xlim=c(0,19),axes=F,xlab='',ylab='',bty="o",lab=c(19,19,1))</p>
<p>rect(1,1,2:19,2:19)<br />
rect(1:18,1:18,19,19)<br />
points(rep(c(4,10,16),3),rep(c(4,10,16),each=3),pch=19,cex=1)<br />
points(0,10,pch=19,cex=1.6) ##点击这个点,对弈结束<br />
text(0.1,11,"END") </p>
<p>vs=function(Host="localhost",Port=79,Server=T)<br />
{<br />
socket=make.socket(host=Host,port=Port,server=Server)<br />
on.exit(close.socket(socket))<br />
me=ifelse(Server,"white","black")<br />
you=ifelse(Server,"black","white")</p>
<p>playedlist <- NULL<br />
if(Server==F)<br />
{<br />
ss <- read.socket(socket)<br />
if(!length(ss))<br />
{<br />
close.socket(socket)<br />
print("Program has been ended by your partner")<br />
return("END")<br />
}<br />
output <- as.numeric(strsplit(ss,',')[[1]])<br />
points(output[1],output[2],cex=3,pch=21,bg=you)<br />
playedlist <- c(playedlist,paste(output,collapse=','))<br />
}</p>
<p>for(i in 1:190)<br />
{<br />
repeat{<br />
input=locator(1)<br />
input$x=round(input$x)<br />
input$y=round(input$y)<br />
if(input$x==0&input$y==10)<br />
{<br />
close.socket(socket)<br />
print("Program has been ended by you")<br />
return("END")<br />
}<br />
xy <- paste(input,collapse=",")<br />
if (!is.element(xy,playedlist)&input$x<19.5&input$x>.5&input$y<19.5&input$y>.5)<br />
break<br />
else<br />
print("Please point at the right place!")<br />
}<br />
playedlist <- c(playedlist,xy)</p>
<p>points(input$x,input$y,cex=3,pch=21,bg=me)</p>
<p>Sys.sleep(.5) #没有弄清原因,如果不暂停一会,上面一句就会等到下一句执行完才执行</p>
<p>write.socket(socket,xy)</p>
<p>ss <- read.socket(socket)<br />
if(ss=="")<br />
{<br />
close.socket(socket)<br />
print("Program has been ended by your partner")<br />
return("END")<br />
}</p>
<p>output <- as.numeric(strsplit(ss,',')[[1]])</p>
<p>points(output[1],output[2],cex=3,pch=21,bg=you)</p>
<p>playedlist <- c(playedlist,paste(output,collapse=','))<br />
}<br />
close.socket(socket)<br />
return("END")<br />
}</p>
<p>vs() #主机使用这个函数,建立一个服务器<br />
#vs(Host="111.11.11.11",Server=F)# 客户端使用这个函数,填上对方主机的Ip。</p>
<p>
</p>