课程设计-c语言设计-五子棋游戏 0528
- 格式:doc
- 大小:145.00 KB
- 文档页数:18
c五子棋课程设计报告一、课程目标知识目标:1. 学生理解五子棋的基本规则,掌握棋盘布局、棋子走法等相关知识。
2. 学生了解五子棋的历史背景,了解我国棋文化的发展。
3. 学生掌握基本的五子棋策略,如防守、进攻、布局等。
技能目标:1. 学生能够熟练进行五子棋对弈,具备一定的竞技水平。
2. 学生能够运用所学策略进行棋局分析,提高解决问题的能力。
3. 学生能够通过五子棋锻炼思维,提高逻辑思维和判断能力。
情感态度价值观目标:1. 学生培养对五子棋的兴趣,激发学习棋类游戏的热情。
2. 学生在五子棋学习过程中,培养团队协作精神,增进同学间的友谊。
3. 学生通过五子棋学习,体会竞技精神,树立正确的竞争观念。
课程性质分析:本课程为兴趣选修课程,结合五子棋的竞技性和趣味性,旨在提高学生的逻辑思维和竞技水平。
学生特点分析:五年级学生具备一定的认知能力和自学能力,对新鲜事物充满好奇,喜欢竞技类游戏。
教学要求:1. 教师应关注学生的个体差异,因材施教,提高学生的学习兴趣。
2. 教师应注重理论与实践相结合,让学生在实践中掌握五子棋技能。
3. 教师应关注学生在学习过程中的情感体验,培养学生的竞技精神和团队协作能力。
二、教学内容1. 五子棋基本知识:- 棋盘与棋子:介绍五子棋的棋盘布局、棋子走法及胜负判定规则。
- 历史背景:讲解五子棋的起源、发展及在我国棋文化中的地位。
2. 五子棋基本策略:- 防守策略:教授学生如何防守对手的进攻,保持棋局平衡。
- 进攻策略:指导学生运用有效进攻手段,制造对手的困境。
- 布局策略:讲解如何合理布局棋子,为后续棋局发展奠定基础。
3. 五子棋实战技巧:- 棋型分析:教授学生识别不同棋型,提高棋局分析能力。
- 残局破解:训练学生解决棋局中出现的复杂局面,提高实战水平。
4. 教学进度安排:- 第一周:五子棋基本知识学习,了解棋盘、棋子及历史背景。
- 第二周:基本策略学习,掌握防守、进攻和布局策略。
- 第三周:实战技巧训练,提高棋局分析和实战能力。
五子棋游戏程序设计(C语言实现)一、设计任务与目标设计两个人对战的五子棋游戏,游戏开始界面是显示游戏的规则,然后让用户输入命令以确定游戏是否开始,如果用户确定开始,那么要显示棋盘,接下来到了最重要的几步,两个玩家交替落子,当连续五个棋子在一条直线上时,一方赢棋,游戏结束。
其中,有些问题就是平时基本的输入输出问题,例如:游戏规则,可以直接打印。
棋盘的显示也是一般的图形输出问题,但是稍微复杂一些。
需要改进的地方和达到的目标是:1、游戏的初始界面显示的是游戏规则,当玩家确定开始的时候要清除界面来显示棋盘。
2、棋盘和棋子的显示,界面(棋子和棋盘)容易分辨,这要从颜色和图形上加以区分。
3、要求一方用‘W’(上)、‘S’(下)、‘A’(左)、‘D’(右),另一方用‘↑’、‘↓’、‘←’、‘→’来移动光标,再分别用‘Z’和‘空格’键确定落子。
4、当一方走棋时,另一方的按键应该设置为无效。
5、游戏进行时打印提示信息,当一方赢棋后,要显示赢棋的字符,并询问玩家是否继续开始。
6、可以随时退出游戏或重新开始游戏。
二、方案设计与论证首先设置游戏的初始界面,采用白色背景和红色前景,这可以调用‘conio.h’库函数实现打印游戏规则。
询问玩家是不是开始游戏,通过选择Y\N来确定。
其中会遇到这样的问题:当玩家输入的不是‘Y(y)’或者‘N(n)’时应该怎么办呢?如果采用scanf函数来接收命令,这样会显示一个不满足要求的字符,于是可以用getch函数来接收命令,判断输入的字符是否为‘Y(y)’和‘N(n)’,如果是再显示出来。
为了界面的简洁,进入游戏前先清除屏幕,调用‘system()’函数来实现。
然后打印棋盘,可以把背景设置为湖蓝色,这样棋盘和棋子更容易分辨。
游戏开始后棋盘用黑色显示,这样易于区分。
具体的思路是:由于棋盘是网格状的,所以选择一个基本图形字符串‘十’,通过循环打印而构成一张大图。
接下来确定落子的位置,这需要通过改变光标的位置来实现,考虑到是在vc6.0环境下编译文件,c语言中的有些库函数并不支持,所以选择了’gotoxy()’函数并结合‘window.h’下的函数,通过键盘按键控制达到光标移动功能。
c语言五子棋课程设计报告一、前言五子棋作为一种智力游戏,在我国有着悠久的历史和广泛的群众基础。
本次设计的目的是使用C语言实现五子棋游戏,通过此次课程设计,学生将掌握C语言的编程思想和开发方法,同时了解五子棋游戏的规则和策略。
二、五子棋游戏规则五子棋游戏是在15*15的棋盘上进行,由黑白双方轮流落子,先将五个同色棋子连成一条线的一方获胜。
落子的位置必须为空,不能与已有的棋子重叠。
黑方先手,白方后手。
下图为五子棋棋盘示意图。
三、五子棋游戏实现本次课程设计采用C语言实现五子棋游戏,主要包括棋盘的绘制、落子的判断和胜负的判断等功能。
1.棋盘的绘制棋盘的绘制采用双重循环实现,将15*15的棋盘分成225个小格,其中包括14个横线和14个竖线,以及4个角上的点。
通过循环输出字符实现棋盘的绘制。
2.落子的判断落子的判断主要包括鼠标的点击和棋子的绘制两个部分。
当鼠标点击棋盘上的一个位置时,程序会根据当前轮到哪方落子来绘制相应颜色的棋子,并将该位置的状态改为已有棋子。
同时,程序会检查当前落子是否符合规则,即该位置是否为空,如果不为空则重新等待鼠标点击。
3.胜负的判断胜负的判断主要包括横向、纵向、斜向和反斜向四个方向。
通过判断当前落子位置在这四个方向上的连续棋子数是否达到五个来确定胜负。
如果达到五个,则程序会弹出相应的提示框,显示胜利方。
四、总结通过本次课程设计,学生掌握了C语言的编程思想和开发方法,同时了解了五子棋游戏的规则和策略。
本次设计主要包括棋盘的绘制、落子的判断和胜负的判断等功能。
希望本次课程设计能够增强学生的编程能力和对五子棋游戏的理解。
c语言五子棋课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言的基本语法和编程技巧;2. 学生能运用C语言编写五子棋游戏的基本功能,包括棋盘的初始化、玩家输入、落子、判断胜负等;3. 学生能通过五子棋案例,理解并掌握数组和循环等C语言核心知识点的应用。
技能目标:1. 学生能够运用结构化的编程思想进行问题分析,将复杂问题分解为可解决的小问题;2. 学生能够独立完成五子棋游戏的编写,培养编程实践能力和解决问题的能力;3. 学生通过团队协作完成课程项目,提高沟通和协作能力。
情感态度价值观目标:1. 学生在编程实践中培养逻辑思维能力和创新意识,增强对编程的兴趣和热情;2. 学生通过五子棋游戏的设计与实现,体验编程带来的成就感,提高自信心;3. 学生在团队协作中学会相互尊重、理解和帮助,培养良好的合作精神。
二、教学内容1. C语言基础语法回顾:变量定义与使用、数据类型、运算符、表达式、控制语句(if、for、while等);2. 数组的应用:一维数组、二维数组,重点讲解二维数组在五子棋棋盘中的应用;3. 函数的定义与调用:编写功能模块,如初始化棋盘、打印棋盘、落子、判断胜负等函数;4. 指针的应用:指针与数组的关系,通过指针操作五子棋棋盘;5. 五子棋游戏设计与实现:分析游戏需求,设计游戏流程,编写代码实现游戏功能;6. 结构体的使用:定义玩家信息结构体,存储和管理玩家信息;7. 文件操作:读取和保存棋局,实现游戏进度保存与加载;8. 算法与逻辑:介绍五子棋胜负判断的算法,以及优化策略;9. 项目实践:学生分组进行五子棋游戏的开发,按照教学进度完成相应功能;10. 课堂讨论与展示:分析项目中的问题与解决方法,分享编程技巧,展示团队成果。
教学内容按照课本章节进行组织,确保学生能够将所学知识应用于实际项目中,逐步掌握C语言编程的核心技能。
三、教学方法本课程采用以下多样化的教学方法,旨在激发学生的学习兴趣,提高学生的主动性和实践能力:1. 讲授法:教师以清晰、生动的语言讲解C语言的基本概念、语法规则和五子棋游戏设计原理。
c课程设计五子棋游戏一、教学目标本课程的目标是让学生掌握五子棋游戏的基本规则和技巧,能够独立进行游戏,并理解游戏的算法和逻辑。
知识目标包括了解五子棋的历史和背景,掌握游戏的规则和技巧,理解游戏的算法和逻辑。
技能目标包括能够独立进行游戏,能够分析游戏局势,能够制定游戏策略。
情感态度价值观目标包括培养学生的团队合作精神,培养学生的竞技精神,让学生理解胜负的重要性。
二、教学内容本课程的教学内容主要包括五子棋的基本规则和技巧,游戏的算法和逻辑,以及游戏中的团队合作和竞技精神。
具体包括五子棋的历史和背景,游戏的规则和技巧,如何分析游戏局势和制定游戏策略,以及如何在游戏中展现团队合作和竞技精神。
三、教学方法本课程将采用讲授法、讨论法、案例分析法和实验法等多种教学方法。
通过讲授法,让学生掌握五子棋的基本规则和技巧;通过讨论法,让学生深入理解游戏的算法和逻辑;通过案例分析法,让学生学会分析游戏局势和制定游戏策略;通过实验法,让学生在实际游戏中体验团队合作和竞技精神。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。
教材和参考书将提供五子棋的基本规则和技巧,游戏的算法和逻辑,以及游戏中的团队合作和竞技精神的相关知识。
多媒体资料将提供五子棋游戏的示例和案例,帮助学生更好地理解游戏的相关知识。
实验设备将用于让学生在实际游戏中体验团队合作和竞技精神。
五、教学评估本课程的评估方式包括平时表现、作业和考试。
平时表现主要评估学生的出勤、课堂参与度和团队合作表现。
作业包括练习题和游戏设计项目,评估学生对五子棋规则和技巧的掌握程度,以及游戏的算法和逻辑的应用能力。
考试包括期中和期末考试,评估学生对课程知识的全面理解和应用能力。
评估方式应客观、公正,能够全面反映学生的学习成果。
六、教学安排本课程的教学安排将在每周的一节课进行,共计10节课。
教学进度将按照教学大纲进行,确保在有限的时间内完成教学任务。
教学时间将安排在下午或晚上,考虑学生的作息时间。
c课程设计五子棋游戏一、课程目标知识目标:1. 让学生掌握五子棋的基本规则和棋谱,理解其蕴含的数学原理;2. 培养学生对博弈论的基本认识,了解五子棋游戏中的策略与决策;3. 引导学生运用计算机编程实现五子棋游戏,掌握相关算法和编程技巧。
技能目标:1. 培养学生运用逻辑思维和分析问题的能力,提高解决问题的策略选择和决策能力;2. 培养学生的团队协作能力,学会与他人共同分析问题、探讨解决方案;3. 提高学生的计算机编程能力,能够独立完成五子棋游戏的简单设计与实现。
情感态度价值观目标:1. 培养学生对五子棋游戏的兴趣,激发他们学习数学和计算机编程的热情;2. 培养学生勇于面对挑战、克服困难的精神,增强自信心;3. 培养学生遵守游戏规则,树立公平竞争的意识,培养良好的竞技道德。
课程性质:本课程以五子棋游戏为载体,结合数学和计算机编程知识,培养学生的逻辑思维、分析问题和团队协作能力。
学生特点:考虑到学生所在年级,他们对基本数学原理和计算机编程有一定了解,具备一定的独立思考和解决问题的能力。
教学要求:在教学过程中,注重理论与实践相结合,充分调动学生的积极性,引导他们通过自主探究和合作学习,达到课程目标。
同时,注重对学生的个性化指导,提高他们的学习效果。
通过本课程的学习,使学生能够将所学知识应用于实际生活,培养他们的创新意识和实践能力。
二、教学内容1. 五子棋基本规则与棋谱:包括棋盘布局、棋子走法、胜利条件等,结合数学原理分析棋局变化。
- 教材章节:第二章 简单博弈论2. 博弈论基本概念:介绍博弈论的基本要素,如参与者、策略、支付函数等,探讨五子棋游戏中的策略选择。
- 教材章节:第三章 博弈论基础3. 计算机编程实现五子棋游戏:学习运用编程语言(如Python)实现五子棋游戏,包括界面设计、算法实现等。
- 教材章节:第四章 计算机编程与算法4. 五子棋算法分析:讲解常用的五子棋算法,如极大极小值搜索、α-β剪枝等,提高游戏AI的智能程度。
C语言五子棋游戏程序课程设计C++五子棋游戏程序设计一、课设内容1. 掌握C++基本编程风格。
2. 编写程序代码,实现各个模块的功能。
3. 完成小型游戏应用系统的设计开发.4. 关键语句写注释。
5. 测试程序,写出测试报告。
6. 在实验报告写出综合设计心得。
二、实验内容在此次大作业中,我学习设计一个五子棋游戏的程序,源代码及分析如下:#include#includevoid shuchu(char a[15][15]){int x,y,i;cout<<" ";for(i=0;i<15;i++)cout<<setw(3)<<i;< p="">cout<<endl;< p="">for(x=0;x<15;x++){cout<<setw(2)<<x;< p="">for(y=0;y<15;y++)cout<<setw(3)<<a[x][y];< p="">cout<<endl;< p="">}}bool osheng(char a[15][15]){int x,y;for(x=0;x<15;x++)for(y=0;y<11;y++)if(a[x][y]=='o'&&a[x][y+1]=='o'&&a[x][y+2]=='o'&&a[x][y+ 3]=='o'&&a[x][y+4]=='o') return 1;for(x=0;x<11;x++)for(y=0;y<15;y++)if(a[x][y]=='o'&&a[x+1][y]=='o'&&a[x+2][y]=='o'&&a[x+3][ y]=='o'&&a[x+4][y]=='o') return 1;for(x=0;x<11;x++)for(y=0;y<11;y++)if(a[x][y]=='o'&&a[x+1][y+1]=='o'&&a[x+2][y+2]=='o'&&a [x+3][y+3]=='o'&&a[x+4][y+4]=='o' )return 1;for(x=15;x>4;x--)return 0;}bool xsheng(char a[15][15]){int x,y;for(x=0;x<15;x++)for(y=0;y<11;y++)if(a[x][y]=='x'&&a[x][y+1]=='x'&&a[x][y+2]=='x'&&a[x][y+ 3]=='x'&&a[x][y+4]=='x') return 1;for(x=0;x<11;x++)for(y=0;y<15;y++)if(a[x][y]=='x'&&a[x+1][y]=='x'&&a[x+2][y]=='x'&&a[x+3][ y]=='x'&&a[x+4][y]=='x') return 1;for(x=0;x<11;x++)for(y=0;y<11;y++)if(a[x][y]=='x'&&a[x+1][y+1]=='x'&&a[x+2][y+2]=='x'&&a[ x+3][y+3]=='x'&&a[x+4][y+4]=='x' )return 1;for(x=15;x>4;x--)for(y=15;y>4;y--)if(a[x][y]=='x'&&a[x+1][y-1]=='x'&&a[x+2][y-2]=='x'&&a[x+3][y-3]=='x'&&a[x-4][y+4]=='x') return 1;return 0;}bool he(char a[15][15]){int x,y;for(x=0;x<15;x++)for(y=0;y<15;y++)if(a[x][y]=='-')return 0;return 1;}void main(){int x,y,s,q;char a[15][15];for(x=0;x<15;x++)for(y=0;y<15;y++)cin>>q;if(q==1)goto two;/* elsegoto one; */two:cout<<"请选择是否进入悔棋模式:1.是;2.否\n";cin>>q;if(q==2)goto three;shuchu(a);while(1){s: while(1){cout<<"请玩家1输入下子的坐标"<<endl;< p="">cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')cout<<"此处已经有字,请重下"<<endl;< p="">else{a[x][y]='o';break;}}shuchu(a);cout<<"是否需要悔棋?是请输入:1;否请输入:0"<<endl;< p=""> cin>>s;switch(s){case 1:a[x][y]='-';goto s;break;case 0:break;}s1: if(osheng(a)){cout<<"玩家1胜";break;}s2: while(1){cout<<"请玩家2输入下子的坐标"<<endl;< p="">cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')cout<<"此处已经有字,请重下"<<endl;< p="">else{a[x][y]='x';break;}}shuchu(a);cout<<"是否需要悔棋?是请输入:1;否请输入:0"<<endl;< p=""> cin>>s;switch(s){case 1:a[x][y]='-';goto s2;break;case 0:break;}s3: if(xsheng(a)){cout<<"玩家2胜";if(he(a)){cout<<"平局";break;}}three: shuchu(a);while(1){while(1){cout<<"请玩家1输入下子的坐标"<<endl;< p=""> cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')cout<<"此处已经有字,请重下"<<endl;< p=""> else{a[x][y]='o';break;}}shuchu(a);if(osheng(a)){cout<<"玩家1胜"; break;}}shuchu(a);if(xsheng(a)){cout<<"玩家2胜"; break;}if(he(a)){cout<<"平局"; break;}}}三、感想体会本实验是用C++来设计完成了五子棋游戏。
c 五子棋课程设计一、课程目标知识目标:1. 学生掌握五子棋的基本规则和历史背景,理解棋盘布局及棋子的走法。
2. 学生了解五子棋的基本策略和常见开局、中局、残局技巧。
3. 学生掌握五子棋的基本战术,如双打、陷阱、防守等。
技能目标:1. 学生能够独立完成一局五子棋的对弈,展示正确的执子、落子姿势。
2. 学生能够运用所学策略和技巧进行棋局分析,提高解题能力。
3. 学生能够通过五子棋比赛,提升自己的逻辑思维、判断和决策能力。
情感态度价值观目标:1. 培养学生热爱传统文化,尊重对手,诚实守信的品质。
2. 培养学生面对挑战时的冷静、耐心和毅力,增强心理素质。
3. 培养学生团队协作意识,学会在棋局中互相学习、取长补短。
本课程针对小学四年级学生,结合五子棋学科特点,注重培养学生的逻辑思维、判断能力和情感态度。
教学要求以趣味性、互动性和实践性为主,让学生在轻松愉快的氛围中掌握五子棋知识,提高技能,同时培养良好的情感态度价值观。
通过分解课程目标为具体的学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 五子棋基本知识:介绍五子棋的起源、发展历程、棋盘结构、棋子走法及胜负判定规则。
教材章节:《五子棋入门》第一章2. 基本策略与技巧:讲解五子棋的基本开局、中局、残局策略,以及双打、陷阱等战术。
教材章节:《五子棋入门》第二章、第三章3. 棋局实战演练:组织学生进行棋局对弈,让学生在实践中运用所学策略和技巧。
教材章节:《五子棋入门》第四章4. 名局欣赏与解析:分析经典五子棋名局,让学生了解高水平棋手的思路和战术。
教材章节:《五子棋入门》第五章5. 比赛规则与礼仪:介绍五子棋比赛的基本规则、裁判方法以及赛场礼仪。
教材章节:《五子棋入门》第六章教学内容安排和进度:第一课时:五子棋基本知识、棋盘结构、棋子走法及胜负判定规则。
第二课时:基本开局、中局、残局策略。
第三课时:双打、陷阱等战术。
第四课时:棋局实战演练。
第五课时:名局欣赏与解析。
C语⾔编写五⼦棋游戏本⽂实例为⼤家分享了C语⾔编写五⼦棋游戏的具体代码,供⼤家参考,具体内容如下⼀、构建棋盘⾸先可以⽤⼀个⼆维数组来构建棋盘,下标表⽰位置,内容表⽰⿊⼦⽩⼦或者空位。
当数组内容为1时,该位置为⽩字,当数组为0时,该位置为⽩⼦,空位输出+int w[11][11], flag = 0;int a, b;for (int k = 0; k < 11; k++)printf("第%d列\t", k);printf("\n");for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (w[i][j] == 0) printf("⿊\t");else if (w[i][j] == 1) printf("⽩\t");else printf("+\t");}printf("第%d⾏\n\n", i);}⼆、判断位置超范围与错误输⼊当输⼊的棋⼦坐标超出范围或者该位置已经存在棋⼦,则再次输⼊棋⼦坐标。
其中flag作为标志作为判别⿊⼿⽩⼿的标志。
if (flag == 0) {printf("⿊⾊下棋\n");scanf("%d %d", &a, &b);while (a < 0 || a>10 || b < 0 || b>10) {printf("此位置超出范围,请重新输⼊:");scanf("%d %d", &a, &b);}while (w[a][b] == 0 || w[a][b] == 1){printf("此位置已有棋⼦,请重新输⼊:");scanf("%d %d", &a, &b);}flag = 1;w[a][b] = 0;}else {printf("⽩⾊下棋\n");scanf("%d %d", &a, &b);while (a < 0 || a>10 || b < 0 || b>10) {printf("此位置超出范围,请重新输⼊:");scanf("%d %d", &a, &b);}while (w[a][b] == 0 || w[a][b] == 1){printf("此位置已有棋⼦,请重新输⼊:");scanf("%d %d", &a, &b);}三、判断胜负在五⼦棋中,出现五个棋⼦排成⼀排或者⼀列或者斜排即可判为胜出。
c 五子棋课程设计一、课程目标知识目标:1. 学生能够理解五子棋的基本规则和棋盘布局。
2. 学生掌握五子棋的基本策略和技巧,如连珠、防守和攻守转换。
3. 学生了解五子棋的历史背景和发展。
技能目标:1. 学生能够独立进行五子棋对弈,运用所学策略和技巧进行攻防。
2. 学生通过五子棋游戏,提高逻辑思维和判断能力,培养问题解决技巧。
情感态度价值观目标:1. 学生培养良好的竞技态度,尊重对手,遵守比赛规则。
2. 学生通过五子棋游戏,培养团队合作精神,学会分享和互助。
3. 学生在游戏中体验成功和失败,锻炼心理承受能力,树立正确的胜负观。
课程性质:本课程以五子棋为载体,结合策略、技巧和人文背景,提高学生的逻辑思维和竞技水平。
学生特点:考虑到学生所在年级,注重培养他们的自主学习和合作能力,提高综合素质。
教学要求:教师应以引导为主,让学生在实践中学,充分调动学生的积极性和参与度。
教学过程中,注重学生的个体差异,因材施教,使每个学生都能在课程中取得进步。
通过课程目标的分解和实施,为后续教学设计和评估提供明确的方向。
二、教学内容1. 五子棋的基本规则与棋盘布局:介绍五子棋的起源、棋盘结构、落子规则及胜负判定方法。
- 教材章节:第一章 棋类游戏简介2. 五子棋的基本策略与技巧:讲解连珠、活三、活四等基本棋型,以及攻防转换、布局和收官技巧。
- 教材章节:第二章 五子棋基本策略与技巧3. 五子棋对弈实践:组织学生进行分组对弈,让学生在实践中运用所学策略和技巧。
- 教材章节:第三章 五子棋实战演练4. 五子棋历史文化:介绍五子棋的历史发展、国内外比赛及著名棋手故事。
- 教材章节:第四章 棋类游戏与历史文化5. 五子棋比赛与竞技礼仪:讲解五子棋比赛的规则、竞技礼仪及心理调节方法。
- 教材章节:第五章 棋类比赛与竞技礼仪教学进度安排:第一课时:五子棋基本规则与棋盘布局第二课时:五子棋基本策略与技巧第三课时:五子棋对弈实践(一)第四课时:五子棋对弈实践(二)第五课时:五子棋历史文化与竞技礼仪教学内容的选择和组织确保了科学性和系统性,使学生能够在掌握五子棋基本知识与技能的同时,了解其文化内涵,提升个人素养。
课程设计-c语言设计-五子棋游戏河南城建学院测绘与城市空间信息系测绘程序设计题目: 五子棋游戏班级: 0614112 人数: 3人成员:学号:指导老师:时间:2012年6月目录1课程设计报告-------------------2 1.1问题描述----------------------2 1.2 任务分工- - - - - - - - - - - - - - - 2 1.3需求分析---------------------------3 1.4概要设计-----------------------3 1.5详细设计-----------------------4 1.6调试分析---------------------5 2源程序---------------------6 3程序的说明文件-------------------12 4课设总结-----------------------131.课程设计报告1.1问题描述连珠(五子棋)是有两个人在一盘棋上进行对抗的竞技运动。
在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围的交叉点上落子,如此轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜。
此时,算法结束。
当有任何一方想退出时,都可在算法中实现。
1.2 五子棋的背景传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为15×15,棋子放置于棋盘线交叉点上。
两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。
因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。
1.2 任务分工组长:赵哲武负责小组程序的输入和创新部分,分配任务,使工作衔接有序,以及程序的整体规划,将各部分文件衔接,查找错误,排版论文并完成主函数的设及相关变量的定义,完成void attentoin()的设计细节设计,完成void draw_box(),void change();void judgekey()的设计并调试并运行程序,完成实验报告。
组员:李志强完成void judgewho(int x,int y)的设计,并作出自己部分的编程代码,流程图。
组员:夏韦程完成void draw_cicle(int x,int y,int color)的设计,并作出自己部分的编程代码,流程图。
组员:李少帅完成int judgeresult(int x,int y)的设计。
1.3需求分析(1)、输出游戏规则并由用户决定是否遵守并开局。
(2)、要求动态画出棋盘大小。
(3)、画棋子并确定其颜色。
(4)、玩家轮流下棋。
(5)、判断键盘输入哪个键按规则执行操作(6)、判断谁先落棋。
(7)判断赢家1.4概要设计流程图流程图 1YY开输出游玩家谁先下棋,输流程图21.5详细设计本程序中包含一个主函数和七个子函数,它们的函数名及功能分别如下:void draw_box();画棋盘,确定背景色和棋盘色按用户输入大小画出棋盘void draw_cicle(int x,int y,int color);画棋子,确定棋子大小及颜色画出棋子。
void change();改变玩家,作战双方轮流下棋。
void judgewho(int x,int y);判断谁落棋,是1则画出白棋,是2则画出红棋。
void judgekey();判断键盘输入哪个键按规则执行操作,UP 键上移,DOWN键下移,LEFT键左移,RIGHT键右移,ESC键退出,SPACE 键确定棋子落点。
int judgeresult(int x,int y);判断赢家,横向竖向斜向够5个相同颜色的棋子则为赢家。
void attentoin();显示游戏规则,按上下左右键移动棋子,按空格键确定棋子落点,不能在棋盘外按空格键。
1.6调试分析运行结果:屏幕显示:Please input who is first:1 or 2当输入1时,白棋先走;当输入2时,红棋先走。
屏幕显示:Please input the size of chessbox:从键盘输入s值,则棋盘大小为s*s型。
屏幕显示:Left, Right, Up,Down KEY to move, Space to put, ESC-quit 及棋盘,棋子,用上下左右键控制棋子向,用空格键确定棋子的落点。
当白棋赢时,显示The White Win ! 当红棋赢时,显示The Red Win !算法改进思想:将棋盘由原先的固定大小改进为可动态变化,由原来固定的白棋先走改进为让用户可以选择哪方先落子。
2源程序#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<bios.h>#include<conio.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define SPACE 0x3920#define BILI 20#define JZ 4#define JS 3#define N 19int box[N][N],s; /*落子点*/int step_x,step_y ;int key ;int flag,i,j ;void draw_box();void draw_cicle(int x,int y,int color);void change();void judgewho(int x,int y);void judgekey();int judgeresult(int x,int y);void attentoin();void attentoin() /*游戏规则*/{char ch ;printf("Play attentoins:\n\n");printf("1. Press Left,Right,Up,Down Key to move Piece\n\n");/*方向键移动棋子*/printf("2. Press Space to place the Piece\n\n");/*空格键确定棋子落点*/printf("3. DO NOT press Space outside of the draw_box\n\n");/*棋盘外不能落棋*/ printf("Do you accept the above Playing attentoins? [Y/Other]:");/*是否遵守*/ while(1){ ch=getche();if(ch=='Y'||ch=='y') break ;else exit(0);}printf("\n\nwhat size of the draw_box:");scanf("%d",&s); /*输出棋盘大小*/printf("\n\nwho is the frist:1 or 2? "); /*谁先落子*/while(1){ scanf("%d",&flag);if(flag!=1&&flag!=2) printf("Error!\n");else break;}}void draw_box() /*画出棋盘*/{int x1,x2,y1,y2 ;setbkcolor(LIGHTBLUE); /*背景色*/setcolor(YELLOW); /*文本色*/gotoxy(7,2);printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit.");for(x1=1,y1=1,y2=s;x1<=s;x1++)line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);/*画竖线*/for(x1=1,y1=1,x2=s;y1<=s;y1++)line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI); /*画横线*/ for(x1=1;x1<=s;x1++)for(y1=1;y1<=s;y1++)box[x1][y1]=0 ; /*棋盘初始化*/}void draw_cicle(int x,int y,int color) /*棋子*/{setcolor(color); /*棋子颜色*/setlinestyle(SOLID_LINE,0,1); /*线条类型*/x=(x+JZ)*BILI ;y=(y+JS)*BILI ;circle(x,y,8); /*画半径为8的棋子*/}void judgekey(){switch(key){case LEFT : /*左键控制棋子左移*/if(step_x-1<0) break ;else{for(i=step_x-1,j=step_y;i>=1;i--)if(box[i][j]==0){ draw_cicle(step_x,step_y,LIGHTBLUE); break ;}if(i<1)break ;step_x=i ;judgewho(step_x,step_y);break ;}case RIGHT : /*右键控制棋子右移*/if(step_x+1>s) break ;else{for(i=step_x+1,j=step_y;i<=s;i++)if(box[i][j]==0){ draw_cicle(step_x,step_y,LIGHTBLUE); break ; }if(i>s)break ;step_x=i ;judgewho(step_x,step_y);break ;}case DOWN : /*下键控制棋子下移*/if(step_y+1>s) break ;else{for(i=step_x,j=step_y+1;j<=s;j++)if(box[i][j]==0){ draw_cicle(step_x,step_y,LIGHTBLUE);break ; }if(j>s)break ;step_y=j ;judgewho(step_x,step_y);break ;}case UP : /*上键控制棋子上移*/if(step_y-1<0) break ;else{for(i=step_x,j=step_y-1;j>=1;j--)if(box[i][j]==0){ draw_cicle(step_x,step_y,LIGHTBLUE); break ; }if(j<1)break ;step_y=j ;judgewho(step_x,step_y);break ;}case ESC : break ; /*ESC键退出游戏*/case SPACE : /*空格键控制落子*/if(step_x>=1&&step_x<=s&&step_y>=1&&step_y<=s){if(box[step_x][step_y]==0){box[step_x][step_y]=flag ;if(judgeresult(step_x,step_y)==1){sound(1000);delay(1000);nosound();gotoxy(30,4);cleardevice();if(flag==1){ settextstyle(3,0,5);outtextxy(120,120,"The White Win !"); /*显示白棋赢*/ setcolor(14);}if(flag==2){ settextstyle(3,0,5);outtextxy(120,120,"The Red Win !"); /*显示红棋赢*/setcolor(15);settextstyle(3,0,5);}getch();exit(0);}change();break ;}}elsebreak ;}}void change() /*改变玩家*/ {if(flag==1)flag=2 ;elseflag=1 ;}void judgewho(int x,int y){if(flag==1)draw_cicle(x,y,15); /*画白棋*/if(flag==2)draw_cicle(x,y,4); /*画红棋*/}int judgeresult(int x,int y){int j,k,n;while(1){n=0 ;for(j=x,k=y;j>=1;j--) /*水平向左数*/ {if(box[j][k]==flag)n++;elsebreak ;}for(j=x,k=y;j<=s;j++) /*水平向右数*/ {if(box[j][k]==flag)n++;elsebreak ;}if(n>5) return(1);n=0 ;for(j=x,k=y;k>=1;k--) /*垂直向上数*/{if(box[j][k]==flag)n++;elsebreak ;}for(j=x,k=y;k<=s;k++) /*垂直向下数*/{if(box[j][k]==flag)n++;elsebreak ;}if(n>5) return(1);n=0 ;for(j=x,k=y;j>=1,k>=1;j--,k--) /*向左上方数*/ {if(box[j][k]==flag)n++;elsebreak ;}for(j=x,k=y;j<=s,k<=s;j++,k++) /*向右下方数*/{if(box[j][k]==flag)n++;elsebreak ;}if(n>5) return(1);n=0 ;for(j=x,k=y;j<=s,k>=1;j++,k--) /*向右上方数*/{if(box[j][k]==flag)n++;elsebreak ;}for(j=x,k=y;j>=1,k<=s;j--,k++) /*向左下方数*/{if(box[j][k]==flag)n++;elsebreak ;}if(n>5) return(1);return(0);}}void main(){int gdriver=VGA,gmode=VGAHI; /*定义图形适配器*/clrscr();attentoin();initgraph(&gdriver,&gmode,"c:\\tc"); /*图形初始化*/draw_box();do{step_x=0,step_y=0 ; /*棋盘初始化*/ judgewho(step_x-1,step_y-1);do{while(bioskey(1)==0);key=bioskey(0);judgekey();}while(key!=SPACE&&key!=ESC);}while(key!=ESC);closegraph(); /*关闭图形*/}3程序的说明文件void draw_box(); (7)void draw_cicle(int x,int y,int color); (8)void change(); (10)void judgewho(int x,int y); (10)void judgekey(); (8)int judgeresult(int x,int y); (11)void attentoin(); (7)主函数 (12)4课设总结从6月11日开始,我们进行了为期两周的测绘程序设计。