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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵震 高级黑马   /  2013-5-1 19:49  /  1454 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邵震 于 2013-5-3 08:50 编辑

  1. * 要求:制作一个五子棋小游戏。
  2. * 思路: 1 首先定义一个二维数组用于打印棋盘。
  3. * 2 利用键盘录入,输入两个不超过15的值,并替换到二维数组里。
  4. * 3 对用户输入的数值进行判断,是否重复,是否越界。
  5. */
  6. package TestDay26;
  7. import java.util.*;
  8. public class XiaoYouXi
  9. {
  10. public static void main(String[] args)
  11. {
  12. qipan();
  13. }
  14. private static void qipan()
  15. {
  16. int c=17;//用于定义棋盘的长,长度的拼音缩写。
  17. int k=17;//用于定义期盼的宽,宽度的拼音缩写。
  18. String [][] qiPan = new String [c][k];//定义一个二维数组,用于打印棋盘。
  19. String [] b = {"⑴","⑵","⑶","⑷","⑸","⑹","⑺","⑻","⑼","⑽","⑾","⑿","⒀","⒁","⒂"};


  20. //用于给二维数组进行赋值,w是外循环的拼音缩写。
  21. for(int w=0;w<c;w++)
  22. {
  23. int s=w-1;//用于打印棋盘竖边的角标,竖排角标的拼音缩写。
  24. int h=0;//用于打印棋盘横边的角标,横排角标的拼音缩写。
  25. for(int n=0;n<k;n++)//nXH是内循环的拼音缩写。
  26. {
  27. if(n==0 && w==0)
  28. {
  29. qiPan[w][n]="邵";
  30. }
  31. else if(n==k-1 && w==0)
  32. {
  33. qiPan[w][n]="震";
  34. }
  35. else if(n==0 && w==c-1)
  36. {
  37. qiPan[w][n]="出";
  38. }
  39. else if(n==k-1 && w==c-1)
  40. {
  41. qiPan[w][n]="品";
  42. }
  43. else if ((w==0 && n!=0 && n!=k-1)||(w==c-1 && n!=0 && n!=k-1))
  44. {
  45. qiPan[w][n]=b[h];
  46. h++;
  47. }
  48. else if (w!=0 && w!=c-1 && n==0 || n==k-1)
  49. {
  50. qiPan[w][n]=b[s];
  51. }
  52. else{
  53. qiPan[w][n]="╋";
  54. }
  55. }
  56. }


  57. for(int w=0;w<c;w++)//用于打印第一个棋盘。
  58. {
  59. for(int n=0;n<k;n++)
  60. {
  61. System.out.print(qiPan[w][n]);
  62. }
  63. System.out.println();
  64. }


  65. System.out.println("请输入1到15之间的数,包括1和15。");
  66. System.out.println("先输入横轴坐标,回车,再输入竖轴坐标。");
  67. String answer="huiqi";
  68. Scanner z =new Scanner(System.in); //zB是坐标的拼音缩写。

  69. int [] arr = new int [2];//这个数组用于保存两次输入的值,后面调用里面的值能组成坐标。
  70. while(answer.equals("huiqi"))//无限循环,直到游戏结束,或者手动结束。
  71. {
  72. arr[0]=z.nextInt();
  73. try
  74. {
  75. if(arr[0] <= b.length && arr[0] != 0)
  76. {
  77. arr[1]=z.nextInt();
  78. if(arr[1] <= b.length && arr[1] != 0)
  79. {
  80. if(qiPan[arr[0]][arr[1]]!="★")
  81. {
  82. qiPan[arr[0]][arr[1]]="★";
  83. for(int w=0;w<c;w++)
  84. {
  85. for(int n=0;n<k;n++)
  86. {
  87. System.out.print(qiPan[w][n]);
  88. }
  89. System.out.println();
  90. }
  91. }
  92. else
  93. {
  94. System.out.println("输入的坐标上有棋子,请重新输入。");
  95. }
  96. }
  97. else
  98. {
  99. System.out.println("输入错误,请输入1到15之间的数,包括1和15.");
  100. }
  101. }
  102. else
  103. {
  104. System.out.println("输入错误,请输入1到15之间的数,包括1和15.");
  105. }
  106. }
  107. catch(Exception e)
  108. {
  109. System.out.println("输入错误,请输入1到15之间的数,包括1和15.");
  110. continue;
  111. }
  112. }
  113. }
  114. }
复制代码
不知道为什么代码复制过来就是这样的 你们对付看吧。

附上源码
Java0426.zip (1.19 KB, 下载次数: 32)




这是我自己打的一个五子棋的棋盘,现在可以实现打印棋盘,打印花边。判断是否落棋重复,是否坐标越界。

但是只能一个人玩,而且不能判断输赢。

现求高手帮忙弄一个悔棋的功能和交替输入。能判断输赢就更好了。

我的悔棋思路是在我把两次键盘录入的值赋给数组前进行判断,假如等于“悔棋”或者别的什么特定的单词的话就调用数组中的坐标从新打印╋。
我使用这个数组保存两次输入结果了0角标是横值1角标是数值。
int [] arr = new int [2];//这个数组用于保存两次输入的值,后面调用里面的值能组成坐标。

交替出牌的思路是在开始设定一个int型变量初始化为0然后每次输入后自增。输入时%2结果为0就输出第一种棋子结果为%就输出第二种棋子。
但是可能是不够严谨吧,每次都报错。


最后是判断输赢的思路
每次落子后进行判断以当前坐标为基准向 左 左上 上 右上四个方向进行判定与当前棋子颜色一样就继续判断。连续五个一样的就输出当前棋手赢,然后结束游戏。
假如不一样就方向开始判断也是连续五个一样的就判断赢。

最好写清楚你的想法 不然我怕我看不懂

求高手解答啊

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

11 个回复

正序浏览
没看代码,不过要加悔棋的功能似乎要使用command pattern,楼主可以研究研究,整出个图形界面再整出个双人对战,楼主就可以毕业了
回复 使用道具 举报
贴个代码自己研究去吧
暂时不支持悔棋功能...

复件 WuZiQi.zip

1.18 KB, 下载次数: 34

回复 使用道具 举报
等高手给你做吧
回复 使用道具 举报
邵震 发表于 2013-5-1 19:49
一血是我的

挺好玩的,希望老做出来啊{:soso_e100:}

回复 使用道具 举报
不会,果断没达到那个层次。
回复 使用道具 举报
层次感好强{:soso_e120:}
回复 使用道具 举报
曹睿翔 发表于 2013-5-1 19:53
我等人回答,你练图形界也不做

话说 我才看到异常  怎么做图形界面啊
回复 使用道具 举报
{:soso_e100:}
回复 使用道具 举报
我等人回答,你练图形界也不做
回复 使用道具 举报
一血是我的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马