您好,欢迎来到小侦探旅游网。
搜索
您的当前位置:首页C语言五子棋

C语言五子棋

来源:小侦探旅游网


#include

#include

#include

#include

#define N 19

int i,j,k,size=N;

int isBlack=1;//当前是黑方下子 isBlack=1 char state[N][N];

char x,y,temp[10];

char c; //用来存放显示黑白子的变量

void printState();

void startGame()

{

若为白方下子 isBlack=0

//printf(\"\\n潇洒菠菜提示:此功能待开发...\\n\");

//当前初始化面板。

for(i=0;i{

for(j=0;j{

state[i][j]='*';

}

}

printState();

while(1)

{

printf(\"\\n\请%s方下子:\黑\":\"白\");

fflush(stdin);

scanf(\"%s\

if(!strcmp(strupr(temp),\"OUT\")) //如果在下的过程中输入OUT的话就返回主菜单

{

system(\"cls\");

return;

}

if(!strcmp(temp,\"BACK\")) //悔棋... BACK

{

i=x-'A'; //这里i和j承担过循环控制变量!需要重新初始化

j=y-'A';

state[i][j]='*';

printState();

printf(\"\ 观棋不语真君子,落子不悔大丈夫!\\n\");

isBlack=!isBlack;

continue;

}

if(!strcmp(temp,\"LOSE\")) //认输... LOSE

{

printf(\"\\n\潇洒菠菜提示:%s方认输,%s方胜!\\n\\n\黑\":\"白\白\":\"黑\");

return;

}

x=temp[0]; //取前两个字符做处理。

y=temp[1];

if(x<'A'||x>'S'||y<'A'||y>'S') //避免下面相减的数组越界。

{

printf(\"\输入有误,请输入属于或正确的口令。\\n\");

continue;

}

i=x-'A'; //相减得到的差量正好是数组对应的元素

j=y-'A';

if(state[i][j]!='*'){ //该位置已经有子

printf(\"\提示:该位置已经有子,请重新指定坐标!\");

continue;

}

c=isBlack?'1':'2';

state[i][j]=c; //设置坐标子为当前下定子

printState(); //显示当前棋盘

//检查是否获胜。 待续... 第二阶段完毕!

isBlack=!isBlack;

}

}

void help()

{

system(\"cls\");

printf(\"\\n潇洒菠菜关于本程序说明:\\n\\n\");

printf(\"\考虑到C语言图形用户界面的难度。\\n\\n\");

printf(\"\本程序采用19*19的游戏格式\\n\\n\");

printf(\"\输入格子的坐标下子: 先横坐标后纵坐标。比如输入:GG\\n\\n\");

printf(\"\在游戏中有外挂:out(退回主菜单)、back(悔棋)、lose(认输)\\n\\n\");

printf(\"\\n程序棋盘(网上信息) :\\n\");

printf(\"\\n 与围棋的棋盘一样。\\n\\n\");

printf(\"基本规则 : \\n\\n 1) 黑先、白后,从天元开始相互顺序落子。\\n\\n \");

printf(\"2) 白棋第一手应在天元为界自己一侧布子,之后双方可任意行子。\\n\\n \");

printf(\"3) 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。\\n\\n \");

printf(\"4) 黑棋禁手判负、白棋无禁手。\");

printf(\"黑棋禁手包括“三、三” “四、四” “长连”。黑方只能“四、三”胜。\\n\\n \");

printf(\"5) 如分不出胜负,则定为平局。\\n\\n \");

printf(\"6) 对局中中途退场均判为负。\\n\\n \");

printf(\"7) 五连与禁手同时形成,先五为胜。\\n\\n\");

printf(\"棋型说明 : \\n\\n \");

printf(\"1) 长连:在一条直线或斜线上,连续下成五个以上的棋型\\n\\n \");

printf(\"2) 活三:在一条直线或斜线上,由三个子构成的,必须防守否则将成为“活四”\");

printf(\"导致速胜的棋型。三只有下面两种棋型结构:\\n\\n \");

printf(\"3) 活四:指在一条直线或斜线上,由连续的四个字所构成的,\");

printf(\"无论对方怎样防守,只要再走一手棋将必定成为五连的棋型:\\n\\n \");

printf(\"4) 四:在一条直线或斜线上,由四个同色子构成的,\");

printf(\"必须防守否则下一步立刻成为“五连”导致速胜的棋型。活四也是四之一。\\n\\n\");

printf(\"特殊规则 : \\n\\n \");

printf(\"黑棋先行的优势很大。因此,在五子棋中,对黑棋做了禁手。\\n\\n \");

printf(\"禁手:对局中禁止使用的着法,黑棋禁手包括“三三禁手”\");

printf(\"“四四禁手”和“长连禁手”,白棋无禁手。\\n\\n\");

printf(\"禁手的判断 : \\n\\n \");

printf(\"1) 长连禁手:当黑棋走一步棋,形成长连棋型,则此点为“禁手”\\n\\n \");

printf(\"2) 三三禁手:当黑棋走一步棋,同时形成两个或\");

printf(\"两个以上的“活三”且没有形成“五连”时,那一步棋就是黑棋禁手。\\n\\n \");

printf(\"3) 四四禁手:当黑棋走一步棋,同时形成两个或\");

printf(\"两个以上的“四”且没有形成“五连”时,那一步棋就是黑棋禁手。\\n\\n\");

printf(\"胜负判断 : \\n\\n\");

printf(\"胜局 :\\n\\n \");

printf(\"1) 最先在棋盘上形成五连,并得到系统认可的一方为胜。白棋长连视同五连。\\n\\n \");

printf(\"2) 黑方五连与禁手同时形成,禁手失效,黑方胜。\\n\\n \");

printf(\"3) 黑方被迫形成禁手,黑方输。\\n\\n \");

printf(\"4) 对局中,一方出现下列情况之一,系统判对方胜。\\n\\n \");

printf(\"(1)超过规定时限者;\\n\\n \");

printf(\"(2)一方宣布认输者;\\n\\n \");

printf(\"(3)中途退出比赛者即逃跑者。\\n\\n\");

printf(\"和局 :\\n\\n \");

printf(\"1)对局双方一致同意和棋。\\n\\n \");

printf(\"2)对局双方同一回合均放弃行棋权。\\n\\n \");

printf(\"3)全盘均下满,已无空白交叉点。\\n\\n\");

printf(\"提和 :\\n\\n \");

printf(\"1)欲提和者应在自己下着前提出。\\n\\n \");

printf(\"2)一方提和,对方可对提和建议表示同意,也可以拒绝。\\n\\n \");

printf(\"3)在一局中,一方提和次数不能超过对方三次\\n\\n\");

printf(\"选材说明地址:中国游戏中心(http://www.chinagames.net/chinagames/2008-11/12/content_492703.htm\\n\\n\");

printf(\"\\\说明完毕...\\n\\n \");

}

void aboutThanks()

{

system(\"cls\");

printf(\"\\n 菠菜鸣谢:\\n\1.我的C语言老师:叶煜老师。\");

\\n

printf(\"\\n\2.成都金海洋教育。\");

printf(\"\\n\3.所有关心我的兄弟姐妹。\\n\\n\");

}

int main()

{

system(\"color f1\");

while(1)

{

printf(\"\\n\-----潇洒菠菜五子棋C语言练习-----\\n\\n\");

printf(\"\\ 1.开始游戏。\\n\");

printf(\"\\ 2.游戏说明。\\n\");

printf(\"\\ 3.游戏鸣谢。\\n\");

printf(\"\\ 4.退出程序。\\n\");

printf(\"\\n\请选择:\");

L:k=scanf(\"%d\

if(k==0) //遇到异常,做健壮性处理...

{

printf(\"\\n\潇洒菠菜提示:输入非格式选项!\\n请重新输入:\");

fflush(stdin); //清空缓冲内存区...

goto L; //goto语句破坏程序结构,请慎用...

}

switch(i)

{

case 1: startGame(); break;

case 2: help(); break;

case 3: aboutThanks(); break;

case 4: printf(\"\\n\您的建议是我成功制胜的关键。\\n\");

printf(\"\\\\再会...08ACCP菠菜\\n\\n\\n\\");

return 0; //结束整个程序。

default:printf(\"\潇洒菠菜提示 : 无此选项\\n\");break;

}

}

}

void printState() //显示当前棋盘的状态

{

char p='A';

system(\"cls\");

printf(\"\棋盘如下:\\n\\n\");

printf(\"\ \"); //输出第一行开头的空格

for(i=0;i{

printf(\"%c \ //输出第一行的所有字符

}

printf(\"\\n\\"); for(i=0;i{

printf(\"%c \ for(j=0;j{

printf(\"%c \j]); }

printf(\"%c \\n\\ //换行..

//输出行坐标(左边的字母)

//输出该行的内容!

//右侧的坐标

}

printf(\" \");

for(i=0;i{

printf(\"%c \ //输出最后一行的所有字符

}

//到此,设计显示工作完毕! 总结://循环的控制和循环的设计是编程人员的一个砍!

printf(\"\\n\");

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务