当前位置:   article > 正文

JAVA单机五子棋小游戏(双人对战版)

JAVA单机五子棋小游戏(双人对战版)

 此代码为简单双人对战五子棋程序,不涉及算法游戏策略。

具有轮流出手,判断输赢,判断输入是否合法功能。

运行效果如图:

 

  1. import java.io.*;
  2. public class Gobang
  3. {
  4. // 定义棋盘的大小
  5. private static int BOARD_SIZE = 15;
  6. // 定义一个二维数组来充当棋盘
  7. private String[][] board;
  8. int getsize(){
  9. return Gobang.BOARD_SIZE;
  10. }
  11. public void initBoard(){
  12. // 初始化棋盘数组
  13. board = new String[BOARD_SIZE][BOARD_SIZE];
  14. // 把每个元素赋为"╋",用于在控制台画出棋盘
  15. for (int i = 0 ; i < BOARD_SIZE ; i++){
  16. for ( int j = 0 ; j < BOARD_SIZE ; j++){
  17. board[i][j] = "╋";
  18. }
  19. }
  20. }
  21. // 在控制台输出棋盘的方法
  22. public void printBoard(){
  23. // 打印每个数组元素
  24. System.out.println(" 1 2 3 4 5 6 7 8 9 A B C D E F");
  25. for (int i = 0 ; i < BOARD_SIZE ; i++){
  26. System.out.print(Integer.toHexString(i+1).toUpperCase());
  27. for ( int j = 0 ; j < BOARD_SIZE ; j++){
  28. // 打印数组元素后不换行
  29. System.out.print(board[i][j]);
  30. }
  31. // 每打印完一行数组元素后输出一个换行符
  32. System.out.print("\n");
  33. }
  34. }
  35. public static int GameOver(String[][] a,int M,int N){
  36. for(int i=0;i<M;i++){//横着
  37. for(int j=0;j<N-4;j++){
  38. if(a[i][j]=="●" && a[i][j+1]=="●" && a[i][j+2]=="●" && a[i][j+3]=="●" && a[i][j+4]=="●")
  39. return 1;
  40. else if(a[i][j]=="○" && a[i][j+1]=="○" && a[i][j+2]=="○" && a[i][j+3]=="○" && a[i][j+4]=="○")
  41. return 2;
  42. }
  43. }
  44. for(int j=0;j<N;j++){//竖着
  45. for(int i=0;i<M-4;i++){
  46. if(a[i][j]=="●" && a[i+1][j]=="●" && a[i+2][j]=="●" && a[i+3][j]=="●" && a[i+4][j]=="●")
  47. return 1;
  48. else if(a[i][j]=="○" && a[i+1][j]=="○" && a[i+2][j]=="○" && a[i+3][j]=="○" && a[i+4][j]=="○")
  49. return 2;
  50. }
  51. }
  52. for(int i=0;i<M-4;i++){
  53. for(int j=0;j<N-4;j++){
  54. if(a[i][j]=="●" && a[i+1][j+1]=="●" && a[i+2][j+2]=="●" && a[i+3][j+3]=="●" && a[i+4][j+4]=="●")
  55. return 1;
  56. else if(a[i][j]=="○" && a[i+1][j+1]=="○" && a[i+2][j+2]=="○" && a[i+3][j+3]=="○" && a[i+4][j+4]=="○")
  57. return 2;
  58. }
  59. }
  60. for(int i=M-1;i>3;i--){
  61. for(int j=N-1;j>3;j--){
  62. if(a[i][j]=="●" && a[i-1][j-1]=="●" && a[i-2][j-2]=="●" && a[i-3][j-3]=="●" && a[i-4][j-4]=="●")
  63. return 1;
  64. else if(a[i][j]=="○" && a[i-1][j-1]=="○" && a[i-2][j-2]=="○" && a[i-3][j-3]=="○" && a[i-4][j-4]=="○")
  65. return 2;
  66. }
  67. }
  68. return 0;
  69. }
  70. public static void main(String[] args) throws Exception{
  71. boolean b = false;
  72. Gobang gb = new Gobang();
  73. gb.initBoard();
  74. gb.printBoard();
  75. System.out.print("请白手输入坐标,应以x,y的格式:");
  76. // 这是用于获取键盘输入的方法
  77. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  78. String inputStr = null;
  79. // br.readLine():每当在键盘上输入一行内容按回车,用户刚输入的内容将被br读取到。
  80. while ((inputStr = br.readLine()) != null){
  81. // 将用户输入的字符串以逗号(,)作为分隔符,分隔成2个字符串
  82. try{
  83. String[] posStrArr = inputStr.split(",");
  84. // 将2个字符串转换成用户下棋的座标
  85. int xPos = Integer.parseInt(posStrArr[0]);
  86. int yPos = Integer.parseInt(posStrArr[1]);
  87. if(gb.board[yPos - 1][xPos - 1].compareToIgnoreCase("╋") != 0){
  88. System.out.print("该位置已有棋子,请重新输入:");
  89. continue;
  90. }
  91. // 把对应的数组元素赋为"●"○。
  92. if(b == false){
  93. gb.board[yPos - 1][xPos - 1] = "●";
  94. b = true;
  95. }
  96. else{
  97. gb.board[yPos - 1][xPos - 1] = "○";
  98. b = false;
  99. }
  100. gb.printBoard();
  101. }catch (Exception e){
  102. System.out.println("您输入的格式有误!请重新输入!");
  103. }
  104. if(gb.GameOver(gb.board,gb.getsize(),gb.getsize())==1) {System.out.println("游戏结束, ● 胜!");}
  105. else if(gb.GameOver(gb.board,gb.getsize(),gb.getsize())==2) {System.out.println("游戏结束, ○ 胜!");}
  106. else {
  107. if(b == false)
  108. System.out.print("请白手输入坐标,应以x,y的格式:");
  109. else
  110. System.out.print("请黑手输入坐标,应以x,y的格式:");
  111. }
  112. }
  113. }
  114. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/326358
推荐阅读
相关标签
  

闽ICP备14008679号