鱼C论坛

 找回密码
 立即注册
查看: 1326|回复: 0

[分享] C语言完成三子棋

[复制链接]
发表于 2022-3-10 16:16:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#define ROW 3
#define COL 3

#include<stdlib.h>
#include<time.h>
#include<stdio.h>

void filtey(char srred[ROW][COL], int row, int col);

void usvtfy(char srred[ROW][COL], int row, int col);

void playermove(char srred[ROW][COL], int row, int col);

void computermove(char srred[ROW][COL], int row, int col);

int inwin(char srred[ROW][COL], int row, int col);





#include "三子棋.h"

void visr()
{
        printf("****************\n");
        printf("*****1.play*****\n");
        printf("*****0.end *****\n");
        printf("****************\n");
}

void game_play()
{
        char ret=0;
        char C=67;
        char srred[ROW][COL];
        filtey(srred,ROW,COL);                                                //将字符串数组srred初始化为‘ ’;
        usvtfy(srred,ROW,COL);                                                //打印下棋表格;
        while (1)
        {
                playermove(srred, ROW, COL);                        //玩家下棋;
                usvtfy(srred, ROW, COL);                                       
                ret = inwin(srred, ROW, COL);
                if (ret!=C)
                {
                        break;
                }
                computermove(srred, ROW, COL);                        //电脑下棋;
                usvtfy(srred, ROW, COL);
                ret = inwin(srred, ROW, COL);
                if (ret!=C)
                {
                        break;
                }
        }
        if (ret == '*')
        {
                printf("玩家赢\n");
        }
        else if (ret == '#')
        {
                printf("电脑赢\n");
        }
        else
        {
                printf("平局\n");
        }
}

void stdio()
{
        int inpot = 0;
        srand((unsigned int)time(NULL));
        do
        {
                printf("请选择\n");
                scanf_s("%d", &inpot);
                switch (inpot)
                {
                case(1):
                        printf("三子棋开始\n");
                        game_play();
                        break;
                case(0):
                        printf("game end\n");
                        break;
                default:
                        printf("请重新输入");
                        break;
                }
        }
                        while (inpot);
}

int main()
{
        visr();
        stdio();
}




#include "三子棋.h"

void filtey(char srred[ROW][COL],int row,int col)                                        //初始化为‘ ’;
{
        int i, j;
        for (i = 0; i < row; i++)
        {
                for (j = 0; j < col; j++)
                {
                        srred[i][j] = ' ';
                }
        }
}

void usvtfy(char srred[ROW][COL], int row, int col)                                        //打印表格;
{
        int i,j,y;
        for (i = 0; i < row; i++)
        {
                for (j = 0; j < col; j++)
                {
                        printf(" %c ", srred[i][j]);
                        if (j < col - 1)
                                printf("|");
                }
                printf("\n");
                if (i < row - 1)
                {
                        for (y = 0; y < row; y++)
                        {
                                printf("___");
                                if (y < col - 1)
                                        printf("|");
                        }
                        printf("\n");
                }
                if (i == row - 1)
                {
                        for (y = 0; y < row; y++)
                        {
                                printf("   ");
                                if (y < col - 1)
                                        printf("|");
                        }
                        printf("\n");
                }
        }
}

void playermove(char srred[ROW][COL], int row, int col)                                        //玩家下棋;
{
        int x, y;
        printf("玩家走\n");
        while (1)
        {
                printf("请输入坐标>");
                scanf_s("%d,%d",&x,&y);
                if (x >= 1 && x <= row && y >= 1 && y <= col)
                {
                        if (srred[x - 1][y - 1] == ' ')
                        {
                                srred[x - 1][y - 1] = '*'; break;
                        }
                        else
                        {
                                printf("这个坐标已被占用\n");
                        }
                }
                else
                {
                        printf("你输入的坐标不合法\n");
                }
        }
}

void computermove(char srred[ROW][COL], int row, int col)                                        //电脑下棋;
{
        int x, y;
        printf("电脑走>\n");
        while (1)
        {
                x = rand() % row;
                y = rand() % col;
                if (srred[x][y] == ' ')
                {
                        srred[x][y] = '#';
                        break;
                }
        }
}

int max(char srred[ROW][COL], int row, int col)                                        //检查是否继续下棋;
{
        int x, y;
        for (x = 0; x < row; x++)
        {
                for (y = 0; y < col; y++)
                {
                        if (srred[x][y] == ' ')
                        {
                                return 0;
                        }
                }
        }
        return 1;
}

int inwin(char srred[ROW][COL], int row, int col)                                        //检查输赢;
{
        int i;
        for (i = 0; i < row; i++)
        {
                if (srred[i][0] == srred[i][1] && srred[i][1] == srred[i][2] && srred[i][1] != ' ')
                {
                        return(srred[i][1]);
                }
        }
        for (i = 0; i < col; i++)
        {
                if (srred[0][i] == srred[1][i] && srred[1][i] == srred[2][i] && srred[1][i] != ' ')
                        return(srred[1][i]);
        }
        if (srred[0][0] == srred[1][1] && srred[1][1] == srred[2][2] && srred[1][1] != ' ')
        {
                return(srred[1][1]);
        }
        if (srred[2][0] == srred[1][1] && srred[1][1] == srred[0][2] && srred[1][1] != ' ')
        {
                return(srred[1][1]);
        }
        if (1 == max(srred, ROW, COL))
        {
                return 'Q';
        }
        return 'C';
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表