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

    五子棋游戏的及源代码.doc

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

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

    五子棋游戏的及源代码.doc

    【精品文档】如有侵权,请联系网站删除,仅供学习与交流五子棋游戏的及源代码.精品文档.本 科 生 课 程 论 文论 文 题 目 五子棋游戏 五子棋游戏【摘要】为了设计人人对弈模式的五子棋游戏系统,采用了C语言函数模块化程序设计方法,利用Visual C+ 6.0编译器运行游戏,实现一方执白棋,一方执黑棋,通过屏幕上的文字提示,轮流走棋 ,最先使五子相连一方获胜的人人对弈功能。通过本程序的训练,加深对C语言的了解,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。【关键字】 五子棋 函数设计目的:本程序旨在进一步训练学生游戏开发的技巧,掌握C语言图形模式下的编程。本程序设计很多图形函数,包括坐标定位;颜色设置(背景色和文本颜色设置)、线条颜色、填充颜色;直线风格、文本风格、填充风格;画线、画圆、画矩形函数;PC扬声器的打开、延迟、关闭;图形系统的初始化和关闭;图形屏幕和文字屏幕的清除;从键盘获取键值等。功能:实现界面的初始化功能、下棋功能、胜负判断功能和帮助功能。1)初始化功能。程序初始化屏幕和棋盘,默认Player1先行。2)实现下棋功能。程序能实现下棋操作,在下棋过程中能随时退出。3)胜负判断。程序能对下棋的结果进行判断,分出胜负,并显示获胜信息。4)显示帮助信息。程序能提示玩家轮到哪方下棋了。问题分析:首先要实现五子棋的行棋功能,在程序中可以通过坐标来定位棋子的位置,用不同的字符表示黑白棋子,并通过变量的交替实现黑白棋子的交替显示。另一个难点就是对于胜负的判断,这需要通过循环函数的嵌套使用,难点在于逻辑调理的把握,循环之间的对应关系。还有一个难点就是在游戏中能随时返回主菜单,这需要一个选择结构来实现,将主菜单的程序编入主函数,在得到特定指令时返回主函数,从而返回主菜单。下棋过程中对于不断地输入坐标,可以用一个死循环来是实现,在特定的条件下退出循环,返回主函数。程序设计:一、主要函数介绍本程序主要用到了main ()1、startGame()、printState()、judge()、help()、aboutThanks()等函数。主函数中设计成死循环,再循环过程中通过选择调用其它函数。被调用的函数运行完后再次返回到主函数中。1、 主函数main()运行主函数,首先调用system("color e0")2函数,改变运行界面的前景色和背景色。然后进入一个死循环while(1),再循环中输出主菜单的内容,包括标题、开始游戏、游戏帮助、游戏鸣谢、退出程序、请选择等字样。然后,调用scanf()函数,从键盘上获得一个数值付给变量i,接着进行健壮性处理。最后调用switch语句,通过选择调用其它函数。2、 startGame()函数此函数为自定义函数,首先用一个for语句实现19*19的棋盘的初步绘制,将19*19的坐标全绘制成“*”状。接着调用printState()函数,实现当前棋盘的显示。然后进入下棋的循环,提示下子一方并调用fflush(stdin) 2函数清除缓存。然后,通过switch语句,根据从键盘上得到的值做出相应的判断,实现退格键悔棋、Esc键返回主菜单、A-S输入坐标、其他输入错误。接着判断该坐标是否有子,有子提示重新指定坐标,否则,该位置显示相应的棋子。除第一次下子前外,下一步将调用judge()函数,来判断是否有一方获胜。判断结束后再次调用printState()显示当前棋盘。最后交换期权。此函数的核心代码如下:switch(t=getch()case 8:/退格键悔棋i=m-'A' j=n-'A'stateij='*'printState();printf("nt提示:%s方悔棋!nn",player?"白":"黑");player=!player;continue;break;case 27: system("cls");return;break;/Esc键返回主菜单case 65: n=t;printf("%Cn",n);getch();break;/纵坐标输入case 115: n=t;printf("%Cn",n);n=n-32;getch();break;default:printf("tt请输入属于<A-S|a-s>或正确的口令。n");continue; i=m-'A' j=n-'A'if(stateij!='*')/判断是否有子printf("t提示:该位置已经有子,请重新指定坐标!");continue;c=player?4:79;/为棋子赋值stateij=c; if(a!=0)judge();/判断胜负a+;printState();/显示当前棋盘player=!player;/交换棋权3、 printState()函数此函数为自定义函数,主要实现当前棋盘的输出,首先定义字符变量,接着清除屏幕,然后输出周围的字母和中心的“*”字符。核心代码为:for(i=0;i<size;i+)printf("%c ",p+i); /输出第一行的所有字符printf("nt"); /换行for(i=0;i<size;i+)printf("%c ",p+i); /输出行坐标(左边的字母)for(j=0;j<size;j+)printf("%c ",stateij); /输出该行的内容printf("%c nt",p+i); /输出右侧的坐标 printf(" ");for(i=0;i<size;i+)printf("%c ",p+i); /输出最后一行的所有字符4、 judge()函数此函数为自定义函数,主要实现对棋局胜负的判断。首先通过for语句的嵌套实用实现纵向的判断,判断纵向是否形成五子相连的情况。其核心代码为:if(statei+1j!=stateij)/纵向判断if(statei-1j!=stateij);elseif(statei-2j!=stateij);elseif(statei-3j!=stateij);elseif(statei-4j!=stateij);elseprintState();printf("nt提示:%s方胜!nn",player?"黑":"白");printf("ttt按回车键确认结果并返回游戏nn ");while(1)switch(t=getch()case 13: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;else5、help()函数此函数为自定义函数,主要实现输出帮助信息,包括游戏说明、基本规则、神父判断的说明。核心代码为:system("cls")2;printf("nnt游戏说明:nn");printf("ttt按Esc键返回主菜单nn ");while(1)switch(t=getch()case 27: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;6、 aboutThanks()函数此函数为自定义函数,主要实现输出鸣谢信息。其核心代码为:system("cls");printf("nnnt 鸣谢:nnntt1.我的C语言老师:老师。");while(1)switch(t=getch()case 27: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;二、程序框图开始游戏主菜单开始游戏帮助退出程序游戏鸣谢Esc键退格键判断胜负输入坐标三、程序截图1、主菜单界面:2、 游戏界面:3、 帮助界面:4、 鸣谢界面:5、 退出界面:6、 悔棋提示界面:7、 输入错误提醒界面:8、 获胜提示界面:总结:程序中多次用到循环语句的嵌套使用,难点在于对逻辑条理性的把握和对五子棋规则的正确理解。为了实现在游戏中随时能够返回主菜单,先后试验了scanf()、getchar()、getch()函数,scanf()函数只能从键盘上得到字符,但不能识别Esc等键。getchar()也不能显示Esc等键,无法对输入的Esc键作出判断,并且需要按回车后再给出返回值。而getch()可以直接返回键盘的键值,但是并不在屏幕上显示。为了解决这一问题,将getch()的值先付给一个变量,再用printf()语句输出变量。本次设计的一大收获就是对程序结构重要性的认识,一个结构清晰的程序,对于程序的调试、改错、阅读等都有着重要意义,可以让程序员省去不必要的麻烦。另外,程序的注释也很重要,注释不仅仅是给读程序的人看,也是给写程序的人看的。当程序要写好多页时,有时程序员也会忘记之前的程序是实现什么功能的,所以注释是相当必要的。通过本次设计,对C语言有了更近一步的认识,对以后进一步学习具有重要意义。参考文献:1 谭浩强 C程序设计(第四版)清华大学出版社2 百度搜索课 程 论 文 成 绩 评 定 表学生姓名专业班级论文题目五子棋游戏指导教师评语及意见:成绩: 指导教师签字 年 月 日附件:源代码#include<stdio.h>#include<stdlib.h>/system()的头文件#define N 19#include <conio.h>/getch()的头文件int a=0,t,m,n,i,j,k,size=N;int player=1;/当前是黑方下子 player=1 char stateNN;char c;/用来存放显示黑白子的变量 void startGame();void printState();void judge();void help();void aboutThanks();int main()system("color e0");/界面颜色while(1)printf("nnttt-高级语言课程设计-nn");printf("tttt 五子棋游戏nnn");printf("tttt 1.开始游戏。nn");printf("tttt 2.游戏帮助。nn");printf("tttt 3.游戏鸣谢。nn");printf("tttt 4.退出程序。nn"); printf("nttt请选择:");L:k=scanf("%d",&i);if(k=0) /遇到异常,做健壮性处理. printf("nt提示:输入非格式选项!nt请重新输入1-4的整数:");fflush(stdin); /清空缓冲内存区goto L; switch(i)/选择选项case 1: startGame(); break;case 2: help(); break;case 3: aboutThanks(); break;case 4: printf("nttt请按任意键安全退出nttt");return 0; /结束整个程序。 default:printf("t温馨提示 : 无此选项n");break; void startGame()/开始游戏for(i=0;i<size;i+)for(j=0;j<size;j+)stateij='*'printState();/显示棋盘while(1)printf("nt请%s方下子:",player?"黑":"白");fflush(stdin);switch(t=getch()case 8:/退格键悔棋i=m-'A' j=n-'A'stateij='*'printState();printf("nt提示:%s方悔棋!nn",player?"白":"黑");player=!player;continue;break;case 27: system("cls");return; break;/Esc键返回主菜单case 65: m=t;printf("t%C",m);break;/横坐标输入case 66: m=t;printf("t%C",m);break;case 67: m=t;printf("t%C",m);break;case 68: m=t;printf("t%C",m);break;case 69: m=t;printf("t%C",m);break;case 70: m=t;printf("t%C",m);break;case 71: m=t;printf("t%C",m);break;case 72: m=t;printf("t%C",m);break;case 73: m=t;printf("t%C",m);break;case 74: m=t;printf("t%C",m);break;case 75: m=t;printf("t%C",m);break; case 76: m=t;printf("t%C",m);break; case 78: m=t;printf("t%C",m);break;case 79: m=t;printf("t%C",m);break;case 80: m=t;printf("t%C",m); break;case 81: m=t;printf("t%C",m);break;case 82: m=t;printf("t%C",m);break;case 83: m=t;printf("t%C",m);break;case 97: m=t;printf("t%C",m);m=m-32;break;case 98: m=t;printf("t%C",m);m=m-32;break;case 99: m=t;printf("t%C",m);m=m-32;break;case 100: m=t;printf("t%C",m);m=m-32;break;case 101: m=t;printf("t%C",m);m=m-32;break;case 102: m=t;printf("t%C",m);m=m-32;break;case 103: m=t;printf("t%C",m);m=m-32;break;case 104: m=t;printf("t%C",m);m=m-32;break;case 105: m=t;printf("t%C",m);m=m-32;break;case 106: m=t;printf("t%C",m);m=m-32;break;case 107: m=t;printf("t%C",m);m=m-32;break;case 108: m=t;printf("t%C",m);m=m-32;break;case 109: m=t;printf("t%C",m);m=m-32;break;case 110: m=t;printf("t%C",m);m=m-32;break;case 111: m=t;printf("t%C",m);m=m-32;break;case 112: m=t;printf("t%C",m);m=m-32;break;case 113: m=t;printf("t%C",m);m=m-32;break;case 114: m=t;printf("t%C",m);m=m-32;break;case 115: m=t;printf("t%C",m);m=m-32;break;default:printf("tt请输入属于<A-S|a-s>或正确的口令。n");continue; switch(t=getch()case 8:/退格键悔棋i=m-'A' j=n-'A'stateij='*'printState();printf("nt提示:%s方悔棋!nn",player?"白":"黑");player=!player;continue;break;case 27: system("cls");return;break;/Esc键返回主菜单case 65: n=t;printf("%Cn",n);getch();break;/纵坐标输入case 66: n=t;printf("%Cn",n);getch();break;case 67: n=t;printf("%Cn",n);getch();break;case 68: n=t;printf("%Cn",n);getch();break;case 69: n=t;printf("%Cn",n);getch();break;case 70: n=t;printf("%Cn",n);getch();break;case 71: n=t;printf("%Cn",n);getch();break;case 72: n=t;printf("%Cn",n);getch();break;case 73: n=t;printf("%Cn",n);getch();break;case 74: n=t;printf("%Cn",n);getch();break;case 75: n=t;printf("%Cn",n);getch();break; case 76: n=t;printf("%Cn",n);getch();break; case 78: n=t;printf("%Cn",n);getch();break;case 79: n=t;printf("%Cn",n);getch();break;case 80: n=t;printf("%Cn",n);getch(); break;case 81: n=t;printf("%Cn",n);getch();break;case 82: n=t;printf("%Cn",n);getch();break;case 83: n=t;printf("%Cn",n);getch();break;case 97: n=t;printf("%Cn",n);n=n-32;getch();break;case 98: n=t;printf("%Cn",n);n=n-32;getch();break;case 99: n=t;printf("%Cn",n);n=n-32;getch();break;case 100: n=t;printf("%Cn",n);n=n-32;getch();break;case 101: n=t;printf("%Cn",n);n=n-32;getch();break;case 102: n=t;printf("%Cn",n);n=n-32;getch();break;case 103: n=t;printf("%Cn",n);n=n-32;getch();break;case 104: n=t;printf("%Cn",n);n=n-32;getch();break;case 105: n=t;printf("%Cn",n);n=n-32;getch();break;case 106: n=t;printf("%Cn",n);n=n-32;getch();break;case 107: n=t;printf("%Cn",n);n=n-32;getch();break;case 108: n=t;printf("%Cn",n);n=n-32;getch();break;case 109: n=t;printf("%Cn",n);n=n-32;getch();break;case 110: n=t;printf("%Cn",n);n=n-32;getch();break;case 111: n=t;printf("%Cn",n);n=n-32;getch();break;case 112: n=t;printf("%Cn",n);n=n-32;getch();break;case 113: n=t;printf("%Cn",n);n=n-32;getch();break;case 114: n=t;printf("%Cn",n);n=n-32;getch();break;case 115: n=t;printf("%Cn",n);n=n-32;getch();break;default:printf("tt请输入属于<A-S|a-s>或正确的口令。n");continue; i=m-'A' j=n-'A'if(stateij!='*')/判断是否有子printf("t提示:该位置已经有子,请重新指定坐标!");continue;c=player?4:79;/为棋子赋值stateij=c; if(a!=0)judge();/判断胜负a+;printState();/显示当前棋盘player=!player;/交换棋权void printState() /显示当前棋盘的状态 char p='A'system("cls");/清屏printf("t棋盘如下:nn"); printf("t "); /输出第一行开头的空格for(i=0;i<size;i+)printf("%c ",p+i); /输出第一行的所有字符printf("nt"); /换行for(i=0;i<size;i+)printf("%c ",p+i); /输出行坐标(左边的字母)for(j=0;j<size;j+)printf("%c ",stateij); /输出该行的内容printf("%c nt",p+i); /输出右侧的坐标 printf(" ");for(i=0;i<size;i+)printf("%c ",p+i); /输出最后一行的所有字符printf("n");void judge()if(statei+1j!=stateij)/纵向判断if(statei-1j!=stateij);elseif(statei-2j!=stateij);elseif(statei-3j!=stateij);elseif(statei-4j!=stateij);elseprintState();printf("nt提示:%s方胜!nn",player?"黑":"白");printf("ttt按回车键确认结果并返回游戏nn ");while(1)switch(t=getch()case 13: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;elseif(statei+2j!=stateij)if(statei-1j!=stateij);elseif(statei-2j!=stateij);elseif(statei-3j!=stateij);elseprintState();printf("nt提示:%s方胜!nn",player?"黑":"白");printf("ttt按回车键确认结果并返回游戏nn ");while(1)switch(t=getch()case 13: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;elseif(statei+3j!=stateij)if(statei-1j!=stateij);elseif(statei-2j!=stateij);elseprintState();printf("ttt按回车键确认结果并返回游戏nn ");while(1)switch(t=getch()case 13: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;elseif(statei+4j!=stateij)if(statei-1j!=stateij);elseprintState();printf("nt提示:%s方胜!nn",player?"黑":"白");printf("ttt按回车键确认结果并返回游戏nn ");while(1)switch(t=getch()case 13: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;elseprintState();printf("nt提示:%s方胜!nn",player?"黑":"白");printf("ttt按回车键确认结果并返回游戏nn ");while(1)switch(t=getch()case 13: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;if(stateij+1!=stateij)/横向判断if(stateij-1!=stateij);elseif(stateij-2!=stateij);elseif(stateij-3!=stateij);elseif(stateij-4!=stateij);elseprintState();printf("nt提示:%s方胜!nn",player?"黑":"白");printf("ttt按回车键确认结果并返回游戏nn ");while(1)switch(t=getch()case 13: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;elseif(stateij+2!=stateij)if(stateij-1!=stateij);elseif(stateij-2!=stateij);elseif(stateij-3!=stateij);elseprintState();printf("nt提示:%s方胜!nn",player?"黑":"白");printf("ttt按回车键确认结果并返回游戏nn ");while(1)switch(t=getch()case 13: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;elseif(stateij+3!=stateij)if(stateij-1!=stateij);elseif(stateij-2!=stateij);elseprintState();printf("nt提示:%s方胜!nn",player?"黑":"白");printf("ttt按回车键确认结果并返回游戏nn ");while(1)switch(t=getch()case 13: system("cls");return; break;default:printf("tt输入错误,请输入正确的口令。n");continue;elseif(stateij+4!=stateij)if(stateij-1!=state

    注意事项

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

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




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开