MIHH-C语言简单三子棋

来源:互联网 发布:王欣网络直播 编辑:程序博客网 时间:2024/05/18 12:01

一个用C语言写的很简单的三子棋小程序

头文件  game.h
#ifndef GAME_H#define GAME_H/*定义行列数*/#define ROW 3#define COL 3#include <stdio.h>#include <stdlib.h>#include <time.h>/*函数声明*/void InitBoard(char board[ROW][COL], int row, int col); //初始化棋盘void PrintBoard(char board[ROW][COL], int row, int col); //打印棋盘void PlayerMove(char board[ROW][COL], int row, int col); //玩家移动void ComputerMove(char board[ROW][COL], int row, int col); //电脑移动char CheckWin(char board[ROW][COL], int row, int col); //判断输赢#endif 
主函数所在的源文件 game.c ,内部还包括一个简单的菜单界面和输赢或平局的结果显示
#include "game.h"void menu(){    printf("\n\n");    printf("┌─────┐\n");    printf("丨          丨\n");    printf("丨  1.Play  丨\n");    printf("丨          丨\n");    printf("丨  0.Exit  丨\n");    printf("丨          丨\n");    printf("└─────┘\n");}void Win(char ret){    if (ret == 'X')    {        printf("\n\n");        printf("*************\n");        printf("**玩家胜利!**\n");        printf("*************\n");    }    else if (ret == '0')    {        printf("\n\n");        printf("*************\n");        printf("**电脑胜利!**\n");        printf("*************\n");    }    else    {        printf("\n\n");        printf("*************\n");        printf("**  平局! **\n");        printf("*************\n");    }}void game(){    char ret = 0;    char board[ROW][COL] = { 0 };    InitBoard(board, ROW, COL);    PrintBoard(board, ROW, COL);    while (1)    {        PlayerMove(board, ROW, COL);        PrintBoard(board, ROW, COL);        ret = CheckWin(board, ROW, COL); //每次走完判断是否结束游戏        if (ret != ' ')        {            break;        }        ComputerMove(board, ROW, COL);        PrintBoard(board, ROW, COL);        ret = CheckWin(board, ROW, COL);        if (ret != ' ')        {            break;        }    }    Win(ret);    getchar();    getchar();    system("cls"); //游戏结束后清理屏幕}int main(){    int choice = 0;    srand((unsigned int)  time(NULL)); //电脑随机下棋    do    {        menu();        printf("\n请输入选择:>  ");        scanf("%d", &choice);        switch (choice)        {        case 1:            game();            break;        case 0:            break;        default:            printf("\n输入错误!\n");            break;        }    } while (choice);    return 0;}
test.c 函数定义的源文件
#include"game.h"int IsFull(char board[ROW][COL], int row, int col) //平局{    for (int i = 0; i < row; i++)    {        for (int j = 0; j < col; j++)        {            if (board[i][j] == ' ')            {                return 0;            }        }    }    return 1;}void InitBoard(char board[ROW][COL], int row, int col){    memset(board, ' ', row * col * sizeof(board[0][0]));}void PrintBoard(char board[ROW][COL], int row, int col){    printf("\n\n┌─┬─┬─┐\n");    for (int i = 0; i < row; i++)    {        printf("丨%c 丨%c 丨%c 丨 \n", board[i][0], board[i][1], board[i][2]);        if (i < row - 1)        {            printf("├─┼─┼─┤\n");         }    }    printf("└─┴─┴─┘\n");}void PlayerMove(char board[ROW][COL], int row, int col){    while (1)    {        int x = 0;        int y = 0;        printf("\n玩家选择位置:>  ");        scanf("%d%d", &x, &y);        if (x >= 1 && x <= row && y >= 1 && y <= col)        {            if (board[x - 1][y - 1] == ' ')            {                printf("\nPlayer Move:>\n");                board[x - 1][y - 1] = 'X';                break;            }            else            {                printf("坐标被占用!\n");            }        }        else        {            printf("坐标不合法!\n");        }    }}void ComputerMove(char board[ROW][COL], int row, int col){    printf("\nComputer Move:>\n");    while (1)    {        int x = rand() % row;        int y = rand() % col;        if (board[x][y] == ' ')        {            board[x][y] = '0';            break;        }    }}char CheckWin(char board[ROW][COL], int row, int col){    if (IsFull(board, row ,col) == 1)    {        return 'Q';    }    for (int i = 0; i < row; i++)    {        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] == 'X')        {            return 'X';        }        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] == '0')        {            return '0';        }    }    for (int i = 0; i < col; i++)    {        if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] == 'X')        {            return 'X';        }        if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] == '0')        {            return '0';        }    }    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] == 'X')    {        return 'X';    }    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] == '0')    {        return '0';    }    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] == 'X')    {        return 'X';    }    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] == '0')    {        return '0';    }    return ' ';}

总结一下,说是一个简单的三子棋程序真的是一个非常简单的。电脑毫无智商(其实用穷举写了一个聪明点的电脑但是想找一个更聪明的办法就没加进来),平局判断必须下完才能判断,其实有时候可以很早结束了。。。
接下来有时间会八这些 问题一一解决了,再扩展成五子棋吧,OVER。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 九曲连环 九曲读音 重庆九曲河 九曲黄河第一湾 黄河九曲第一湾 九曲黄河万粒沙下一句 武昌九曲亭记 九曲溪竹筏漂流 九曲湾温泉度假村 巴音布鲁克九曲十八弯 黄河九曲第一湾旅游 九曲黄河读音 九曲河湿地公园 资阳九曲河论坛 武夷山九曲溪竹筏漂流 南宁九曲湾温泉 九曲栈道旅游 九曲十八弯旅游 锡林九曲旅游 九曲红梅多少钱一斤 九曲溪漂流时间 九曳鲜配 红楼吧在线曳影 曳怎么读 曳舞 曳光弹 曳步舞曲 曳撒 曳兵弃甲 曳拼音 曳读音 曳组词 熊经鸟曳 纡朱曳紫 曳舞天下 弃甲曳兵 8050网曳影app 曳的拼音 曳引机 飘曳的长裙