用易理解的c/c++代码:从走迷宫进阶到推箱子

写在前面

         Hello,大家好(感谢选择这篇文章)。相信很多小伙伴们都想写出自己的第一款小游戏(不仅增加自己的见解,还能获得成就感),而走迷宫或是推箱子就是个不错选择。而作者呢当初第一款小游戏便是走迷宫……

这篇文章将告诉你如何用简单的c/c++代码写  走迷宫||推箱子  。走迷宫和推箱子写起来很相似,所以就将两者一块写。废话不多说,开始代码之旅……

/*这篇文章代码部分只展示游戏主体,不会添加菜单结尾等等,还请小伙伴们自行添加。作者也希望小伙伴们看完后可以自己写一个出来(增加点玩法什么的就更不错了👍👍👍)*/

总体思路都只有一个,移动后赋值。(大家都是可以写得出来的👍👍👍)

&走迷宫

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
	int i,x=1,y=1;
	char ch;
	char a[50][50]={"###############",
					"#o   #      # #",
					"## # # ## ### #",
					"#  #   ##     #",
					"# #### ### ## #",
					"#    #  ##  #  ",
					"###############"};//地图,想怎么来怎么来
	for(i=0;i<15;i++) puts(a[i]); //printf("%s\n",a[i]);
	while(x!=5||y!=14)//请小伙伴们注意这里是||不是&&[自行体会(狗头)]
	{
		ch=getch();
		if(ch=='s')
		{
			if(a[x+1][y]!='#')
			{
				a[x][y]=' ';
				x++;
				a[x][y]='o';
			}
		}
		if(ch=='w')
		{
			if(a[x-1][y]!='#')
			{
				a[x][y]=' ';
				x--;
				a[x][y]='o';
			}
		}
		if(ch=='a')
		{
			if(a[x][y-1]!='#')
			{
				a[x][y]=' ';
				y--;
				a[x][y]='o';
			}
		}
		if(ch=='d')
		{
			if(a[x][y+1]!='#')
			{
				a[x][y]=' ';
				y++;
				a[x][y]='o';		
			}
		}
		system("cls");//清除屏幕
		for(i=0;i<15;i++) puts(a[i]);
		if(x==5&&y==14) printf("Great!");	
	}
	return 0;
}
//puts是stdio的一个库函数
//getch是conio的一个库函数
//system是stdlib的一个库函数

//getch是一个不返回函数,即用户输入但不会显示出来

思路很简单,就是碰到墙体不能移动即 移动方向+1!=墙体 即可。

因为这里移动体只有o,就不用结构体了(想写贪吃蛇的小伙伴们用结构体保存蛇体是个非常不错的选择)or2……

&推箱子

/*在此之前大家可以想想两个移动体应该怎么构思,用结构体或是直接写在数组里呢?那个移动判断起来方便点呢?*/

/*作者比较喜欢用if,见谅见谅(抱拳)*/

/*但是注意啊,下面 ch==移动方向 里的两个if是不能写成if-else的*/

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
	int i,x=2,y=2,c=3,d=3;//cd表示箱子
	char ch;
	char a[50][50]={"###################",
					"#####       ## # ##",
					"##o ##  ##  ##  ###",
					"## *######## ##  ##",
					"##  ####  ##     ##",
					"##        ##  ## ##",
					"########   ## ## ##",
					"### ####   ## ## ##",
					"#    ###      ## ##",
					"#     ### ##  ## ##",
					"#     ##  ### #  ##",
					"#          ####    ",
					"###################",};
	for(i=0;i<13;i++) puts(a[i]);
	while(x!=11||y!=17)//o不能先出去
	{
		ch=getch();
		if(ch=='s')
		{
			if(a[x+1][y]==' ')
			{
				a[x][y]=' ';
				x++;
				a[x][y]='o';
			}
			if(a[x+1][y]=='*'&&a[c+1][d]==' ')
			{
				c++;
				a[c][d]='*';
				a[x][y]=' ';
				x++;
				a[x][y]='o';
			}
		}
		if(ch=='w')
		{
			if(a[x-1][y]==' ')
			{
				a[x][y]=' ';
				x--;
				a[x][y]='o';
			}
			if(a[x-1][y]=='*'&&a[c-1][d]==' ')
			{
				c--;
				a[c][d]='*';
				a[x][y]=' ';
				x--;
				a[x][y]='o';
			}
		}
		if(ch=='a')
		{
			if(a[x][y-1]==' ')
			{
				a[x][y]=' ';
				y--;
				a[x][y]='o';
			}
			if(a[x][y-1]=='*'&&a[c][d-1]==' ')
			{
				d--;
				a[c][d]='*';
				a[x][y]=' ';
				y--;
				a[x][y]='o';
			}
		}
		if(ch=='d')
		{
			if(a[x][y+1]==' ')
			{
				a[x][y]=' ';
				y++;
				a[x][y]='o';
			}
			if(a[x][y+1]=='*'&&a[c][d+1]==' ')
			{
				d++;
				a[c][d]='*';
				a[x][y]=' ';
				y++;
				a[x][y]='o';
			}
		}
		system("cls");
		for(i=0;i<13;i++) puts(a[i]);
		if(c==11&&d==18) printf("Great!");			
	}	
	return 0;
}

/*结构体和写在数组里都是差不多的,所以这里就写数组里了*/

主要就一个点, 移动方向+1 是空格(也可以理解成墙体)还是箱子。移动方向+1==空格(移动后赋值),移动方向+1==箱子&&箱子+1==空格  (移动后连续赋值)。

最后

小伙伴们的问题可能还是不知道判断和赋值体系怎么写,但没关系,多看几遍理解一下(理解后自己写一个就好了,不同人想法是不一样的)或是日积月累的练习(想法也就上去了,个人推荐平时多去洛谷,leetcode刷题)都是可以的。

期待下一次与你的相遇……

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值