欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    c语言报告五子棋.doc

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

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

    c语言报告五子棋.doc

    青岛理工大学C语言程序设计题目 游戏五子棋 指导教师: 李兰 姓名: 王鹏 学号: 200907127 班级: 计算094 专业: 计算机科学与技术 地点: 二号实验楼第六机房 时间: 6.28 至 7.1 一、内容游戏五子棋在这个小游戏中,实现了两人对战的游戏模式,没有添加禁手规则,另外考虑到落子时的可能失误,就添加了悔棋工具,游戏过程中可以进行游戏存档,进入悔棋和存档的方法为将光标移动到已有子的位置,敲一下落子键即可。下次游戏时候可以进入存档界面然后选择读取游戏存档即可继续玩上次的游戏。在游戏时自动计算双方各胜几局,平几局。按键控制 一号玩家: 上 :w 下 :s 左 : a 右 : d 落子 : f 二号玩家: 上 :I 下 :k 左 : j 右 : l 落子 : h 二、上机环境操作系统:Windows 98/XP/Win 7开发工具:VC+6.0三、函数调用关系图zq()check()print()Printsjm()checkheqi()main()system()newdata()fuzhi()huifu()start()jilu()huiqi()四、各函数功能说明对每个函数功能加以说明,说明该函数主要实现了什么内容。1 int main() 主函数2 system(“color 5a”) 控制台前景、背景颜色设置3 system(“cls”) 清屏4 Printsjm(void) 输出游戏首界面5 start(void) 界面初始化6 print(void) 界面刷新7 check(void) 检测是否有一方赢棋8 checkheqi(void) 检测是否和棋9 zq(int,char (*p),char (*p) 走棋落子10 huiqi(char (*p) 悔棋11 jilu(char (*p) 记录上次落子前的界面12 cundang(void) 存储游戏进度13 duqu(void) 读取游戏进度14 fuzhi(void) 保存临时界面15 huifu(void) 恢复临时界面以实现光标移动16 newdata(void) 数据刷新五、算法描述或流程图system(“color 5a”)和system(“cls”) 只需要调用<stdlib.h>头文件,并在使用前将要声明的变量声明好即可。/*输出游戏首页*/*原样输出即可*/void Printsjm() printf(" * * * * * * * * * * * * * * * 游戏名称 * * * * * * * * * * * * * * *n");printf(" * * * * * * * * *n");printf(" * * * * * * 五子棋 * * * * *n");printf(" * * * * * * * * *n"); printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *n");printf(" n");printf(" * * * * * * * * * * * * * * * 游戏规则* * * * * * * * * * * * * * * *n"); printf(" * * * * * * * *n");printf(" * * * * 游戏悔棋时不允许连续悔棋 * * * *n"); printf(" * * * * * * * *n");printf(" * 任一方五子相连即获胜,一局游戏也就结束 *n");printf(" * * * * * * * *n"); printf(" * 请遵守游戏规则谢谢! *n"); printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *n");printf(" n");printf(" * * * * * * * * * * * * * * * 游戏制作* * * * * * * * * * * * * * * *n");printf(" * * * * * * * *n"); printf(" * * 计算机工程学院094班 * *n");printf(" * * * * * * * *n"); printf(" * * * * * * * 王鹏 * * * * * * *n"); printf(" * * * * * * * 2010.6.28 * * * * * * *n");printf(" *n"); /*恢复*/void huifu()int i,j;for(i=0;i<20;i+)for(j=0;j<20;j+)qipanij=linshiij; /*临时界面恢复到实际界面*/void fuzhi()int i,j;for(i=0;i<20;i+)for(j=0;j<20;j+)linshiij=qipanij;/*记录临时界面*/void cundang()FILE *fp;int i,j;if(fp=fopen(filename,"w")=NULL) /*打开存档文件*/printf(" 存档失败!n");printf(" 按任意键返回游戏界面!");i=_getch();fclose(fp);else for(i=0;i<20;i+)for(j=0;j<20;j+)cd.cunij=linshiij; /*数据恢复*/cd.jx=jx;cd.jy=jy;cd.leiji=leiji;fwrite(&cd,sizeof(struct cund),1,fp);printf(" 存档成功!n");printf(" 按任意键返回游戏界面!");i=_getch();fclose(fp);system("cls");void duqu() /*读取游戏进度*/FILE *fpp;int i,j; if(fpp=fopen(filename,"r")=NULL)printf(" 你还没有存档,读取存档失败!n");printf(" 按任意键返回游戏界面!"); i=_getch();fclose(fpp);elsefread(&cd,sizeof(struct cund),1,fpp);fclose(fpp);jx=cd.jx;jy=cd.jy;leiji=cd.leiji;for(i=0;i<20;i+)for(j=0;j<20;j+)qipanij=cd.cunij;system("cls");printf(" 读取存档成功,请继续游戏!n");printf(" 按任意键返回游戏界面!");i=_getch();void jilu(char (*p)20)/*记录悔棋前棋盘个子的位置以及悔棋后该谁落子*/int i,j; for(i=0;i<20;i+) for(j=0;j<20;j+)*(*(p+i)+j)=qipanij;/*悔棋到上次你的落子权*/void huiqi(char (*p)20)int i,j;for(i=0;i<20;i+)for(j=0;j<20;j+)qipanij=*(*(p+i)+j);/*输出界面,每次走完一步棋都要刷新界面*/void print()/*start()函数也是同样道理*/int i=0,j=0,k=0;/*显示列坐标*/printf("000|001|002|003|004|005|006|007|008|009|010|011|012|013|014|n");for(i=1;i<15;i+) /*棋盘的上边界*/printf("-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|n"); for(j=0;j<15;j+) if(j=0) if(i<10) printf("00%d|",i);/*显示可控制行坐标以及左边界*/else printf("0%d|",i);elseprintf(" %c |",qipanij); /*显示棋盘上的字符以及由边界*/printf("n");/*显示棋盘下边界*/printf("-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|n"); if(leiji%2=1) printf("n nn 一号玩家落子:nnn");else printf("n nn 二号玩家落子:nnn"); /*检测棋盘上是否有一方赢棋*/check() /*调用时对棋盘上的一号二号玩家分别进行行检测、列检测、左斜线检测、右斜线检测*/ if(qipanij=black)&&(qipanij+1=black)&&(qipanij+2=black)&&(qipanij+3=black)&&(qipanij+4=black)/* 一号玩家行检测*/if(qipanij=white)&&(qipanij+1=white)&&(qipanij+2=white)&&(qipanij+3=white)&&(qipanij+4=white) /*二号玩家列检测*/if(qipanij=black&&qipani+1j-1=black&&qipani+2j-2=black&&qipani+3j-3=black&&qipani+4j-4=black) /*右斜线检测*/*检测双方是否和棋并在棋盘满的时候自动判和棋*/int checkheqi()char ch;if(leiji-1)=186) /*统计数初始值为1,现在减一来判断棋子数是否快落满棋盘*/ printf(" 真是棋逢敌手啊,棋已至此仍未能分出胜负.n");printf(" 但现在棋盘即将落满,请问两位棋士是否选择和棋,改日再战? Y / N ?n");ch=getchar();while(ch!='Y'|ch!='N')/*显示询问界面,提示是否和棋*/printf("请选择是或否 Y / N ");ch=getchar();if(ch='Y') /*选择是,如下输出,并返回主函数所需的控制值*/printf("哈哈.来日方长.两位光然有棋士风范,拿得起放得下.改日再战.n");return(3);if(ch='N') /*选择否,如下输出,并返回主函数所需的控制值*/printf(" 哈哈,看来两位都不愿和棋. n");printf("那就请继续下完此局,但是不要忘了,棋盘落满子的时候自动判为和棋.n");return(0);if(leiji-1)=196)/*当棋子数等于棋盘空格数时自动判和棋,并返回主函数所需的控制值*/printf(" nn棋盘已满,系统自动判为和棋,请两位棋士改日再战.nnnn");return(5);return(0);/*否则返回零继续游戏*/*一下语句块为zq()、huiqi()、jilu(),fuzhi(),huifu()五个函数的调用*/*走棋函数*/void zq(char player,char (*p1)20,char (*p2)20)int mn=0,i=1,p,q;char key;key=_getch();if(player=white) while(1)/*实现光标移动的关键算法*/ switch(key) case 'j': if(ly>1) huifu();ly-;qipanlxly=95;system("cls");print();break; case 'l': if(ly<14)huifu();ly+;qipanlxly=95;system("cls");print();break; case 'k': if(lx<14)huifu();lx+;qipanlxly=95;system("cls");print();break; case 'i': if(lx>1) huifu();lx-;qipanlxly=95;system("cls");print();break;key=_getch();if(key='h')if(linshilxly=black|linshilxly=white)system("cls");printf("请选择:n");printf(" 【1】进入游戏界面存档n");printf(" 【2】进入游戏悔棋界面n");printf(" "); scanf("%d",&mn);if(mn=1)mn=0;printf("请选择:n"); printf(" 【1】保存游戏进度n");printf(" 【2】读取游戏进度n");printf(" "); scanf("%d",&mn);if(mn=1)mn=0;printf(" 你选择了保存游戏进度!n");cundang();system("cls");print();else if(mn=2)mn=0;printf(" 你选择了读取游戏进度!n"); duqu();fuzhi();system("cls");print(); else if(mn=2)mn=0;printf(" 你选择了悔棋!n");if(kongzhi=player1) if(leiji%2=0) huiqi(p2); /*先走棋的玩家悔棋时的n为偶数*/ else huiqi(p2); leiji-=2; jx-; jy-; fuzhi(); system("cls"); print();elseif(leiji%2=1) huiqi(p2); /*先走棋的玩家悔棋时的n为偶数*/ else huiqi(p2); leiji-=2; jx-; jy-; fuzhi(); system("cls"); print();else if(linshilxly!=black&&linshilxly!=white)for(p=0;p<20;p+) for(q=0;q<20;q+) if(qipanpq!=black&&qipanpq!=white) qipanpq=32; if(kongzhi=player1) if(2*jx=leiji) jilu(p1); jx+; else if(2*jy-1)=leiji) jilu(p2); jy+; qipanlxly=player;fuzhi();system("cls");print();break; else if(2*jx=(leiji-1) jilu(p1); jx+; else if(2*jy-1)=(leiji-1) jilu(p2); jy+; qipanlxly=player; fuzhi(); system("cls"); print(); break;else if(player=black)while(1) switch(key) case 'a': if(ly>1) huifu();ly-;qipanlxly=95;system("cls");print();break; case 'd': if(ly<14)huifu();ly+;qipanlxly=95;system("cls");print();break; case 's': if(lx<14)huifu();lx+;qipanlxly=95;system("cls");print();break; case 'w': if(lx>1) huifu();lx-;qipanlxly=95;system("cls");print();break; key=_getch();if(key='f')if(linshilxly=black|linshilxly=white)system("cls");printf("n 请选择:n");printf(" 【1】进入游戏界面存档n");printf(" 【2】进入游戏悔棋界面n");printf(" ");scanf("%d",&mn);if(mn=1)mn=0;printf("n 请选择:n"); printf(" 【1】保存游戏进度n");printf(" 【2】读取游戏进度n");printf(" ");scanf("%d",&mn);if(mn=1)mn=0;printf(" 你选择了保存游戏进度!n");cundang();else if(mn=2)mn=0;printf(" 你选择了读取游戏进度!n"); duqu();fuzhi();system("cls");print();else if(mn=2)printf(" 你选择了悔棋!n");if(kongzhi=player1) if(leiji%2=0) huiqi(p2); /*先走棋的玩家悔棋时的n为偶数*/ else huiqi(p2); leiji-=2; jx-; jy-; fuzhi(); system("cls"); print(); else if(leiji%2=1) huiqi(p2); /*先走棋的玩家悔棋时的n为偶数*/ else huiqi(p2); leiji-=2; jx-; jy-; fuzhi(); system("cls"); print(); else if(linshilxly!=black&&linshilxly!=white)for(p=0;p<20;p+) for(q=0;q<20;q+) if(qipanpq!=black&&qipanpq!=white) qipanpq=32;if(kongzhi=player1) if(2*jx=leiji) jilu(p1); jx+; else if(2*jy-1)=leiji) jilu(p2); jy+; qipanlxly=player; fuzhi(); system("cls"); print(); break;else if(2*jx=(leiji-1) jilu(p1); jx+; else if(2*jy-1)=(leiji-1) jilu(p2); jy+; qipanlxly=player; fuzhi(); system("cls"); print(); break; /*数据初始化*/void newdata()int i,j;lx=ly=jx=jy=jushu=1;leiji=sh1=sh2=he=0;for(i=0;i<20;i+)for(j=0;j<20;j+)qipanij=linshiij=32;六、程序运行效果图/*游戏首界面如下*/*以下为选择谁先落子的界面*/*存档时的界面*/*存档成功的界面*/*走棋时的界面,也是悔棋前的界面*/*悔棋时的界面*/*悔棋后的界面*/*以下为赢棋的界面*/七、体会 经过这次课程设计,我发现在很多地方的知识都不足,很多函数和技巧都要从网络上或其他书籍上找,可能学计算机要看看很多很多书,尤其在大学,很多情况下都需要自学,我想在以后的学习和实践工作中,会多读多看多练的,努力让自己的实力得到提高,在这个小游戏中,不能调用鼠标,只能通过输入坐标点位置,这是一个很大的不足,以后学习了一定要修改的更好!八、参考文献1 湛为芳C语言程序设计技术清华大学出版社,20062 谭浩强C程序设计(第三版)清华大学出版社,20053 Kennth A.reek. C和指针 (徐波译)4 另外还使用了百度中文搜索引擎 九、程序清单29#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <ctype.h>#define player1 1 /*一号玩家控制*/#define player2 2 /*二号玩家控制*/#define black 1 /*黑色棋子1*/#define white 2 /*白色棋子2*/struct cund /*用来保存棋局*/char cun2020;int jx;int jy;int leiji;cd;char kz=32;

    注意事项

    本文(c语言报告五子棋.doc)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开