C语言五子棋(人人对战|可回放)

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
int main()
{

    int i, j;
    int k = 0;
    int m = 0;
    int n = 0;
    long t;
    time_t t1, t2;
    int qipan[16][16];
    char op;
    char ed;
    char de; 
begin:
    printf("n*五子棋游戏n");
    printf("n");
    printf("*规则:n");
    printf("n");
    printf("1.本游戏为双人对战,通过键盘下棋子n");
    printf("n");
    printf("2.棋盘大小为16*16,请以x,y的形式下棋子n");
    printf("n");
    printf("*按回车键开始游戏:");
    fflush(stdin);
    ed = getchar();
    if (('n' == ed))
    {
        system("cls");
        goto start;
    }
    else
    {
        system("cls");
        goto begin;
    }
start:
    FILE* fp = NULL;
    fp=fopen("c:\cfiles\main.txt", "wt + ");
    fclose(fp);
    fp = NULL;
    t1 = time(0);
    int color = 0;
    int iT = 0, jT = 0, cT = 0;
    int colorF = 0;
    for (i = 0; i < 16; i++)
        for (j = 0; j < 16; j++)
            qipan[i][j] = 2;
    for (i = 1; i <= 16; i++)
    {
        if (i == 1)
        {
            if (qipan[i - 1][0] == 2)
                printf("┌ ");

            for (j = 2; j <= 15; j++)
            {
                if (qipan[i - 1][j - 1] == 2)
                    printf("┬ ");
            }

            if (qipan[i - 1][j - 1] == 2)
                printf("┐ ");
                printf("n");
        }
        if (i <= 15 && i >= 2)
        {
            if (qipan[i - 1][0] == 2)
                printf("├ ");
            for (j = 2; j <= 15; j++)
            {
                if (qipan[i - 1][j - 1] == 2)
                    printf("┼ ");
            }
            if (qipan[i - 1][j - 1] == 2)
                printf("┤ ");

            printf("n");
        }
        if (i == 16)
        {
            if (qipan[i - 1][0] == 2)
                printf("└ ");

            for (j = 2; j <= 15; j++)
            {
                if (qipan[i - 1][j - 1] == 2)
                    printf("┴ ");
            }
            if (qipan[i - 1][j - 1] == 2)
                printf("┘ ");

            printf("n");
        }

    }
    printf("*黑棋得分:");
    printf("%dn", m);
    printf("*白棋得分:");
    printf("%dnn", n);
    while (1)
    {
        printf("*请输入棋子位置: ");
        scanf("%d,%d", &i, &j);
        FILE* fp = NULL;
        fp=fopen("c:\cfiles\main.txt", "at+");
        fprintf(fp, "%d %dn", i, j);
        fclose(fp);
        fp = NULL;
        k++;
        if (i < 1 || i >16 || j < 1 || j>16)
        {
            printf("n*超出棋盘范围,请重新输入!n");
            k--;
            continue;
        }

        if ((2 != qipan[i - 1][j - 1]))
        {
            printf("n*该位置已有棋子!n");
            k--;
            fflush(stdin);
            continue;
        }

        color = (color + 1) % 2;
        qipan[i - 1][j - 1] = color;

        system("cls");
        for (i = 1; i <= 16; i++)
        {
            if (i == 1)
            {
                if (qipan[i - 1][0] == 1)
                    printf("○");
                if (qipan[i - 1][0] == 0)
                    printf("●");
                if (qipan[i - 1][0] == 2)
                    printf("┌ ");
                for (j = 2; j <= 15; j++)
                {
                    if (qipan[i - 1][j - 1] == 1)
                        printf("○");
                    if (qipan[i - 1][j - 1] == 0)
                        printf("●");
                    if (qipan[i - 1][j - 1] == 2)
                        printf("┬ ");
                }
                if (qipan[i - 1][j - 1] == 1)
                    printf("○");
                if (qipan[i - 1][j - 1] == 0)
                    printf("●");
                if (qipan[i - 1][j - 1] == 2)
                    printf("┐ ");
                printf("n");
            }
            if (i <= 15 && i >= 2)
            {
                if (qipan[i - 1][0] == 1)
                    printf("○");
                if (qipan[i - 1][0] == 0)
                    printf("●");
                if (qipan[i - 1][0] == 2)
                    printf("├ ");
                for (j = 2; j <= 15; j++)
                {
                    if (qipan[i - 1][j - 1] == 1)
                        printf("○");
                    if (qipan[i - 1][j - 1] == 0)
                        printf("●");
                    if (qipan[i - 1][j - 1] == 2)
                        printf("┼ ");
                }
                if (qipan[i - 1][j - 1] == 1)
                    printf("○");
                if (qipan[i - 1][j - 1] == 0)
                    printf("●");
                if (qipan[i - 1][j - 1] == 2)
                    printf("┤ ");
                printf("n");
            }
            if (i == 16)
            {
                if (qipan[i - 1][0] == 1)
                    printf("○");
                if (qipan[i - 1][0] == 0)
                    printf("●");
                if (qipan[i - 1][0] == 2)
                    printf("└ ");
                for (j = 2; j <= 15; j++)
                {
                    if (qipan[i - 1][j - 1] == 1)
                        printf("○");
                    if (qipan[i - 1][j - 1] == 0)
                        printf("●");
                    if (qipan[i - 1][j - 1] == 2)
                        printf("┴ ");
                }
                if (qipan[i - 1][j - 1] == 1)
                    printf("○");
                if (qipan[i - 1][j - 1] == 0)
                    printf("●");
                if (qipan[i - 1][j - 1] == 2)
                    printf("┘ ");
                printf("n");
            }
        }
        for (i = 0; i < 16; i++)
        {
            for (j = 0; j < 16; j++)
            {
                if (2 != qipan[i][j])
                {
                    colorF = qipan[i][j];
                    cT = 1;
                    iT = i;
                    jT = j;
                    while ((++jT < 16) && (5 != cT))
                    {
                        if (colorF == qipan[i][jT])
                        {
                            cT++;
                            if (5 == cT)
                            {
                                if (0 == colorF)
                                {
                                    time(&t2);
                                    t = t2 - t1;
                                    n++;
                                    printf("*白棋赢了!n");
                                    printf("*游戏总步数为:%d步n", k);
                                    printf("*游戏总时间为:%ld秒nn", t);
                                }
                                else if (1 == colorF)
                                {
                                    time(&t2);
                                    t = t2 - t1;
                                    m++;
                                    printf("*黑棋赢了!n");
                                    printf("*游戏总步数为:%d步n", k);
                                    printf("*游戏总时间为:%ld秒nn", t);
                                }
                                goto End;
                            }
                        }
                        else
                        {
                            cT = 0;
                            break;
                        }
                    }
                    iT = i;
                    jT = j;
                    cT = 1;
                    while ((++iT < 16) && (5 != cT))
                    {
                        if (colorF == qipan[iT][j])
                        {
                            cT++;
                            if (5 == cT)
                            {
                                if (0 == colorF)
                                {
                                    time(&t2);
                                    t = t2 - t1;
                                    n++;
                                    printf("*白棋赢了!n");
                                    printf("*游戏总步数为:%d步n", k);
                                    printf("*游戏总时间为:%ld秒nn", t);
                                }
                                else if (1 == colorF)
                                {
                                    time(&t2);
                                    t = t2 - t1;
                                    m++;
                                    printf("*黑棋赢了!n");
                                    printf("*游戏总步数为:%d步n", k);
                                    printf("*游戏总时间为:%ld秒nn", t);
                                }
                                goto End;
                            }
                        }
                        else
                        {
                            cT = 0;
                            break;
                        }
                    }
                    iT = i;
                    jT = j;
                    cT = 1;
                    while ((++iT < 16) && (++jT < 16) && (5 != cT))
                    {
                        if (colorF == qipan[iT][jT])
                        {
                            cT++;
                            if (5 == cT)
                            {
                                if (0 == colorF)
                                {
                                    time(&t2);
                                    t = t2 - t1;
                                    n++;
                                    printf("*白棋赢了!n");
                                    printf("*游戏总步数为:%d步n", k);
                                    printf("*游戏总时间为:%ld秒nn", t);
                                }
                                else if (1 == colorF)
                                {
                                    time(&t2);
                                    t = t2 - t1;
                                    m++;
                                    printf("*黑棋赢了!n");
                                    printf("*游戏总步数为:%d步n", k);
                                    printf("*游戏总时间为:%ld秒nn", t);
                                }
                                goto End;
                            }
                        }
                        else
                        {
                            cT = 0;
                            break;
                        }
                    }
                    iT = i;
                    jT = j;
                    cT = 1;
                    while ((++iT >= 0) && (--jT >= 0) && (5 != cT))
                    {
                        if (colorF == qipan[iT][jT])
                        {
                            cT++;
                            if (5 == cT)
                            {
                                if (0 == colorF)
                                {
                                    time(&t2);
                                    t = t2 - t1;
                                    n++;
                                    printf("*白棋赢了!n");
                                    printf("*游戏总步数为:%d步n", k);
                                    printf("*游戏总时间为:%ld秒nn", t);
                                }
                                else if (1 == colorF)
                                {
                                    time(&t2);
                                    t = t2 - t1;
                                    m++;
                                    printf("*黑棋赢了!n");
                                    printf("*游戏总步数为:%d步n", k);
                                    printf("*游戏总时间为:%ld秒nn", t);
                                }
                                goto End;
                            }
                        }
                        else
                        {
                            cT = 0;
                            break;
                        }
                    }

                }

            }

        }
        printf("*黑棋得分:");
        printf("%dn", m);
        printf("*白棋得分:");
        printf("%dnn", n);
    }
End:
    printf("*黑棋得分:");
    printf("%dn", m);
    printf("*白棋得分:");
    printf("%dnn", n);
    printf("*按回车键重新开始n");
    printf("*按空格键观看对局回放n");
    printf("*按任意键退出");
    fflush(stdin);
    op = getchar();
    if ('n' == op)
    {
        system("cls");
        k = 0;
        printf("*已经重新开始了n");
        goto start;
    }
    else if (' ' == op)
    {
        system("cls");
        FILE* fp = NULL;
        fp=fopen("c:\cfiles\main.txt", "at + ");
        rewind(fp);
        fclose(fp);
        fp = NULL;
        goto review;
    }
review:
    fp=fopen("c:\cfiles\main.txt", "rt");
    for (i = 0; i < 16; i++)
        for (j = 0; j < 16; j++)
            qipan[i][j] = 2;       
    for (i = 1; i <= 16; i++)
    {
        if (i == 1)
        {
            if (qipan[i - 1][0] == 2)
                printf("┌ ");

            for (j = 2; j <= 15; j++)
            {
                if (qipan[i - 1][j - 1] == 2)
                    printf("┬ ");
            }

            if (qipan[i - 1][j - 1] == 2)
                printf("┐ ");
                printf("n");
        }

        if (i <= 15 && i >= 2)
        {
            if (qipan[i - 1][0] == 2)
                printf("├ ");
            for (j = 2; j <= 15; j++)
            {
                if (qipan[i - 1][j - 1] == 2)
                    printf("┼ ");
            }
            if (qipan[i - 1][j - 1] == 2)
                printf("┤ ");

            printf("n");
        }
        if (i == 16)
        {
            if (qipan[i - 1][0] == 2)
                printf("└ ");

            for (j = 2; j <= 15; j++)
            {
                if (qipan[i - 1][j - 1] == 2)
                    printf("┴ ");
            }
            if (qipan[i - 1][j - 1] == 2)
                printf("┘ ");

            printf("n");
        }
    }
    while (k > 0)
    {
        printf("*回放开始n");
        printf("*按回车回放下一步n");
        de=getchar(); 
        if(op='n')
        {
            system("cls");
            fscanf(fp, "%d %dn", &i, &j);
            qipan[i - 1][j - 1] = color;
            for (i = 1; i <= 16; i++)
            {
                if (i == 1)
                {
                    if (qipan[i - 1][0] == 1)
                        printf("○");
                    if (qipan[i - 1][0] == 0)
                        printf("●");
                    if (qipan[i - 1][0] == 2)
                        printf("┌ ");
                    for (j = 2; j <= 15; j++)
                    {
                    if (qipan[i - 1][j - 1] == 1)
                        printf("○");
                    if (qipan[i - 1][j - 1] == 0)
                        printf("●");
                    if (qipan[i - 1][j - 1] == 2)
                        printf("┬ ");
                    }
                    if (qipan[i - 1][j - 1] == 1)
                        printf("○");
                    if (qipan[i - 1][j - 1] == 0)
                        printf("●");
                    if (qipan[i - 1][j - 1] == 2)
                        printf("┐ ");
                        printf("n");
                }
                if (i <= 15 && i >= 2)
                {
                    if (qipan[i - 1][0] == 1)
                        printf("○");
                    if (qipan[i - 1][0] == 0)
                        printf("●");
                    if (qipan[i - 1][0] == 2)
                        printf("├ ");
                    for (j = 2; j <= 15; j++)
                    {
                    if (qipan[i - 1][j - 1] == 1)
                        printf("○");
                    if (qipan[i - 1][j - 1] == 0)
                        printf("●");
                    if (qipan[i - 1][j - 1] == 2)
                        printf("┼ ");
                    }
                    if (qipan[i - 1][j - 1] == 1)
                        printf("○");
                    if (qipan[i - 1][j - 1] == 0)
                        printf("●");
                    if (qipan[i - 1][j - 1] == 2)
                        printf("┤ ");
                        printf("n");
                }
                if (i == 16)
                {
                    if (qipan[i - 1][0] == 1)
                        printf("○");
                    if (qipan[i - 1][0] == 0)
                        printf("●");
                    if (qipan[i - 1][0] == 2)
                        printf("└ ");
                    for (j = 2; j <= 15; j++)
                    {
                    if (qipan[i - 1][j - 1] == 1)
                        printf("○");
                    if (qipan[i - 1][j - 1] == 0)
                        printf("●");
                    if (qipan[i - 1][j - 1] == 2)
                        printf("┴ ");
                    }
                    if (qipan[i - 1][j - 1] == 1)
                        printf("○");
                    if (qipan[i - 1][j - 1] == 0)
                        printf("●");
                    if (qipan[i - 1][j - 1] == 2)
                        printf("┘ ");
                        printf("n");
                }
            } 
        }
        color = (color + 1) % 2;
        k--;
    }
    fclose(fp);
    fp = NULL;
    goto end;
end:
    printf("*按回车键重新开始游戏n");
    printf("*按任意键退出n");
    fflush(stdin);
    op = getchar();
    if ('n' == op)
    {
        system("cls");
        k = 0;
        printf("*已经重新开始了n");
        goto start;
    }
    return 0;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>