利用栈的方式列举了边角稳定子满足的条件函数,使得落点随着棋局的变化而改变着自身的优先级,使得更加灵活,获胜的几率大大提高。。
设计了插针函数,提高落子成活率,进一步加大了获胜的几率,更灵活的应对棋局上的变化。
人机函数的完成转而去和邓涛涛设计的界面进行组合,期待游戏玩家获得更好的游戏体验,遇到的问题自然也是不少,提醒字幕老是串行,和干扰界面的美观,通过换行符和空格使其得以解决。刚开始我们是一个输出界面顶替一个输出界面进行的刷新,这迫使界面看起来臃肿不堪,最后通过我们一致商量,调用库里清屏函数解决了这个问题。最后收尾工作,对语句进行了美观的锯齿形排布,并有效的删简程序的结构,使其明了,减少时间和空间复杂度,打造高效的**并匹配必要的注释。
3、任务实现。
1.通过二维数组对棋盘剩余的60个落点进行优先级排布,进而接合白子输入端口,实现白子和黑子的游戏对打,通过for语句的遍历对60个点逐个验证,但60个点的验证是通过二维数组从0到59逐个尝试,利用郭奇搜集的资料和我们实战模拟游戏记录下数据,进而大概确定优先级的落子排布,程序可以运行后我们进了大量的模拟演练,在进行了第二次调谐,基本达到我们对游戏人机对打的效果要求。
int map[8][8]=,a[2]=,优先级数组排布
数据的输出实现。
for(i=0;i<60;i++)
x=a[i][0];y=a[i][1];/赋值语句。
can=rule(map,x-1,y-1,order);/实现白子变黑子
if(can==0)
printf("不符合落子规则");
elseprintf("%d %d",x,y);
eat(map,x-1,y-1,order);
x=9;//y=8;
i=88;
order=k*order;
can=rule(map,x-1,y-1,order);/首先判断是否有可落点
if(can!=0)
此处清屏---还好--但出来两个棋盘
eat(map,x-1,y-1,order);/实现白子变黑子的任务。
此处放清屏,最后终结时出错,最后屏没了
order=k*order;//转换另一方下棋
2.整合界面我们使用了,利用清屏函数使得界面整洁,简短。
#include<>
system(“cls”);
3.函数优先级的设计。
利用栈的知识,实现条件函数的排布。
if(can==0&&map[0][0]==1&&map[0][1]==0)//四个边角周围两个点的优先级
x=1;y=2;
can=rule(map,x-1,y-1,order);
if(can==0&&map[0][0]==1&&map[1][0]==0)
x=2;y=1;
can=rule(map,x-1,y-1,order);
if(can==0&&map[0][7]==1&&map[1][7]==0)
x=2;y=8;
can=rule(map,x-1,y-1,order);
if(can==0&&map[0][7]==1&&map[0][6]==0)
x=1;y=7;
can=rule(map,x-1,y-1,order);
4.插针函数的设计---提高游戏挑战难度。
if(can==0)
for(i=0;i<8;i++)插针算法横实现
for(j=1;j<7;j++)
if(map[i][j-1]==1&&map[i][j+1]==1&&map[i][j]==0)
can=rule(map,i,j,order);/判断落点是否可以落 ,可以落输出非零
if(can==0)
for(i=1;i<7;i++)插针算法竖实现
for(j=0;j<8;j++)
if(map[i-1][j]==1&&map[i+1][j]==1&&map[i][j]==0)
can=rule(map,i,j,order);/判断落点是否可以落 ,可以落输出非零
5.黑白棋规则的c语言转化。
int arry[8][2]=,落子二维数组实现九宫格式的遍历
int i,ru=0,lx,ly;
if(map[x][y]==0)//保证所下的子原来是空处。
for(i=0;i<8;i++)
lx=x+arry[i][0];/实现左右,下上共八个点八个方向的筛选
ly=y+arry[i][1];
if(map[lx][ly]!=k*order)//假如初始筛选--黑方落点,map[lx][ly]不是白子进入下一次循环
continue;
while(map[lx][ly]==k*order&&lx>-1&&ly>-1&&lx<8&&ly<8)//从初始化落第一个黑子分析 --执行循环找到不是
白子后终止
lx=lx+arry[i][0
ly=ly+arry[i][1];
if(map[lx][ly]==order&&lx>-1&&ly>-1&&lx<8&&ly<8)//如果是黑子而不是空,输出非零
ru++;4、调试分析。
1. 栈的调试。
刚开始设置的为can==1,没有外加验证,就开始大量衍生句子,等到最后执行,游戏验证的时候,才发觉所有的栈里条件都没有被验证,整个语句除了第一句是入栈的,其他都没有入栈进行检验。
2. 落子插针函数的调试。
把边角落点考虑进去了,与后面的优先级出现了冲突,降低了获胜概率,最后通过控制横纵数组坐标的范围,使其顺利解决。
3. 清屏函数的调用。
没有多加思考就放在主函数末尾,始终出现两个棋盘,换了一个地方输出界面棋盘一开始就被清屏函数清没了---通过调用函数中把清屏函数置在refresh刷新函数的前面就得以解决这个问题,但是当白子没有落点的时候,棋盘又被清没了,最后我们找到一个恰当的地方去做清屏,那就是放在eat变子函数中refresh的前面,完美的解决了这个问题,我们都为此高兴。
4. 最后获胜的提醒语句有时候不出现。
经过几次检查,是因为漏考虑了情况,在棋盘未满的情况下,一方仍有可能赢得胜利,所以不能简单的依靠bai+hei==64而分情况,最后将棋盘未满的情况考虑进去。解决。
5. 二维数组遍历设置合理跳出语句。
出现白方连续出子的状况,我通过当满足条件时,进入赋值语句,给i赋值一个,超for条件的值,轻松跳出。解决。
5、不足和改进。
没有完成原本设想的用函数通过计算得出比较高等的落点算法,使得人机对战更加富有挑战性。
人机实现,语句没有实现递归而进一步精简语句。
while语句递归调用没有成功。
界面设计,悔棋的功能没有得以实现。
三、 设计收获及心得体会。
设计游戏没有想象当中的那么难比登天,在此次的游戏设计中逐渐感觉到。
c语言还是很好实现功能,逐渐在课程设计发觉编程所在的乐趣。
编程需要专心也需要适当的压力才能硬着往前迈步子,不能太轻浮,需要啃,更要吃苦,耐着性子琢磨,盘算,当看到自己的程序顺利的跑起来之前的痛苦就都转化成自己的财富和美味的回忆。
语句实现功能时的崩溃和试验成功的喜悦,相辅相成的促进我在编程这条路上前行。
数据结构课程设计报告
东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...
数据结构课程设计报告
设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...
数据结构课程设计报告
河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...