井子棋实验报告.docx
- 文档编号:16358153
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:46
- 大小:147.81KB
井子棋实验报告.docx
《井子棋实验报告.docx》由会员分享,可在线阅读,更多相关《井子棋实验报告.docx(46页珍藏版)》请在冰点文库上搜索。
井子棋实验报告
数学计算机科学学院实验报告
专业名称12级软件工程
实验室2号实验楼201室
实验课程程序设计实验课
实验名称井子棋
1、实验目的
制作出一个井子棋游戏,可以人机互动
2、实验原理
1)c程序设计编程环境visual c++,掌握运行一个c程序设计的基本步骤,包括编辑、编译、连接和运行。
2)熟练掌握Visual C++ 6.0环境运行的C程序上机步骤
3)数据类型、常量和变量的使用
4)表达式及运算符的应用
5)C程序的调试。
3、需求分析
1)判断每个键入数值的合理情况
2)输入1-9共九个数字,已经被占领的数字不可再输入
3)计算机可以根据人所走的地点和计算机之前走过的地点确定下一步的位置
4、概要设计
5、详细设计
#include"jziqi.h"
statusmain()
{
Hello();//简洁的界面设计
statusi,l=0,set;
printf("请输入你想进行的操作:
1.开局,0退出\n");
scanf("%d",&i);
system("CLS");
while(i==1)//进行开局选项
{
printf("请选择游戏难度:
0.困难1.简单");//困难按分高下棋,简单按分低下棋
scanf("%d",&set);//选择游戏难度
if(set==0)
{
statuschoose,flag;//存储用户选择(落子),决定谁先走
Start();//初始化游戏
table();//打印游戏界面
printf("决定谁先走:
用户0,计算机1\n");
scanf("%d",&flag);//由用户选择先手
system("CLS");//清屏操作
if(flag==0)
{//用户先手
printf("亲,轮到你了'0'\n");
printf("落子:
");
scanf("%d",&choose);//用户选择落子位置
People(choose);//用户
table();
system("pause");//暂停系统的编译,为了看到之前的界面
while
(1)
{
if(GameOver())//每次用户落子后,都要游戏是否结束,结束就退出
{
system("CLS");
printf("游戏结束\n");
IsWin();//在游戏结束后,开始判定赢家或平局
return0;
}
system("CLS");//清屏操作,为了不在一个界面处打印电脑的操作界面
printf("计算机在下'X',稍等\n");
Computer();//计算机下棋的函数
table();
system("pause");//暂停系统的编译,为了看到之前的界面
if(GameOver())//每次用户落子后,都要游戏是否结束,结束就退出
{
system("CLS");
printf("游戏结束\n");
IsWin();//在游戏结束后,开始判定赢家或平局
return0;
}
printf("亲,轮到你了'0'\n");
printf("落子:
");
scanf("%d",&choose);//用户选择落子位置
People(choose);//用户
system("CLS");//清屏操作,为了不在一个界面处打印下一轮用户的操作
table();
system("pause");//暂停系统的编译,为了看到之前的界面
if(GameOver())
{
system("CLS");
printf("游戏结束\n");
IsWin();
return0;
}
}//while
}//人先手操作
elseif(flag==1)
{
//计算机先手
while
(1)
{
printf("计算机在下'X',稍等\n");
Computer();//计算机
table();
system("pause");
if(GameOver())
{
system("CLS");
printf("游戏结束\n");
IsWin();
return0;
}
printf("亲,轮到你了'0'\n");
printf("落子:
");
scanf("%d",&choose);
People(choose);//用户
system("CLS");
table();
system("pause");
system("CLS");
if(GameOver())
{
system("CLS");
printf("游戏结束\n");
IsWin();
return0;
}
}//while
}//计算机先手下棋操作
else
return0;
}
elseif(set==1)
{
statuschoose,flag;//存储用户选择(落子),决定谁先走
Start();//初始化游戏
table();//打印游戏界面
printf("决定谁先走:
用户0,计算机1\n");
scanf("%d",&flag);//由用户选择先手
system("CLS");//清屏操作
if(flag==0)
{//用户先手
printf("亲,轮到你了'0'\n");
printf("落子:
");
scanf("%d",&choose);//用户选择落子位置
People(choose);//用户
table();
system("pause");//暂停系统的编译,为了看到之前的界面
while
(1)
{
if(GameOver())//每次用户落子后,都要游戏是否结束,结束就退出
{
system("CLS");
printf("游戏结束\n");
IsWin();//在游戏结束后,开始判定赢家或平局
return0;
}
system("CLS");//清屏操作,为了不在一个界面处打印电脑的操作界面
printf("计算机在下'X',稍等\n");
Computer_1();//计算机下棋的函数
table();
system("pause");//暂停系统的编译,为了看到之前的界面
if(GameOver())//每次用户落子后,都要游戏是否结束,结束就退出
{
system("CLS");
printf("游戏结束\n");
IsWin();//在游戏结束后,开始判定赢家或平局
return0;
}
printf("亲,轮到你了'0'\n");
printf("落子:
");
scanf("%d",&choose);//用户选择落子位置
People(choose);//用户
system("CLS");//清屏操作,为了不在一个界面处打印下一轮用户的操作
table();
system("pause");//暂停系统的编译,为了看到之前的界面
if(GameOver())
{
system("CLS");
printf("游戏结束\n");
IsWin();
return0;
}
}//while
}//人先手操作
elseif(flag==1)
{
//计算机先手
while
(1)
{
printf("计算机在下'X',稍等\n");
Computer_1();//计算机
table();
system("pause");
if(GameOver())
{
system("CLS");
printf("游戏结束\n");
IsWin();
return0;
}
printf("亲,轮到你了'0'\n");
printf("落子:
");
scanf("%d",&choose);
People(choose);//用户
system("CLS");
table();
system("pause");
system("CLS");
if(GameOver())
{
system("CLS");
printf("游戏结束\n");
IsWin();
return0;
}
}//while
}//计算机先手下棋操作
else
return0;
}
else
return0;
}//while游戏结束,退出
return0;
}//main
头文件:
#include
#include
#include
#include
#defineTrue1
#defineFalse0
typedefintstatus;
structNineQ//九宫格结构体
{
intscore;//记录当前格子的分值
charface;//记录当前格子的状态(*、o或空)
};
voidtable();//游戏界面
voidStart();//初始化
statusPeople(statuschoose);//用户下棋
statusComputer();//计算机下棋(困难)
statusComputer_1();//计算机下棋(简单)
statusGeziEmpty(statusside);//判断当前格子是否为空
statusGameOver();//判断游戏是否结束
statusBoardFull();//判断棋盘是否已满
statusHu_Man();//人赢
statusCom_puter();//电脑赢
voidIsWin();//判断谁赢
statusHello();//弹出对话框
下棋位置算法程序:
#include"jziqi.h"
structNineQQ[10];//1~9为九个格子(宏定义)
voidtable()//游戏界面
{
printf("_________________________\n");
printf("||||\n");
printf("|%c|%c|%c|\n",Q[1].face,Q[2].face,Q[3].face);//分别对应格子1、2、3的落子情况
printf("||||\n");
printf("-------------------------\n");
printf("||||\n");
printf("|%c|%c|%c|\n",Q[4].face,Q[5].face,Q[6].face);//分别对应格子4、5、6的落子情况
printf("||||\n");
printf("-------------------------\n");
printf("||||\n");
printf("|%c|%c|%c|\n",Q[7].face,Q[8].face,Q[9].face);//分别对应格子7、8、9的落子情况
printf("||||\n");
printf("_________________________\n\n");
}
voidStart()//初始化,打印游戏界面
{
statusi;
Q[0].score=0;
for(i=1;i<10;i++)
{
Q[i].face='';
Q[i].score=0;
}
}
statusPeople(statuschoose)//用户下棋
{
while(GeziEmpty(choose))//当格子不为空时(满),用户重新从键盘获取一次输入
{
printf("满了,下别处吧\n");
printf("\a");//提示信息,若落子位置重复,发出响声
printf("亲,重新落子\n");//将用户下棋重新来一遍
printf("落子:
");
scanf("%d",&choose);
}
Q[choose].face='0';//当用户按任意数字键时,对应的数字键界面处打印出‘0’//统计数字键界面每个格的分数,用于计算机下棋的算法
return1;
}
statusComputer()//计算机下棋
{
inti,t=0,num[10],l=0;
for(i=0;i<10;i++)
num[i]=0;
for(i=1;i<10;i++)
{
switch(i)
{
case1:
if(Q[2].face=='X'&&Q[3].face=='X')
Q[i].score+=50;
if(Q[4].face=='X'&&Q[7].face=='X')
Q[i].score+=50;
if(Q[5].face=='X'&&Q[9].face=='X')
Q[i].score+=50;
//判断1格子是否加‘XX’
if(Q[2].face=='0'&&Q[3].face=='0')
Q[i].score+=25;
if(Q[4].face=='0'&&Q[7].face=='0')
Q[i].score+=25;
if(Q[5].face=='0'&&Q[9].face=='0')
Q[i].score+=25;
//判断1格子是否加‘00’
if((Q[2].face=='X'&&Q[3].face=='')||(Q[2].face==''&&Q[3].face=='X'))
Q[i].score+=10;
if((Q[4].face=='X'&&Q[7].face=='')||(Q[4].face==''&&Q[7].face=='X'))
Q[i].score+=10;
if((Q[5].face=='X'&&Q[9].face=='')||(Q[5].face==''&&Q[9].face=='X'))
Q[i].score+=10;
//判断1格子是否加‘X空’
if((Q[2].face=='0'&&Q[3].face=='')||(Q[2].face==''&&Q[3].face=='0'))
Q[i].score+=8;
if((Q[4].face=='0'&&Q[7].face=='')||(Q[4].face==''&&Q[7].face=='0'))
Q[i].score+=8;
if((Q[5].face=='0'&&Q[9].face=='')||(Q[5].face==''&&Q[9].face=='0'))
Q[i].score+=8;
//判断1格子是否加‘0空’
if((Q[2].face=='X'&&Q[3].face=='0')||(Q[2].face=='0'&&Q[3].face=='X'))
Q[i].score+=0;
if((Q[4].face=='0'&&Q[7].face=='0')||(Q[4].face=='0'&&Q[7].face=='X'))
Q[i].score+=0;
if((Q[5].face=='0'&&Q[9].face=='0')||(Q[5].face=='0'&&Q[9].face=='X'))
Q[i].score+=0;
//判断1格子是否加‘X0’
if(Q[2].face==''&&Q[3].face=='')
Q[i].score+=4;
if(Q[4].face==''&&Q[7].face=='')
Q[i].score+=4;
if(Q[5].face==''&&Q[9].face=='')
Q[i].score+=4;
//判断1格子是否加‘空空’
break;
case2:
if(Q[1].face=='X'&&Q[3].face=='X')
Q[i].score+=50;
if(Q[5].face=='X'&&Q[8].face=='X')
Q[i].score+=50;
//判断2格子是否加‘XX’
if(Q[1].face=='0'&&Q[3].face=='0')
Q[i].score+=25;
if(Q[5].face=='0'&&Q[8].face=='0')
Q[i].score+=25;
//判断2格子是否加‘00’
if((Q[1].face=='X'&&Q[3].face=='')||(Q[1].face==''&&Q[3].face=='X'))
Q[i].score+=10;
if((Q[5].face=='X'&&Q[8].face=='')||(Q[5].face==''&&Q[8].face=='X'))
Q[i].score+=10;
//判断2格子是否加‘X空’
if((Q[1].face=='0'&&Q[3].face=='')||(Q[1].face==''&&Q[3].face=='0'))
Q[i].score+=8;
if((Q[5].face=='0'&&Q[8].face=='')||(Q[5].face==''&&Q[8].face=='0'))
Q[i].score+=8;
//判断2格子是否加‘0空’
if((Q[1].face=='X'&&Q[3].face=='0')||(Q[1].face=='0'&&Q[3].face=='X'))
Q[i].score+=0;
if((Q[5].face=='X'&&Q[8].face=='0')||(Q[5].face=='0'&&Q[8].face=='X'))
Q[i].score+=0;
//判断2格子是否加‘X0’
if(Q[1].face==''&&Q[3].face=='')
Q[i].score+=4;
if(Q[5].face==''&&Q[8].face=='')
Q[i].score+=4;
//判断2格子是否加‘空空
break;
case3:
if(Q[1].face=='X'&&Q[2].face=='X')
Q[i].score+=50;
if(Q[5].face=='X'&&Q[7].face=='X')
Q[i].score+=50;
if(Q[6].face=='X'&&Q[9].face=='X')
Q[i].score+=50;
//判断3格子是否加‘XX’
if(Q[1].face=='0'&&Q[2].face=='0')
Q[i].score+=25;
if(Q[5].face=='0'&&Q[7].face=='0')
Q[i].score+=25;
if(Q[6].face=='0'&&Q[9].face=='0')
Q[i].score+=25;
//判断3格子是否加‘00’
if((Q[1].face=='X'&&Q[2].face=='')||(Q[1].face==''&&Q[2].face=='X'))
Q[i].score+=10;
if((Q[5].face=='X'&&Q[7].face=='')||(Q[5].face==''&&Q[7].face=='X'))
Q[i].score+=10;
if((Q[6].face=='X'&&Q[9].face=='')||(Q[6].face==''&&Q[9].face=='X'))
Q[i].score+=10;
//判断3格子是否加‘X空’
if((Q[1].face=='0'&&Q[2].face=='')||(Q[1].face==''&&Q[2].face=='0'))
Q[i].score+=8;
if((Q[5].face=='0'&&Q[7].face=='')||(Q[5].face==''&&Q[7].face=='0'))
Q[i].score+=8;
if((Q[6].face=='0'&&Q[9].face=='')||(Q[6].face==''&&Q[9].face=='0'))
Q[i].score+=8;
//判断3格子是否加‘0空’
if((Q[1].face=='X'&&Q[2].face=='0')||(Q[1].face==
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 井子棋 实验 报告