井子棋实验报告.docx

上传人:b****6 文档编号:16358153 上传时间:2023-07-12 格式:DOCX 页数:46 大小:147.81KB
下载 相关 举报
井子棋实验报告.docx_第1页
第1页 / 共46页
井子棋实验报告.docx_第2页
第2页 / 共46页
井子棋实验报告.docx_第3页
第3页 / 共46页
井子棋实验报告.docx_第4页
第4页 / 共46页
井子棋实验报告.docx_第5页
第5页 / 共46页
井子棋实验报告.docx_第6页
第6页 / 共46页
井子棋实验报告.docx_第7页
第7页 / 共46页
井子棋实验报告.docx_第8页
第8页 / 共46页
井子棋实验报告.docx_第9页
第9页 / 共46页
井子棋实验报告.docx_第10页
第10页 / 共46页
井子棋实验报告.docx_第11页
第11页 / 共46页
井子棋实验报告.docx_第12页
第12页 / 共46页
井子棋实验报告.docx_第13页
第13页 / 共46页
井子棋实验报告.docx_第14页
第14页 / 共46页
井子棋实验报告.docx_第15页
第15页 / 共46页
井子棋实验报告.docx_第16页
第16页 / 共46页
井子棋实验报告.docx_第17页
第17页 / 共46页
井子棋实验报告.docx_第18页
第18页 / 共46页
井子棋实验报告.docx_第19页
第19页 / 共46页
井子棋实验报告.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

井子棋实验报告.docx

《井子棋实验报告.docx》由会员分享,可在线阅读,更多相关《井子棋实验报告.docx(46页珍藏版)》请在冰点文库上搜索。

井子棋实验报告.docx

井子棋实验报告

数学计算机科学学院实验报告

 

专业名称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==

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

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

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