C++简单项目--推箱子
在处理移动的时候有太多种情况了:
1、有空位
2、在推箱子,推到了空地
3、推箱子推到了目标,
4、推目标位的箱子推到另一个目标
5、推目标位的箱子推到空地
首先记录目标位置,在每次推动之后会再绘画中自动修正目标位置的情况
修改地图之后发现不能将上述情况的5实现,还要再改。
接下来应该尝试如何实现多个关卡或者从文件中读取地图信息
- #include<iostream>
- #include<graphics.h>
- #include<conio.h>
- #include<vector>
- using namespace std;
- //0空白,1墙,2人,3箱子,4目标,5箱子与目标,6人与目标
- int x, y,temp;
- vector<int>goalx, goaly;
- int mapp[][] = {,,,,, ,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,, ,
- ,,,,, ,,,,,,,,,,,,,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
- ,,,,,,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,
- ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
- ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
- ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
- ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
- ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
- ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
- ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
- ,,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,, ,
- ,,,, ,,,,,,,, ,,,, ,,,, ,,,, ,,, ,,,, ,,,, ,,,,
- };
- void scann() {
- int i, j;
- for (i = ; i < ; i++) {
- for (j = ; j < ; j++) {
- if (mapp[i][j] >= ) {
- goalx.push_back(i);
- goaly.push_back(j);
- }
- }
- }
- }
- void drawmapp() {
- int i, j,k;
- for (i = ; i < ; i++) {
- for (j = ; j < ; j++) {
- for (k = ; k < goalx.size(); k++) {
- if (i == goalx[k] && j == goaly[k]) {
- if (mapp[i][j] == ) {
- mapp[i][j] = ;
- }
- if (mapp[i][j] == ) {
- mapp[i][j] = ;
- }
- if (mapp[i][j] == ) {
- mapp[i][j] = ;
- }
- }
- }
- switch (mapp[i][j]) {
- case :
- setlinecolor(RGB(,,));
- setfillcolor(RGB(, , ));
- fillrectangle(j * , i * , j * + , i * + );
- break;
- case :
- x = i;
- y = j;
- setlinecolor(RGB(, , ));
- setfillcolor(RGB(, , ));
- fillrectangle(j * , i * , j * + , i * + );
- break;
- case :
- setlinecolor(RGB(, , ));
- setfillcolor(RGB(, , ));
- fillrectangle(j * , i * , j * + , i * + );
- break;
- case :
- setlinecolor(RGB(, , ));
- setfillcolor(RGB(, , ));
- fillrectangle(j * , i * , j * + , i * + );
- break;
- case :
- setlinecolor(RGB(, , ));
- setfillcolor(RGB(, , ));
- fillrectangle(j * , i * , j * + , i * + );
- break;
- case :
- x = i;
- y = j;
- setlinecolor(RGB(, , ));
- setfillcolor(RGB(, , ));
- fillrectangle(j * , i * , j * + , i * + );
- break;
- }
- }
- }
- }
- void keyDown() {
- char ch = '\0';
- ch = _getch();
- switch (ch)
- {
- case 'w':
- case 'W':
- if (mapp[x - ][y] == ) {
- temp = mapp[x][y];
- mapp[x][y] = mapp[x - ][y];
- mapp[x - ][y] =;
- }
- if (mapp[x - ][y] == ) {
- mapp[x][y] = ;
- mapp[x - ][y] = ;
- }
- if (mapp[x - ][y] == && mapp[x-][y]==) {
- mapp[x-][y] = ;
- mapp[x - ][y] = ;
- mapp[x][y] = ;
- }
- if (mapp[x - ][y] == && mapp[x - ][y] == ) {
- mapp[x - ][y] = ;
- mapp[x - ][y] = ;
- mapp[x][y] = ;
- }
- if (mapp[x - ][y] == && mapp[x - ][y] == ) {
- mapp[x - ][y] = ;
- mapp[x - ][y] = ;
- mapp[x][y] = ;
- }
- if (mapp[x - ][y] == && mapp[x - ][y] == ) {
- mapp[x - ][y] = ;
- mapp[x - ][y] = ;
- mapp[x][y] = ;
- }
- break;
- case 'a':
- case 'A':
- if (mapp[x][y-] == ) {
- temp = mapp[x][y];
- mapp[x][y] = mapp[x][y-];
- mapp[x][y-] =;
- }
- if (mapp[x][y-] == ) {
- mapp[x][y] = ;
- mapp[x][y-] = ;
- }
- if (mapp[x][y-] == && mapp[x][y-] == ) {
- mapp[x][y-] = ;
- mapp[x][y-] = ;
- mapp[x][y] = ;
- }
- if (mapp[x][y - ] == && mapp[x][y - ] == ) {
- mapp[x][y - ] = ;
- mapp[x][y - ] = ;
- mapp[x][y] = ;
- }
- if (mapp[x][y - ] == && mapp[x][y - ] == ) {
- mapp[x][y - ] = ;
- mapp[x][y - ] = ;
- mapp[x][y] = ;
- }
- if (mapp[x][y - ] == && mapp[x][y - ] ==) {
- mapp[x][y - ] = ;
- mapp[x][y - ] = ;
- mapp[x][y] = ;
- }
- break;
- case 's':
- case 'S':
- if (mapp[x + ][y] == ) {
- temp = mapp[x][y];
- mapp[x][y] = mapp[x + ][y];
- mapp[x + ][y] =;
- }
- if (mapp[x + ][y] == ) {
- mapp[x][y] = ;
- mapp[x + ][y] = ;
- }
- if (mapp[x + ][y] == && mapp[x + ][y] == ) {
- mapp[x + ][y] = ;
- mapp[x + ][y] = ;
- mapp[x][y] = ;
- }
- if (mapp[x + ][y] == && mapp[x + ][y] == ) {
- mapp[x + ][y] = ;
- mapp[x + ][y] = ;
- mapp[x][y] = ;
- }
- if (mapp[x + ][y] == && mapp[x + ][y] == ) {
- mapp[x + ][y] = ;
- mapp[x + ][y] = ;
- mapp[x][y] = ;
- }
- if (mapp[x + ][y] == && mapp[x + ][y] == ) {
- mapp[x + ][y] = ;
- mapp[x + ][y] = ;
- mapp[x][y] = ;
- }
- break;
- case 'd':
- case 'D':
- if (mapp[x][y+] == ) {
- mapp[x][y] = mapp[x][y+];
- mapp[x][y+] =;
- }
- if (mapp[x][y+] == ) {
- mapp[x][y] = ;
- mapp[x][y+] = ;
- }
- if (mapp[x][y+] == && mapp[x][y+] == ) {
- mapp[x][y+] = ;
- mapp[x][y+] = ;
- mapp[x][y] = ;
- }
- if (mapp[x][y + ] == && mapp[x][y + ] == ) {
- mapp[x][y + ] = ;
- mapp[x][y + ] = ;
- mapp[x][y] = ;
- }
- if (mapp[x][y + ] == && mapp[x][y + ] == ) {
- mapp[x][y + ] = ;
- mapp[x][y + ] = ;
- mapp[x][y] = ;
- }
- if (mapp[x][y + ] == && mapp[x][y + ] ==) {
- mapp[x][y + ] = ;
- mapp[x][y + ] = ;
- mapp[x][y] = ;
- }
- break;
- default:
- break;
- }
- }
- int main() {
- int kl;
- bool checkk;
- HWND hwnd=initgraph(, );
- setbkcolor(RGB(,,));
- cleardevice();
- drawmapp();
- scann();
- while (true) {
- checkk = true;
- settextcolor(BLACK);
- outtextxy(, , "WASD控制");
- keyDown();
- cleardevice();
- drawmapp();
- for (kl = ; kl < goalx.size(); kl++) {
- if (mapp[goalx[kl]][goaly[kl]] != ) checkk = false;
- }
- if (checkk) {
- MessageBox(hwnd, "Finish", "Finish!", );
- break;
- }
- }
- system("pause");
- return ;
- }
C++简单项目--推箱子的更多相关文章
- 用C写一个简单的推箱子游戏(二)
下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么 ...
- 用C写一个简单的推箱子游戏(一)
我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...
- C++学习(九)(C语言部分)之 项目 推箱子游戏
游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4. ...
- c++、c实现推箱子小游戏
经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...
- c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;
网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...
- C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 完整版本的推箱子小游戏,最简单的纯C语言打造
/* 推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 ...
- c语言推箱子 扫雷项目
推箱子 两关的推箱子用到一个三维数组 用到的图片数据如下 https://pan.baidu.com/s/1IDE4GQLo46cxNywDqwxmlQ 密码:jdel 代码如下: #include& ...
随机推荐
- OpenStack组件系列☞Keystone搭建
一:版本信息 官网:http://docs.openstack.org/newton/install-guide-rdo/keystone.html 二:部署keystone 官网文档:http:// ...
- swiper仿tab栏切换
转载 https://developers.weixin.qq.com/community/develop/article/doc/000040a5dc4518005d2842fdf51c13 小程 ...
- ngRoute
ngRoute 模块中包含以下内容, 名称 所属 作用 ngView DIRECTIVE 提供不同路由模板插入的视图层 $routeProvider PROVIDER 提供路由配置 $route SE ...
- 最小生成树kruskal算法、
克鲁斯卡尔(kruskal) //kruskal算法生成最小生成树. //对边集数组Edge结构的定义 typedef struct { int begin; int end; int weight; ...
- Redux 初始化完整结构
文件管理 目录文档 ★★★index.js★★★ ★★★app.js★★★ ★★★store->index.js★★★ ★★★actions->index.js★★★ ★★★store-& ...
- H3C DHCP服务器基本配置示例
- 51nod 天气晴朗的魔法 - (Kruskall最小生成树)
题目: 基准时间限制:1 秒 空间限制:131072 KB 51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接 ...
- C# 将 Begin 和 End 异步方法转 task 异步
在 .NET Framework 有两个不同的异步方法,一个是 Asynchronous Programming Model (APM) 另一个是 Task-based asynchronous pa ...
- 备战省赛组队训练赛第七场(UPC)
传送门 日文题解:戳这里
- Linux 内核 回顾: ISA
设计上 ISA 总线非常老了, 并且是非常地低能, 但是它仍然持有一块挺大的控制设备的 市场. 如果速度不重要并且你想支持老式主板, 一个 ISA 实现要优于 PCI. 这个老标准 的另外一个好处是如 ...