写在前面
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刷题)都是可以的。
期待下一次与你的相遇……