C语言多关卡推箱子

【c语言推箱子 c语言游戏推箱子 阅读详情

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

很高兴你能光临小编寒舍

首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式)

我就是传说中写文章通俗而不庸俗,说话风流而不下流,智慧与美貌并重,英雄与侠义得化身得小编老师。人间人爱,花见花开已不足以形容我得帅气!

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

我又被打了,帮忙叫下120

好了好了,我再也不敢了,进入主题:

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

没错就是这么简单。

抽象属性:数据设计

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

就这么简单

小编有话要说:

map[2][7][8]说:首先大家将会看到三维数组!!没听错就是三维得,不要怕,你要明白得是map[2][7][8]中 [2]是用来表达关数就没什么问题了哦。

剩下得你就和把他当作一个二维数组就可以了。

cas说: 我就是控制关数得,但是我要从0开始,为啥呢?因为地图是从0开始得呀

boxSum[2]说:我是用来控制胜负得,至于我里面得值是没一关卡箱子得数目啊。

资源初始化:绘制地图

小编有话要说:

绘制地图原理: 就是一个萝卜一个坑,在数组中用特殊得值表示不同得物品,这个就需要你去玩一遍推箱子了,要非常熟悉熟悉箱子得几个状态了。

  • 游戏7大状态

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

不知道的可以去玩玩哦

  • 用不同东西表示不同的状态

0: 空地 " "

1: 墙 "▆"

3: 目的地 "☆"

4: 箱子 "★"

5:人 "※"

7:/目的(3)和箱子(4)在一起"⊙"

8:人(5)和目的(3)在一起:"※"

  • 遍历数组绘制地图

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

由于截图是ps拼接的,截图姐去不了那么多

用户处理:按键处理

  • 按键处理基本框架:选择结构的使用,对于用户按键上下左右处理

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

基本上C语言中甚至是以后用到的按键处理基本都是这个框架

  • 按键处理实质: 按下方向键,根据数组的位置去做定位移动

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

移动过程在同步数组下标变化

  • 针对不同情况的不同处理:(以向上为例,其他的根据对称可以求出来)

1.人前面是空地或者目的地

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

空地的值是0,目的地的是3

2.人前面是箱子,箱子前面是空地或者目的地

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

就是这么简单,其他方向开始你的拷贝把!

收尾工作:胜负判断

胜负判断:那就很简单的了箱子数目为零就可以了。

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

就是这么粗暴

主函数,调用一下即可

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

完整源码:

//0:空的 1:▆ 3:☆ 4:★ 5:※ 7:⊙ 8:※
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int  map[2][7][8] =
{
	//0:空的 1:▆ :墙
	//3:☆ 4:★  //目的地和箱子
	//5:※		  //人
	//7:⊙		  //目的(3)和箱子(4)在一起
	//8:※		  //人(5)和目的(3)在一起
	//为让多种情况使用一种算法
	//数学艺术
	{
	1, 1, 1, 1, 1, 1, 1, 1,
	1, 0, 0, 0, 0, 0, 0, 1,
	1, 3, 1, 0, 1, 1, 3, 1,
	1, 4, 0, 0, 4, 0, 3, 1,
	1, 0, 1, 0, 1, 1, 4, 1,
	1, 0, 0, 5, 0, 0, 0, 1,
	1, 1, 1, 1, 1, 1, 1, 1
	},
	{
		1, 1, 1, 1, 1, 1, 1, 1,
		1, 0, 0, 0, 0, 0, 0, 1,
		1, 3, 1, 0, 1, 1, 3, 1,
		1, 3, 4, 5, 4, 0, 3, 1,
		1, 4, 1, 0, 1, 1, 4, 1,
		1, 0, 0, 0, 0, 0, 0, 1,
		1, 1, 1, 1, 1, 1, 1, 1
	}
};
int cas = 0;	//为0表示第一关
//记录每一关的箱子数 或者是项目和目的在一起的总数
int boxSum[2] = {3,4};
//地图绘图
void drawMap()
{
	for (int i = 0; i < 7; i++)
	{
		for (int j = 0; j < 8; j++)
		{
			if (j == 0)
				printf("\t\t");
			switch (map[cas][i][j])
			{
				//	//0:空的 1:▆ :墙
			case 0:
				printf("  ");
				break;
			case 1:
				printf("▆");
				break;
				//3:☆ 4:★  //目的地和箱子
			case 3:
				printf("☆");
				break;
			case 4:
				printf("★");
				break;
				//5:※		  //人
			case 5:
			case 8:
				printf("※");
				break;
			case 7:
				printf("⊙");
				break;
				//7:⊙		  //目的(3)和箱子(4)在一起
				//8:※		  //人(5)和目的(3)在一起
			}
		}
		printf("\n");
	}
}
//按键处理
void keyDown()
{
	//分析按键过程
	//定位人在哪里
	//人有两种情况:第一个是:人,第二个:人站在目的上
	int i, j;
	for (i = 0; i < 7; i++)
	{
		for (j = 0; j < 8; j++)
		{
			if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
			{
				break;
			}
		}
		if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
		{
			break;
		}
	}

	char ch = _getch();	//看不见的字符输入,+头文件 conio.h
	switch (ch)
	{
		//72 80   75 77
	case 'w':
	case 'W':
	case 72:
		//下一个地方等于空地或者是目的 能走
		if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3)
		{
			//3+5=8 :表示目的和人在一起
			//新地方(map[i-1][j])人(5)来了
			map[cas][i - 1][j] += 5;
			//老地方(map[i][j])人(5)走了
			map[cas][i][j] -= 5;
		}
		//如果下一个是箱子,要进一步判断能走
		//注意点:箱子两种状态:箱子,箱子和目的在一起
		else if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7)
		{
			//做箱子的下一个地方判断能不能走
			if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3)
			{
				//新的地方箱子来了
				map[cas][i - 2][j] += 4;
				//箱子的位置:箱子(-4)走了 人来(+5)
				map[cas][i - 1][j] += 1;
				//原来的地方人走了
				map[cas][i][j] -= 5;
			}

		}

		break;
	case 's':
	case 'S':
	case 80:
		//下一个地方等于空地或者是目的 能走
		if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3)
		{
			//3+5=8 :表示目的和人在一起
			//新地方(map[i-1][j])人(5)来了
			map[cas][i + 1][j] += 5;
			//老地方(map[i][j])人(5)走了
			map[cas][i][j] -= 5;
		}
		else if (map[cas][i + 1][j] == 4 || map[cas][i + 1][j] == 7)
		{
			//做箱子的下一个地方判断能不能走
			if (map[cas][i + 2][j] == 0 || map[cas][i + 2][j] == 3)
			{
				//新的地方箱子来了
				map[cas][i + 2][j] += 4;
				//箱子的位置:箱子(-4)走了 人来(+5)
				map[cas][i + 1][j] += 1;
				//原来的地方人走了
				map[cas][i][j] -= 5;
			}

		}
		break;

	case 'a':
	case 'A':
	case 75:
		//下一个地方等于空地或者是目的 能走
		if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3)
		{
			//3+5=8 :表示目的和人在一起
			//新地方(map[i-1][j])人(5)来了
			map[cas][i][j - 1] = map[cas][i][j - 1] + 5;
			//老地方(map[i][j])人(5)走了
			map[cas][i][j] = map[cas][i][j] - 5;
			//j+=5  j=j+5

		}
		else if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7)
		{
			//做箱子的下一个地方判断能不能走
			if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3)
			{
				//新的地方箱子来了
				map[cas][i][j - 2] += 4;
				//箱子的位置:箱子(-4)走了 人来(+5)
				map[cas][i][j - 1] += 1;
				//原来的地方人走了
				map[cas][i][j] -= 5;
			}

		}

		break;
	case 'D':
	case 'd':
	case 77:
		//下一个地方等于空地或者是目的 能走
		if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3)
		{
			//3+5=8 :表示目的和人在一起
			//新地方(map[i-1][j])人(5)来了
			map[cas][i][j + 1] += 5;
			//老地方(map[i][j])人(5)走了
			map[cas][i][j] -= 5;
		}
		
		//下一个地方是箱子,判断箱子的下一个地方是不是目的和空地
		else if (map[cas][i][j + 1] == 4 || map[cas][i][j + 1] == 7)
		{
			//做箱子的下一个地方判断能不能走
			if (map[cas][i][j + 2] == 0 || map[cas][i][j + 2] == 3)
			{
				//新的地方箱子来了
				map[cas][i][j + 2] += 4;
				//箱子的位置:箱子(-4)走了 人来(+5)
				map[cas][i][j + 1] += 1;
				//原来的地方人走了
				map[cas][i][j] -= 5;
			}

		}
		break;
	}
}
//胜负判断
//用什么判断胜负: 箱子到达目的的个数
int gameOver()
{
	int count = 0;
	//所有的地方找一遍
	for (int i = 0; i < 7; i++)
	{
		for (int j = 0; j < 8; j++)
		{
			if (map[cas][i][j] == 7)
				count++;
		}
	}
	return count;
}
//箱子数是零的时候也是胜利
int gameOver2()
{
	int count = 3;
	//所有的地方找一遍
	for (int i = 0; i < 7; i++)
	{
		for (int j = 0; j < 8; j++)
		{
			if (map[cas][i][j] == 3)
				count--;
		}
	}
	return count;
}

int main()
{
	while (1)
	{
		printf("\n\n\t\t   第【%d】关\n",cas+1);
		drawMap();
		if (gameOver() == boxSum[cas])
		{
			cas++;
			if (cas == 2)
				break;
		}
		keyDown();
		system("cls");
	}
	printf("GameOVer");
	system("pause");
	return 0;
}

更多精彩。学习问题,我Q:843412449

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

期待下一次与你回眸相遇

C语言实现推箱子游戏 推箱子游戏,c语言 函数,循环,分支结构,小游戏设计 阅读详情

相关推荐

C语言实现推箱子游戏!(超简单详细)代码思路+源码分享

经典的推箱子是一个很古老的游戏了,相信大家都不陌生。其目的是在训练我们的逻辑思考能力。快来试试吧!

致力于C语言C++知识分享! 5627

c语言初级小游戏 · 闯关小鸟 | 激发你的编程兴趣(115行左右代码)

声明:本游戏参考《c语言课程设计与游戏开发实践教程》。可以通过空格来控制小鸟上下飞行并且穿过墙壁缝隙,通过一个缝隙记一分,撞墙了就game over。本游戏知识点基础知识点:printf输出,for语句,if语句,while循环,函数的自定义和引用,各种运算符,定义全局变量。(可能的)拓展知识点:gotoxy函数,rand函数,方便的getch函数,kbhit函数,隐藏光标函数,sleep函数,system(“pause”)函数。很拓展知识在我上一篇文章。

x18037177724的博客 4003

C语言实现的关卡经典推箱子游戏

资源中有可执行的应用程序文件夹以及可执行源码文件夹两个。该推箱子游戏使用C语言开发,界面使用的easyx图形库。共实现的功能有:有关卡,可以进行回退操作,可以进行背景音乐的切换,可以选择关卡,显示当前的游戏步数

C语言实现——推箱子(文章后面附件全代码)

我们大家小时候都玩过推箱子游戏吧,今天我就和大家一起探讨利用C语言实现推箱子游戏,只要了解核心思想,大家就可以随心所欲的改变游戏规则,我的游戏我做主。

Attention__的博客 1万+

C语言游戏快速入门--推箱子

这是最简单的推箱子了,非常适合初学者。只需要学会一点数组和函数的知识就可以实现。代码的逻辑也不是很难理,就是交换位置。博主实现的推箱子增加了一些花样关卡和颜色,相信很朋友看完都会受益匪浅。这里我们还是沿用弹跳小球的框架(至于为什么总是沿用这个框架,因为弹跳小球是博主写的第一个小项目,直接搬代码比全部手写快了),并在原来的框架上增加推箱子所需要的玩法描述。之后加上关卡地图和游戏逻辑就可以实现推箱子啦!先看一下代码的运行效果吧。推箱子实现还是很简单。也能知道前面学好框架有重要。

qq_63678308的博客 3719

基于Linux系统的C语言关卡推箱子设计

基于Linux的推箱子设计借助于上下左右功能键实现交互界面下的一些操作。设计中的两个主要解决的问题是:怎样生成地图、怎样实现人或人和箱子的移动。 通过标准I/O对流文件进行控制,来实现对数据的记录,还可以根据使用的情况选择合适的数据记录方式,从而使所有的功能设计在三维数组构建的地图下进行退出,移动,关卡设计,输赢判断等一系列操作。 关键词:推箱子;标准I/O;输赢功能键;三维数组

qq_45171581的博客 1329

推箱子关卡(C语言+easyX实现,详细)

——个人笔记

weixin_43701019的博客 5416

c语言关卡推箱子程序,C语言关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战...

原标题:C语言关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战 很高兴你能光临小编寒舍首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式)我就是传说中写文章通俗而不庸俗,说话风流而不下流,智慧与美貌并重,英雄与侠义得化身得小编老师。人间人爱,花见花开已不足以形容我得帅气! ​我又被打了,帮忙叫下120好了好了,我...

weixin_39987120的博客 193

C语言作业:如何实现关卡推箱子?详细思路分析(有源码)

话不说,我们直接进入主题:关卡推箱子! 没错就是这么简单。 抽象属性:数据设计 map[2][7][8]说:首先大家将会看到三维数组!!没听错就是三维得,不要怕,你要明白得是map[2][7][8]中 [2]是用来表达关数就没什么问题了哦。 剩下得你就和把他当作一个二维数组就可以了。 cas说: 我就是控制关数得,但是我要从0开始,为啥呢?因为地图是从0开始得呀 boxSum[2]说:我是用来控制胜负得,至于我里面得值是没一关卡箱子得数目啊。 资源初始化:绘制地图 绘制地图原理:

致力于C语言C++知识分享! 768

c语言关卡推箱子程序,关卡地图推箱子游戏

关卡地图推箱子游戏# include# include# include//调出地图void file(int map[14][16],int n,int flag) //n表示关卡数 ,flag定位位置{FILE*fp=fopen("map.txt","r");if(fp==NULL){printf("文件读取错误\n");}elsefor(int i=0 ;i<14 ;i++){...

weixin_34496367的博客 800

语言程序推箱子课设报告_C语言烂大街的东西都学不会!C语言关卡推箱子制作教程...

C语言关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战很高兴你能光临小编寒舍首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式)我就是传说中写文章通俗而不庸俗,说话风流而不下流,智慧与美貌并重,英雄与侠义得化身得小编老师。人间人爱,花见花开已不足以形容我得帅气!我又被打了,帮忙叫下120好了好了,我再也不敢了,进...

weixin_39880615的博客 125

C语言-推箱子版本4.0-关卡

不足: 1.缺少统计步数的功能,因为会跟光标跳转函数一起用会出现BUG 2.未使用文件知识,无法重载地图,没有撤回功能,无法返回已完成的关卡 优点: 1.不会闪屏 2.解决了两个箱子堆到一起的BUG 4.解决了箱子进入目的地之后再退一个箱子进去的BUG 3.可以选择关卡 4.解决了直接跳到第八关通关的BUG 5.可以统计已通关数 注意:该版本是对3.0版本的代码优化,调整了难度顺序,增加了界面颜色功能 # include <stdio.h> # include <conio.h.

Hunter_Kevin的博客 974

c语言推箱子代码_C语言烂大街的东西都学不会!C语言关卡推箱子制作教程

C语言关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战很高兴你能光临小编寒舍首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式)我就是传说中写文章通俗而不庸俗,说话风流而不下流,智慧与美貌并重,英雄与侠义得化身得小编老师。人间人爱,花见花开已不足以形容我得帅气!我又被打了,帮忙叫下120好了好了,我再也不敢了,进...

weixin_39963853的博客 680

C语言项目实战数组项目报告,C语言关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战...

原标题:C语言关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战 很高兴你能光临小编寒舍首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式)我就是传说中写文章通俗而不庸俗,说话风流而不下流,智慧与美貌并重,英雄与侠义得化身得小编老师。人间人爱,花见花开已不足以形容我得帅气! ​我又被打了,帮忙叫下120好了好了,我...

weixin_29090089的博客 133

c语言推箱子代码_C语言关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战...

很高兴你能光临小编寒舍首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式)我就是传说中写文章通俗而不庸俗,说话风流而不下流,智慧与美貌并重,英雄与侠义得化身得小编老师。人间人爱,花见花开已不足以形容我得帅气!​我又被打了,帮忙叫下120好了好了,我再也不敢了,进入主题:没错就是这么简单。抽象属性:数据设计就这么简单小编有...

weixin_39749243的博客 332

c语言关卡游戏程序,【图片】C语言打造随机关卡推箱子游戏【c语言吧】_百度贴吧...

该楼层疑似违规已被系统折叠隐藏此楼查看此楼代码如下所示:#pragma once#include#include#include#include#include#include#pragma comment(lib,"winmm.lib")#define N 10IMAGE Box1, Box2;IMAGE Per1, Per2;IMAGE Wall;IMAGE BackGround;IMAGE...

weixin_39702335的博客 267

c语言可视化_晚上讲可视化推箱子推箱子C语言版本源码分享

C语言关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战很高兴你能光临小编寒舍首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式)我就是传说中写文章通俗而不庸俗,说话风流而不下流,智慧与美貌并重,英雄与侠义得化身得小编老师。人间人爱,花见花开已不足以形容我得帅气!​我又被打了,帮忙叫下120好了好了,我再也不敢了,...

weixin_39618456的博客 140
上一篇: 数据结构-二叉搜索树
下一篇: C语言学习框架
莫影老师
博客等级 码龄11年 297粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值