“黑白棋”技术文档
功能:
实现一般黑白棋的功能,实现两人对战。
黑白棋盘结构:
采用数组结构,数组由0, 1, 2三种状态组成,其中“0”表示没有棋子, “1”表示黑子, 而“0”表示白子。
<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:399pt; height:309.75pt'> <v:imagedata src="file:///C:\DOCUME~1\Robin\LOCALS~1\Temp\msohtml1\01\clip_image001.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" alt="" style='width:24pt;height:24pt' /><![endif]--><!--[if !vml]--><!--[endif]-->
运行文件: blackWhite.cpp
运行环境: Turbo C++ 3.0
宏定义:
字段 |
值 |
描述 |
TRUE |
1 |
表示真的情况 |
FALSE |
0 |
表示假的情况 |
UP |
0x4800 |
键盘箭头 ↑ 键 |
DOWN |
0x5000 |
键盘箭头 ↓ 键 |
LEFT |
0x4b00 |
键盘箭头 ← 键 |
RIGHT |
0x4d00 |
键盘箭头 → 键 |
ESC |
0x011b |
键盘箭头 ESC 键 |
ENTER |
0x1c0d |
键盘箭头 Enter 键 |
数据类型
全局变量的说明:
函数名 |
类型 |
描述 |
gridState |
Int[][] |
存储8×8的棋盘的状况 |
scoreBlack |
Int[] |
存储黑棋的分数 |
scoreWhite |
Int[] |
存储白棋的分数 |
keyboard |
Int |
键盘的相应存储 |
原型:
int gridState[8][8] = {0}, scoreBlack[2] = {0}, scoreWhite[2] = {0}, keyboard; |
接口函数列表:
void PrintChessBoard(void); void FillColorAgain(int coordinateX, int coordinateY); void PlayTheResult(void); void Minitance(void); void SetTheFirstColor(int operation); void FillColorAgain(int coordinateX, int coordinateY); void PriChange(int coordinateX, int coordinateY); void TranScore(void); void PrintScore(int playnum); void PlayTheResult(void); |
接口函数说明:
1.PrintChessBoard
1.1 功能说明:打印棋盘和LOG以及操作说明
1.2 前置条件:调用initgraph图形函数初始化(以下涉及图形操作的均需要,以下将省略,但是也是前置条件)
1.3 函数原型:
void PrintChessBoard(void);
1.4 参数说明:
void
1.5 返回值说明:
void
<!--[if !supportLists]-->1.6 <!--[endif]-->使用举例(算法描述):
void PrintChessBoard(void) { int clienti; setbkcolor(); setcolor(); //打印框架 setcolor(YELLOW); //打印线 line(); //Tip: outtextxy(); //以实填充 setfillstyle(); //画出标志圆 fillellipse(); } |
2.Minitance
2.1功能说明:进入对战无穷循环
2.2前置条件:调用PrintChessBoard画战区
2.3函数原型:
void Minitance(void)
2.4参数说明:
void
2.5返回值说明:
void
2.6使用举例:
void Minitance(void) { int operation = 0, coordinateX, coordinateY, sum, clienti, clientj, temp, tempi, tempj, state1, state2, state3, state4, state5, state6, state7, state8;/* coordinateX, coordinateY 为坐标,sum是当前的棋子数目,其他为临时变量 */ //在中央打印一个初始的战斗状况 while(TRUE) {temp{设置为当前鼠标所在的颜色值}/* get the first coordinate */ while(TRUE) { PrintScore(1),PrintScore(2);/* 打印分数 */ SetTheFirstColor(operation);/* 设置初始的的颜色 */ fillellipse(coordinateX, coordinateY, 10, 10);/* 在初始位置放置 */ keyboard = bioskey(0);/* 响应键盘 */ if (keyboard == ESC) break; { state1 = state2 = state3 = state4 = state5 = state6 = state7 = state8 = 0; /* if operation is white */ if((coordinateY != 85) && (gridState[(coordinateX - 115) / 30][(coordinateY - 115) / 30] != 1) && (gridState[(coordinateX-115) / 30][(coordinateY - 115) / 30] != 2))/* (115, 115)为初始位置 */ {/*judge the vailable of the rule */ //判断是不是复核放入棋子,在许多情况没有吃掉对手棋子的时候,是不允许放入棋子的 /* 假如state 状态成立那么就允许执行下一步,3 表示符合情况的状态 */ if (state1 == 3 || state2 == 3 || state3 == 3 || state4 == 3 || state5 == 3 || state6 == 3 || state7 == 3 || state8 == 3) { if ( operation % 2 == 0) gridState[(coordinateX-115) / 30][(coordinateY-115) / 30] = 1;/* 为黑棋 */ else gridState[(coordinateX-115) / 30][(coordinateY-115) / 30] = 2;/* 为白棋 */ /* the change of the screen moving the circle */ PriChange(coordinateX, coordinateY);/* 打印变化 */ TranScore();/* the tran of the score */ break;/* get to next step */ } else continue;/* continue when failed */ } /* judge the keyboard */ //对键盘中的上下左右进行移动操作 if (keyboard == ESC) break; //处理sum量,处理sum的量 PlayTheResult();/* get the result to the screen */ operation++; if (operation == 11)/* when operation achieve the 11 then to 1 */ operation = 1; }/* END: while(TRUE) */ } |
3. Display_Student
3.1功能说明:显示所有的学生信息
3.2前置条件:链表中存在学生的信息
3.3函数原型:
void DisplayStudent(LinkList lstudent)
3.4参数说明:
lstudent一个student结构体的链表。
3.5返回值说明:无
3.6使用举例:
voidDisplayStudent(LinkListlstudent) |
4. InsertStudent
4.1功能说明:插入一个学生信息
4.2前置条件:无
4.3函数原型:
bool InsertStudent(LinkList &lstudent)
4.4参数说明:
lstudent一个student结构体的结点,为引用类型。
4.5返回值说明:如果函数成功调用返回TRUE。如果不成功返回FALSE,并且显示错误原因
4.6使用举例:
boolInsertStudent(LinkList&lstudent) |
5. DeleteStudent
5.1功能说明:删除一个学生信息,不能删除第一个记录
5.2前置条件:无
5.3函数原型:
bool DeleteStudent(LinkList &lstudent)
5.4参数说明:
lstudent一个student结构体的结点,为引用类型。
5.5返回值说明:如果函数成功调用返回TRUE。如果不成功返回FALSE,并且显示错误原因
5.6使用举例:
boolDeleteStudent(LinkList&lstudent) |
文档说明备注:
[//] : 表示一段算法,或简单的功能说明。
[/**/ ] : 注释说明部分。