按关键词阅读: 语言 游戏 箱子
22、说明该关已完成 。
定义全局变量 , charfar*printScreen=(charfar*)0xB8000000,用于在屏幕上输出字符 。
彩色显示器的字符缓冲区首地址为0xB8000000,每一个字符占2个字节(第一个字节为ASCII值 , 第二个字节为颜色值) , 字符模式下屏幕宽80像素 , 高25像素 , 一屏可以写80*25个字符 。
3.3.2 定义结构体typedefstructwinerintx;
inty;
structwiner*p;
winer;
定义结构体structwiner用于判断每一关是否已完成 。
其中x用于存放目的地的横坐标 , y用于存放目的地的纵坐标 。
如果所有表示目的地坐标对应的状态都为“i” , 即 。
23、箱子在目的地 , 则表示已经过关 , 可以进入下一关 。
该结构体的初始化在每一关的初始化时进行 。
3.4 函数功能描述3.4.1 putoutChar()函数函数原型:voidputoutChar(inty,intx,charch,charfc,charbc)putoutChar()函数在屏幕上的指定位置输出指定的字符 。
其中 , x、y指明输出的位置 , ch表示输出的字符 , fc表示输出的字符颜色 , bc表示背景色 。
3.4.2 printWall()函数函数原型:voidprintWall(intx,inty)printWall()函数用于画墙壁 , 传入参数x、y指明位置 。
该函数调用putoutChar()进行输出 ,。
24、以黑色为背景画绿色墙 , 用小方块表示墙(ASCII值为219) 。
3.4.3 printBox()函数函数原型:voidprintBox(intx,inty)printBox()函数用于在非目的地画箱子 , 传入参数x、y指明位置 。
该函数调用putoutChar()进行输出 , 以黑色为背景白色箱子 , 用ASCII值为10的字符表示箱子 。
3.4.4 printBoxDes()函数函数原型:voidprintBoxDes(intx,inty)printBoxDes()函数用于在目的地画箱子 , 传入参数x、y指明位置 。
该函数调用putoutChar()进行输出 , 以黑色为背景画黄色箱子 , 仍用ASCII值为10的字符 。
25、表示箱子 。
3.4.5 printDestination()函数函数原型:voidprintDestination(intx,inty)printDestination()函数用于画目的地 , 传入参数x、y指明位置 。
该函数调用putoutChar()进行输出 , 以黑色为背景画黄色目的地 , 用心型表示(ASCII值为003) 。
3.4.6 printDestination1()函数函数原型:voidprintDestination1(intx,inty,winer*win,winer*pw)printDestination1()函数与printDestination()函数功能基本相同 , 都是画目的地函数 ,。
26、但是printDestination1()增加了记录每一个目的地位置的功能 。
其中x、y指明目的地的位置 , 每一关的所有目的地位置存放在结构体structwiner中 , 形成一条链表 , *winer返回链表的头 , *pw则指向链表的尾部 。
3.4.7 printMan()函数函数原型:voidprintMan(intx,inty)printMan()函数用于画小人 。
X、y指明画的位置 。
该函数通过软中断来实现 , 首先设置寄存器AX的高位和低位 , 设置高位0xa表示在光标位置显示字符;设置低位02(ASCII值) , 表示输出的字符;然后设置寄存器CX为01 , 表示重复输出的次数 , 这里只输出一次;最后产生类型为0x10 。
27、的中断 , 表示显示器输出 。
3.4.8 init()函数函数原型:voidinit()init()函数用于初始化屏幕 。
该函数首先用两个for循环初始化屏幕20*20范围内的状态 , 初始化为0 , 以后根据实际情况重新赋值;然后设置屏幕输出状态 , 设置寄存器AX的高位为0 , 低位为3 , 表示以80*25的彩色方式显示;最后移动光标到指定的位置输出操作提示信息以及版权信息 。
3.4.9 初始化游戏函数函数原型:winer*initStep1()、winer*initStep2()、winer*initStep3()、winer*initStep4() 。
这几个函数分别初始化游戏的第一关到第四关 。
这些函数的功能和实现步 。
28、骤相似 。
首先根据需要在指定的位置画墙壁和画箱子 , 在这里可以设置游戏的难度 , 初始化的墙壁越复杂 , 箱子越多 , 则游戏就越难 。
游戏的第一关至第四关难度依次增加 。
然后分别调用printDestination1()和printMan()函数画目的地和小人 。
函数返回包含各个目的地位置的链表 。
3.4.10 移动箱子函数函数原型:voidmoveBoxSpacetoSpace(intx,inty,chara)、voidmoveBoxDestoSpace(intx,inty,chara)、voidmoveBoxSpacetoDes(intx,inty,chara)、voidmoveBoxDestoDes(intx 。
29、,inty,chara)这几个函数实现的功能分别是人空地移动箱子到空地、从目的地移动箱子到空地、从空地移动箱子到目的地和中从目的地移动箱子到目的地 。
X、y指明小人当前所处的位置 , 字符a表示移动的方向 , 有“u”、“d”、“l”和“r”4个值 , 分别表示向上、下、左、右移动 。
这几个函数的实现原理大致相似 。
稿源:(未知)
【傻大方】网址:/a/2021/0801/0023373846.html
标题:箱子|推箱子游戏(C语言)( 四 )