C++ 控制台推箱子小游戏
// 游戏菜单.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include<iostream>
#include"windows.h"
#define KEY_DOWN(vk_code) (GetAsyncKeyState(vk_code)&0x8000?1:0) using namespace std; sDATA g_Player; sDATA g_Box[]; int _tmain(int argc, _TCHAR* argv[])
{
int nKeyState = ;
bool bBox = false;
int nBoxWin = ; //初始化人物
g_Player.X = ;
g_Player.Y = ;
g_Player.XOD = ;
g_Player.YOD = ;
//初始化箱子
for (int m = ; m < ; m++)
{
g_Box[m].X = m + ;
g_Box[m].Y = m + ;
g_Box[m].XOD = m + ;
g_Box[m].YOD = m + ;
} //键盘输入
while (true)
{
system("CLS"); if (nKeyState < )
{
if (KEY_DOWN(VK_DOWN))
{
nKeyState = abs(++nKeyState % );
}
else if (KEY_DOWN(VK_UP))
{
--nKeyState;
if (nKeyState < )
{
nKeyState = ;
}
}
if (KEY_DOWN(VK_RETURN))
{
if (nKeyState == n_Menu_PlayGame)
{
nKeyState = n_GO_PlayGame;
}
}
} //备份箱子坐标
for (int m = ; m < ; m++)
{
g_Box[m].XOD = g_Box[m].X;
g_Box[m].YOD = g_Box[m].Y;
}
//推箱子
for (int m = ; m < ; m++)
{
if (g_Player.X == g_Box[m].X && g_Player.Y == g_Box[m].Y)
{
g_Box[m].X += (g_Player.X - g_Player.XOD);
g_Box[m].Y += (g_Player.Y - g_Player.YOD);
}
}
//判断箱子是否撞墙
for (int m = ; m < ; m++)
{
if (nGameFrame[g_Box[m].X][g_Box[m].Y] == )
{
g_Box[m].X = g_Box[m].XOD;
g_Box[m].Y = g_Box[m].YOD;
g_Player.X = g_Player.XOD;
g_Player.Y = g_Player.YOD;
}
}
//判断箱子是否撞箱子
for (int m = ; m < ; m++)
{
for (int j = ; j < ; j++)
{
if (m != j&&g_Box[m].X == g_Box[j].X&&g_Box[m].Y == g_Box[j].Y)
{
g_Box[m].X = g_Box[m].XOD;
g_Box[m].Y = g_Box[m].YOD;
g_Player.X = g_Player.XOD;
g_Player.Y = g_Player.YOD;
}
}
} //判断胜利
for (; nBoxWin < ; nBoxWin++)
{
if (nGameFrame[g_Box[nBoxWin].X][g_Box[nBoxWin].Y] != )
{
break;
}
}
if (nBoxWin >= )
{
nKeyState = n_Go_Win;
} // 渲染
if (nKeyState < )
{
cout << "■■■■■■■■■■■■" << endl;
cout << "■■■■■■■■■■■■" << endl;
if (nKeyState == n_Menu_PlayGame)
{
cout << "■■ >-开始游戏 ■■" << endl;
cout << "■■ 游戏设置 ■■" << endl;
cout << "■■ 结束游戏 ■■" << endl; }
else if (nKeyState == n_Menu_GameSet)
{
cout << "■■ 开始游戏 ■■" << endl;
cout << "■■ >-游戏设置 ■■" << endl;
cout << "■■ 结束游戏 ■■" << endl;
}
else if (nKeyState == n_Menu_EndGame)
{
cout << "■■ 开始游戏 ■■" << endl;
cout << "■■ 游戏设置 ■■" << endl;
cout << "■■ >-结束游戏 ■■" << endl;
}
cout << "■■■■■■■■■■■■" << endl;
cout << "■■■■■■■■■■■■" << endl;
}
else if (nKeyState == n_GO_PlayGame)
{
for (int i = ; i < ; i++)
{
for (int a = ; a < ; a++)
{
for (int m = ; m < ; m++)
{
if (i==g_Box[m].X&&a==g_Box[m].Y)
{
bBox = true;
break;
}
else
{
bBox = false;
} }
if (nGameFrame[i][a] == )
{
cout << "■";
}
else if (i==g_Player.X&&a==g_Player.Y)
{
cout << "♀";
}
else if (bBox == true)
{
cout << "¤";
}
else if (nGameFrame[i][a] == )
{
cout << "×";
}
else
{
cout << " ";
}
}
cout << endl;
}
}
else if (nKeyState == n_Go_Win)
{
cout << "胜利!" << endl;
} //人物移动
g_Player.XOD = g_Player.X;
g_Player.YOD = g_Player.Y;
if (KEY_DOWN(VK_UP))
{
g_Player.X--;
}
else if (KEY_DOWN(VK_DOWN))
{
g_Player.X++;
}
else if (KEY_DOWN(VK_LEFT))
{
g_Player.Y--;
}
else if (KEY_DOWN(VK_RIGHT))
{
g_Player.Y++;
} if (nGameFrame[g_Player.X][g_Player.Y] == )
{
g_Player.X = g_Player.XOD;
g_Player.Y = g_Player.YOD;
} } return ;
}
控制台推箱子小游戏
C++ 控制台推箱子小游戏的更多相关文章
- C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 完整版本的推箱子小游戏,最简单的纯C语言打造
/* 推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 ...
- 推箱子小游戏《格鲁的实验室》13关 - bfs最短路径
下载了一款推箱子小游戏,第13关的时候怎么也破不了最佳纪录(最少步数是9而我们最好的方案是10步),因为数据比较小(6*8的方阵),所以写了个BFS来找最短路. 游戏的目标是把小黄人推到黄色球,小绿人 ...
- 用C#制作推箱子小游戏
思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图 (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...
- c++、c实现推箱子小游戏
经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...
- C++ 简单的控制台贪吃蛇小游戏
由于比较懒,所以不怎么写,觉得这样不应该.我应该对自己学的做出整理,不管是高端低端,写出来是自己的. // 贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "std ...
- 【面试笔试算法】Program 5 : 推箱子 (网易游戏笔试题)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 推箱子是一款经典游戏.如图所示,灰色格子代表不能通过区域,蓝色方格是箱子,黑色圆形代表玩家,含有圆点的格子代表目标点. 规 ...
- c#撸的控制台版2048小游戏
1.分析 最近心血来潮,突然想写一个2048小游戏.于是搜索了一个在线2048玩玩,熟悉熟悉规则. 只谈核心规则:(以左移为例) 1.1合并 以行为单位,忽略0位,每列依次向左进行合并,且每列只能合并 ...
随机推荐
- 版本控制工具之git
git存储区域详解 命令快速总结 初始化 git init 当前文件夹初始化 代码提交 git add file/. 自动检测工作区修改的内容提交到暂存区 git status 查看当前文件夹工作区的 ...
- JSON三种数据解析方法(转)
原 JSON三种数据解析方法 2018年01月15日 13:05:01 zhoujiang2012 阅读数:7896 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- C#控件数组批量生成控件
在编写C#窗体应用程序的时候,有时候需要生成好多个功能相似的同一种控件(比如数字键盘按键.单选框等),这时候使用窗体编辑器,费时费力,不便于修改.因此可以采用批量生成控件的形式. 以批量生成按钮为例 ...
- UDP核心API讲解
- Luogu P4321 随机漫游
期望DP要倒着推 Luogu P4321 题意 LOJ #2542 不一定是树,询问点不一定均为1 $Solution$ 设计一个巧妙的DP状态 设$ F(S,x)$表示当前在点$ x$已经走遍了$ ...
- 51nod 1016 水仙花数
大水仙花数模板+1…… #include<stdio.h> #include<math.h> #include<queue> #include<vector& ...
- [转] 常用Loss函数
好文mark 转自机器之心 :https://www.jiqizhixin.com/articles/2018-06-21-3 “损失函数”是机器学习优化中至关重要的一部分.L1.L2损失函数相信大多 ...
- 简单对比git pull和git pull --rebase的使用
使用下面的关系区别这两个操作:git pull = git fetch + git mergegit pull --rebase = git fetch + git rebase 现在来看看git m ...
- LNMP 下使用命令导出导入 MySQL 数据库
导出数据库 导出数据库为 db_wp.sql.gz 文件: 1 mysqldump -u数据库用户名 -p数据库密码 --add-drop-table --complete-insert 数据库名 | ...
- [正则表达式]PCRE反向分组引用(语法)
正则表达式中,凡出现圆括号(),括号中的匹配内容就会被认为是一个分组: 根据括号从左边出现的顺序命名分组代号,分组代号由1到n(代号0通常被一些语言用来引用整个表达式匹配的结果,即使这个表达式没有分组 ...