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& ...
随机推荐
- getopt、getopt_long和getopt_long_only解析命令行参数
一:posix约定: 下面是POSIX标准中关于程序名.参数的约定: 程序名不宜少于2个字符且不多于9个字符: 程序名应只包含小写字母和阿拉伯数字: 选项名应该是单字符或单数字,且以短横 '-' 为前 ...
- TabHost选项卡的实现(一):使用TabActivity实现
一. TabHost的基本开发流程 TabHost是一种非常实用的组件,可以很方便的在窗口上防止多个标签页,每个标签页相当于获得了一个外部容器相同大小的组件摆放区域. 我们熟悉的手机电话系统" ...
- c语言中的字节数关系、
转载自:传送门 16位编译器 char :1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: ...
- PHP 面试题三
1.nginx使用哪种网络协议? nginx是应用层 我觉得从下往上的话 传输层用的是tcp/ip 应用层用的是http fastcgi负责调度进程 2. <? echo 'hello tush ...
- Java5新特性对数组的支持
增强for循环 → for-each for (参数类型参数名 : 数组名) { 代码块 } Eg: package reviewDemo; public class Demo6 { public s ...
- H3C 查看RIP的debugging信息
- java List接口中常用类
Vector:线程安全,但速度慢,已被ArrayList替代. ArrayList:线程不安全,查询速度快. LinkedList:链表结构,增删速度快.取出List集合中元素的方式: get(int ...
- springboot 配置文件中属性变量引用方式@@解析
这种属性应用方式是field_name=@field_value@. 两个@符号是springboot为替代${}属性占位符产生,原因是${}会被maven处理,所以应该是起不到引用变量的作用. @@ ...
- C# 从零开始写 SharpDx 应用 绘制基础图形
本文告诉大家通过 SharpDx 画出简单的 2D 界面 本文属于 SharpDx 系列 博客,建议从头开始读 本文分为两步,第一步是初始化,第二步才是画界面 初始化 先创建 RenderForm 用 ...
- 2018-11-13-WPF-禁用实时触摸
title author date CreateTime categories WPF 禁用实时触摸 lindexi 2018-11-13 10:45:37 +0800 2018-5-4 21:0:3 ...