欢迎来到天天文库
浏览记录
ID:20558229
大小:711.50 KB
页数:26页
时间:2018-10-13
《c语言报告黑白棋》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、大连理工大学《C语言程序设计》题目黑白棋(角色扮演版)指导教师:姓名:学号:班级:26内容通过键盘输入坐标,实现五子棋的人人对战。中间插入了游戏剧情,丰富了游戏的趣味性。加入了光标控制模式,丰富了游戏的控制模式。二、上机环境操作系统:windows7开发工具:visualstudio2008一、函数调用关系图四、各函数功能说明1.voidmain()主函数2.voidtwopointer()统计得分3.intWjudge(int,int)判断白方下的子是否符合规则,并执行4.intBjudge(int,int)判断黑方下的子是否符合规则,并
2、执行5.voidprintF2(chara[N][N],charb[N][N],intm,intn)输出移动后的棋盘状态6.voidkeyboard(int)实现键盘光标操作五、算法描述1统计得分26voidtwopointer()//统计得分{numB=0;numW=0;for(stai=1;stai<=8;stai++)//黑白双方棋子统计for(staj=1;staj<=8;staj++){if(a[stai][staj]==1)//黑方统计numB++;if(a[stai][staj]==2)//白方统计numW++;}printf
3、("黑方(田松松)%d子,白方(人士舟)%d子",numB,numW);if(numB>numW)//黑方占优时{SetColor(4,0);//字体颜色红printf("田松松心头一阵狂喜。");SetColor();}else//黑方占优时{SetColor(3,0);//字体颜色蓝printf("人士舟眼中闪出一丝喜色");SetColor();}if((numW-numB)>4)//黑方落后过多时{SetColor(1,0);printf("田松松:本来不想用那招的,那么好吧,八八六十四乾坤天地棋法");SetCol
4、or();}if((numB-numW)>4)//白方落后过多时{SetColor(5,0);printf("只见人士舟,从琉璃小瓶取出一粒粉色小丸,吞服下去。喝道:“天魔解体大法!”");SetColor();}}262输出棋盘当前情况的函数26voidprintF(char(*a)[N],intn)//输出棋盘当前情况的函数{for(intcount1=0;count15、rintf("");//换行}}263判断黑方(白方)下的子是否符合规则,并执行26intBjudge(intx,inty)//判断黑方下的子是否符合规则,并执行{newcheck=0;if(a[x][y]!=32)//落子位置不是空的,则返回.return0;intcalcu;//纵坐标for(calcu=x-1;calcu>0;calcu--)//正上方是否有满足条件的翻转{if(a[calcu][y]==2)//若此处是白子{flag=1;//记录是否掠过白子newflag=1;//记录是否掠过黑子}elseif(a[calcu]6、[y]==1)//若此处是黑子{check=1;//记录是否掠过黑子if(newflag==1)//夹白子时{newflag=0;26break;}else//未夹白子时break;}else//正上方既无白子也无黑子或只有黑子break;}if(flag==1&&check==1)//执行翻转操作{calcu++;//回移一次for(;calcu<=x;calcu++){a[calcu][y]=1;//白子黑化}newcheck=1;//记录是否执行过翻转}check=0;flag=0;......264输出移动后的棋盘状态26voidp7、rintF2(chara[N][N],charb[N][N],intm,intn)//输出移动后的棋盘状态{for(inti=0;i8、le(1){to3://重新移动光标xb=x;yb=y;direction=_getch();//输入坐标或确定if(direction=='w'9、10、direction=='s'
5、rintf("");//换行}}263判断黑方(白方)下的子是否符合规则,并执行26intBjudge(intx,inty)//判断黑方下的子是否符合规则,并执行{newcheck=0;if(a[x][y]!=32)//落子位置不是空的,则返回.return0;intcalcu;//纵坐标for(calcu=x-1;calcu>0;calcu--)//正上方是否有满足条件的翻转{if(a[calcu][y]==2)//若此处是白子{flag=1;//记录是否掠过白子newflag=1;//记录是否掠过黑子}elseif(a[calcu]
6、[y]==1)//若此处是黑子{check=1;//记录是否掠过黑子if(newflag==1)//夹白子时{newflag=0;26break;}else//未夹白子时break;}else//正上方既无白子也无黑子或只有黑子break;}if(flag==1&&check==1)//执行翻转操作{calcu++;//回移一次for(;calcu<=x;calcu++){a[calcu][y]=1;//白子黑化}newcheck=1;//记录是否执行过翻转}check=0;flag=0;......264输出移动后的棋盘状态26voidp
7、rintF2(chara[N][N],charb[N][N],intm,intn)//输出移动后的棋盘状态{for(inti=0;i8、le(1){to3://重新移动光标xb=x;yb=y;direction=_getch();//输入坐标或确定if(direction=='w'9、10、direction=='s'
8、le(1){to3://重新移动光标xb=x;yb=y;direction=_getch();//输入坐标或确定if(direction=='w'
9、
10、direction=='s'
此文档下载收益归作者所有