A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨千里 于 2012-11-5 19:34 编辑

请模拟五子棋和斗地主

五子棋:两个人玩,你下一个,我下一个...你在下一个...
斗地主:三个人玩,你出一张,我出一张,她出一张.....

五子棋和斗地主这两个棋牌游戏,有相同的规则:

每次一个人只能下一次棋(出一次),不能连续下(出牌),

必须等另外一个人下了(或者出牌)之后,才可以继续下棋或者出牌。

为了限制有人不下棋(出牌)的现象,规定他在30秒内下棋,必须下棋(出牌)
倘若30秒后,他还不出,系统替他出牌,连续两次超过30秒,托管(系统直接替他下棋(出牌),不在等待,出牌速度最快)。
这里注意系统的优先级没有用户高。
等这个人下了(或者出了)之后,其它人才可以下。(顺序不要乱了)
假如有人逃跑游戏结束

要求:五子棋和斗地主,分别用两个代码写,具体没什么要求,能模拟出这两个现象即可,代码清晰工整有注释。
能模拟出五子棋  +1分
模拟出斗地主     +1分

好一点的 +2分      
在好一点的 +3分
在更好的 +4分

能做出UI  界面 的   +5分以上  仅限2人
代码简单的 ,可以发帖,代码长的可以打包

点评

功能完善的,额外附加5技术分。  发表于 2012-11-2 22:21

评分

参与人数 1技术分 +5 收起 理由
滔哥 + 5 赞一个!

查看全部评分

20 个回复

倒序浏览
沙发!!!
回复 使用道具 举报
技术易学,{:soso_e150:}积分难赚!!!!
回复 使用道具 举报
刘新生 发表于 2012-11-2 22:08
技术易学,积分难赚!!!!

刘新生 发表于 2012-11-2 22:08
技术易学,积分难赚!!!!


证明你的技术已经ok了,,,那就赶快答题吧
回复 使用道具 举报
来啦,加油加油!
回复 使用道具 举报
呵呵,我给你加分吧

点评

喔喔,102w分???!怎么来的  发表于 2012-11-4 12:15
回复 使用道具 举报
五子棋小游戏一个 FiveChessProject.zip (38.21 KB, 下载次数: 287)

评分

参与人数 2技术分 +30 黑马币 +30 收起 理由
杨千里 + 30 赞一个! 涛哥给你加过分了 我就不给你.
滔哥 + 30 补技术分

查看全部评分

回复 使用道具 举报
本帖最后由 吴愿涛 于 2012-11-2 22:46 编辑

五子棋,可以直接在Android平台上运行。

FiveChess.zip

646.47 KB, 下载次数: 299

Android版本

评分

参与人数 1技术分 +1 收起 理由
杨千里 + 1 代码 注释少 看着别扭

查看全部评分

回复 使用道具 举报
要想写斗地主游戏,是不是得先学会斗地主~~

点评

哥们每天登陆2个常用的QQ,24:00以后 先玩会,先把送的豆豆干掉玩,或者赢过10000豆,在睡觉。 不过开发游戏的人好像完游戏的几乎没有  发表于 2012-11-2 23:10
回复 使用道具 举报
http://bbs.itheima.com/forum.php?mod=attachment&aid=ODkyM3w2OWU4YzNiMmI3MjI2N2Y3YjRiNzk1N2I5MDBmNmQ0MnwxNzMxNTgxMDc1&request=yes&_f=.jpg
灵异事件????????????{:soso_e103:}

1.jpg (6.76 KB, 下载次数: 97)

1.jpg
回复 使用道具 举报
好好想想~
回复 使用道具 举报
蒙武辉 发表于 2012-11-2 22:23
呵呵,我给你加分吧

勤奋,努力来的。哈哈
回复 使用道具 举报
{:soso_e130:}做做看
回复 使用道具 举报
  1. import java.net.*;
  2. import java.io.*;
  3. /*
  4. 标题:模拟五子棋
  5. 组成:UdpSend1.java
  6. |--UdpSend1.class 棋手甲
  7. |--UdpSend2.class 棋手乙
  8. |--UdpRece.class 棋盘
  9. 说明:1、实现了甲下一步,乙然后再能再下一步。如此交替。
  10. 2、先编译。java。然后三个命令行窗口运行三个。class
  11. 3、棋盘为10*10二维数组显示。
  12. 4、甲下棋方式:命令行输入:AXX(其中A为黑棋子,X为0-9整数棋子位置)
  13. 乙下棋方式:命令行输入:BXX(棋子B为白棋子,X为0-9整数棋子位置)
  14. 实现功能:1.实现了交替下棋。
  15. 2.可以分出横列胜负。
  16. 备注:超时托管未写啊,
  17. BUG也是大大的多,(比如棋子该位置是否又棋子,走一步都要打印一遍棋盘)
  18. (时间匆匆,代码未加优化,嘿嘿)
  19. */

  20. class UdpSend1//棋手甲
  21. {
  22. public static void main(String[] args) throws Exception
  23. {
  24. InetAddress ipA=InetAddress.getLocalHost();//获取棋盘IP
  25. String ip=ipA.getHostAddress();

  26. DatagramSocket ds = new DatagramSocket();
  27. BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));
  28. String line=null;
  29. FileWriter fw1 = new FileWriter("demo.txt");
  30. fw1.write("A");//甲方先下一手
  31. fw1.flush();
  32. char c=' ';
  33. while((line=bufr.readLine())!=null)
  34. {FileReader fr = new FileReader("demo.txt");
  35. if((c=(char)fr.read())=='A')
  36. { FileWriter fw = new FileWriter("demo.txt");
  37. fw.write("");
  38. fw.flush();
  39. System.out.print(c);
  40. if("886".equals(line))
  41. break;
  42. byte[] buf = line.getBytes();
  43. DatagramPacket dp=
  44. new DatagramPacket(buf,buf.length,InetAddress.getByName(ip),10000);
  45. ds.send(dp);
  46. fw.close();
  47. FileWriter fw2 = new FileWriter("demo.txt");
  48. fw2.write("B");//当棋手甲走一步之后,将Demo。txt文件写入B
  49. fw2.flush();
  50. fw2.close();
  51. }

  52. }
  53. ds.close();
  54. }
  55. }
  56. class UdpSend2//棋手乙
  57. {
  58. public static void main(String[] args) throws Exception
  59. {
  60. InetAddress ipA=InetAddress.getLocalHost();//获取棋盘IP
  61. String ip=ipA.getHostAddress();
  62. DatagramSocket ds = new DatagramSocket();
  63. BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));
  64. String line=null;
  65. FileWriter fw1 = new FileWriter("demo.txt");
  66. fw1.flush();
  67. char c=' ';
  68. while((line=bufr.readLine())!=null)
  69. {
  70. FileReader fr = new FileReader("demo.txt");
  71. if((c=(char)fr.read())=='B')
  72. {
  73. FileWriter fw = new FileWriter("demo.txt");
  74. fw.write("");
  75. fw.flush();
  76. System.out.print(c);
  77. if("886".equals(line))
  78. break;
  79. byte[] buf = line.getBytes();
  80. DatagramPacket dp=
  81. new DatagramPacket(buf,buf.length,InetAddress.getByName(ip),10000);
  82. ds.send(dp);
  83. FileWriter fw2 = new FileWriter("demo.txt");
  84. fw2.write("A");//当棋手乙走一步之后,将Demo。txt文件写入A
  85. fw2.flush();
  86. fw2.close();
  87. }
  88. }
  89. ds.close();
  90. }
  91. }
  92. class UdpRece //棋盘模拟界面
  93. {
  94. public static void main(String[] args) throws Exception{
  95. System.out.println("棋盘___________________________");
  96. char[][] a=new char[10][10];//初始化棋盘
  97. for(int i=0;i<10;i++)
  98. {for(int j=0;j<10;j++)
  99. {a[i][j]='0';
  100. System.out.print(a[i][j]+" ");}
  101. System.out.println();}
  102. DatagramSocket ds = new DatagramSocket(10000);//
  103. int x,y,z;
  104. int AtimeOut=0;//记录甲方超时次数
  105. int BtimeOut=0;//记录甲方超时次数
  106. while(true){
  107. //x=y=z=0;

  108. for(int m=0;m<10;m++)//判断【甲方】横向是否有五子连
  109. {
  110. for(int n=0;n<5;n++)
  111. {
  112. x=0;
  113. for(int l=0;l<5;l++)
  114. {
  115. if(a[m][n+l]=='A') x++;
  116. }

  117. if(x==5){System.out.println("甲方A横胜利");
  118. break;}
  119. }}
  120. for(int m=0;m<10;m++)//判断【甲方】竖向是否有五子连
  121. {
  122. for(int n=0;n<5;n++)
  123. {
  124. y=0;
  125. for(int l=0;l<5;l++)
  126. {
  127. if(a[n+l][m]=='A') y++;
  128. }

  129. if(y==5){System.out.println("甲方A竖胜利");
  130. break;

  131. }
  132. }}
  133. for(int m=0;m<10;m++)//判断【乙方】横向是否有五子连
  134. {
  135. for(int n=0;n<5;n++)
  136. {
  137. x=0;
  138. for(int l=0;l<5;l++)
  139. {
  140. if(a[m][n+l]=='B') x++;
  141. }

  142. if(x==5){System.out.println("乙方B横胜利");
  143. break;

  144. }
  145. }}
  146. for(int m=0;m<10;m++)//判断【乙方】竖向是否有五子连
  147. {
  148. for(int n=0;n<5;n++)
  149. {
  150. y=0;
  151. for(int l=0;l<5;l++)
  152. {
  153. if(a[n+l][m]=='B') y++;
  154. }

  155. if(y==5){System.out.println("甲方B竖胜利");
  156. break;

  157. }
  158. }}

  159. System.out.println("棋盘___________________________");
  160. byte[] buf=new byte[1024];
  161. long start = System.currentTimeMillis();//此刻系统时间

  162. DatagramPacket dp = new DatagramPacket(buf,buf.length);
  163. ds.receive(dp);
  164. String ip=dp.getAddress().getHostAddress();
  165. String data = new String(dp.getData(),0,dp.getLength());
  166. int i =(int)data.charAt(1)-48;//48为ASCII
  167. int j=(int)data.charAt(2)-48;
  168. a[i][j]=data.charAt(0);
  169. for(i=0;i<10;i++)
  170. { for(j=0;j<10;j++)
  171. {
  172. System.out.print(a[i][j]+" ");
  173. }
  174. System.out.println();
  175. }
  176. int port=dp.getPort();
  177. long end = System.currentTimeMillis();
  178. long total=(end - start)/1000;//走棋用时秒数
  179. if(total>30)//判断谁超时
  180. {
  181. FileReader fr = new FileReader("Demo.txt");
  182. if((char)fr.read()=='A')
  183. AtimeOut++;
  184. else
  185. BtimeOut++;
  186. }


  187. if(AtimeOut==1)//A超时一次处理-系统代出牌一次
  188. {
  189. a[(int)Math.random()*10][(int)Math.random()*10]='A';//随机下一步,未判断该位置是否有棋子
  190. FileWriter fw1=new FileWriter("Demo.txt");
  191. fw1.write("B");
  192. fw1.flush();
  193. }

  194. if(AtimeOut==2)//超时两次-系统托
  195. {
  196. //待写
  197. }


  198. System.out.println("共用时间:"+"秒");}
  199. //ds.close();
  200. }

  201. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
杨千里 + 2 运用io和网络技术 +1 鼓励一下+1.

查看全部评分

回复 使用道具 举报
葬天 发表于 2012-11-3 00:07
http://bbs.itheima.com/forum.php?mod=attachment&aid=ODkyM3w2OWU4YzNiMmI3MjI2N2Y3YjRiNzk1N2I5MDBmNmQ0MnwxNzMxNTgxMDc1&request=yes&_f=.jpg
灵异事件????????????

有这种事情??在哪里发现的?
回复 使用道具 举报
徐-星星 发表于 2012-11-5 12:51
有这种事情??在哪里发现的?

当时回复时,看到 lz的注册时间,其他人的注册时间 和登录时间 都是2013年
觉得很诡异,就截个图
让这个瞬间成为了永恒~~
回复 使用道具 举报
徐-星星 发表于 2012-11-5 12:51
有这种事情??在哪里发现的?

当时回复时,看到 lz的注册时间,其他人的注册时间 和登录时间 都是2013年
觉得很诡异,就截个图
让这个瞬间成为了永恒~~
回复 使用道具 举报
葬天 发表于 2012-11-5 13:18
当时回复时,看到 lz的注册时间,其他人的注册时间 和登录时间 都是2013年
觉得很诡异,就截个图
让这 ...

如果是真的,感觉真的很诡异,不过你截的不是很全,呵呵 。。要是截得大一点的话就好了。。。
回复 使用道具 举报
过来试试手!

五子棋小游戏,请审阅

FiveChessAppletDemo.zip

4.92 KB, 下载次数: 208

评分

参与人数 1技术分 +4 收起 理由
杨千里 + 4 +2,整体不错,程序中有小小的bug,在+2鼓.

查看全部评分

回复 使用道具 举报
罗宝 发表于 2012-11-5 14:55
过来试试手!

五子棋小游戏,请审阅

谢谢千里哥!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马