目录

前言

游戏效果图

游戏开发思路

游戏逻辑的分析

源代码实现

头文件

PushBackGame.c文件

test.c文件


前言

本游戏需要用到的核心技术,如下

  1. 二维数组
  2. 分支语句

技术难点: 二维数组的应用和游戏的判断逻辑

只要会以上的技术的萌新都能做出很棒的游戏,博主本身也是一枚小白,如果源代码的某些地方有不足,请大佬在评论区指出。


游戏效果图

实际游玩效果图​​​​​

游戏开发思路

分析游戏逻辑,再根据游戏分析游戏代码逻辑写出伪代码,再分析可能存在的问题,最后一步才是开发游戏。

游戏逻辑的分析

游戏逻辑分析图

源代码实现

头文件

#pragma once
#include <stdio.h>
#include <Windows.h>#define ROW 10
#define COL 10enum Control
{上 = 72,下 = 80,左 = 75,右 = 77
};extern void Game();extern void DisplayBoard(int board[ROW][COL]);extern void MovePlayer(int board[ROW][COL]);extern void PushBox(int board[ROW][COL], int y, int x, char ch);extern void MovePlay(int board[ROW][COL], int y, int x);extern int JudgeVictory(int board[ROW][COL]);extern void HelpMan();

PushBackGame.c文件

#include "PushBoxGame.h"void HelpMan()
{system("cls");printf("==============================\n");printf("\t移动操作\n");printf("向上移动:\t↑\tw\n");printf("向下移动:\t↓\ts\n");printf("向左移动:\t←\ta\n");printf("向右移动:\t→\td\n");printf("------------------------------\n");printf("\t功能性操作\n");printf("游戏内回到主菜单:\tz\n");printf("==============================\n");printf("按任意键退出.......\n");_getch();
}int JudgeVictory(int board[ROW][COL])
{int i = 0;int j = 0;int count = 0;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){if (5 == board[i][j]){count++;}if (count == 4){return 1;}}}return 0;
}void MovePlay(int board[ROW][COL], int y, int x)
{//看是空地还是存放点if (0 == board[y][x]){board[y][x] = 6;}else if (3 == board[y][x]){board[y][x] = 4;}
}void PushBox(int board[ROW][COL], int y, int x, char ch)
{//如果箱子在存放点if (5 == board[y][x]){switch (ch){case 'w':if (0 == board[y - 1][x]){board[y--][x] = 4;board[y][x] = 2;}else if (3 == board[y - 1][x]){board[y--][x] = 4;board[y][x] = 5;}break;case 's':if (0 == board[y + 1][x]){board[y++][x] = 4;board[y][x] = 2;}else if (3 == board[y + 1][x]){board[y++][x] = 4;board[y][x] = 5;}break;case 'a':if (0 == board[y][x - 1]){board[y][x--] = 4;board[y][x] = 2;}else if (3 == board[y][x - 1]){board[y][x--] = 4;board[y][x] = 5;}break;case 'd':if (0 == board[y][x + 1]){board[y][x++] = 4;board[y][x] = 2;}else if (3 == board[y][x + 1]){board[y][x++] = 4;board[y][x] = 5;}break;}}//没在存放点else if (2 == board[y][x]){switch (ch){case 'w':if (0 == board[y - 1][x]){board[y--][x] = 6;board[y][x] = 2;}else if (3 == board[y - 1][x]){board[y--][x] = 6;board[y][x] = 5;}break;case 's':if (0 == board[y + 1][x]){board[y++][x] = 6;board[y][x] = 2;}else if (3 == board[y + 1][x]){board[y++][x] = 6;board[y][x] = 5;}break;case 'a':if (0 == board[y][x - 1]){board[y][x--] = 6;board[y][x] = 2;}else if (3 == board[y][x - 1]){board[y][x--] = 6;board[y][x] = 5;}break;case 'd':if (0 == board[y][x + 1]){board[y][x++] = 6;board[y][x] = 2;}else if (3 == board[y][x + 1]){board[y][x++] = 6;board[y][x] = 5;}break;}}
}void MovePlayer(int board[ROW][COL])
{int x = 0;int y = 0;int i = 0;int j = 0;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){if (6 == board[i][j]){x = j;y = i;}}}do{DisplayBoard(board);switch (_getch()){case 'w':case 'W':case 上://判断是在空地,还是在存放点if (6 == board[y][x]){//如果人后面是箱子就移动箱子if (!(2 == board[y - 2][x]) && !(5 == board[y - 2][x]) && !(1 == board[y - 2][x]) && (2 == board[y - 1][x] || 5 == board[y - 1][x])){board[y--][x] = 0;PushBox(board, y, x, 'w');}//如果人后面不是箱子就移动人else if (0 == board[y - 1][x] || 3 == board[y - 1][x]){board[y--][x] = 0;MovePlay(board, y, x);}}else if (4 == board[y][x]){//如果人后面是箱子就移动箱子if (!(2 == board[y - 2][x]) && !(5 == board[y - 2][x]) && !(1 == board[y - 2][x]) && (2 == board[y - 1][x] || 5 == board[y - 1][x])){board[y--][x] = 3;PushBox(board, y, x, 'w');}//如果人后面不是箱子就移动人else if (0 == board[y - 1][x] || 3 == board[y - 1][x]){board[y--][x] = 3;MovePlay(board, y, x);}}break;case 's':case 'S':case 下://判断是在空地,还是在存放点if (6 == board[y][x]){//如果人后面是箱子就移动箱子if (!(2 == board[y + 2][x]) && !(5 == board[y + 2][x]) && !(1 == board[y + 2][x]) && (2 == board[y + 1][x] || 5 == board[y + 1][x])){board[y++][x] = 0;PushBox(board, y, x, 's');}//如果人后面不是箱子就移动人else if (0 == board[y + 1][x] || 3 == board[y + 1][x]){board[y++][x] = 0;MovePlay(board, y, x);}}else if (4 == board[y][x]){//如果人后面是箱子就移动箱子if (!(2 == board[y + 2][x]) && !(5 == board[y + 2][x]) && !(1 == board[y + 2][x]) && (2 == board[y + 1][x] || 5 == board[y + 1][x])){board[y++][x] = 3;PushBox(board, y, x, 's');}//如果人后面不是箱子就移动人else if (0 == board[y + 1][x] || 3 == board[y + 1][x]){board[y++][x] = 3;MovePlay(board, y, x);}}break;case 'a':case 'A':case 左://判断是在空地,还是在存放点if (6 == board[y][x]){//如果人后面是箱子就移动箱子if (!(2 == board[y][x - 2]) && !(5 == board[y][x - 2]) && !(1 == board[y][x - 2]) && (2 == board[y][x - 1] || 5 == board[y][x - 1])){board[y][x--] = 0;PushBox(board, y, x, 'a');}//如果人后面不是箱子就移动人else if (0 == board[y][x - 1] || 3 == board[y][x - 1]){board[y][x--] = 0;MovePlay(board, y, x);}}else if (4 == board[y][x]){//如果人后面是箱子就移动箱子if (!(2 == board[y][x - 2]) && !(5 == board[y][x - 2]) && !(1 == board[y][x - 2]) && (2 == board[y][x - 1] || 5 == board[y][x - 1])){board[y][x--] = 3;PushBox(board, y, x, 'a');}//如果人后面不是箱子就移动人else if (0 == board[y][x - 1] || 3 == board[y][x - 1]){board[y][x--] = 3;MovePlay(board, y, x);}}break;case 'd':case 'D':case 右://判断是在空地,还是在存放点if (6 == board[y][x]){//如果人后面是箱子就移动箱子if (!(2 == board[y][x + 2]) && !(5 == board[y][x + 2]) && !(1 == board[y][x + 2]) && (2 == board[y][x + 1] || 5 == board[y][x + 1])){board[y][x++] = 0;PushBox(board, y, x, 'd');}//如果人后面不是箱子就移动人else if (0 == board[y][x + 1] || 3 == board[y][x + 1]){board[y][x++] = 0;MovePlay(board, y, x);}}else if (4 == board[y][x]){//如果人后面是箱子就移动箱子if (!(2 == board[y][x + 2]) && !(5 == board[y][x + 2]) && !(1 == board[y][x + 2]) && (2 == board[y][x + 1] || 5 == board[y][x + 1])){board[y][x++] = 3;PushBox(board, y, x, 'd');}//如果人后面不是箱子就移动人else if (0 == board[y][x + 1] || 3 == board[y][x + 1]){board[y][x++] = 3;MovePlay(board, y, x);}}break;case 'z':return;}if (JudgeVictory(board)){system("cls");DisplayBoard(board);printf("恭喜通关!\n");printf("按任意键继续\n");getchar();_getch();return;}} while (1);}void DisplayBoard(int board[ROW][COL])
{system("cls");int i = 0;int j = 0;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){switch (board[i][j]){case 0:printf("  ");break;case 1:printf("■");break;case 2:printf("□");break;case 3:printf("☆");break;case 4:printf("♂");break;case 5:printf("★");break;case 6:printf("♀");break;}}putchar('\n');}
}void Game()
{//墙壁:1 ■//箱子:2 □//箱子存放点:3 ☆//人在箱子存放点:4 ♂//箱子在箱子存放点:5 ★//人:6 ♀ int board[ROW][COL] = { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },{ 1, 0, 0, 0, 0, 1, 0, 0, 0, 1 },{ 1, 0, 2, 0, 0, 1, 0, 2, 0, 1 },{ 1, 0, 0, 2, 0, 1, 0, 0, 0, 1 },{ 1, 1, 1, 0, 0, 0, 0, 0, 0, 1 },{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },{ 1, 0, 0, 0, 1, 0, 0, 1, 1, 1 },{ 1, 0, 2, 6, 1, 0, 0, 3, 3, 1 },{ 1, 0, 0, 0, 1, 0, 0, 3, 3, 1 },{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },};//DisplayBoard(board);MovePlayer(board);
}

test.c文件

#include "PushBoxGame.h"
#define nullptr ((void*) 0)int main()
{int input = 0;do{system("color 3e");system("mode con cols=30 lines=15");system("cls");printf("************************\n");printf("**** 1. 开始游戏   *****\n");printf("**** 2. 帮助手册   *****\n");printf("**** 0. 退出游戏   *****\n");printf("************************\n");printf("请输入>:");scanf("%d", &input);switch (input){case 1://游戏主体Game();break;case 2:HelpMan();break;case 0:printf("游戏已退出\n");break;default:printf("请输入有效数字!\a\n");Sleep(500);break;}} while (input);return 0;
}

放假只能打游戏?不如自己做个简单又有趣的推箱子小游戏相关推荐

  1. Python【小游戏合集】之自己做一个简单又好玩的推箱子小游戏

    导语:哈喽铁汁们~今日游戏之旅开始! 想领取完整源码跟python学习资料可私信我或点击这行字体 这期就是带大家使用当前主流且易用的Python语言做一个简单的推箱子小游戏 现在小编的快乐源泉就是玩自 ...

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

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

  3. PLC也能制作小游戏----Codesys编写推箱子小游戏

    1.序言 前文已介绍,Codesys编程软件拥有的各种编译方式,以及强大的可视化功能,完全可以实现类似的小游戏程序编写,让疲惫的工控人员在调机的空闲之余可以休闲下,本文编写另一个小游戏,也是十几年前的 ...

  4. 手把手教你使用Python实现推箱子小游戏(附完整源码)

    文章目录 项目介绍 项目规则 项目接口文档 项目实现过程 前置方法编写 move核心方法编写 项目收尾 项目完善 项目整体源码 项目缺陷分析 项目收获与反思 项目介绍 我们这个项目是一个基于Pytho ...

  5. 怀念童年,推箱子小游戏(vue版本)

    前言 最近都没有怎么写过文章,都断更很久了吧.学习前端一年多,快两年了,学习的热情相比一开始,自我感觉没有变化多少,但是 学习的动力却好像时有时无.就好像是没了目标一样,不知道自己现在应该学些什么,从 ...

  6. c#推箱子小游戏代码_推箱子小游戏V1.0制作

    小游戏实践 推箱子简易版 大家好,我是努力学习争取成为优秀的Game Producer的路人猿,今天来一起做一个推箱子的简易版本V1.0!下面跟我一起做吧~ 我们用到的软件如下: 编辑类 Visual ...

  7. win32GDI函数编程实现推箱子小游戏

    利用GDI绘图函数实现推箱子小游戏,代码源于上一篇博客 C语言控制台推箱子. 实现方法很简单,把字符用绘图函数绘出的图形替换即可. 从字符控制台到win32界面编程,更加形象化. 代码量大增,主程序就 ...

  8. C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流

    C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流 说明:学做了4关推箱子, 仅供初学者参考可用g++ 编译,可以将内容复制到TXT文件,将后缀改为".cp ...

  9. 用C语言实现推箱子小游戏基础程序plus

    目录 设计一个简单的推箱子游戏 功能设计要求: 代码实现 数据定义头文件data_def.h 窗口设置头文件WindowsSet.h WindowsSet.cpp 上移函数 矩阵旋转函数 游戏帧 菜单 ...

最新文章

  1. CTO(首席技术官)
  2. Django websocket 长连接使用
  3. 聚类 —— DBSCAN
  4. bash环境(变量与bash配置文件)
  5. SAP CRM WebClient UI ON_NEW_FOCUS的用途
  6. Java抽象类、接口、类的特殊成员
  7. Ivanti罗琦:IT服务管理中“拧紧螺丝”要有门道儿!
  8. 数据结构-树的基础代码
  9. (一)springmvc+mybatis+dubbo+zookeeper分布式架构 整合 - 平台导语简介
  10. php制作随机抽奖,基于PHP实现简单的随机抽奖大程序
  11. 内网渗透之 windows 基础
  12. Scoks5 一键搭建脚本,解决nolanjdc被限制IP
  13. opencv 图片降噪
  14. 用latex排版LNCS模板的论文
  15. video标签 设置背景图片
  16. CH340G 无法识别的USB设备
  17. Navicat 8.0 for MySQL的注册码
  18. Win11无法删除文件夹怎么办?Win11无法删除文件夹的解决方法
  19. 【前端学习日记】使用HTML实现文件的上传和下载
  20. 猫声音嘶哑的常见原因

热门文章

  1. 中信涂猪android抓包,玩卡计划 篇二:中信《鼠来宝》规则攻略,珠光宝气之后的活动!还记得去年的涂猪吗?...
  2. jsp格式date类型
  3. 灵魂发问!Java并发和线程池,只言片语真的可以讲清楚吗?
  4. LAMP环境源码搭建
  5. 我们的实践:事理图谱,下一代知识图谱
  6. 桌面级创客工具 创客造物空间
  7. 油管:The Truth About Lab-Grown Meat
  8. python - sklearn 计算精准率(Precision)
  9. ng-select多选时输入中文时光标靠左
  10. DecimalFormat 保留小数格式化