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;
}