学长们厉害啊,以后也弄一个玩玩
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
int co=1,col,lin,turn,r,flag[20][20],T;
char map[20][20][5],FIRST_MAP[20][20][5];
void menu();
void HELP()
{
system("cls");
system("title 游戏说明");
puts("**********************************五子棋**********************************");
puts("游戏规则:黑白双方轮落子,先出五子同线相连方胜出");
puts("黑子:●与■\n白子:○与□\n光标位置:■、□或★");
puts("\n黑方功能键如下");
puts("按a键时,光标左移");
puts("按d键时,光标右移");
puts("按s键时,光标上移");
puts("按w键时,光标下移");
puts("按x键时落子");
puts("\n白方功能键如下");
puts("按4键时,光标左移");
puts("按6键时,光标右移");
puts("按8键时,光标上移");
puts("按2键时,光标下移");
puts("按5键时落子");
puts("\n游戏中按h键进入游戏说明界面,按0键返回主菜单");
puts("\n制作者:娄朝阳");
puts("制作时间:2011年1月18日");
puts("版权所有,盗版必究");
puts("如有问题,请联系制作者,联系方式如下:");
puts("手机 13569569153");
puts("QQ号 282290316");
puts("博客 http://blog.sina.com.cn/lcystar");
puts("**********************************五子棋**********************************");
system("pause");
}
void output()
{
for(int i=0;i<20;i++)
{
if(i!=10||turn!=1)printf(" ");
else printf("●");
for(int j=0;j<19;j++)
printf("%s═",map[i][j]);
puts(map[i][19]);
if(i<19){
printf(" ");
for(j=0;j<19;j++)
printf("║ ");
if(i!=10||turn)puts("║");
else puts("║○");
}
}
}
void judge(int i,int j,int p,int q,int x)
{
int k=0;
for(;k<5;k++,i+=p,j+=q)
if(flag[i][j]!=x)
break;
if(k>4)
r=x;
}
void search()
{
for(int
i=0;i<20&&!r;i++)
for(int
j=0;j<20&&!r;j++)
{
if(i<16)
{
judge(i,j,1,0,1);
judge(i,j,1,0,2);
}
if(j<16)
{
judge(i,j,0,1,1);
judge(i,j,0,1,2);
}
if(i<16&&j<16)
{
judge(i,j,1,1,1);
judge(i,j,1,1,2);
}
if(i<16&&j>3)
{
judge(i,j,1,-1,1);
judge(i,j,1,-1,2);
}
}
}
void END_GAME()
{
system("cls");
system("title 本局结束");
if(r==1)
puts("黑方胜出");
else if(r==2)
puts("白方胜出");
turn=2;
output();
system("pause");
menu();
}
void START_GAME()
{
system("cls");
char s[5];
strcpy(s,map[lin][col]);
if(!strcmp(map[lin][col],"●"))
strcpy(map[lin][col],"■");
else if(!strcmp(map[lin][col],"○"))
strcpy(map[lin][col],"□");
else
strcpy(map[lin][col],"★");
output();
strcpy(map[lin][col],s);
char act=getch();
if(turn)
{
if(act=='a')
col--;
else if(act=='d')
col++;
else if(act=='w')
lin--;
else if(act=='s')
lin++;
else if(act=='h')
{
HELP();
system("title 五子棋");
}
else if(act=='0')
{
co=0;
menu();
co=1;
if(T)
return;
}
if(col<0)
col+=20;
else if(col>19)
col-=20;
if(lin<0)
lin+=20;
else if(lin>19)
lin-=20;
if(act=='x')
{
if(strcmp(map[lin][col],"●")&&strcmp(map[lin][col],"○"))
{
turn=1-turn;
strcpy(map[lin][col],"●");
flag[lin][col]=1;
search();
}
}
}
else
{
if(act=='4')
col--;
else if(act=='6')
col++;
else if(act=='8')
lin--;
else if(act=='2')
lin++;
else if(act=='h')
{
HELP();
system("title 五子棋");
}
else if(act=='0')
{
co=0;
menu();
co=1;
if(T)
return;
}
if(col<0)
col+=20;
else if(col>19)
col-=20;
if(lin<0)
lin+=20;
else if(lin>19)
lin-=20;
if(act=='5')
{
if(strcmp(map[lin][col],"●")&&strcmp(map[lin][col],"○"))
{
turn=1-turn;
strcpy(map[lin][col],"○");
flag[lin][col]=2;
search();
}
}
}
if(r)
END_GAME();
else
START_GAME();
}
void NEW_GAME()
{
system("title 五子棋");
r=0;
col=10;
lin=10;
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
{
flag[i][j]=0;
strcpy(map[i][j],FIRST_MAP[i][j]);
}
START_GAME();
}
void OUTPUT()
{
for(int i=0;i<20;i++)
{
printf(" ");
for(int j=0;j<19;j++)
printf("%s═",FIRST_MAP[i][j]);
puts(FIRST_MAP[i][19]);
if(i<19){
printf(" ");
for(j=0;j<19;j++)
printf("║ ");
puts("║");
}
}
}
void menu()
{
system("cls");
system("title 五字棋 游戏菜单");
puts("请按数字键选择指令:");
puts("1.新游戏(黑子先下)");
puts("2.新游戏(白子先下)");
puts("3.游戏说明");
puts("4.输出方格");
if(!co)
puts("5.返回游戏");
puts("0.退出游戏");
char act=getch();
if(act=='1')
{
turn=1;
NEW_GAME();
}
else if(act=='2')
{
turn=0;
NEW_GAME();
}
else if(act=='3'||act=='h')
{
HELP();
menu();
}
else if(act=='4')
{
system("cls");
OUTPUT();
system("pause");
}
else if(act=='5')
T=0;
else if(act=='0')
T=1;
else
menu();
}
void initial()
{
strcpy(FIRST_MAP[0][0],"╔");
strcpy(FIRST_MAP[0][19],"╗");
strcpy(FIRST_MAP[19][0],"╚");
strcpy(FIRST_MAP[19][19],"╝");
for(int i=1;i<19;i++)
{
strcpy(FIRST_MAP[i][0],"╠");
strcpy(FIRST_MAP[0][i],"╦");
strcpy(FIRST_MAP[i][19],"╣");
strcpy(FIRST_MAP[19][i],"╩");
for(int j=1;j<19;j++)
strcpy(FIRST_MAP[i][j],"╬");
}
}
void main()
{
system("title 五子棋");
system("mode con cols=83 lines=41");
system("color a");
initial();
menu();
}