放假只能打游戏?不如自己做个简单又有趣的推箱子小游戏
目录
前言
游戏效果图
游戏开发思路
游戏逻辑的分析
源代码实现
头文件
PushBackGame.c文件
test.c文件
前言
本游戏需要用到的核心技术,如下:
- 二维数组
- 分支语句
技术难点: 二维数组的应用和游戏的判断逻辑
只要会以上的技术的萌新都能做出很棒的游戏,博主本身也是一枚小白,如果源代码的某些地方有不足,请大佬在评论区指出。
游戏效果图
游戏开发思路
分析游戏逻辑,再根据游戏分析游戏代码逻辑写出伪代码,再分析可能存在的问题,最后一步才是开发游戏。
游戏逻辑的分析
源代码实现
头文件
#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;
}
放假只能打游戏?不如自己做个简单又有趣的推箱子小游戏相关推荐
- Python【小游戏合集】之自己做一个简单又好玩的推箱子小游戏
导语:哈喽铁汁们~今日游戏之旅开始! 想领取完整源码跟python学习资料可私信我或点击这行字体 这期就是带大家使用当前主流且易用的Python语言做一个简单的推箱子小游戏 现在小编的快乐源泉就是玩自 ...
- c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- PLC也能制作小游戏----Codesys编写推箱子小游戏
1.序言 前文已介绍,Codesys编程软件拥有的各种编译方式,以及强大的可视化功能,完全可以实现类似的小游戏程序编写,让疲惫的工控人员在调机的空闲之余可以休闲下,本文编写另一个小游戏,也是十几年前的 ...
- 手把手教你使用Python实现推箱子小游戏(附完整源码)
文章目录 项目介绍 项目规则 项目接口文档 项目实现过程 前置方法编写 move核心方法编写 项目收尾 项目完善 项目整体源码 项目缺陷分析 项目收获与反思 项目介绍 我们这个项目是一个基于Pytho ...
- 怀念童年,推箱子小游戏(vue版本)
前言 最近都没有怎么写过文章,都断更很久了吧.学习前端一年多,快两年了,学习的热情相比一开始,自我感觉没有变化多少,但是 学习的动力却好像时有时无.就好像是没了目标一样,不知道自己现在应该学些什么,从 ...
- c#推箱子小游戏代码_推箱子小游戏V1.0制作
小游戏实践 推箱子简易版 大家好,我是努力学习争取成为优秀的Game Producer的路人猿,今天来一起做一个推箱子的简易版本V1.0!下面跟我一起做吧~ 我们用到的软件如下: 编辑类 Visual ...
- win32GDI函数编程实现推箱子小游戏
利用GDI绘图函数实现推箱子小游戏,代码源于上一篇博客 C语言控制台推箱子. 实现方法很简单,把字符用绘图函数绘出的图形替换即可. 从字符控制台到win32界面编程,更加形象化. 代码量大增,主程序就 ...
- C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流
C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流 说明:学做了4关推箱子, 仅供初学者参考可用g++ 编译,可以将内容复制到TXT文件,将后缀改为".cp ...
- 用C语言实现推箱子小游戏基础程序plus
目录 设计一个简单的推箱子游戏 功能设计要求: 代码实现 数据定义头文件data_def.h 窗口设置头文件WindowsSet.h WindowsSet.cpp 上移函数 矩阵旋转函数 游戏帧 菜单 ...
最新文章
- CTO(首席技术官)
- Django websocket 长连接使用
- 聚类 —— DBSCAN
- bash环境(变量与bash配置文件)
- SAP CRM WebClient UI ON_NEW_FOCUS的用途
- Java抽象类、接口、类的特殊成员
- Ivanti罗琦:IT服务管理中“拧紧螺丝”要有门道儿!
- 数据结构-树的基础代码
- (一)springmvc+mybatis+dubbo+zookeeper分布式架构 整合 - 平台导语简介
- php制作随机抽奖,基于PHP实现简单的随机抽奖大程序
- 内网渗透之 windows 基础
- Scoks5 一键搭建脚本,解决nolanjdc被限制IP
- opencv 图片降噪
- 用latex排版LNCS模板的论文
- video标签 设置背景图片
- CH340G 无法识别的USB设备
- Navicat 8.0 for MySQL的注册码
- Win11无法删除文件夹怎么办?Win11无法删除文件夹的解决方法
- 【前端学习日记】使用HTML实现文件的上传和下载
- 猫声音嘶哑的常见原因