C 语言控制台实现五子棋项目(内含完整源码)

花了一天时间实现了控制台五子棋项目,把项目贴上来。也算是告一段落了。

为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验。所以在编程初期选择了控制台小游戏《单机五子棋》作为项目进行编码。

本项目定位:

控制台小程序,作为熟悉一个完整的项目流程存在。

项目周期:

一星期。

实际时间:

  一天。(2016年4月5日)

游戏功能:

首先实现能够让双人进行对战,最后得出胜负(结果)。然后加入人机对战元素,也就是传统意义上一个人玩的单机游戏。

编码风格:

C语言面向过程编程,变量名与函数名全部使用驼峰命名法。

代码:

#include <stdio.h>    // 标准库
 #include <conio.h>    // 按键
 #include <Windows.h> // 屏幕刷新
 #include <stdlib.h>  // 随机数
 static const int wArr = 15;
 static const int hArr = 15;
  int temp = 0;
 int allRound = 0;
 int iMap[wArr][hArr] = {};
 void initMap();
 void showMap();
 void getUserInput();
 void userInput(int width, int height);
 void whoIsWin();
 void aiInput(int w, int h);
  bool notherUser = true; 
// 区分用户 int myChess = 0;
 int whiteChess = 22;
 int blackChess = 33; 
 int main()
 { 
    int InputW = 0;  
    int InputH = 0; 
    initMap();
     
     while (1) 
    { 
        showMap(); 
        getUserInput();
        system("CLS"); 
        whoIsWin();
         if (20000 == allRound)
              break; 
             } 
     showMap(); 
    if (notherUser)
     { 
        printf("User2, Win\n"); 
    }
     else
     { 
        printf("User1, Win\n");
     }
      return 0;
 }
  void initMap()
 {
     for (int i = 0; i < wArr; ++i) 
    { 
        for (int j = 0; j < hArr; ++j) 
        { 
            iMap[i][j] = NULL; 
        }
     }
      for (int i = 0; i < wArr; ++i)
     { 
        iMap[i][0] = temp++; 
    }
      temp = 0;
      for (int i = 0; i < wArr; ++i)
     { 
        iMap[0][i] = temp++; 
    }
     temp = 0;
 }
  void showMap()
 { 
    for (int i = 0; i < wArr; ++i)
     { 
        for (int j = 0; j < hArr; ++j)
         {
             printf("%3.0d", iMap[i][j]); 
        }
         printf("\n"); 
    }
 }
  void getUserInput()
 {
     int w, h; 
    if (notherUser)
     { 
        printf("User1:\n");
         myChess = whiteChess;
         // ============  用户输入 
        scanf_s("%d %d", &w, &h); 
         userInput(w, h); 
    }
     else
     { 
        printf("User2:\n"); 
        myChess = blackChess; 
        // 下面是 AI 部分
         aiInput(rand()%wArr, rand()%hArr);
     } 
    } 
 void userInput(int w, int h)
 { 
    if (w >= wArr || w <= 0 || h >= hArr || h <= 0) 
    { 
        return; 
    }
     else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess)
     { 
        return;
     } 
    iMap[w][h] = myChess;
    notherUser = !notherUser;
 }
  void aiInput(int w, int h)
 { 
   if (w >= wArr || w <= 0 || h >= hArr || h <= 0)
     { 
        return;
     }
     else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess) 
    { 
        return;
     }
     iMap[w][h] = myChess;
     notherUser = !notherUser;
 }
  void whoIsWin()
 {
     for (int i = 0; i < wArr; ++i)
     { 
        for (int j = 0; j < hArr; ++j) 
        { 
            if(iMap[i][j] > 0) 
                // 竖排五个
       if (iMap[i + 0][j] == iMap[i + 1][j] 
            && iMap[i + 1][j] == iMap[i + 2][j]
            && iMap[i + 2][j] == iMap[i + 3][j]
             && iMap[i + 3][j] == iMap[i + 4][j] 
              //&& iMap[i + 4][j] == iMap[i + 5][j] 
                  ) 
               {  
                   allRound = 20000; 
                }
                 // 右斜五个
 else if (iMap[i + 0][j + 0] == iMap[i + 1][j + 1]
            && iMap[i + 1][j + 1] == iMap[i + 2][j + 2] 
            && iMap[i + 2][j + 2] == iMap[i + 3][j + 3] 
            && iMap[i + 3][j + 3] == iMap[i + 4][j + 4] 
                    //&& iMap[i + 4][j + 4] == iMap[i + 5][j + 5]
                     )
                 { 
                    allRound = 20000;
                 }
                 // 左斜五个
 else if (iMap[i + 0][j + 0] == iMap[i - 1][j + 1]
                     && iMap[i - 1][j + 1] == iMap[i - 2][j + 2]
                     && iMap[i - 2][j + 2] == iMap[i - 3][j + 3]
                     && iMap[i - 3][j + 3] == iMap[i - 4][j + 4]
                     //&& iMap[i - 4][j + 4] == iMap[i - 5][j + 5]
                     ) 
                { 
                    allRound = 20000;
                 } 
                // 横排五个
            else if (iMap[i][j + 0] == iMap[i][j + 1]
                     && iMap[i][j + 1] == iMap[i][j + 2]
                     && iMap[i][j + 2] == iMap[i][j + 3]
                     && iMap[i][j + 3] == iMap[i][j + 4]
                     //&& iMap[i][j + 4] == iMap[i][j + 5]
                     )
                 { 
                    allRound = 20000;
                 }
         }
     }
 }


 C/C++资料免费分享:

 以上均有视频教程和源码可免费分享,扫码进群即可领取~

猜你喜欢

转载自blog.csdn.net/weixin_58045538/article/details/120635323
今日推荐