c++、c实现推箱子小游戏
2016-04-01 16:29
579 查看
经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写。
这个游戏界面的编写总的来说不困难,主要是推动箱子的算法。
(1)利用数组和windows api 即可写出界面
(2)推箱子算法:本人比较笨,没有找到捷径,所以就穷举了推箱子步骤,分析如下:
以人为中心,出现两种可能:①人在空位 ②人在目标位置上
①有六种可能:(注:x1,y1, x2, y2为坐标的偏移量,i ,为人所在的坐标 )
View Code
文件放置如图:
这个游戏界面的编写总的来说不困难,主要是推动箱子的算法。
(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
文件放置如图:
相关文章推荐
- VC中BOOL和bool的区别
- C++ COM
- 【poj 3468】A Simple Problem with Integers 题意&题解&代码(C++)
- C++计时器
- c++第二次作业3
- C++双目运算符重载
- C++访问限定符
- c++第二次作业2
- BCD码转十进制C语言实现
- BCD码转十进制C语言实现
- BCD码转十进制C语言实现
- c++作业2
- 重载,类型转换和运算符
- dev -c++ 快捷键
- 15、C++基本概念----构造函数和析构函数
- C++primer第十二章读书笔记---动态内存与智能指针
- 转:C++宏中的“#”与“##”用法
- 【poj 2528】Mayor's posters 题意&题解&代码(C++)
- C++中虚析构函数的作用
- C++实验2-学生成绩