zoukankan      html  css  js  c++  java
  • 五子棋——Java语言

    在《疯狂Java讲义》一书看到一部分“五子棋”的代码,一时兴起就自己尝试动手写了一个。

    我写和书上的有很大的不同。不过当然是我写的太臃肿(烂,乱)了。

    7月中旬左右写过俄罗斯方块,到后面,不过程序不按自己预期的运行,找不到Bug。于是先放弃了。

    因此,这段时间还是心情比较低落的,不过还和生活不太顺利有关。

    这次,应该说今天,写出了个五子棋。又找回了一点信心和编程的激情。

    我写的这个游戏有无漏洞还不确定,暂时还没发现。

    效果图

    源代码

    wuziqi.java

     1 public class wuziqi
     2 {
     3     public static void main(String[] args){
     4         showGameName();
     5         board board1 = new board();
     6         
     7         board1.newBoard();
     8         
     9         startgame();
    10         
    11     }
    12 
    13     public static boolean startgame(){
    14         while(true){
    15             //提示信息
    16             System.out.println("white turn:");
    17             /*玩家下一步旗*/
    18             board.printChessman('○');
    19             /*检查一次是否结束*/
    20             if(tools.chekGame('○')){System.out.println("Game Over
    white have Win");return false;}
    21             //提示信息
    22             System.out.println("black turn:");
    23             /*电脑下一步旗*/
    24             board.printChessman('●');
    25             /*检查一次是否结束*/
    26             if(tools.chekGame('●')){System.out.println("Game Over
    black have Win");return false;}
    27         }
    28         
    29     }
    30     public static void showGameName(){
    31         System.out.println("***********");
    32         System.out.println("  五子棋");
    33         System.out.println("***********");
    34     }
    35 
    36 
    37 }

    board.java

     1 import java.util.Scanner;
     2 import java.util.Date;
     3 public class board
     4 {
     5     /*这是一个15x15的棋盘*/
     6     public static int Board_Size = 15;
     7     /*用俩个二维数组定义棋盘*/
     8     public static char elements[][]=new char[Board_Size][Board_Size];
     9     public static int boards[][]=new int[Board_Size][Board_Size];
    10     /*初始化棋盘 并 绘制*/
    11     public static void newBoard(){
    12         for(int i=0;i<Board_Size;i++){//初始化
    13             for(int j=0;j<Board_Size;j++){
    14                 elements[i][j]='╂';
    15             }
    16         }
    17         /*绘制*/
    18         System.out.println("   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4");//打印标尺 列数
    19         for(int i=0;i<Board_Size;i++){
    20             System.out.print(i);if(i<10){System.out.print(" ");}////打印标尺 行数
    21             for(int j=0;j<Board_Size;j++){
    22                 if(tools.tool1(i,j)&&tools.tool2(i,j))//检查4个角和4条边
    23                 System.out.print(elements[i][j]);
    24             }System.out.println();
    25         }
    26     }
    27     /*绘制棋盘的方法*/
    28     public static void paintBoard(){
    29         System.out.println("   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4");//打印标尺 列数
    30         for(int i=0;i<Board_Size;i++){
    31             System.out.print(i);if(i<10){System.out.print(" ");}////打印标尺 行数
    32             for(int j=0;j<Board_Size;j++){
    33                 System.out.print(elements[i][j]);
    34             }System.out.println();
    35         }
    36     }
    37     /*根据用户输入的坐标打印旗子*/
    38     public static void printChessman(char C){
    39         while(true){
    40         Scanner scanner = new Scanner(System.in);
    41         System.out.println("请输入x:");
    42         int x = scanner.nextInt();
    43         System.out.println("请输入y:");
    44         int y = scanner.nextInt();
    45         if(x<=14&&x>=0&&y<=14&&y>=0&&(elements[x][y]!='○'&&elements[x][y]!='●')){
    46             elements[x][y]=C;break;
    47         }else{System.out.println("输入坐标无效!");}
    48         }
    49         
    50         paintBoard();
    51     }
    52         /*根据用户输入的坐标打印旗子2*/
    53     public static void printChessman2(){
    54         while(true){
    55         Scanner scanner = new Scanner(System.in);
    56         System.out.println("请输入x:");
    57         int x = scanner.nextInt();
    58         System.out.println("请输入y:");
    59         int y = scanner.nextInt();
    60         if(x<=14&&x>=0&&y<=14&&y>=0&&(elements[x][y]!='○'&&elements[x][y]!='●')){
    61             elements[x][y]='●';break;
    62         }else{System.out.println("输入坐标无效!");}
    63         }
    64         
    65         paintBoard();
    66     }
    67 }

    tools.java

     1 public class tools 
     2 {
     3     public static boolean tool1(int x,int y){//检查棋盘四个角
     4         if(x==0&&y==0){board.elements[x][y]='┎';return true;}
     5         else if(x==0&&y==board.Board_Size-1){board.elements[x][y]='┒';return true;}
     6         else if(x==board.Board_Size-1&&y==0){board.elements[x][y]='┖';return true;}
     7         else if(x==board.Board_Size-1&&y==board.Board_Size-1){board.elements[x][y]='┚';return true;}
     8         return true;
     9     }
    10     public static boolean tool2(int x,int y){//检查棋盘四条边缘
    11         if(x==0&&y!=board.Board_Size-1&&y!=0){board.elements[x][y]='┰';return true;}
    12         else if(x==board.Board_Size-1&&y!=board.Board_Size-1&&y!=0){board.elements[x][y]='┸';return true;}
    13         else if(y==0&&x!=board.Board_Size-1&&x!=0){board.elements[x][y]='┠';return true;}
    14         else if(y==board.Board_Size-1&&x!=board.Board_Size-1&&x!=0){board.elements[x][y]='┨';return true;}
    15         return true;
    16     }
    17     public static boolean chekGame(char C){/*检查是否有同色的旗子连着5个*/
    18         for(int i=0;i<board.Board_Size;i++){
    19             for(int j=0;j<board.Board_Size;j++){
    20                 int count1=0;
    21                 int count2=0;
    22                 int count3=0;
    23                 int count4=0;
    24                 /*检查是否有5个竖着连着*/
    25                 if(board.elements[i][j]==C){
    26                 for(int x=1;x<=4;x++){
    27                     if(i-x>=0){if(board.elements[i-x][j]==C){count1++;}else{break;}}
    28                     else{break;}
    29                 }
    30                 for(int x=1;x<=4;x++){
    31                     if(i+x<=14){if(board.elements[i+x][j]==C){count1++;}else{break;}}
    32                     else{break;}
    33                 }System.out.println("棋子的纵向:"+count1);}
    34                 
    35                 if(count1>=4){return true;}//退出
    36                 ////////////////////////////////////////////////////////////////////////
    37                 /*检查是否有5个横着连着*/
    38                 if(board.elements[i][j]==C){
    39                 for(int x=1;x<=4;x++){
    40                     if(j-x>=0){if(board.elements[i][j-x]==C){count2++;}else{break;}}
    41                     else{break;}
    42                 }
    43                 for(int x=1;x<=4;x++){
    44                     if(j+x<=14){if(board.elements[i][j+x]==C){count2++;}else{break;}}
    45                     else{break;}
    46                 }
    47                 System.out.println("棋子的横向:"+count2);}
    48                 
    49                 if(count2>=4){return true;}//退出
    50                 ////////////////////////////////////////////////////////////////////////
    51                 /*检查是否有5个左斜个连着*/
    52                 if(board.elements[i][j]==C){
    53                 for(int x=1;x<=4;x++){
    54                     if(j-x>=0&&i-x>=0){if(board.elements[i-x][j-x]==C){count3++;}else{break;}}
    55                     else{break;}
    56                 }
    57                 for(int x=1;x<=4;x++){
    58                     if(j+x<=14&&i+x<=14){if(board.elements[i+x][j+x]==C){count3++;}else{break;}}
    59                     else{break;}
    60                 }
    61                 System.out.println("棋子的左斜:"+count3);}
    62                 
    63                 if(count3>=4){return true;}//退出
    64                 ////////////////////////////////////////////////////////////////////////
    65                 /*检查是否有5个右斜个连着*/
    66                 if(board.elements[i][j]==C){
    67                 for(int x=1;x<=4;x++){
    68                     if(j+x<=14&&i-x>=0){if(board.elements[i-x][j+x]==C){count4++;}else{break;}}
    69                     else{break;}
    70                 }
    71                 for(int x=1;x<=4;x++){
    72                     if(j-x>=0&&i+x<=14){if(board.elements[i+x][j-x]==C){count4++;}else{break;}}
    73                     else{break;}
    74                 }
    75                 System.out.println("棋子的右斜:"+count4);}
    76                 
    77                 if(count4>=4){return true;}//退出
    78                 
    79             }
    80         }
    81         return false;
    82     }
    83 }

    写于大一暑假

    2020-8-7 04:27:09

  • 相关阅读:
    LeetCode 42. Trapping Rain Water
    LeetCode 209. Minimum Size Subarray Sum
    LeetCode 50. Pow(x, n)
    LeetCode 80. Remove Duplicates from Sorted Array II
    Window10 激活
    Premiere 关键帧缩放
    AE 「酷酷的藤」特效字幕制作方法
    51Talk第一天 培训系列1
    Premiere 视频转场
    Premiere 暴徒生活Thug Life
  • 原文地址:https://www.cnblogs.com/flyingpenguins/p/13450168.html
Copyright © 2011-2022 走看看