// 游戏菜单.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++ 控制台推箱子小游戏的更多相关文章

  1. C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  2. 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  3. 完整版本的推箱子小游戏,最简单的纯C语言打造

    /* 推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 ...

  4. 推箱子小游戏《格鲁的实验室》13关 - bfs最短路径

    下载了一款推箱子小游戏,第13关的时候怎么也破不了最佳纪录(最少步数是9而我们最好的方案是10步),因为数据比较小(6*8的方阵),所以写了个BFS来找最短路. 游戏的目标是把小黄人推到黄色球,小绿人 ...

  5. 用C#制作推箱子小游戏

    思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...

  6. c++、c实现推箱子小游戏

    经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...

  7. C++ 简单的控制台贪吃蛇小游戏

    由于比较懒,所以不怎么写,觉得这样不应该.我应该对自己学的做出整理,不管是高端低端,写出来是自己的. // 贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "std ...

  8. 【面试笔试算法】Program 5 : 推箱子 (网易游戏笔试题)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 推箱子是一款经典游戏.如图所示,灰色格子代表不能通过区域,蓝色方格是箱子,黑色圆形代表玩家,含有圆点的格子代表目标点. 规 ...

  9. c#撸的控制台版2048小游戏

    1.分析 最近心血来潮,突然想写一个2048小游戏.于是搜索了一个在线2048玩玩,熟悉熟悉规则. 只谈核心规则:(以左移为例) 1.1合并 以行为单位,忽略0位,每列依次向左进行合并,且每列只能合并 ...

随机推荐

  1. hive笔记

    cast cast(number as string),  可以将整数转成字符串 lpad  rpad lpad(target, 10, '0')   表示在target字符串前面补0,构成一个长度为 ...

  2. [物理学与PDEs]第3章习题7 快、慢及Alfv\'en 特征速度的比较

    证明: 当 $H_1\neq 0$ 及 $H_2^2+H_3^2\neq 0$ 时, 快.慢及 Alfv\'en 特征速度 $C_f$, $C_s$ 及 $C_a$ 满足 $$\bex 0<C_ ...

  3. [物理学与PDEs]第1章习题5 偶极子的电场强度

    试计算由习题 4 给出的电偶极子的所形成的电场的电场强度. 解答: $$\beex \bea {\bf E}(P)&=\cfrac{1}{4\pi\ve_0} \sez{\cfrac{-q}{ ...

  4. JavaSE笔记-注释

    Annotation Annotation是一个接口,可以把Annotation当成一个修饰符 Annotation的定义 注解通过@interface定义 public @interface Tes ...

  5. 递归 - Leetcode 110 判断二叉树是否为平衡二叉树

    110. Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, ...

  6. redis 数据结构及应用场景

    1. String 常用命令: get.set.incr.decr.mget等 应用场景: String是最常用的数据类型,普通的key/value都可以归为此类,value其实不仅是String,也 ...

  7. django/python日志logging 的配置以及处理

    日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常.在生产环境下有很大的用处.在java 开发中通常用 log4j,logback 等三方组件.那么在 django中是怎么处 ...

  8. 【原创】大叔经验分享(16)Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher

    今天尝试运行一个古老的工程,配置好之后编译通过,结果运行时报错: org.springframework.beans.factory.BeanDefinitionStoreException: Une ...

  9. vue ajax返回html代码不渲染解决

    <span v-html='lists.html'></span>

  10. 20175226 2018-2019-2 《Java程序设计》第三周学习总结

    20175226 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 编程语言的几个发展阶段 类面向机器语言(汇编语言).面向过程语言(C语言).面向对象语言(J ...