ImageVerifierCode 换一换
格式:DOC , 页数:31 ,大小:471.04KB ,
资源ID:5359178      下载积分:12 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/5359178.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(五子棋电气班c语言程序设计报告.doc)为本站上传会员【丰****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

五子棋电气班c语言程序设计报告.doc

1、C语言课程设计C语言程序设计报告题目: 五子棋 班级: 电气Qxxx班 人数: 3人 小组成员: xx、xx、xx 指导老师: xx时间: 2015.11.30目录第一章 课程设计的目的和要求31.1 课程设计的目的31.2 课程设计的要求31.3 课程设计的实验环境3第二章 功能描述4第三章 总体设计53.1 功能模块设计53.1.1 任务执行流程图53.1.2 下棋函数流程图63.2 数据结构设计73.2.1 定义结构体73.2.2 定义数组73.2.3 全局变量73.3 函数功能描述7第四章 程序实现84.1源码分析84.2运行结果及界面介绍22第五章 后记27第一章 课程设计的目的和要

2、求1.1 课程设计的目的1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;2.熟练掌握流程图的绘制、程序设计文档的书写;3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。1.2 课程设计的要求1、编写程序代码,调试所写程序使其能够正确运行;2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;3、能够实现悔棋、存档和读档等附加功能1.3 课程设计的实验环境该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系

3、统中进行,程序设计要求在visual C+6.0平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp软件环境:安装VC+6.0第二章 功能描述本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。程序能实现界面的初始化功能、下棋功能、人机智能对战功能、胜负判断功能、悔棋功能、读档及存档功能,通过键盘操作控制下棋。(1)显示欢迎界面。在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;(2)初始化功能。程序初始化屏幕和

4、棋盘,默认玩家先行。(3)下棋操作。利用W、S、A、D及空格键实现下棋操作,在下棋过程中能随时按ESC键退出。(4)人机智能对战功能。电脑根据玩家的下棋对棋盘进行智能分析,然后下棋,实现人机对弈。(5)悔棋功能。玩家可以有三次悔棋机会。(6)胜负判断功能。程序能对下棋的结果进行判断,分出胜负。并显示获胜方。(7)读档、存档功能。游戏中途退出会提示是否存档,如果存档,则下次开始的时候会提示是否读档继续上次的游戏。第三章 总体设计3.1 功能模块设计 开始3.1.1 任务执行流程图 初始化程序 按Esc键玩家行棋 按Esc键玩家获胜?否是电脑行棋 显示玩家 获胜信息电脑获胜? 否 是显示电脑 获胜

5、信息 结束3.1.2 下棋函数流程图 结束向键值指示的方向移动一步key=SPACE?显示获胜信息Key=ESC?boardij等于 ?玩家 获胜?下一步超出边界?交换行棋方画棋子,显示运动轨迹获取key值boardij赋值为b 开始 是 否 否 是 否 是否 否是3.2 数据结构设计3.2.1 定义结构体将棋盘上每个点的左边定义为一个结构体;typedef struct int x, y;point;3.2.2 定义数组定义数组board1515表示棋盘,用来记录棋盘上每个棋子的状态;3.2.3 全局变量定义整形数组 back4 用来记录前两步双方下棋的状态,便于后面进行悔棋操作 定义整形

6、n = 3; 用来记录悔棋次数3.3 函数功能描述1、显示欢迎信息 bool welcome();2、初始化棋盘 void InitBoard();3、输出棋盘 void chessboard();4、判断胜负 int Win(char c); 5、下棋 void play(point &r);6、显示获胜 void showsusscced(char c);7、悔棋 bool BackStep(int back);8、人机对战智能算法 void ComAlgo(point &r);9、存盘函数 bool SaveLoad();10、读盘函数 bool DownLoad();第四章 程序实现4

7、.1源码分析1、显示欢迎信息bool welcome()char ch; printf(nnnn);printf(n);printf( Welcome you to gobang World! n);printf(1、You can use the A,D,W and S key to move the chessman; n);printf(2、You can press Space key to enter after you move it; n);printf(3、You can use Esc key to exit the game; n);printf(4、Dont move t

8、he pieces out of the chessboard. n);printf( Do you want to continue?(Y/N) n);printf(n);while (! strchr(YN, ch = toupper(getch()putchar(a);if(ch = N) return false;else return true;2、初始化棋盘void InitBoard()char ch; int i, j;printf(nn是否读档?(Y/N)n);if(ch = toupper(getch() = Y & DownLoad()printf(读档成功!n);els

9、efor(i = 0; i 15; i +) for(j = 0; j 15; j +)boardij = ;chessboard();3、输出棋盘void chessboard()/清屏system(cls); /输出棋盘的上边缘printf( 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 n);printf( n);printf( n);for(int i = 1; i = 15; i +)/输出列序号及相应的列元素printf(%02d, i); for(int j = 1; j = 15; j +)switch (boardi - 1j -

10、1)/(由于在命令行模式下显示,所以,颜色是颠倒的)case : printf(); break; /如果当前位置无子,则输出棋盘case h: printf(); break; /如果是黑子,则输出黑子的符号case b: printf(); break; /如果是白子,则输出白子的符号case g: printf(); break; /显示光标/输出每列的最后一个制表符printf(%02dn, i); printf( n);printf( n);printf( 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 n);4、下棋void play(po

11、int &r)char key, c;dowhile (! strchr(ADWSZ, key = toupper(getch()if(key = 27 | key = 32) break;putchar(a);switch(key)case A: /向左if(r.y = 15) break;else r.y +;c = boardr.x - 1r.y - 1;boardr.x - 1r.y - 1 = g;chessboard();boardr.x - 1r.y - 1 = c;break;case W: /向上if(r.x = 15) break;else r.x +;c = boardr

12、.x - 1r.y - 1;boardr.x - 1r.y - 1 = g;chessboard();boardr.x - 1r.y - 1 = c;break;case 32: /SPACE空格if(boardr.x - 1r.y - 1 != ) key = 0; /key的值修改为非32的数值else boardr.x - 1r.y - 1 = b;back0 = r.x - 1; back1 = r.y - 1; /记录当前位置,便于悔棋 chessboard();break;case Z: /悔棋BackStep(back);break;case 27: /ESC退出printf(G

13、ame Over!n);printf(是否存档?(Y/N)n);if(c = toupper(getch() = Y & SaveLoad() printf(存档成功!n);exit(1);default:fflush(stdin);while(key != 32);注:1、W、S、A、D分别表示上下左右键。如果超出了棋盘则不进行操作。否则向键值指示的方向移动一步。2、c = boardr.x - 1r.y - 1; boardr.x - 1r.y - 1 = g; chessboard();boardr.x - 1r.y - 1 = c;这四句表示记录当前移动位置,然后显示光标,显示完以后还

14、原棋盘。3、按空格键表示下棋,如果当前位置有棋子则不进行操作。back0 = r.x - 1; back1 = r.y - 1; 用于记录当前位置,便于悔棋 。4、按Z悔棋5、按ESC键退出,并且提示是否存档。5、判断胜负int Win(char c) int i, j, ok = 1; /判断横着的5个是否都相等for(i = 0; i 15; i +) for(j = 0; j 11; j +)if(boardij=c & boardij+1=c & boardij+2=c & boardij+3=c & boardij+4=c) return ok;/判断竖着的5个是否都相等for(j

15、= 0; j 15; j +)for(i = 0; i 11; i +) if(boardij=c & boardi+1j=c & boardi+2j=c & boardi+3j=c & boardi+4j=c) return 1;/判断左斜5个是否都相等for(i = 0; i 11; i +)for(j = 0; j 11; j +) if(boardij=c & boardi+1j+1=c & boardi+2j+2=c & boardi+3j+3=c & boardi+4j+4=c) return ok;/判断右斜5个是否都相等for(i = 0; i 3; j -) if(board

16、ij=c & boardi+1j-1=c & boardi+2j-2=c & boardi+3j-3=c & boardi+4j-4=c) return ok;return ok = 0; 注:全篇扫面棋盘,从四个方向判断是否存在连着5个棋子6、显示获胜void showsusscced(char c)if(c = b)printf(游戏结束 白棋获胜!n);else if(c = h)printf(游戏结束 黑棋获胜!n);elseprintf(游戏结束 和棋!n);7、悔棋bool BackStep(int back)if(n 0)boardback0back1 = boardback2b

17、ack3 = ;chessboard();n -;printf(悔棋成功,您还有%d次悔棋机会n, n);return true;elseprintf(悔棋超过三次,您不能悔棋了!n);return false;8、存盘函数bool SaveLoad() FILE *f;f = fopen(Load.TXT, w);if(f = NULL)printf(存档失败!n);return false;elsefwrite(board, sizeof(char), 225, f);fclose(f);return true;9、读盘函数bool DownLoad() FILE *f;f = fopen

18、(Load.TXT, r);if(f = NULL)printf(读档失败!n);return false;elsefread(board, sizeof(char), 225, f);fclose(f);return true;注:存盘存在当前文件夹内的Load.txt文件中,用fwrite()函数和fread()函数读取和存储数组元素。10、人机对战智能算法void ComAlgo(point &r)/棋型数组int qiju2151582 = 0;/*其中第一个下标为0时表示白棋,为1时表示黑棋,第二和第三个下标表示(x,y),第四个下标表示8个方向,最后一个下标为0时表示棋子数,为1时

19、表示空格数*/char d; /表示黑棋或白棋int k, i, j, q, a = 1; /(k, i, j, q, 0/1)表示棋型数组; a, b用来计数intb = 0, y1 = 0, y2 = 0, x1 = 0, x2 = 0; / b表示得分; (x1, y1)和(x2, y2)表示坐标int a11515 = 0, a21515 = 0; /用来记录白棋和黑棋各个棋子位置的得分/*为双方填写棋型表*/for(k = 0; k 2; k +)for(i = 0; i 15; i +)for(j = 0; j 15; j +)if(boardij = )for(q = 0; q

20、= 0)for(;j - a = 0;)if(boardij-a = d) b+; a+; continue;else break;qijukijq0 = b; b = 0;if(boardij-a = & j - a = 0) qijukijq1 = 1; a = 1;else qijukijq1 = 0; a = 1;/左上if(q = 1 & i = 0 & j = 0)for(;i - a = 0 & j - a = 0;)if(boardi-aj-a = d) b+; a+; continue;else break;qijukijq0 = b; b = 0;if(boardi-aj-

21、a = & j - a = 0 & i - a = 0) qijukijq1 = 1; a = 1;else qijukijq1 = 0; a = 1;/上if(q = 2 & i = 0)for(;i - a = 0;)if(boardi-aj = d) b+; a+; continue;else break;qijukijq0 = b; b = 0;if(boardi-aj = & i - a = 0) qijukijq1 = 1; a = 1;else qijukijq1 = 0; a = 1;/右上if(q = 3 & i = 0 & j = 0 & j + a = 0 & j + a

22、 15) qijukijq1 = 1; a = 1;else qijukijq1 = 0; a = 1;/右if(q = 4 & j 15)for(;j + a 15;)if(boardij+a = d) b+; a+; continue;else break;qijukijq0 = b; b = 0;if(boardij+a = & j + a 15) qijukijq1 = 1; a = 1;else qijukijq1 = 0; a = 1;/右下if(q = 5 & i 15 & j 15)for(;i + a 15 & j + a 15;)if(boardi+aj+a = d) b+

23、; a+; continue;else break;qijukijq0 = b; b = 0;if(boardi+aj+a = & i + a 15 & j + a 15) qijukijq1 = 1; a = 1;else qijukijq1 = 0; a = 1;/下if(q = 6 & i 15)for(;i + a 15;)if(boardi+aj = d) b+; a+; continue;else break;qijukijq0 = b; b = 0;if(boardi+aj = & i + a = 0 & i 15)for(;i + a = 0;)if(boardi+aj-a =

24、 d) b+; a+; continue;else break;qijukijq0 = b; b = 0;if(boardi+aj-a = & i + a = 0) qijukijq1 = 1; a = 1;else qijukijq1 = 0; a = 1;/*根据评分规则对每一个空格评分*/for(k = 0; k 2; k +)for(i = 0; i 15; i +)for(j = 0; j 15; j +)if(k = 0) /为白棋评分for(q = 0; q 4; q +)/活四if( (qijukijq0 + qijukijq+40) = 4 & qijukijq1 = 1 &

25、 qijukijq+41 = 1 )b += 7000;/活三if( (qijukijq0 + qijukijq+40) = 3& qijukijq1 = 1 & qijukijq+41 = 1 )b += 301;/活二if( (qijukijq0 + qijukijq+40) = 2& qijukijq1 = 1 & qijukijq+41 = 1 )b += 43;/活一if( (qijukijq0 + qijukijq+40) = 1& qijukijq1 = 1 & qijukijq+41 = 1 )b += 11;/死四if( (qijukijq0 + qijukijq+40) =

26、 4& ( (qijukijq+41 = 0) | (qijukijq1 = 0) ) )b += 7000;/死三if( (qijukijq0 + qijukijq+40) = 3& ( (qijukijq1 = 1 & qijukijq+41 = 0)| (qijukijq1 = 0 & qijukijq+41 = 1) ) )b += 63;/死二if( (qijukijq0 + qijukijq+40) = 2& ( (qijukijq1 = 1 & qijukijq+41 = 0)| (qijukijq1 = 0 & qijukijq+41 = 1) ) )b += 6;/死一if(

27、 (qijukijq0 + qijukijq+40) = 1& ( (qijukijq1 = 1 & qijukijq+41 = 0)| (qijukijq1 = 0 & qijukijq+41 = 1) ) )b += 1;if(b = 126 | b = 189 | b = 252) b = 1500;if(b = 106) b = 1000;a1ij = b; b = 0;if(k = 1) /为黑棋评分for(q =0 ; q 4; q +)/活四if( (qijukijq0 + qijukijq+40) = 4& qijukijq1 = 1 & qijukijq+41 = 1 )b

28、+= 30000;/活三if( (qijukijq0 + qijukijq+40) = 3& qijukijq1 = 1 & qijukijq+41 = 1 )b += 1500;/活二if( (qijukijq0 + qijukijq+40) = 2& qijukijq1 = 1 & qijukijq+41 = 1 )b += 51;/活一if( (qijukijq0 + qijukijq+40) = 1& qijukijq1 = 1 & qijukijq+41 = 1 )b += 16;/死四if( (qijukijq0 + qijukijq+40) = 4& ( (qijukijq+41 = 0) | (qijukijq1 = 0) ) )b += 30000;/死三if( (qijukijq0 + qijukijq+40) = 3& ( (qijukijq1 = 1 & qijukijq+41 = 0)| (qijukijq1 = 0 & qijukijq+41 = 1) ) )b += 71;/死二if( (qijuk

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服