[C/C++] 贪吃蛇双人对战版

2014/11/01 C++

最近写的,用于交最后一次结构化程序设计课的作业,闲暇之余传到网上,仅供参考,新手上路,请多指教。

先附上下载链接。http://download.csdn.net/detail/u013287454/8106587

游戏说明

为了和其他版本的贪吃蛇有所不同,这次设计的贪吃蛇采用了双人对战模式:由两名玩家分别控制自己的蛇吃各自方框中的“食物”,每个食物可获得一分,也可以吃“炸弹”,“炸弹”可在对方区域内造成一个“障碍物”,吃“炸弹”减一分。一方的“蛇”“撞墙”或撞“障碍物”视为该方游戏结束,另一方可继续,直到“撞墙”或撞“障碍物”。游戏过程中可按 ESC键结束游戏进行分数评判。

由于游戏需要不断刷新界面,所以游戏代码主要在一个大循环中进行,按照清理、处理输入信息、逻辑转换、打印 的模式进行。

代码说明

main  
{  
        //初始化界面  
        //循环  
    {  
        //清理界面  
        //处理出入信息  
        //改变小蛇位置  
        //打印界面  
    }  
}  

两个API的使用(windows.h):

BOOL SetConsoleCursorPosition(  
        HANDLE hConsoleOutput,  // handle to screen buffer(指定屏幕缓冲区)  
        COORD dwCursorPosition  // new cursor coordinates(指定 位置 dwCursorPosition.x dwCursorPosition.y)  
);//设定光标位置  
 
HANDLE GetStdHandle(  
        DWORD nStdHandle   // input, output, or error device(三个值 <详见msdn>)  
);//取得一个HANDLE  

函数说明:

BOOL init();//  游戏界面初始化  
BOOL isContinue();//  判断“小蛇”是否全部活着  
BOOL clean();//  清理“小蛇”  
BOOL input();//  处理游戏过程中的输入信息  
BOOL step();//  逻辑处理函数  
BOOL draw();//  打印函数(打印小蛇,打印炸弹,打印障碍物,打印食物,实时更新对战分数  
void Hint();//  游戏操作提示和作者签名  
BOOL initSnakeManager();//  初始化小蛇,初始化操作边框,初始化操作按键  
int GetSnakeNumber();//  获取小蛇的数量  
StuSnake GetSnake(int nIndex);  
BOOL UpdateSnake(StuSnake snake, int nIndex);  //异常处理  
int chooseAmountMan();//  选择玩家人数(单人,双人对战)  
intchooseLevel();//  选择难度  

未解决的bug

产生障碍物游戏是随机位置,所以可能和食物或者炸弹重合。另外,也可能有三个障碍物恰好包围了食物造成死局。另外障碍物也可能恰好产生在对手的蛇头前面造成对方直接死亡的这种出乎意外的结局,显然不是我们所期待的。其他bug暂时未发现。由于时间问题,这些bug我也就不去调了,初步设想是把贪吃蛇活动范围的正方形的每个点都做标记(二维数组),每次产生的障碍物都做上标记,这样可以避免障碍物重复,死局问题也可以解决(用对角线来判断是否包围食物)。

纯dos界面,codeblocks编译通过,其他编译器自测。可直接运行.exe。