C语言实现三子棋

一 要实现三子棋有以下几个基本功能:

1.初始化棋盘:用空字符初始化

2.打印棋盘:控制打印九宫格来表示棋盘

3.玩家下棋:用X表示玩家的棋子

4.电脑随机下棋:随机生成坐标,用0表示玩家的棋子

5.判断输赢:分为玩家赢,电脑赢,平局,继续游戏四种情况

二 程序如下:

1.头文件(函数的声明)

#define _CRT_SECURE_NO_WARNINGS 1    
#ifndef  __SANZIQI_H__    
#define  __SANZIQI_H__    
   
#define ROW 3    
#define COL 3    
    
//初始化    
void InitBorad(char arr[ROW][COL], int row, int col);    
    
//显示棋盘    
void Display(char arr[ROW][COL], int row, int col);    
    
//电脑走    
void Computer(char arr[ROW][COL], int row, int col);    
    
//人走    
void Player(char arr[ROW][COL], int row, int col);    
    
//判断是否还有空格    
int Check_full(char arr[ROW][COL], int row, int col);    
    
//判断输赢    
char Is_Win(char arr[ROW][COL], int row, int col);    
   
#endif  

2.子程序

#define _CRT_SECURE_NO_WARNINGS 1    
#include <stdio.h>    
#include <stdlib.h>    
#include <time.h>    
  //初始化    
void InitBorad(char arr[ROW][COL], int row, int col)    
{    
    int i;    
    int j;    
    for (i = 0; i < row;i++)    
    for (j = 0; j < col; j++)    
        arr[i][j] = ' ';    
}    
    
//显示棋盘    
void Display(char arr[ROW][COL], int row, int col)    
{    
    int i;    
    int j;    
    printf("----------\n");    
    for (i = 0; i < row; i++)    
    {    
        printf("|");    
        for (j = 0; j < col; j++)    
        {    
            printf("%2c|", arr[i][j]);    
        }    
        printf("\n----------\n");    
    }    
}    
    
//电脑走    
void Computer(char arr[ROW][COL], int row, int col)    
{    
    srand((unsigned int)time(NULL)); //产生随机数    
    while (1)    
    {    
        int x = rand() % 3; //产生一个小于3的数    
        int y = rand() % 3;    
        if (arr[x][y] == ' ') //判断这个元素是否为空    
        {    
            arr[x][y] = 'X';    
            break;    
        }       
    }       
}    
    
//人走    
void Player(char arr[ROW][COL], int row, int col)    
{    
    int x;    
    int y;    
    while (1)    
    {    
        printf("请输入坐标:");    
        scanf("%d%d", &x, &y);    
        x--;    
        y--;    
        if ((0 <= x && x <= row - 1) && (0 <= y && y <= col - 1)) //玩家输入的坐标要在棋盘范围内    
        {    
            if (arr[x][y] == ' ')    
            {    
                arr[x][y] = 'O';    
                break;    
            }    
            else    
            {    
                printf("你输入的下标被占,请重新输入!\n");    
            }    
        }    
        else    
        {    
            printf("越界了,请重新输入!\n");    
        }       
    }    
}    
    
//判断是否还有空格    
int Check_full(char arr[ROW][COL], int row, int col)    
{    
    int i;    
    int j;    
    for (i = 0; i < row; i++)    
    {    
        for (j = 0; j < col; j++)    
        {    
            if (arr[i][j] == ' ') //判断数组中有没有空格,如果出现一次空格,就已经可以证明数组没满    
                return 0;    
        }    
    }    
    return 1;    
}    
    
//判断输赢    
char Is_Win(char arr[ROW][COL], int row, int col)    
{    
    int i;    
    if (Check_full(arr, ROW, COL) == 1) //棋盘满了没有空格,平局    
        return 'Q';    
    for (i = 0; i < row; i++)//某一行连3    
    {    
        if(arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])    
        return arr[i][1];    
    }    
    for (i = 0; i < col; i++) //某一列连3    
    {    
        if(arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])    
        return arr[1][i];    
    }    
    if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]) //右对角线\连3    
        return arr[1][1];    
    if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0]) //左对角线/连3    
        return arr[1][1];    
    return ' '; //如果没有判断出谁赢并且棋盘还没满,则继续进行游戏    
}  

3.主函数 即main

#define _CRT_SECURE_NO_WARNINGS 1    
#include <stdio.h>    
#include <stdlib.h>    
  
void menu()    
{    
    printf("**************************************\n");    
    printf("*************** 1.play ***************\n");    
    printf("*************** 0.exit ***************\n");    
    printf("**************************************\n");    
}    
void game()    
{    
    char arr[ROW][COL];    
    InitBorad(arr,ROW,COL);//初始化棋盘    
    //Display(arr, ROW, COL);    
    do{    
        Computer(arr, ROW, COL); //电脑先走    
        Display(arr, ROW, COL); //打印棋盘    
        if (Is_Win(arr, ROW, COL) != ' ') //如果棋盘不为空的话,即判断出谁赢或平局,就跳出循环    
        {    
            break;    
        }    
        Player(arr, ROW, COL); //玩家走    
        Display(arr, ROW, COL); //打印棋盘    
        if (Is_Win(arr, ROW, COL) != ' ') //如果棋盘不为空的话,即判断出谁赢或平局,就跳出循环    
        {    
            break;    
        }    
    } while (Is_Win(arr, ROW, COL) == ' '); //如果棋盘没有满,同时也没有判断出输赢的话,继续执行循环,否则跳出循环    
    if (Is_Win(arr, ROW, COL) == 'O')    
        printf("玩家赢\n");    
    else if (Is_Win(arr, ROW, COL) == 'X')    
        printf("电脑赢\n");    
    else if (Is_Win(arr, ROW, COL) == 'Q')    
        printf("平局\n");    
    
}    
int main()    
{    
    int choose = 0;     
    do{    
        menu();    
        printf("请选择>");    
        scanf("%d", &choose);    
        switch (choose)    
        {    
        case 1:    
            game();    
            break;    
        case 0:    
            printf("退出游戏\n");    
            break;    
        default:    
            printf("输入错误,重新输入!\n");    
        }    
    } while (choose);    
    system("pause");    
    return 0;    
}    

程序运行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。以下是一个简单的C语言实现单人三子游戏的代码: ```c #include <stdio.h> #include <stdlib.h> #define BOARD_SIZE 3 void init_board(char board[][BOARD_SIZE]); void print_board(char board[][BOARD_SIZE]); int make_move(char board[][BOARD_SIZE], int row, int col, char player_char); int check_win(char board[][BOARD_SIZE], char player_char); int main() { char board[BOARD_SIZE][BOARD_SIZE]; int row, col, win; char player_char = 'X'; init_board(board); print_board(board); while (1) { printf("\nPlayer %c's turn.\n", player_char); printf("Enter row number: "); scanf("%d", &row); printf("Enter column number: "); scanf("%d", &col); if (make_move(board, row, col, player_char)) { print_board(board); win = check_win(board, player_char); if (win) { printf("\nPlayer %c wins!\n", player_char); break; } player_char = (player_char == 'X') ? 'O' : 'X'; } else { printf("Invalid move. Try again.\n"); } } return 0; } void init_board(char board[][BOARD_SIZE]) { int i, j; for (i = 0; i < BOARD_SIZE; i++) { for (j = 0; j < BOARD_SIZE; j++) { board[i][j] = '-'; } } } void print_board(char board[][BOARD_SIZE]) { int i, j; printf("\n"); for (i = 0; i < BOARD_SIZE; i++) { for (j = 0; j < BOARD_SIZE; j++) { printf("%c ", board[i][j]); } printf("\n"); } } int make_move(char board[][BOARD_SIZE], int row, int col, char player_char) { if (row < 0 || row >= BOARD_SIZE || col < 0 || col >= BOARD_SIZE || board[row][col] != '-') { return 0; } board[row][col] = player_char; return 1; } int check_win(char board[][BOARD_SIZE], char player_char) { int i, j; int row_win, col_win, diag_win1, diag_win2; for (i = 0; i < BOARD_SIZE; i++) { row_win = 1; col_win = 1; for (j = 0; j < BOARD_SIZE; j++) { if (board[i][j] != player_char) { row_win = 0; } if (board[j][i] != player_char) { col_win = 0; } } if (row_win || col_win) { return 1; } } diag_win1 = 1; diag_win2 = 1; for (i = 0; i < BOARD_SIZE; i++) { if (board[i][i] != player_char) { diag_win1 = 0; } if (board[i][BOARD_SIZE-1-i] != player_char) { diag_win2 = 0; } } if (diag_win1 || diag_win2) { return 1; } return 0; } ``` 这个程序实现了基本的单人三子游戏,并且包括了判断胜负的函数。您可以根据需要修改和扩展此代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值