1、 . 测控技术与仪器 2012级 C++课程设计实验报告 井字游戏 班级: 学号:
2、 : 日期:2014.1.8 目 录 一、课程设计目的 二、课程设计容与实现的功能 1、课程设计容 2、设计思想 3、实现的功能 三、系统的设计 四、用户手册 五、算法流程图 六、源程序 七、参考文献 一、 课程设计目的 进行C++面向对象程序设计课程设计主要是在学习C++这门面向对象语言的基础上,在完成C++面向对象程序设计各部分实验的基础上,掌握一种可视化编程的方法,并通过实践加深对可视化编程与C++面向对象程序设计语言特点的认识与理解。同时,可以提高运用C++编程语言解决实际问题的能力;
3、锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。理解的Visual C++ 6.0运行过程,进一步的了解C++是如何面向对象的程序设计,以及在我们平常使用的一些软件的一些功能怎么实现的算法,以及一些基本的菜单如:窗口菜单、编辑菜单、工具菜单、还有文件菜单都是如何实现的。在这次课程设计中我主要负责的模块是页面的美化和游戏难度、判断游戏结果的函数以及游戏模式等函数。 二、 课程设计容与实现的功能 1、课程设计容 开发一个简单的可以开发人的智力的小游戏。游戏的界面类一个“井”字,故取名为“井字游戏”。本游戏界面被分为九
4、个方格,每个方格可以放一个“棋子”,然后游戏开始,双方可以在任何一个格子放自己的棋子。游戏规则非常简单:双方哪一个先使自己的三个棋子连成一条线(可以是横向的,纵向的,或是斜向的)就算赢,如果双方在九个格子都占满后均没有完成就算平局,点击开始下一局游戏。 2、设计思想 井字棋是一个流传已久的传统游戏。游戏由两个人轮流来下,分别用“X”和“O”来代替自身的棋子。棋盘分9个格,双方可以在轮到自己下的时候,可以用棋子占领其中一个空的格子。 3、实现的功能 (1)简单的开始玩家对战和退出程序的实现。 (5)判断游戏输赢的实现:游戏结束后,系统自动弹出对话框显示游戏结果。 三、 系统的设计
5、1.程序总体结构:先输出3*3的棋盘格式,然后提示玩家输入棋子位置,接着就是判断该位置是否已经有棋子,如果有,则提示玩家再输入棋子的位置,否则,判断玩家是否最后再输出最后棋盘的结果。 2.界面设计 :界面背景是黑色的3*3的棋盘格式,玩家可以通过输入区域来表示下在何处,如果上面有棋子则需重下,如果两方不能赢则为平局则棋盘上对应的位置就会显示该玩家的代表符号,每走一步,就会显示新的棋盘。 四、用户手册 1、使用平台是:Visual C++ 2、点击运行,则出现这样的界面: 点击开始按钮,弹出对话框提示游戏开始: 游戏结束后弹出对话框显示游戏结果 如果上面有棋子则需重下
6、
五.算法流程图
开始
选项
1.玩家对战
2.退出游戏
游戏结束显示结果
游戏开始
按任意键继续
六、源程序:
#include
7、itions(); void qizi1(); void qizi2(); int pe; }; void qi::output() { system("cls");//清屏 printf("**********************科技大学**************************\n"); printf(" 在玩家对战中 ○代表玩家1 ×代表玩家2 \n"); printf(" 1 ┃ 2 ┃ 3 \n"); printf("
8、 ┃┃ \n"); printf(" ━━━╋━━━╋━━━\n"); printf(" ┃┃ \n"); printf(" 4 ┃ 5 ┃ 6 \n"); printf(" ┃┃ \n"); printf(" ━━━╋━━━╋━━━\n"); printf(" ┃┃ \n"); printf("
9、 7 ┃ 8 ┃ 9 \n"); printf(" ┃┃ \n"); printf("**************测控1202班 王涛 王凡宇 制作*******************\n"); printf(" %s┃ %s ┃ %s \n",a[b[1]], a[b[2]],a[b[3]]); printf(" ┃┃ \n"); printf(" ━━━╋━━━╋━━━\n"); pri
10、ntf(" ┃┃ \n"); printf(" %s┃ %s ┃ %s \n",a[b[4]],a[b[5]],a[b[6]]); printf(" ┃┃ \n"); printf(" ━━━╋━━━╋━━━\n"); printf(" ┃┃ \n"); printf(" %s┃ %s ┃ %s \n",a[b[7]],a[b[8]],
11、a[b[9]]); printf(" ┃┃ \n"); } void qi::conditions() { if((b[1]==1 && b[2]==1 && b[3]==1) || (b[4]==1 && b[5]==1 && b[6]==1) || (b[7]==1 && b[8]==1 && b[9]==1) || (b[1]==1 && b[4]==1 && b[7]==1) || (b[2]==1 && b[5]==1 && b[8]==1) || (b[3]==1 && b[6]==1 && b[9]==1) || (b[1]==1 &
12、 b[5]==1 && b[9]==1) || (b[3]==1 && b[5]==1 && b[7]==1)) { n=1;//"玩家1"赢 //如果三个连续的井为1或对角线为1,即就是n=1,则玩家1赢。 } else if((b[1]==2 && b[2]==2 && b[3]==2) || (b[4]==2 && b[5]==2 && b[6]==2) || (b[7]==2 && b[8]==2 && b[9]==2) || (b[1]==2 && b[4]==2 && b[7]==2) || (b[2]==2 && b[5]==2 && b[
13、8]==2) || (b[3]==2 && b[6]==2 && b[9]==2) || (b[1]==2 && b[5]==2 && b[9]==2) || (b[3]==2 && b[5]==2 && b[7]==2)) { n=2;//"玩家2"赢//如果三个连续的井为2或对角线为2,即就是n=2,则玩家2赢。 } else if((b[1]==1 || b[1]==2) && (b[2]==1 || b[2]==2) && (b[3]==1 || b[3]==2) && (b[4]==1 || b[4]==2) && (b[5]==1 || b[5]
14、2) && (b[6]==1 || b[6]==2) && (b[7]==1 || b[7]==2) && (b[8]==1 || b[8]==2) && (b[9]==1 || b[9]==2)) { n=3;//和局//如果井1--9为全为1或全为2,即就是n=3,则产生和局。 } else n=0;//未完继续//如果上述都不符合,即就是n=3,则继续。。 } void qi::qizi1() { int m; cout<<"玩家1输入井字格的位置(用数字1-9):"; loop: cin>>pe; if(pe>=1 && p
15、e<=9)
{
m=pe;
}
else
{cout<<"输入错误,请输入1-9围!\n";
goto loop;
}
if(b[m]!=0)
{
cout<<"错误,已输入过!"<
16、se
{cout<<"输入错误,请输入1-9围!\n";//如果输入错误,
goto loop;//跳转到loop,则继续输入1--9字符。
}
if(b[m]!=0)//如果输入的字符为0,
{
cout<<"错误,已输入过!"< 17、 for(i=0 ; i<10 ;i++)
{ b[i]=0; }
bool quit = false;//布尔型 给quit赋值为假
for(;;)
{
char choice;//定义一个字符型变量
system("cls");//清屏
cout<<" 井字棋小游戏 "< 18、 **"< 19、 c.qizi1();//玩家1的函数调用
c.conditions();//判定玩家1,玩家2,和局的函数调用
if(n==1)//如果n=1
{
c.output();//判定玩家1,玩家2,和局的函数调用(进入此函数进行判定)
cout<<"恭喜玩家1获胜"< 20、//则双方和局,按任意键继续。
goto loop3;
}
c.output();
c.qizi2();//玩家1的函数调用
c.conditions();
if(n==2)
{
c.output();
cout<<"恭喜玩家2获胜"<






