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位,每列依次向左进行合并,且每列只能合并 ...
随机推荐
- Mybatis的原理与JVM内存结构(面试题)
Mybatis的原理 1.Mapper 接口在初始SQL SessionFactory注册的 2.Mapper 接口注册在名为MapperRegistry类的 HasMap中 key=Mapper c ...
- Linux中的pipe(管道)与named pipe(FIFO 命名管道)
catalogue . pipe匿名管道 . named pipe(FIFO)有名管道 1. pipe匿名管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常 ...
- 优化算法系列-遗传算法(3)——NSGAII学习网址
JMetal https://www.cnblogs.com/denggaoshan/p/6306640.html https://www.cnblogs.com/denggaoshan/p/6308 ...
- Java IO流操作汇总: inputStream 和 outputStream【转】
我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...
- java代码调用第三方接口
一.利用httpclient来字符串参数(url是第三方接口,不带参数,如:http://192.168.16.200:8081/faceInfo/list,param是url后面所要带的参数) pu ...
- 使用SIGALARM为recvfrom设置超时
static void sig_alrm(int); void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) ...
- UEditor调用上传图片、上传文件等模块
来源:https://www.cnblogs.com/lhm166/articles/6079973.html 说到百度富文本编辑器ueditor(下面简称ue),我不得不给它一个大大的赞.我们在网站 ...
- javascript基础 之 代码规范
1,变量名 1,变量名推荐使用小驼峰写法:类似于:firstName 2,全局变量和常量建议用大写:PI 3,支持下划线 2,缩进 1,一般使用4个空格当作缩进,tab建议少用 2,运算符左右和左花括 ...
- Django 实现list页面检索
在list.html写入from表单 在views渲染list方法写入,从前台获取的searchtitle根据name实现检索
- android Button上面的英文字符串自动大写的问题解决
xml文件中加入: android:textAllCaps="false"