三子棋笔记(C语言)

三子棋笔记(C语言)目录 实现思路 1 代码搭建 2 框架搭建 3 菜单功能实现 4 游戏功能实现 1 game 函数 5 主要函数 1 创建棋盘并初始化 2 打印棋盘 3 玩家下棋 4 电脑下棋

大家好,我是讯享网,很高兴认识大家。

目录

实现思路:

1.代码搭建:

2.框架搭建:

3.菜单功能实现:

4.游戏功能实现:

        1.game()函数:

5.主要函数:

        1.创建棋盘并初始化:

        2.打印棋盘:

        3.玩家下棋:

        4.电脑下棋:

         5.判断输赢:

        6.整体代码:

实现思路:
1.代码搭建:
使用的vs2019编译器进行编译

test.c文件实现整个游戏框架,game.c文件实现整个游戏的具体游戏功能,game.h文件实现整个游戏需要的声明和头文件。

2.框架搭建:
让玩家来选择开始游戏,或者退出游戏,为了让玩家玩完一把继续下一把,采用do……while循环

int main()
{
    int input = 0;
    do
    {
        menu();
        printf("请选择您要选择的项目\n");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("您输入的选择有误,请重新选择\n");
            break;
        }
 
    } while (input);
 
}

3.菜单功能实现:
1.创建菜单menu函数使玩家进行选择

void menu()
{
    printf("\n");
    printf("   1.play   \n");
    printf("   0.eixt   \n");
    printf("\n");
}

4.游戏功能实现:
在game()函数内实现:

1.game()函数:
void game()
{
    //创建棋盘
    char board[ROW][COL] = { 0 };
    //初始化棋盘
    init_board(board, ROW, COL);
    //打印棋盘
    print_board(board, ROW, COL);
    char ret = '0';//接受游戏状态 
    while (1)
    {
        //人开始下棋
        people_play(board, ROW, COL);
        print_board(board, ROW, COL);
        //判断输赢
        ret = judge_lw(board, ROW, COL);
        if (ret != 'C')
            break;
        //电脑下棋
        com_play(board, ROW, COL);
        print_board(board, ROW, COL);
        ret = judge_lw(board, ROW, COL);
        if (ret != 'C')
            break;
    }
    if (ret == '*')
    {
        printf("玩家赢了\n");
 
    }
    else if (ret == '#')
    {
        printf("电脑赢了\n");
 
    }
    else
    {
        printf("平局\n");
    }
}

5.主要函数:
1.创建棋盘并初始化:
   本函数init_board()主要功能是对棋盘进行初始化,把棋盘空间都赋值成空格,

void  init_board(char board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for (i = 0;i < row;i++)
    {
        for (j = 0;j < col;j++)
        {
            board[i][j] = ' ';
        }
    }
}

然后再用 rand()函数设置随机数


讯享网

注:srand rand 的头文件是#include<stdlib.h>

       time的头文件是#include<time.h>

      

6.整体代码:
test.c 文件

 

#include"game.h"   void menu() {     printf("\n");     printf("   1.play   \n");     printf("   0.eixt   \n");     printf("\n"); }   void game() {     //创建棋盘     char board[ROW][COL] = { 0 };     //初始化棋盘     init_board(board, ROW, COL);     //打印棋盘     print_board(board, ROW, COL);     char ret = '0';//接受游戏状态      while (1)     {         //人开始下棋         people_play(board, ROW, COL);         print_board(board, ROW, COL);         //判断输赢         ret = judge_lw(board, ROW, COL);         if (ret != 'C')             break;         //电脑下棋         com_play(board, ROW, COL);         print_board(board, ROW, COL);         ret = judge_lw(board, ROW, COL);         if (ret != 'C')             break;     }     if (ret == '*')     {         printf("玩家赢了\n");       }     else if (ret == '#')     {         printf("电脑赢了\n");       }     else     {         printf("平局\n");     } }   int main() {     int input = 0;     srand((unsigned int)time(NULL));       do     {         menu();         printf("请选择您要选择的项目\n");         scanf("%d", &input);         switch (input)         {         case 1:             game();             break;         case 0:             printf("退出游戏\n");             break;         default:             printf("您输入的选择有误,请重新选择\n");             break;         }       } while (input);   }

讯享网

geme.h文件
 

讯享网#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<time.h> #include<stdlib.h> #define ROW 3 #define COL 3   //初始化棋盘 void  init_board(char board[ROW][COL], int row, int col);   //打印棋盘 void print_board(char board[ROW][COL], int row, int col);   //人下棋 void people_play(char board[ROW][COL], int row, int col);   //电脑下棋 void com_play(char board[ROW][COL], int row, int col);   //判断输赢 char judge_lw(char board[ROW][COL], int row, int col);

 game.c文件

#include"game.h"   //初始化棋盘 void  init_board(char board[ROW][COL], int row, int col) {     int i = 0;     int j = 0;     for (i = 0;i < row;i++)     {         for (j = 0;j < col;j++)         {             board[i][j] = ' ';         }     }   }   //打印棋盘 void print_board(char board[ROW][COL], int row, int col) {     int i = 0;     int j = 0;     for (i = 0;i < row;i++)     {         for (j = 0;j < col;j++)         {             printf(" %c ", board[i][j]);             if (j < col - 1)             {                 printf("|");             }         }         printf("\n");           if (i < row - 1)         {             printf("---|---|---\n");         }     } }   //人下棋 void people_play(char board[ROW][COL], int row, int col) {     int x = 0;     int y = 0;     while (1)     {         printf("请选择您要填入的坐标\n");         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 com_play(char board[ROW][COL], int row, int col) {          printf("电脑走\n");     while (1)     {         int x = rand() % row;         int y = rand() % col;         if (board[x][y] == ' ')         {             board[x][y] = '#';             break;         }     } }     int IsFull(char board[ROW][COL], int row, int col) {     int i = 0;     int j = 0;     for (i = 0; i < row; i++)     {         for (j = 0; j < col; j++)         {             if (board[i][j] == ' ')             {                 return 0;//棋盘没满             }         }     }     return 1;//棋盘满了 }   //判断输赢 char judge_lw(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[0][i];         }     }     //判断斜线     if (board[0][0] == board[1][1] && board[2][2] == board[0][0] && 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];     }     //判断平局     //如果棋局满了返回1 ,不满返回0     int ret = IsFull(board, row, col);     if (ret == 1)     {         return 'Q';     }     //继续     return 'C';   } 

小讯
上一篇 2025-04-10 08:46
下一篇 2025-02-20 19:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15147.html