#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(\"\输入有误,请输入属于 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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务