C语言课程设计姓名:学号:专业:软件工程班级:3班指导教师:编写日期:2015/6/25一、需求分析1、程序的输入与输出:只需通过键盘“上”,“下”,“左”,“右”移动光标在棋盘上的位置,“p”键下子,“q”键悔棋进行人人对战。2、程序的系统功能:(1)五子棋;(2)、根据需要提供对图书所需的查询方式。二、系统总体设计1问题:(1)建立棋盘:如何跟简便的建立棋盘;(2)玩家操作如何移动光标;(3)如何在各个方向上检查是否有五个棋子连接;2.解决方法:(1)用许多“+”符号连接起来构成简便棋盘,下棋时只需将棋子覆盖到“+”完成下子;(2)棋子的移动与落子有键盘上按键控制,本程序选取按键为W、S、A、D和P键,分别代表上移、下移、左移、右移光标和落子。在光标移动的过程中,光标按照玩家按键移动;在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。落子后,程序会为落子处的数组元素赋一个特定值,用于判定胜负。(3)胜负判断模块是程序的关键,该模块的设计直接关系到程序的运行速率和运行结果的正确与否。本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息,否则继续落子。三、详细设计1.建立棋盘voiddrawqipan()//绘制棋盘及数据初始化{inti,j;system(cls);//清除屏幕for(i=0;i20;i++){for(j=0;j20;j++){Q[i][j]=0;printf(十);}printf(\n);}weizhi.x=0;weizhi.y=0;//程序数据初始化gotoxy(0,0);}2.玩家操作voidjilu()//记录落子情况{Q[weizhi.x][weizhi.y]=player+1;if(player){player=0;//玩家变换return;}player=1;}intcluozi(intx,inty)//由电脑落子时调用{weizhi.x=x;weizhi.y=y;gotoxy(weizhi.x,weizhi.y);if(Q[weizhi.x][weizhi.y]==0)//判断当前位置是否已经落子{jilu();printf(○);gotoxy(weizhi.x,weizhi.y);}}voidluozi()//玩家落子{if(Q[weizhi.x][weizhi.y]==0)//判断当前位置是否已经落子{if(player){jilu();printf(●);}else{jilu();printf(○);}gotoxy(weizhi.x,weizhi.y);}}3、systemsystem(CLS)可以实现清屏操作。而调用color函数可以改变控制台的前景色和背景。4、判断胜负intcheckWin()//检查游戏是否有输赢{intp;intr,c,rr,cc,count=0;p=player==0?2:1;for(c=0;c20;c++){for(r=0;r20;r++){if(Q[r][c]!=p)continue;//检查列rr=r;cc=c;while(--cc=0&&Q[rr][cc]==p)count++;cc=c;while(++cc20&&Q[rr][cc]==p)count++;cc=c;if(count+1=5)returnp;//检查行count=0;while(--rr=0&&Q[rr][cc]==p)count++;rr=r;while(++rr20&&Q[rr][cc]==p)count++;rr=r;if(count+1=5)returnp;//检查反斜边count=0;cc--;rr--;while((cc=0||rr=0)&&Q[rr][cc]==p){count++;cc--;rr--;}rr=r;cc=c;cc++;rr++;while((cc20||rr20)&&Q[rr][cc]==p){count++;cc++;rr++;}rr=r;cc=c;if(count+1=5)returnp;count=0;//检查正斜边count=0;cc++;rr--;while((cc20||rr=0)&&Q[rr][cc]==p){count++;cc++;rr--;}rr=r;cc=c;cc--;rr++;while((cc=0||rr20)&&Q[rr][cc]==p){count++;cc--;rr++;}rr=r;cc=c;if(count+1=5)returnp;count=0;}}return0;}四、程序运行结果测试与分析1.棋盘2.光标移动3.判断胜负五、结论与心得这次课程设计完成了五子棋的主体设计,基本实现了五子棋的核心要求,另外在构建棋盘时用到了创新的思路,更加简便的完成了棋盘的建立。程序的总体设计较为简单,并没有用到许多复杂的语句等,其所用的语句如:for,while,switch,case.....都是C语言基础的语句,比较适合阅读。在设计程序的过程中,我们遇到了许多困难,比如建立棋盘时遇到了错误,于是我们小组成员通过上网查阅资料的方式解决了问题。但是,这个程序有一个待改进的地方就是该游戏只能人与人对战而不能人机对战,所以在单人时缺乏可玩性,我想我们小组一定会在往后的学习中努力解决人机对战的问题,使程序更加完善。六、致谢、这次设计首先要感谢的是王老师,在程序设计中老师指出了我们程序的优点与不足,让我们更加清晰我们的程序;另外,感谢我的小组成员袁志鹏和郑磊,在我们的互相帮助下完成这次的课程设计。