- import java.net.*;
- import java.io.*;
- /*
- 标题:模拟五子棋
- 组成:UdpSend1.java
- |--UdpSend1.class 棋手甲
- |--UdpSend2.class 棋手乙
- |--UdpRece.class 棋盘
- 说明:1、实现了甲下一步,乙然后再能再下一步。如此交替。
- 2、先编译。java。然后三个命令行窗口运行三个。class
- 3、棋盘为10*10二维数组显示。
- 4、甲下棋方式:命令行输入:AXX(其中A为黑棋子,X为0-9整数棋子位置)
- 乙下棋方式:命令行输入:BXX(棋子B为白棋子,X为0-9整数棋子位置)
- 实现功能:1.实现了交替下棋。
- 2.可以分出横列胜负。
- 备注:超时托管未写啊,
- BUG也是大大的多,(比如棋子该位置是否又棋子,走一步都要打印一遍棋盘)
- (时间匆匆,代码未加优化,嘿嘿)
- */
- class UdpSend1//棋手甲
- {
- public static void main(String[] args) throws Exception
- {
- InetAddress ipA=InetAddress.getLocalHost();//获取棋盘IP
- String ip=ipA.getHostAddress();
- DatagramSocket ds = new DatagramSocket();
- BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));
- String line=null;
- FileWriter fw1 = new FileWriter("demo.txt");
- fw1.write("A");//甲方先下一手
- fw1.flush();
- char c=' ';
- while((line=bufr.readLine())!=null)
- {FileReader fr = new FileReader("demo.txt");
- if((c=(char)fr.read())=='A')
- { FileWriter fw = new FileWriter("demo.txt");
- fw.write("");
- fw.flush();
- System.out.print(c);
- if("886".equals(line))
- break;
- byte[] buf = line.getBytes();
- DatagramPacket dp=
- new DatagramPacket(buf,buf.length,InetAddress.getByName(ip),10000);
- ds.send(dp);
- fw.close();
- FileWriter fw2 = new FileWriter("demo.txt");
- fw2.write("B");//当棋手甲走一步之后,将Demo。txt文件写入B
- fw2.flush();
- fw2.close();
- }
- }
- ds.close();
- }
- }
- class UdpSend2//棋手乙
- {
- public static void main(String[] args) throws Exception
- {
- InetAddress ipA=InetAddress.getLocalHost();//获取棋盘IP
- String ip=ipA.getHostAddress();
- DatagramSocket ds = new DatagramSocket();
- BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));
- String line=null;
- FileWriter fw1 = new FileWriter("demo.txt");
- fw1.flush();
- char c=' ';
- while((line=bufr.readLine())!=null)
- {
- FileReader fr = new FileReader("demo.txt");
- if((c=(char)fr.read())=='B')
- {
- FileWriter fw = new FileWriter("demo.txt");
- fw.write("");
- fw.flush();
- System.out.print(c);
- if("886".equals(line))
- break;
- byte[] buf = line.getBytes();
- DatagramPacket dp=
- new DatagramPacket(buf,buf.length,InetAddress.getByName(ip),10000);
- ds.send(dp);
- FileWriter fw2 = new FileWriter("demo.txt");
- fw2.write("A");//当棋手乙走一步之后,将Demo。txt文件写入A
- fw2.flush();
- fw2.close();
- }
- }
- ds.close();
- }
- }
- class UdpRece //棋盘模拟界面
- {
- public static void main(String[] args) throws Exception{
- System.out.println("棋盘___________________________");
- char[][] a=new char[10][10];//初始化棋盘
- for(int i=0;i<10;i++)
- {for(int j=0;j<10;j++)
- {a[i][j]='0';
- System.out.print(a[i][j]+" ");}
- System.out.println();}
- DatagramSocket ds = new DatagramSocket(10000);//
- int x,y,z;
- int AtimeOut=0;//记录甲方超时次数
- int BtimeOut=0;//记录甲方超时次数
- while(true){
- //x=y=z=0;
- for(int m=0;m<10;m++)//判断【甲方】横向是否有五子连
- {
- for(int n=0;n<5;n++)
- {
- x=0;
- for(int l=0;l<5;l++)
- {
- if(a[m][n+l]=='A') x++;
- }
- if(x==5){System.out.println("甲方A横胜利");
- break;}
- }}
- for(int m=0;m<10;m++)//判断【甲方】竖向是否有五子连
- {
- for(int n=0;n<5;n++)
- {
- y=0;
- for(int l=0;l<5;l++)
- {
- if(a[n+l][m]=='A') y++;
- }
- if(y==5){System.out.println("甲方A竖胜利");
- break;
- }
- }}
- for(int m=0;m<10;m++)//判断【乙方】横向是否有五子连
- {
- for(int n=0;n<5;n++)
- {
- x=0;
- for(int l=0;l<5;l++)
- {
- if(a[m][n+l]=='B') x++;
- }
- if(x==5){System.out.println("乙方B横胜利");
- break;
- }
- }}
- for(int m=0;m<10;m++)//判断【乙方】竖向是否有五子连
- {
- for(int n=0;n<5;n++)
- {
- y=0;
- for(int l=0;l<5;l++)
- {
- if(a[n+l][m]=='B') y++;
- }
- if(y==5){System.out.println("甲方B竖胜利");
- break;
- }
- }}
- System.out.println("棋盘___________________________");
- byte[] buf=new byte[1024];
- long start = System.currentTimeMillis();//此刻系统时间
- DatagramPacket dp = new DatagramPacket(buf,buf.length);
- ds.receive(dp);
- String ip=dp.getAddress().getHostAddress();
- String data = new String(dp.getData(),0,dp.getLength());
- int i =(int)data.charAt(1)-48;//48为ASCII
- int j=(int)data.charAt(2)-48;
- a[i][j]=data.charAt(0);
- for(i=0;i<10;i++)
- { for(j=0;j<10;j++)
- {
- System.out.print(a[i][j]+" ");
- }
- System.out.println();
- }
- int port=dp.getPort();
- long end = System.currentTimeMillis();
- long total=(end - start)/1000;//走棋用时秒数
- if(total>30)//判断谁超时
- {
- FileReader fr = new FileReader("Demo.txt");
- if((char)fr.read()=='A')
- AtimeOut++;
- else
- BtimeOut++;
- }
- if(AtimeOut==1)//A超时一次处理-系统代出牌一次
- {
- a[(int)Math.random()*10][(int)Math.random()*10]='A';//随机下一步,未判断该位置是否有棋子
- FileWriter fw1=new FileWriter("Demo.txt");
- fw1.write("B");
- fw1.flush();
- }
- if(AtimeOut==2)//超时两次-系统托
- {
- //待写
- }
- System.out.println("共用时间:"+"秒");}
- //ds.close();
- }
- }
复制代码 |