struct winer *p;
}winer;
定义结构体struct winer用于判断每一关是否完成。其中x用于存放目的地的横坐标,y用于存放目的地的纵坐标。如果所有表示目的地的坐标对的状态都为"i",即箱子在目的地,则表示已经通关,可以进入下一关。该结构体的初始化在每一关的初始化时进行。
3. 函数功能描述
(1) putoutChar()
函数原型:void putoutChar(int y,int x, char ch.char fc,char bc))
putoutChar()函数在屏幕上的指定位置输出指定的字符。其中,x、y指明输出的位置,ch表示输出的字符,fc表示输出的颜色,bc表示输出的背景颜色。
(2) printWall()
函数原型:void printWall(int x,int y)
printWall()函数用于画墙壁,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画绿色墙,用小方块表示墙(ASCII码值为219)
(3) printBox()
函数原型:void printBox(int x,int y)
printBox()函数用于在非目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画白色箱子,用ASCII值为10的字符表示箱子。
(4) printBoxDes()
函数原型:void printBoxDes(int x, int y)
printBoxDes()函数用于在目的地画箱子,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色箱子,仍用ASCII值为10的字符表示箱子。
(5) printDestination()
函数原型:printDestination(int x,int y)
printDestination()函数用于画目的地,传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画黄色目的地,用心型表示(ASCII值为003)。
(6) printDestination1()
函数原型:void printDestination1(int x, int y,winer**win , winer **pw)
printDestination1()函数与printDestination()函数功能基本相同,都是画目的地函数,但是printDestination1()增加了记录每个目的地位置的功能。其中x、y指明目的地的位置,每一关的所有目的地位置存放在结构体struct winer中,形成一条链表,**winer返回链表的头,**pw则指向链表的尾部。
(7) printMan()
函数原型:void printMan(int x , int y)
printMan()函数用于画小人。X、y指明画的位置。该函数通过软中断来实现,首先设置寄存器的高位和低位,设置高位0xa表示在光标位置显示字符;设置低位02(ASCII值),表示输出的字符;然后设置寄存器CX为01,表示重复输出的次数,这里只输出一次;最后产生类型为0x10的中断,表示显示器输出。
(8) init()
函数原型:void init()
init()函数用于初始化屏幕。该函数首先用两个for循环初始化屏幕20×20范围内的状态,初始化为0 ,以后根据实际情况重新赋值;然后设置屏幕输出状态,设置寄存器AX的高位为0,低位为3,表示以80×25的彩色方式显示;最后移动光标到指定位置输出屏幕欢迎信息。
(9) 初始化游戏
函数原型:winer *initStep1()、winer *initStep2()、winer *initStep3()、winer *initStep4()
这几个函数分别初始化游戏第一关到第四关。这些函数的功能和实现步骤相似。首先根据需要在制定的位置画墙壁和画箱子,在这里可以设置游戏的难度,初始化的墙壁越复杂,箱子越多,则游戏就越难。游戏的第一至第四关难度依次增加。然后分别调用printDestination1() 和printMan()函数画目的地和小人。函数返回包含各个目的地位置的链表。
(10) 移动箱子
函数原型:void moveBoxSpacetoSpace(int x,int y,char a)、void moveBoxDestoSpace(int x,int y,char a)、void moveBoxSpacetoDes(int x,int y,char a)、void moveBoxDestoDes(int x,int y,char a)。
这几个函数实现的功能分别是从空地