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 ' ';
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章