本文实例为大家分享了C++实现推箱子小游戏的具体代码,供大家参考,具体内容如下

功能尚为完善。

// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

#include

#define KEY_DOWN(vk_code) GetAsyncKeyState(vk_code) & 0x8000 ? 1 : 0

using namespace std;

void Map();

void PlayerMove();

void Menu();

void BoxMove();

//extern int Array[15][20];

//定义菜单状况

int nMenuState = 1;

//定义选关设置

int nSetState = 1;

//定义关卡状态

int PassState = 1;

//定义选关情况

bool bslect = false;

int Array1[15][20] = {

{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },

};

int Array2[15][20] = {

{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },

};

int Array3[15][20] = {

{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1 },

{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },

};

int Array[15][20] = {};

struct Player {

int P_row;

int P_col;

int P_rowBk;

int P_colBk;

Player() {

P_row = 0;

P_col = 0;

P_rowBk = 0;

P_colBk = 0;

}

Player(int x = 10, int y = 10) {

P_row = x;

P_col = y;

P_rowBk = x;

P_colBk = y;

}

void BackUp() {

P_rowBk = P_row;

P_colBk = P_col;

}

void restore() {

P_row = P_rowBk;

P_col = P_colBk;

}

};

//Player splayer(1, 1); //初始化玩家坐标

Player splayer = {1,1};

struct Box {

int box_x;

int box_y;

int box_xx;//用来备份坐标

int box_yy;

Box() {

box_x = 0;

box_y = 0;

box_xx = 0;

box_yy = 0;

}

Box(int x = 10, int y = 10) {

box_x = x;

box_y = y;

box_xx = box_x;

box_yy = box_y;

}

void BackUp() {

box_xx = box_x;

box_yy = box_y;

}

void restore() {

box_x = box_xx;

box_y = box_yy;

}

};

//第一关箱子坐标初始化

Box sbox[3] = {

{ 5,5 },

{ 6,6 },

{ 7,7 }

};

//坑结构体

struct Destinate {

int Des_x;

int Des_y;

Destinate(int a, int b) {

Des_x = a;

Des_y = b;

}

};

Destinate sdestinate[3] = {

{ 8,8 },

{ 9,9 },

{ 10,10 }

};

//选关设置

void SetChoise() {

while (1) {

system("cls");

if (KEY_DOWN(VK_UP)) {

//cout << "向上被按下" << endl;

--nSetState;

if (nSetState < 1) { nSetState = 3; }

}

if (KEY_DOWN(VK_DOWN)) {

//cout << "向下被按下" << endl;

++nSetState;

if (nSetState > 3) { nSetState = 1; }

}

switch (nSetState) {

case 1: cout << "********游戏选关设置********" << endl;

cout << " -> 1、关卡一" << endl;

cout << " 2、关卡二" << endl;

cout << " 3、关卡三" << endl;

system("pause");

break;

case 2: cout << "********游戏选关设置********" << endl;

cout << " 1、关卡一" << endl;

cout << " -> 2、关卡二" << endl;

cout << " 3、关卡三" << endl;

system("pause");

break;

case 3: cout << "********游戏选关设置********" << endl;

cout << " 1、关卡一" << endl;

cout << " 2、关卡二" << endl;

cout << " -> 3、关卡三" << endl;

system("pause");

break;

}

if (KEY_DOWN(VK_RETURN)) {

if (1 == nSetState) {

memcpy(Array, Array1, sizeof(Array));

splayer.P_row = 1;

splayer.P_col = 1;

PassState = 1;

for (int i = 0; i < 3; i++) {

sbox[i].box_x = 5 + i;

sbox[i].box_y = 5 + i;

sdestinate[i].Des_x = 8 + i;

sdestinate[i].Des_y = 8 + i;

}

}

else if (2 == nSetState) {

memcpy(Array, Array2, sizeof(Array));

splayer.P_row = 1;

splayer.P_col = 1;

PassState = 2;

for (int i = 0; i < 3; i++) {

sbox[i].box_x = 5 + i;

sbox[i].box_y = 5 + i;

sdestinate[i].Des_x = 3 + i;

sdestinate[i].Des_y = 3;

}

}

else if (3 == nSetState) {

memcpy(Array, Array3, sizeof(Array));

splayer.P_row = 1;

splayer.P_col = 1;

PassState = 3;

memcpy(Array, Array3, sizeof(Array));

for (int i = 0; i < 3; i++) {

sbox[i].box_x = 10;

sbox[i].box_y = 7 + i;

sdestinate[i].Des_x = 2 + i;

sdestinate[i].Des_y = 2;

}

}

bslect = true;

break;

}

}

}

//判断玩家移动

void PlayerMove() {

splayer.BackUp();

if (KEY_DOWN(VK_UP)) {

--splayer.P_row;

}

if (KEY_DOWN(VK_DOWN)) {

++splayer.P_row;

}

if (KEY_DOWN(VK_LEFT)) {

--splayer.P_col;

}

if (KEY_DOWN(VK_RIGHT)) {

++splayer.P_col;

}

if (1 == Array[splayer.P_row][splayer.P_col]) {//判断玩家是否越墙

splayer.restore();

}

}

//判断箱子移动

void BoxMove() {

for (int i = 0; i < 3; i++) {

sbox[i].BackUp();

}

int skew_x = 0; //临时偏移量

int skew_y = 0;

for (int s = 0; s < 3; s++) { //利用坐标偏移量求箱子新位置

if (splayer.P_row == sbox[s].box_x && splayer.P_col == sbox[s].box_y) {

skew_x = sbox[s].box_x - splayer.P_rowBk;

skew_y = sbox[s].box_y - splayer.P_colBk;

sbox[s].box_x = sbox[s].box_x + skew_x;

sbox[s].box_y = sbox[s].box_y + skew_y;

/*sbox[s].restore();*/

}

}

for (int a = 0; a < 3; a++) {

for (int b = 0; b < 3; b++) {

if (a != b && (sbox[a].box_x == sbox[b].box_x && sbox[a].box_y == sbox[b].box_y)) {

splayer.restore();

sbox[a].restore();

}

}

}

for (int s = 0; s < 3; s++) { //判断箱子是否越界

if (1 == Array[sbox[s].box_x][sbox[s].box_y]) {

splayer.restore();

sbox[s].restore();

}

}

}

//判断胜利

void JudgeWin() {

int nCorrectNum = 0; //判断箱子推到正确位置的数量

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 3; j++) {

if (sdestinate[i].Des_x == sbox[j].box_x && sdestinate[i].Des_y == sbox[j].box_y) {

++nCorrectNum;

break;

}

}

if (3 <= nCorrectNum) {

//system("cls");

cout << "You Win!" << endl;

++PassState;

if (2 == PassState) {

memcpy(Array, Array2, sizeof(Array));

//更新玩家位置

splayer.P_row = 1;

splayer.P_col = 1;

//更新箱子和坑状态

for (int i = 0; i < 3; i++) {

sbox[i].box_x = 5 + i;

sbox[i].box_y = 5 + i;

sdestinate[i].Des_x = 3 + i;

sdestinate[i].Des_y = 3;

}

}

if (3 == PassState) {

splayer.P_row = 1;

splayer.P_col = 1;

memcpy(Array, Array3, sizeof(Array));

for (int i = 0; i < 3; i++) {

sbox[i].box_x = 10;

sbox[i].box_y = 7 + i;

sdestinate[i].Des_x = 2 + i;

sdestinate[i].Des_y = 2;

}

}

//system("pause");

break;

}

/*system("pause");*/

}

}

//打印游戏菜单

void Menu() {

if (KEY_DOWN(VK_UP)) {

//cout << "向上被按下" << endl;

--nMenuState;

if (nMenuState < 1) { nMenuState = 3; }

}

if (KEY_DOWN(VK_DOWN)) {

//cout << "向下被按下" << endl;

++nMenuState;

if (nMenuState > 3) { nMenuState = 1; }

}

switch (nMenuState) {

case 1: system("cls");

cout << "********游戏界面菜单********" << endl;

cout << " -> 1、游戏开始" << endl;

cout << " 2、游戏设置" << endl;

cout << " 3、退出游戏" << endl << endl;

cout << " ->按小键盘↑↓←→移动

cout << " ->按F1 F2 F3可切换关卡

system("pause");

break;

case 2: system("cls");

cout << "********游戏界面菜单********" << endl;

cout << " 1、游戏开始" << endl;

cout << " -> 2、游戏设置" << endl;

cout << " 3、退出游戏" << endl << endl;

cout << " ->按小键盘↑↓←→移动

cout << " ->按F1 F2 F3可切换关卡

system("pause");

break;

case 3: system("cls");

cout << "********游戏界面菜单********" << endl;

cout << " 1、游戏开始" << endl;

cout << " 2、游戏设置" << endl;

cout << " -> 3、退出游戏" << endl << endl;

cout << " ->按小键盘↑↓←→移动

cout << " ->按F1 F2 F3可切换关卡

system("pause");

break;

}

}

void Map() {

while (1) {

system("cls");

PlayerMove();

BoxMove();

JudgeWin();

if (4 == PassState) {

cout << "恭喜通关" << endl;

PassState = 1;

memcpy(Array, Array1, sizeof(Array));

//更新玩家位置

splayer.P_row = 1;

splayer.P_col = 1;

//更新箱子和坑状态

for (int i = 0; i < 3; i++) {

sbox[i].box_x = 5 + i;

sbox[i].box_y = 5 + i;

sdestinate[i].Des_x = 8 + i;

sdestinate[i].Des_y = 8 + i;

}

system("pause");

break;

}

if (KEY_DOWN(VK_F1)) {

memcpy(Array, Array1, sizeof(Array));

PassState = 1;

//更新玩家位置

splayer.P_row = 1;

splayer.P_col = 1;

//更新箱子和坑状态

for (int i = 0; i < 3; i++) {

sbox[i].box_x = 5 + i;

sbox[i].box_y = 5 + i;

}

}

if (KEY_DOWN(VK_F2)) {

memcpy(Array, Array2, sizeof(Array));

PassState = 2;

//更新玩家位置

splayer.P_row = 1;

splayer.P_col = 1;

//更新箱子和坑状态

for (int i = 0; i < 3; i++) {

sbox[i].box_x = 3 + i;

sbox[i].box_y = 5;

sdestinate[i].Des_x = 3 + i;

sdestinate[i].Des_y = 3;

}

}

if (KEY_DOWN(VK_F3)) {

memcpy(Array, Array3, sizeof(Array));

PassState = 3;

//更新玩家位置

splayer.P_row = 1;

splayer.P_col = 1;

//更新箱子和坑状态

for (int i = 0; i < 3; i++) {

sbox[i].box_x = 10;

sbox[i].box_y = 7 + i;

sdestinate[i].Des_x = 2 + i;

sdestinate[i].Des_y = 2;

}

}

//打印地图

for (int i = 0; i < 15; i++) {

for (int j = 0; j < 20; j++) {

bool bDrawBox = false; //判断箱子

for (int m = 0; m < 3; m++) {

if (i == sbox[m].box_x && j == sbox[m].box_y) {

bDrawBox = true;

break;

}

}

bool bDrawDes = false; //判断坑

for (int m = 0; m < 3; m++) {

if (i == sdestinate[m].Des_x && j == sdestinate[m].Des_y) {

bDrawDes = true;

break;

}

}

if (1 == Array[i][j]) {

cout << "■";

}

else if (i == splayer.P_row && j == splayer.P_col) {

cout << "♀";

}

else if (true == bDrawBox) { //将true放在前面,不然出现全是箱子都不知道怎么错的……

cout << "箱";

}

else if (true == bDrawDes) {

cout << "坑";

}

else {

cout << " ";

}

}

cout << endl;

}

system("pause");

}

}

int _tmain(int argc, _TCHAR* argv[])

{

memcpy(Array, Array1, sizeof(Array));

while (1) {

//if (KEY_DOWN(VK_RETURN)){

// if (1 == nMenuState) {

// Map();

// }

// else if (2 == nMenuState) {

// SetChoise();

// /* cout << "wwww";

// system("pause");*/

// }

// else if (3 == nMenuState)

// return 0;

//}

if (3 == nMenuState && KEY_DOWN(VK_RETURN)) { //可以

return 0;

}

else if (2 == nMenuState && KEY_DOWN(VK_RETURN)) {

SetChoise();

if (bslect) {

Map();

}

}

else if (1 == nMenuState && KEY_DOWN(VK_RETURN)) {

Map();

}

//if (KEY_DOWN(VK_RETURN) && 3 == nMenuState) { //KEY_DOWN(VK_RETURN)不能进行与或运算 ??

// return 0;

//}

//else if (KEY_DOWN(VK_RETURN) && 1 == nMenuState) {

// Map();

//}

else {

Menu();

}

}

//Map();

system("pause");

return 0;

}

代码效果:

关于C++小游戏的更多精彩内容请点击专题: 《C++经典小游戏》 学习了解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

推箱子matlab源代码,C++实现推箱子小游戏源码相关推荐

  1. 控制台五子棋java源代码_两套 五子棋小游戏源码(控制台+JavaSWing)

    [实例简介] [实例截图] [核心代码] 五子棋 ├── 图形 │   ├── java五子棋小程序.doc │   ├── 五子棋 │   │   ├── bin │   │   │   └── c ...

  2. 网页版打地鼠小游戏源代码,网页版打灰太狼小游戏源码

    网页版打地鼠小游戏源代码,网页版打灰太狼小游戏源码 完整代码下载地址:网页版打地鼠小游戏源代码,网页版打灰太狼小游戏源码 核心代码 <!DOCTYPE html> <html> ...

  3. HTML5推箱子小游戏 源码 共100关哦!

    推箱子 源码链接地址:https://github.com/shunyue1320/sokoban.git 推箱子小游戏展示效果图: 源码链接地址:https://github.com/shunyue ...

  4. python小游戏源码-导弹发射小游戏——Python源代码

    导弹发射小游戏 # 导弹发射小游戏完整源代码 # Designed by Mcoblack 公众号pythonwanyuxue import turtle import random # 设置屏幕画布 ...

  5. python射击小游戏源码_导弹发射小游戏——Python源代码

    导弹发射小游戏 # 导弹发射小游戏完整源代码 # Designed by Mcoblack 公众号pythonwanyuxue import turtle import random # 设置屏幕画布 ...

  6. 基于Android的推箱子小游戏 源码

    完整工程已打包放在我的资源文件中  https://download.csdn.net/download/huangshuai147/11151692 package com.example.push ...

  7. java打字小游戏源码_求JAVA编写打字游戏源代码!

    展开全部 package chen; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; ...

  8. python文字游戏源代码_python 像素小鸟小游戏源码(flappybird)

    [实例简介] 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时 [实例截图] [核心代码] from Class impo ...

  9. python小游戏源代码pygame_python抓娃娃小游戏源码(pygame)

    [实例简介] [实例截图] [核心代码] from PIL import Image import math,pygame,sys,mod from mod import Hook from mod ...

最新文章

  1. python中字符串中文乱码_[python] 中文乱码问题
  2. 反应式编程在微服务下的重生
  3. react 倒计时 countDown
  4. 【LeetCode笔记】39. 组合总和(Java、DFS回溯、队列)
  5. 有几百万的房子,也吃不起西贝,感觉像在交税…….
  6. 取消Windows操作系统中自动播放
  7. 20200718每日一句
  8. php 一次性订阅消息,解读一下一次性订阅消息
  9. Android通讯录管理(获取联系人、通话记录、短信消息)(一)
  10. 记一次axsi2调用 web services 提示 java.net.SocketException: Connection reset 的解决
  11. 家用计算机常见故障及解决方式,计算机常见的五大故障及解决办法
  12. CSDN的C1-见习工程师能力认证相关知识(框架)
  13. 中医文化之熏蒸的历史
  14. 分页符怎么删除,word不要的页面删不掉
  15. BZOJ 3168: [Heoi2013]钙铁锌硒维生素 [线性基 Hungary 矩阵求逆]
  16. 【网页设计】基于HTML在线商城购物项目设计与实现-----电脑商城6页带视频 带报告3000字
  17. 熊猫烧香作者李俊的个人简历
  18. 华清远见上海中心培训感言
  19. C++语言程序设计——知识点复盘(第四章 类与对象)
  20. Go 调用系统默认浏览器打开链接

热门文章

  1. html div box,CSS box-sizing属性的正确用法
  2. 飞康与红帽到底哪里像?软件定义存储让飞康走得更远!
  3. 一图看懂 RTT 设备层次
  4. Vue 使用 vis-network 绘制网络关系图
  5. python详解元组数据结构
  6. 【Windows】解决windows系统时间与北京时间相差8小时
  7. 带你读AI论文丨ACGAN-动漫头像生成
  8. 511遇见易语言API模块线程创建许可证(InitializeCriticalSection)
  9. margin的具体使用方法
  10. AEAI Portal网站门户配置手册