【初始C语言】/*使用C语言简单实现三子棋小游戏*/

简介: 【初始C语言】/*使用C语言简单实现三子棋小游戏*/

🌳🌳作者简介:一名平凡的计算机小白,但持续喜欢探索新的知识领域!🛸🛸

🎋🎋本文内容:hello,大家好!今天给大家带来的就是使用C语言实现咋们小时候经常玩过的"三子棋"小游戏!

🌹🌹希望寄语:当你做一件事情感到越难受,你越是要去攻克它,因为成功的道路永远是崎岖的,你渴望山顶的风景,就要忍受爬山的艰辛!努力才是硬道理!

🚀🚀一:游戏描述

如下图:两人对局,当其中一人下的棋子形成一条横线、竖线或者是交叉线,即获得游戏胜利!

c47c15a37bcf4f36a40adec28bbf8a11.png

🛰️🛰️二、游戏设计

首先我们需要设计一个二维数组来存放我们的这些棋子,可以看到上图中我们使用---和 | 来设计成我们的棋子落地位置,也就是给二维数组初始化一下:

🍊代码实现:

voidInitBoard(charboard[ROW][COL], introw, intcol)
{
inti=0;
for (i=0; i<row; i++)
    {
intj=0;
for (j=0; j<col; j++)
        {
board[i][j] =' ';
        }
    }
}

🎍那么,棋盘设计好了, 接下来我们下棋之后,我们需要将棋盘打印出来:

🍊代码实现:

void DisplayBoard(char board[ROW][COL], int row, int col)

{

   int i = 0;

   for (i = 0; i < row; i++)

   {

       //打印数据

       int j = 0;

       for (j = 0; j < col; j++)

       {

           printf(" %c ", board[i][j]);

           if (j < col - 1)

               printf("|");

       }

       printf("\n");

       //打印分割的行

       if (i < row - 1)

       {

           for (j = 0; j < col; j++)

           {

               printf("---");

               if (j < col - 1)

                   printf("|");

           }

           printf("\n");

       }

   }

}

🌲好了,那么这个时候轮到我们的玩家下棋了,同理,我们设计一个函数来实现玩家下棋:

🍎代码实现:

voidplayer_move(charboard[ROW][COL], introw, intcol)
{
intx=0;
inty=0;
printf("玩家下棋\n");
while (1)
    {
printf("请输入坐标:>");
scanf("%d %d", &x, &y);
if (x>=1&&x<=row&&y>=1&&y<=col)
        {
//下棋if (board[x-1][y-1] ==' ')
            {
board[x-1][y-1] ='*';
break;
            }
else            {
printf("该坐标被占用,请重新输入\n");
            }
        }
else        {
printf("坐标非法,请重新输入\n");
        }
    }
}

🍱那么有了玩家下棋,我们的电脑也要下棋了,同样,我们写一个函数来让电脑实现下棋的功能:

🍎代码实现:

charis_win(charboard[ROW][COL], introw, intcol)
{
inti=0;
//判断行for (i=0; i<row; i++)
    {
if (board[i][0] ==board[i][1] &&board[i][1] ==board[i][2] &&board[i][1] !=' ')
        {
returnboard[i][1];
        }
    }
//判断列for (i=0; i<col; i++)
    {
if (board[0][i] ==board[1][i] &&board[1][i] ==board[2][i] &&board[1][i] !=' ')
        {
returnboard[1][i];
        }
    }
//对角线if (board[0][0] ==board[1][1] &&board[1][1] ==board[2][2] &&board[1][1] !=' ')
    {
returnboard[1][1];
    }
if (board[0][2] ==board[1][1] &&board[1][1] ==board[2][0] &&board[1][1] !=' ')
    {
returnboard[1][1];
    }

【初始C语言】/*使用C语言简单实现三子棋小游戏*/

网络异常,图片无法展示
|

辰柒_                    

网络异常,图片无法展示
|
                    于 2022-06-26 00:17:31 发布                    
网络异常,图片无法展示
|
                    474                    
网络异常,图片无法展示
|

分类专栏:                                初识C语言                            文章标签:                                c语言                                蓝桥杯                                经验分享

编辑                    版权

7 篇文章                        0 订阅

🌳🌳作者简介:一名平凡的计算机小白,但持续喜欢探索新的知识领域!🛸🛸

🎋🎋本文内容:hello,大家好!今天给大家带来的就是使用C语言实现咋们小时候经常玩过的"三子棋"小游戏!

🌹🌹希望寄语:当你做一件事情感到越难受,你越是要去攻克它,因为成功的道路永远是崎岖的,你渴望山顶的风景,就要忍受爬山的艰辛!努力才是硬道理!

🚀🚀一:游戏描述

如下图:两人对局,当其中一人下的棋子形成一条横线、竖线或者是交叉线,即获得游戏胜利!

🛰️🛰️二、游戏设计

首先我们需要设计一个二维数组来存放我们的这些棋子,可以看到上图中我们使用---和 | 来设计成我们的棋子落地位置,也就是给二维数组初始化一下:

🍊代码实现:

1. void InitBoard(char board[ROW][COL], int row, int col)
2. {
3. int i = 0;
4. for (i = 0; i < row; i++)
5.     {
6. int j = 0;
7. for (j = 0; j < col; j++)
8.         {
9.             board[i][j] = ' ';
10.         }
11.     }
12. }

🎍那么,棋盘设计好了, 接下来我们下棋之后,我们需要将棋盘打印出来:

🍊代码实现:

1. void DisplayBoard(char board[ROW][COL], int row, int col)
2. {
3. int i = 0;
4. for (i = 0; i < row; i++)
5.     {
6. //打印数据
7. int j = 0;
8. for (j = 0; j < col; j++)
9.         {
10. printf(" %c ", board[i][j]);
11. if (j < col - 1)
12. printf("|");
13.         }
14. printf("\n");
15. //打印分割的行
16. if (i < row - 1)
17.         {
18. for (j = 0; j < col; j++)
19.             {
20. printf("---");
21. if (j < col - 1)
22. printf("|");
23.             }
24. printf("\n");
25.         }
26.     }
27. }

🌲好了,那么这个时候轮到我们的玩家下棋了,同理,我们设计一个函数来实现玩家下棋:

🍎代码实现:

1. void player_move(char board[ROW][COL], int row, int col)
2. {
3. int x = 0;
4. int y = 0;
5. printf("玩家下棋\n");
6. while (1)
7.     {
8. printf("请输入坐标:>");
9. scanf("%d %d", &x, &y);
10. if (x >= 1 && x <= row && y >= 1 && y <= col)
11.         {
12. //下棋
13. if (board[x - 1][y - 1] == ' ')
14.             {
15.                 board[x - 1][y - 1] = '*';
16. break;
17.             }
18. else
19.             {
20. printf("该坐标被占用,请重新输入\n");
21.             }
22.         }
23. else
24.         {
25. printf("坐标非法,请重新输入\n");
26.         }
27.     }
28. }

🍱那么有了玩家下棋,我们的电脑也要下棋了,同样,我们写一个函数来让电脑实现下棋的功能:

🍎代码实现:

1. void computer_move(char board[ROW][COL], int row, int col)
2. {
3. int x = 0;
4. int y = 0;
5. printf("电脑下棋:>\n");
6. while (1)
7.     {
8.         x = rand() % row;//0~2
9.         y = rand() % col;//0~2
10. if (board[x][y] == ' ')
11.         {
12.             board[x][y] = '#';
13. break;
14.         }
15.     }
16. }

🍊那么,有了这四个步骤之后,我们的三子棋小游戏的大纲就基本出来了,那么,是不是还缺点什么呢?没错,是个游戏总得判断输赢对叭,所以这里我们还需要一个函数实现判断是玩家赢了还是电脑赢了:

🍅代码实现:

1. char is_win(char board[ROW][COL], int row, int col)
2. {
3. int i = 0;
4. //判断行
5. for (i = 0; i < row; i++)
6.     {
7. if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
8.         {
9. return board[i][1];
10.         }
11.     }
12. //判断列
13. for (i = 0; i < col; i++)
14.     {
15. if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
16.         {
17. return board[1][i];
18.         }
19.     }
20. //对角线
21. if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
22.     {
23. return board[1][1];
24.     }
25. if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
26.     {
27. return board[1][1];
28.     }

🍎在上述代码中我们只考虑到了输赢两种结果,但是当整个棋盘都下满的情况下,还是没有分出胜负,那么这个时候是不是就平局了?没错,这里我们还要考虑到平局的情况:

🍊代码实现:

staticintif_full(charboard[ROW][COL], introw, intcol)
{
inti=0;
for (i=0; i<row; i++)
    {
intj=0;
for (j=0; j<col; j++)
        {
if (board[i][j] ==' ')
            {
return0;//没满            }
        }
    }
return1;//满了}

🍊这里我们需要判断棋盘是否满了,是返回1,不是返回0,然后输出是否形成平局:

  //判断平局

   if (if_full(board, row, col) == 1)

   {

       return 'Q';

   }

 

   //继续

   return 'C';

🍑OK,到这里我们的游戏部分就写完了,那么到我们的测试部分;测试部分我们首先定义一个菜单,用于提示用户输入输出:

   void menu()

   {

    printf("********************************\n");

    printf("*********  1. play     *********\n");

    printf("*********  0. exit     *********\n");

    printf("********************************\n");

   }

✈️✈️三:完整代码演示

完成这个游戏我们需要在我们的VS2019里面,设置一个头文件和两个.c文件

#pragma once

 

 

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

 

#define ROW 3

#define COL 3

 

//初始化棋盘

void InitBoard(char board[ROW][COL], int row, int col);

 

//打印棋盘

void DisplayBoard(char board[ROW][COL], int row, int col);

 

//玩家下棋

void player_move(char board[ROW][COL], int row, int col);

 

//电脑下棋

void computer_move(char board[ROW][COL], int row, int col);

 

//判断输赢

char is_win(char board[ROW][COL], int row, int col);

#define _CRT_SECURE_NO_WARNINGS 1

 

#include "game.h"

 

void InitBoard(char board[ROW][COL], int row, int col)

{

   int i = 0;

   for (i = 0; i < row; i++)

   {

       int j = 0;

       for (j = 0; j < col; j++)

       {

           board[i][j] = ' ';

       }

   }

}

 

 

void DisplayBoard(char board[ROW][COL], int row, int col)

{

   int i = 0;

   for (i = 0; i < row; i++)

   {

       //打印数据

       int j = 0;

       for (j = 0; j < col; j++)

       {

           printf(" %c ", board[i][j]);

           if (j < col - 1)

               printf("|");

       }

       printf("\n");

       //打印分割的行

       if (i < row - 1)

       {

           for (j = 0; j < col; j++)

           {

               printf("---");

               if (j < col - 1)

                   printf("|");

           }

           printf("\n");

       }

   }

}

 

void player_move(char board[ROW][COL], int row, int col)

{

   int x = 0;

   int y = 0;

   printf("玩家下棋\n");

   while (1)

   {

       printf("请输入坐标:>");

       scanf("%d %d", &x, &y);

       if (x >= 1 && x <= row && y >= 1 && y <= col)

       {

           //下棋

           if (board[x - 1][y - 1] == ' ')

           {

               board[x - 1][y - 1] = '*';

               break;

           }

           else

           {

               printf("该坐标被占用,请重新输入\n");

           }

       }

       else

       {

           printf("坐标非法,请重新输入\n");

       }

   }

}

 

void computer_move(char board[ROW][COL], int row, int col)

{

   int x = 0;

   int y = 0;

   printf("电脑下棋:>\n");

   while (1)

   {

       x = rand() % row;//0~2

       y = rand() % col;//0~2

       if (board[x][y] == ' ')

       {

           board[x][y] = '#';

           break;

       }

   }

}

 

static int if_full(char board[ROW][COL], int row, int col)

{

   int i = 0;

   for (i = 0; i < row; i++)

   {

       int j = 0;

       for (j = 0; j < col; j++)

       {

           if (board[i][j] == ' ')

           {

               return 0;//没满

           }

       }

   }

   return 1;//满了

}

 

char is_win(char board[ROW][COL], int row, int col)

{

   int i = 0;

   //判断行

   for (i = 0; i < row; i++)

   {

       if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')

       {

           return board[i][1];

       }

   }

   //判断列

   for (i = 0; i < col; i++)

   {

       if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')

       {

           return board[1][i];

       }

   }

   //对角线

   if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')

   {

       return board[1][1];

   }

   if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')

   {

       return board[1][1];

   }

 

   //判断平局

   if (if_full(board, row, col) == 1)

   {

       return 'Q';

   }

 

   //继续

   return 'C';

}

#define _CRT_SECURE_NO_WARNINGS 1

 

//测试三子棋游戏的逻辑

 

#include "game.h"

 

void menu()

{

printf("********************************\n");

printf("*********  1. play     *********\n");

printf("*********  0. exit     *********\n");

printf("********************************\n");

}

 

void game()

{

char ret = 0;

//存放下棋的数据

char board[ROW][COL] = { 0 };

//初始化棋盘为全空格

InitBoard(board, ROW, COL);

//打印棋盘

DisplayBoard(board, ROW, COL);

while (1)

{

 //玩家下棋

 player_move(board, ROW, COL);

 DisplayBoard(board, ROW, COL);

 //判断输赢

 ret = is_win(board, ROW, COL);

 if (ret != 'C')

 {

  break;

 }

 //电脑下棋

 computer_move(board, ROW, COL);//随机下棋

 DisplayBoard(board, ROW, COL);

 ret = is_win(board, ROW, COL);

 if (ret != 'C')

 {

  break;

 }

}

if (ret == '*')

{

 printf("玩家赢了\n");

}

else if (ret == '#')

{

 printf("电脑赢了\n");

}

else

{

 printf("平局\n");

}

//DisplayBoard(board, ROW, COL);

}

 

void test()

{

int input = 0;

srand((unsigned int)time(NULL));

 

do

{

 menu();

 printf("请选择:>");

 scanf("%d", &input);

 switch (input)

 {

 case 1:

  game();//游戏

  break;

 case 0:

  printf("退出游戏\n");

  break;

 default:

  printf("选择错误\n");

  break;

 }

} while (input);

}

 

int main()

{

test();

return 0;

}

相关文章
|
9天前
|
C语言
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
27 0
|
2天前
|
程序员 C语言
C语言小游戏之猜数字
C语言小游戏之猜数字
14 5
|
2天前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
2天前
|
C语言
【海贼王编程冒险 - C语言海上篇】C语言如何实现简单的三子棋游戏?
【海贼王编程冒险 - C语言海上篇】C语言如何实现简单的三子棋游戏?
6 1
|
3天前
|
C语言
C语言小游戏的源代码
C语言小游戏的源代码
|
30天前
|
C语言
万字详解:C语言三子棋进阶 + N子棋递归动态判断输赢(二)
我们可以通过创建并定义符号常量NUMBER,来作为判断是否胜利的标准。如三子棋中,令NUMBER为3,则这八个方向中有任意一个方向达成3子连珠,则连珠的这个棋子所代表的玩家获胜。
27 1
|
30天前
|
算法 C语言 C++
万字详解:C语言三子棋进阶 + N子棋递归动态判断输赢(一)
三子棋游戏设计的核心是对二维数组的把握和运用。
28 1
|
1月前
|
C语言
【C语言入门小游戏】扫雷
【C语言入门小游戏】扫雷
24 1
|
14天前
|
程序员 C语言 索引
【️C语言-游戏设置】---三子棋(N满)
【️C语言-游戏设置】---三子棋(N满)
|
21天前
|
C语言
C语言小插曲——对图形库的初步探索(消除小球小游戏)
C语言小插曲——对图形库的初步探索(消除小球小游戏)
11 0