您的位置:首页 > 编程语言 > C语言/C++

c++、c实现推箱子小游戏

2016-04-01 16:29 579 查看
  经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写。

  这个游戏界面的编写总的来说不困难,主要是推动箱子的算法。

  (1)利用数组和windows api 即可写出界面

    

#define N 15
#define M 15
int map
[M] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 },//0->空白
{ 0, 0, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0 },//1->墙
{ 0, 0, 0, 0, 1, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0 },//2->人
{ 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0 },//3->箱子
{ 0, 0, 0, 1, 4, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0 },//4->位置
{ 0, 0, 0, 1, 4, 3, 0, 0, 1, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 4, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

void PushBox::Color(int m)//封装到PushBox类里
{
HANDLE consolehwnd;//创建句柄,详细句柄知识,请百度一下或查MSDN
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄
SetConsoleTextAttribute(consolehwnd, m);
}

void PushBox::Drop(int map
[M])
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
switch (map[i][j])
{
case 0:    Color(7);           std::cout << "  "; break;
case 1:    Color(4);  std::cout << "■"; break;
case 2: Color(10); std::cout << "△"; break;
case 3: Color(5);  std::cout << "□"; break;
case 4: Color(1);  std::cout << "☆"; break;
case 5: Color(7);  std::cout << "◆"; break;//箱子到达目标位置
case 6: Color(10); std::cout << "△"; break;//表示人与位置重叠

}
std::cout << "\n";
}
}


  

  (2)推箱子算法:本人比较笨,没有找到捷径,所以就穷举了推箱子步骤,分析如下:

     以人为中心,出现两种可能:①人在空位 ②人在目标位置上

       ①有六种可能:(注:x1,y1, x2, y2为坐标的偏移量,i ,为人所在的坐标 )

       

0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
0    0    0    1    1    1    1    1    0    0    0    0    0    0    0
0    0    0    1    2    0    0    1    0    0    0    0    0    0    0
0    0    0    1    0    3    3    1    0    1    1    1    0    0    0
0    0    0    1    0    3    0    1    0    1    4    1    0    0    0
0    0    0    1    1    1    0    1    1    1    4    1    0    0    0
0    0    0    0    1    1    0    0    0    0    4    1    0    0    0
0    0    0    0    1    0    0    0    1    0    0    1    0    0    0
0    0    0    0    1    0    0    0    1    1    1    1    0    0    0
0    0    0    0    1    1    1    1    1    0    0    0    0    0    0


View Code

文件放置如图:







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: