伊犁师范学院高级语言课程设计报告学院:电子与信息工程学院学生姓名:学号:专业届别:指导教师:完成时间:五子棋游戏1 设计目的及要求目的:(1)学习综合运用C语言课程和其他相关课程的知识,提高分析解决实际问题的能力,进一步巩固、加深和拓宽所学的知识,进一步加强结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。
(2)全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法,与同学合作设计整套程序,并且独立完成一定工作量的程序设计.(3)掌握程序设计中的常用算法和C语言的程序技巧,培养良好的程序设计风格。
(4)运用所学的知识了解五子棋游戏的制作结构,将所学的知识运用于实践中。
要求:(1)独自设计、编制、调试出一款五子棋游戏。
(2)要求该游戏具有趣味性和可操作性,能够正常运行。
其中用到C语言中的各种语句、结构。
(如其中需要注意全局变量和局部变量的申明,数组的使用等)(3)五子棋游戏要求能够进入欢迎界面,当有五颗相同颜色的棋子连续连成五颗,就胜出。
任务:五子棋是一种传统的棋盘游戏,是我国古代传统的黑白棋种之一发展于日本,流行于欧洲任务内容就是设计一款老少皆宜、能够锻炼个人策略谋划能力棋。
有助于孩子开发智力,或者闲暇时打发时间。
原则:(1)系统性。
系统作为统一整体而存在,因此,在设计中,要从系统的角度考虑。
系统的代码要统一,传递语言要尽可能一致。
(2)可靠性。
可靠性是指系统抵御外界干扰的能力及外界干扰时的恢复能力。
(3)规范性。
游戏的运用以吸引玩家的乐趣为前提,一方面,系统设计应尽量避免不必要的复杂化,另一方面模块应尽量简洁,以缩短处理流程。
2 开发工具C语言3 应用平台Windows xp4 功能设计游戏分析:五子棋是两人之间的竞技游戏,该五子棋程序基本上实现了五子棋游戏的功能,有双方下棋之前的欢迎界面及下棋过程中的棋盘界面,还有最终会判断出输赢。
同时,该游戏采用了二维坐标实现的,明了易懂,方便玩家在游戏过程中的基本操作,使游戏更加简便。
细节方面,该程序有实时储存功能,随时记录。
另外考虑到游戏挺简单的,就没有设置悔棋的相关模块。
游戏介绍:该游戏是简单的双人五子棋,所实现的功能是能够显示欢迎界面,选择是否进行游戏,进入游戏界面以后,玩家开始下棋。
玩家输入坐标则会在棋盘上显示棋子,(若是输入的坐标超出棋盘或者该位子已经有子则会提示玩家重新输入坐标位子),若输入则退出游戏。
4.1 算法设计程序说明:五子棋是一款经典的益智类游戏,通常是黑棋先行;五子棋专用盘为15*15方格,五个子的连接方向为横、竖、斜,当任一方的五个子在各方向上连成一线时,则该方获胜。
程序要求:按照程序说明编写五子棋程序,要求可以进行双人之间的游戏。
程序输出:输出棋盘、棋子,并能够进行相应的操作。
4.2流程图模块图1:程序整体设计思路流程图图2:绘图过程的算法流程否5 程序调试及运行5.1 程序运行结果图1 初始化界面图2 运行游戏的界面5.2 程序代码#include “stdio.h”#include”graphics.h”#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define ENTER 0x1c0dint x=-1,y=0;int max_x,max_y;int board_flag[15][15];void draw_board();void show_init(int pat);void hide();void show(int pat);void move();int is_win(int pat);void main(){int driver=DETECT,mode;int i,j;for(i=0;i<15;i++)for(j=0;j<15;j++){board_flag[i][j]=0;}initgraph(&driver,&mode,””);draw_board();show_init(0);move();getch();closegraph();}void draw_board(){int i;max_x=getmaxx();max_y=getmaxy();setfillstyle(1,BLUE);bar(0,0,max_x,max_y);for(i=-7;i<=8;i++){line(max_x/2-7*26,max_y/2+i*26,max_x/2+8*26,max_y/2+i*26); line(max_x/2+i*26,max_y/2-7*26,max_x/2+i*26,max_y/2+8*26); }}void show_init(int pat){setcolor(BLUE);if(pat==0){setfillstyle(1,BLACK);}else{setfillstyle(1,WHITE);}x=-1;y=0;fillellipse(max_x/2-8*26+13,max_y/2-7*26+23,12,12);void hide(){int m;m=board_flag[x][y];switch(m){case 0:setfillstyle(1,BLUE);break;case 1:setfillstyle(1,BLACK);break;case 2:Setfillstyle(1,WHITE);break;default:break;}fillellipse(max_x/2+(x-7)*26+13,max_y/2+(y-7)*26+13,12,12); }void show(int pat){switch(pat){case 0:setfillstyle(1,BLACK);break;case 1:setfillstyle(1,WHITE);break;default:break;}fillellipse(max_x/2+(x-7)*26+13,max_y/2+(y-7)*26+13,12,12); }void move(){int key;int pat=0;for(;;)key=bioskey(0);switch(key){ case LEFT:if(x==-1){break;}hide();x--;x=x<0?0:x;show(pat);break;case RIGHT:if(x==-1){setfillstyle(1,BLUE);fillellipse(max_x/2+(x-7)*26+13,max_y/2+(y-7)*26+13,12,12); }else{hide();}x++;x=x>14?14:x;show(pat);break;case DOWN:if(x==-1){break;}hide();y++;y=y>14?14:y;show(pat);break;case UP:if(x==-1){break;}hide();y--;y=y<0?0:y;show(pat);break;case ENTER:if(board_flag[x][y]!=0){break;}show(pat);board_flag[x][y]=pat+1;if(is_win(pat)){settextstyle(0,0,3);setcolor(RED);if(pat==0){outtextxy(max_x/2-80,max_y/2,”Black Win!”); }else{outtextxy(max_x/2-80,max_y/2,”White Win!”); }setcolor(BLUE);getch();exit(1);}if(pat==0){pat=1;}else{pat=0;}show_init(pat);break;case ESC:exit(1);break;default:break;}}}int is_win(int pat){int i,j;int cnt=0;cnt=0;i=x;while(i<15){if(board_flag[i][y]==pat+1) {cnt++;}else{break;}i++;}i=x-1;while(i>=0){if(board_flag[i][y]==pat+1) {cnt++;}else{break;}i--;}if(cnt>=5){return 1;}cnt=0;i=x;j=y;while(i<15){{break;}if(board_flag[i][j]==pat+1) {cnt++;}else{break;}i++;j--;}i=x-1;j=y+1;while(i>=0){if(j>14){break;}if(board_flag[i][j]==pat+1) {cnt++;}else{break;}i--;j++;}if(cnt>=5){return 1;}cnt=0;j=y;while(j>=0){if(board_flag[x][j]==pat+1) {}else{break;}j--;}j=y+1;while(j<15){if(board_flag[x][j]==pat+1) {cnt++;}else{break;}j++;}if(cnt>=5){return 1;}cnt=0;i=x;j=y;while(i>=0){if(j<0){break;}if(board_flag[i][j]==pat+1) {cnt++;}else{break;}i--;j--;}i=x+1;j=y+1;while(i<15){if(j>14){break;}if(board_flag[i][j]==pat+1){cnt++;}else{break;}i++;j++;}if(cnt>=5){return 1;}return 0;}6 结束语在本次课程设计中,不仅让我认识到自己学习上的不足,也通过请教其他同学和老师,让我对程序进行了修改并运行,还让自己复习了编程的知识,对遇见的众多问题,通过思考,耐心动手解决问题。
在设计五子棋游戏的过程中也让我明白合作的力量,设计在课程设计期间我也学到了课本中学不到的知识,明白了只有通过自己不断地动手实践才能找出不足、找出问题和提高自己的能力,发现课程设计是我学习和掌握专业知识的好方法,它可以让自己变得活跃,也会看明白程序问题,使自己受益匪浅。
才能让自己的能力不断提高。
最后,感谢孙晓杰老师的悉心指导,教给我的程序设计的思想和知识。