娄学长的五子棋—牛!

学长们厉害啊,以后也弄一个玩玩
#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();

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值