C语言之三子琪

1、首先写一个头文件 sanziqi.h

#ifndef _SANZIQI_H__
#define _SANZIQI_H__
#define ROW 3
#define COL 3
// 初始化棋盘;
void InitBoard(char arr[ROW][COL], int row, int col);

//显示棋盘
void DisplayBoard(char arr[ROW][COL], int row, int col);
//电脑走
void ComputerMove(char arr[ROW][COL], int row, int col);
//人走
void PlayerMove(char arr[ROW][COL], int row, int col);
//判断输赢
char IsWin(char arr[ROW][COL], int row, int col);
#endif

2、接着写一个主函数 main.c

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"三子琪.h"
int menu(void)    //设置开始菜单
{
    printf("---****************---\n");
    printf("---****1、Play*****---\n");
    printf("---****0、Exit*****---\n");
    printf("---****************---\n"); 
    printf("choose>");
    int choose;
    scanf("%d", &choose);   //选择1:开始游戏;0::退出游戏
    return choose;
}
void game(void)   //设置游戏页面以及内容
{
    char board[ROW][COL];
    char ret;
    InitBoard(board, ROW, COL);    //初始化棋盘
    printf("开始游戏咯!\n");
    //用do....while语句循环执行游戏
    do
    {
        ComputerMove(board, ROW, COL);   //电脑移动
        DisplayBoard(board, ROW, COL);    //显示
        ret = IsWin(board, ROW, COL);    //判断输赢
        if (ret != ' ')            //判断棋盘是否下满
        {
            break;
        }
        PlayerMove(board, ROW, COL);    //人走
        DisplayBoard(board, ROW, COL);  //显示
        ret = IsWin(board, ROW, COL);   //判断输赢
        if (ret != ' ')                 //判断棋盘是否下满
        {
            break;
        }
    } while (1);
    //判断谁赢
    if (ret == 'X')
    {
        printf("啧啧,你输啦\n");
    }
    else if (ret == 'O')
    {
        printf("你居然可以赢?还不错撒!\n");
    }
    else if (ret == 'P')
    {
        printf("侥幸平局!\n");
    }
}
//主函数
int main()
{
    int choose = 0;
    do
    {
        choose = menu();
        switch(choose)
        {
        case 1:
            printf("玩一玩吧!\n");
            game();
            break;
        case 0:
            printf("不赏脸啊!你会后悔的!\n");
            break;
        default:
            printf("你的手指不小心点错了地方!请重新选择\n");
            break;
        }
    } while (choose);
    system("pause");
    return 0;
}

3、最后创建一个文件编写所需函数sanziqi.c

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"三子琪.h"
// 初始化棋盘;
void InitBoard(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 DisplayBoard(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 ComputerMove(char arr[ROW][COL], int row, int col)
{
    printf("电脑下棋:\n");
    do{
        int y = rand() % 3;
        int x = rand() % 3;
        srand((unsigned int)time(NULL));     //设置电脑下棋的位置为随机值
        if (arr[y][x] == ' ')
        {
            arr[y][x] = 'X';
            break;
        }
    } while (1);
}
//人走
void PlayerMove(char arr[ROW][COL], int row, int col)
{
    printf("轮到你啦:\n");
    int y;
    int x;
    do
    {
        scanf("%d%d", &y, &x);
        x -= 1;
        y -= 1;
        if ((0 <= x&&x < 3) && (0 <= y&&y < 3)){
            if (arr[y][x] == ' '){
                arr[y][x] = 'O';
                break;
            }
            else if (arr[y][x] == 'X')
            {
                printf("别人已经下过了\n");
            }
        }
        else
        {
            printf("亲,你下到外面去了!\n");
        }
    } while (1);
}
//判断棋盘是否下满
static int IsFull(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 IsWin(char arr[ROW][COL], int row, int col)
{
    int i;
    for (i = 0; i < row; i++)
    {
        if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])
            return arr[i][1];
    }
    for (i = 0; i < col; i++)
    {
        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])
        return arr[1][1];
    if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])
        return arr[1][1];
    if (IsFull(arr, row, col))
    {
        return 'P';
    }
    return ' ';
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章