回复 5楼 rjsp
文件删除了,会重新生成,下面是我的代码,我写了注释,我也不知道咋整,可以帮我看一下吗,谢谢您
我是想用循环逐个读入坐标,之后再用另外一个函数读出来
#include <stdlib.h>
#include <stdio.h>
//●○
int qipan[20][20] = {0};
void menu();
void InitQiPan(); //初始化棋盘
void XiaQi(int count); //获取坐标数据,并判断该坐标是否已经有子
//void BaoCun(int count); //将坐标数据保存到文件中
void PrintfQiPan(int count);
//打印游戏菜单
void menu()
{
int op;//此变量为菜单选项
//打印菜单
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("~ *简易五子棋游戏菜单* ~\n");
printf("~ * 0.进入游戏 * ~\n");
printf("~ * 1.退出游戏 * ~\n");
printf("~ * 2.帮助 * ~\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
scanf("%d", &op);//输入选项
switch(op)
{
case 1://输入1时结束
{
exit(0);
}
case 2://输入2时,系统给出“帮助”
{
printf("帮助:\n五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。\n"
"本游戏中,黑子先落,白子在其后,根据行、列坐标,下在棋盘交叉点处。\n先形成五子连线者获胜!\n");
break;
}
case 0:
{
return ;//输入0时,返回主函数,进行后续操作
}
default:
{
printf("选项错误!请重新作出你的选择。。。。\n"); //当输入的数字没有时,系统会发出提示,再选一次
getchar();//若玩家输入字符时,可用getchar()将其读走
menu();//重新返回菜单
}
}
}
struct zuobiao
{
int x[400];
int y[400];
} Zuobiao[400];
//初始化一个棋盘,让界面只打印出一个棋盘
void InitQiPan()
{
int i, j;//i,j均为坐标
for(i = 1; i <= 20; i++)
{
printf("%d ", i % 10); //打印列坐标
}
printf("\n");
for(i = 1; i <= 20; i++)
{
for(j = 1; j <= 20; j++)
{
printf("·"); //打印棋盘
}
printf(" %d", i);//打印棋盘行坐标
printf("\n");
}
}
void XiaQi(int count)
{
int i, j, k;
again:
;
printf("请输入棋子坐标,如2,3...:");
scanf("%d,%d", &i, &j); //输入坐标
while(i < 1 || i > 20 || j < 1|| j > 20)
{
printf("坐标格式错误!!!请重新输入棋子坐标,如2,3...:");
fflush(stdin); //清除缓冲区
scanf("%d,%d", &i, &j);//重新输入坐标
}
for(k = 1; k <= count; k++)
{
if(Zuobiao[k].x[k] == i && Zuobiao[k].y[k] == j)
{
printf("此坐标上已有棋子!!请重新输入:");
goto again;
}
}
/*
Zuobiao[count].x[count] = i;
Zuobiao[count].y[count] = j;
if(count % 2 == 1)
{
qipan[i][j] = 1;
}
if(count % 2 == 0)
{
qipan[i][j] = 2;
}
*/
}
void BaoCun(int count)//用循环保存坐标
{
FILE *fp;
fp = fopen("C:\\CB\\game1\\qizi", "wb");
fwrite(&Zuobiao[count - 1], sizeof(struct zuobiao), 1, fp);
//fclose(fp);
}
void PrintfQiPan(int count)
{
int i, j, k;
for(i = 1; i < 21; i++)
{
printf("%d ", i);
}
printf("\n");
for(i = 1; i <= 20; i++)
{
for(j = 1; j <= 20; j++)
{
for(k = 1; k <= count; k++)//这个循环是把count个棋子打印在棋盘上
{
if(Zuobiao[k].x[k] == i && Zuobiao[k].y[k] == j)
{
if( qipan[i][j] == 1)
{
printf("●");
break;
}
else if( qipan[i][j] == 2)
{
printf("○");
break;
}
}
}
if(k <= count)//中途找到棋子返回
{
continue;
}
else//没找到对应(i,j)上有棋子
{
printf("·");//在该位置上打印一个焦点
}
}
printf(" %d\n", i);//打印行坐标
}
}
int main()
{
int m;
menu();
InitQiPan();
for(m = 1; m < 400; m++)
{
XiaQi(m);
BaoCun(m);
PrintfQiPan(m);
}
return 0;
}