欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    五子棋课程设计实验报告.docx

    • 资源ID:9372626       资源大小:223.09KB        全文页数:33页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    五子棋课程设计实验报告.docx

    1、五子棋课程设计实验报告西南交通大学程序语言综合课程设计五子棋游戏课 程 程序语言综合课程设计 学 院 信息科学与技术学 专 业 软件工程 姓 名 学 号 20119050 日 期 2016年月日 第一章 课程设计的目的和要求1.1 课程设计的目的1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;2.熟练掌握流程图的绘制、程序设计文档的书写;3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。1.2 课程设计的要求1、编写程序代码,调试所写程序使其能

    2、够正确运行;2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;3、能够实现悔棋、存档和读档等附加功能1.3 课程设计的实验环境该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C+6.0平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp软件环境:安装VC+6.0第二章 功能描述本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。程

    3、序能实现界面的初始化功能、下棋功能、人机智能对战功能、胜负判断功能、悔棋功能、读档及存档功能,通过键盘操作控制下棋。(1)显示欢迎界面。在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;(2)初始化功能。程序初始化屏幕和棋盘,默认玩家先行。(3)下棋操作。利用W、S、A、D及空格键实现下棋操作,在下棋过程中能随时按ESC键退出。(4)人机智能对战功能。电脑根据玩家的下棋对棋盘进行智能分析,然后下棋,实现人机对弈。(5)悔棋功能。玩家可以有三次悔棋机会。(6)胜负判断功能。程序能对下棋的结果进行判断,分出胜负。并显示获胜方。(7)读档、存档功能。游戏中途退出会提示是否存档,如果存档,则下次开始

    4、的时候会提示是否读档继续上次的游戏。第三章 总体设计3.1 功能模块设计3.1.1 任务执行流程图 否 是 否 是3.1.2 下棋函数流程图 是 否 否 是 否 是 否 否 是3.2 数据结构设计3.2.1 定义结构体将棋盘上每个点的左边定义为一个结构体;typedef struct int x, y;point;3.2.2 定义数组定义数组board1515表示棋盘,用来记录棋盘上每个棋子的状态;3.2.3 全局变量定义整形数组 back4 用来记录前两步双方下棋的状态,便于后面进行悔棋操作 定义整形 n = 3; 用来记录悔棋次数3.3 函数功能描述1、显示欢迎信息 bool welcom

    5、e();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.1源码分析1、显示欢迎信息bool welcome() char ch; printf(

    6、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 the pieces out of the chessboard. n); p

    7、rintf( 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); else for(i = 0; i 15; i +) for

    8、(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 - 1) /(由于在命令行模式下显

    9、示,所以,颜色是颠倒的) 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(point &r

    10、) char key, c; do while (! 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 +

    11、; c = boardr.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

    12、; case 27: /ESC退出 printf(Game 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 -

    13、1 = c; 这四句表示记录当前移动位置,然后显示光标,显示完以后还原棋盘。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 & boardi

    14、j+4=c) return ok; /判断竖着的5个是否都相等 for(j = 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

    15、; /判断右斜5个是否都相等 for(i = 0; i 3; j -) if(boardij=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); else printf(游戏结束 和棋!n); 7、悔棋bool Ba

    16、ckStep(int back) if(n 0) boardback0back1 = boardback2back3 = ; chessboard(); n -; printf(悔棋成功,您还有%d次悔棋机会n, n); return true; else printf(悔棋超过三次,您不能悔棋了!n); return false; 8、存盘函数bool SaveLoad() FILE *f; f = fopen(Load.TXT, w); if(f = NULL) printf(存档失败!n); return false; else fwrite(board, sizeof(char), 2

    17、25, f); fclose(f); return true; 9、读盘函数bool DownLoad() FILE *f; f = fopen(Load.TXT, r); if(f = NULL) printf(读档失败!n); return false; else fread(board, sizeof(char), 225, f); fclose(f); return true; 注:存盘存在当前文件夹内的Load.txt文件中,用fwrite()函数和fread()函数读取和存储数组元素。10、人机对战智能算法void ComAlgo(point &r) /棋型数组 int qiju2

    18、151582 = 0; /*其中第一个下标为0时表示白棋,为1时表示黑棋,第二和第三个下标表示(x,y), 第四个下标表示8个方向,最后一个下标为0时表示棋子数,为1时表示空格数*/ char d; /表示黑棋或白棋 int k, i, j, q, a = 1; /(k, i, j, q, 0/1)表示棋型数组; a, b用来计数 int b = 0, y1 = 0, y2 = 0, x1 = 0, x2 = 0; / b表示得分; (x1, y1)和(x2, y2)表示坐标 int a11515 = 0, a21515 = 0; /用来记录白棋和黑棋各个棋子位置的得分 /*为双方填写棋型表*

    19、/ for(k = 0; k 2; k +) for(i = 0; i 15; i +) for(j = 0; j 15; j +) if(boardij = ) for(q = 0; q = 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

    20、 - a = 0 & j - a = 0;) if(boardi-aj-a = d) b+; a+; continue; else break; qijukijq0 = b; b = 0; if(boardi-aj-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(boa

    21、rdi-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 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+; 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;


    注意事项

    本文(五子棋课程设计实验报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开