上次的推箱子教程后,有小伙伴说希望发添加颜色的代码,那么今天小编就来说一说颜色和一些其他知识:
上次说到需要输入按键“w,a,s,d”来使小人移动,但还不能每次输入后都按一下回车。那么今天又是讲干货的一天:
若要读取字符,我们可以:
char a;
cin>>a;
或是c语言的:
char a;
scanf("%c",&a);
但其实我们还可以用其他方法:
char a;
a=getchar();
a=getchar();与scanf("%c",&a);的作用是完全一样的,但是学过算法的同学都知道,当遇到循环时候a=getchaar();就会出问题。这是因为:getchar()的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。实际上是 输入设备->内存缓冲区->程序getchar。你按的键是放进缓冲区了,然后供程序getchar()。当遇到循环时,多次的getchar()会受到回车的影响。因为上一次循环输入时你按下了回车,所以下一次循环到getchar()时就会读取你上一次的“\n”。如果需要取消’\n’的影响,可以用getchar();来清除,这里getchar();只是取得了’\n’但是并没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符。而且getchar()会带有回显,你如果连续输入三次a,并将读取的内容输入,将会看到aaaa,这就是getchar()的回显效果。
getche()也是用来读取字符,用法与getchar()一样。
char a;
a=getche();
但是getche()可是省略我们输入的那一次回车,代码:
#include
#include
using namespace std;
int main()
{
char a;
a=getche();
cout<<"你刚输入了"<
当你输入了5后会立刻显示”你刚输入了5“。并且还是带有回显。
接下来就是上次推箱子中讲到的getch()了,getch()的输入既不需要按下回车,结果也不会带有回显。当考虑到做游戏,做菜单或者一些应用类程序时还是比较实用的。
下面总结一下,
getchar()读取一个字符,输入后需要等待“Enter”才能读取,并且带有回显。
getche()读取一个字符,输入后不需要等待“Enter”,直接读取,并且带有回显。
getch()读取一个字符,输入后不需要等待“Enter”才能读取,没有回显。
getche()和getch()是很实用的读取字符代码可以用来开发应用游戏等,但是如果是搞竞赛和算法的同学不要去使用,这是无效的代码。
颜色的代码也很简单,不需要特殊的头文件
system("color a");
在你的代码开头加上它,再运行。。你会发现字变绿了。
如果加上:
system("color a0");
哇!好绿哇!
color即是改变颜色的代码,后面的数字与color用空格隔开,并且数字是16进制的,第一个数是背景色,第二个数是字的颜色。如果单独一个数就是字的颜色。
这里是16进制数分别代表的颜色
0黑色
1蓝色
2绿色
3湖蓝色
4红色
5紫色
6黄色
7白色
8灰色
9淡蓝色
A淡绿色
B淡浅绿色
C淡红色
D淡紫色
E淡黄色
F亮白色
有了今天的颜色代码,就可以在你的推箱子中加上色彩了,下面是我的前四关变色推箱子(函数版):
#include
#include
#include
#include
#include
using namespace std;
void check1(char a[][20])
{
if(a[6][3]=='O')
a[6][3]='@';
if(a[3][6]=='O')
a[3][6]='@';
if(a[9][7]=='O')
a[9][7]='@';
if(a[6][11]=='O')
a[6][11]='@';
if(a[6][3]==' ')
a[6][3]='*';
if(a[3][6]==' ')
a[3][6]='*';
if(a[9][7]==' ')
a[9][7]='*';
if(a[6][11]==' ')
a[6][11]='*';
}
void check2(char a[][20])
{
if(a[5][9]=='O')
a[5][9]='@';
if(a[6][9]=='O')
a[6][9]='@';
if(a[7][9]=='O')
a[7][9]='@';
if(a[5][9]==' ')
a[5][9]='*';
if(a[6][9]==' ')
a[6][9]='*';
if(a[7][9]==' ')
a[7][9]='*';
}
void check3(char a[][20])
{
if(a[6][4]=='O')
a[6][4]='@';
if(a[6][5]=='O')
a[6][5]='@';
if(a[7][4]=='O')
a[7][4]='@';
if(a[7][5]=='O')
a[7][5]='@';
if(a[6][4]==' ')
a[6][4]='*';
if(a[6][5]==' ')
a[6][5]='*';
if(a[7][4]==' ')
a[7][4]='*';
if(a[7][5]==' ')
a[7][5]='*';
}
void check4(char a[][20])
{
if(a[7][3]=='O')
a[7][3]='@';
if(a[8][3]=='O')
a[8][3]='@';
if(a[8][4]=='O')
a[8][4]='@';
if(a[8][5]=='O')
a[8][5]='@';
if(a[8][6]=='O')
a[8][6]='@';
if(a[7][3]==' ')
a[7][3]='*';
if(a[8][3]==' ')
a[8][3]='*';
if(a[8][4]==' ')
a[8][4]='*';
if(a[8][5]==' ')
a[8][5]='*';
if(a[8][6]==' ')
a[8][6]='*';
}
void first()
{
a:
char a[20][20]={" ",
" ",
" ### ",
" #*# ",
" # # ",
" ####O######",
" #* OH O *#",
" #####O#####",
" # # ",
" #*# ",
" ### "};
system("cls");
for(int i=0;i<=11;i++)
{
puts(a[i]);
}
int x,y;
x=6,y=7;
while(1)
{
char z;
z=getch();
if(z=='w')
{
if(a[x-1][y]!='#')
{
if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O'&&a[x-2][y]!='@')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='O';
}
else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]!=' ')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='@';
}
else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]==' ')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='O';
}
else if(a[x-1][y]!='O'&&a[x-1][y]!='@')
{
a[x][y]=' ';
x--;
a[x][y]='H';
}
}
}
if(z=='a')
{
if(a[x][y-1]!='#')
{
if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='O'&&a[x][y-2]!='@')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='O';
}
else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]!=' ')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='@';
}
else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]==' ')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='O';
}
else if(a[x][y-1]!='O'&&a[x][y-1]!='@')
{
a[x][y]=' ';
y--;
a[x][y]='H';
}
}
}
if(z=='d')
{
if(a[x][y+1]!='#')
{
if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O'&&a[x][y+2]!='@')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='O';
}
else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]!=' ')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='@';
}
else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]==' ')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='O';
}
else if(a[x][y+1]!='O'&&a[x][y+1]!='@')
{
a[x][y]=' ';
y++;
a[x][y]='H';
}
}
}
if(z=='s')
{
if(a[x+1][y]!='#')
{
if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='O'&&a[x+2][y]!='@')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='O';
}
else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]!=' ')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='@';
}
else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]==' ')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='O';
}
else if(a[x+1][y]!='O'&&a[x+1][y]!='@')
{
a[x][y]=' ';
x++;
a[x][y]='H';
}
}
}
if(z=='r')
goto a;
check1(a);
if(a[6][3]=='@'&&a[6][11]=='@'&&a[9][7]=='@'&&a[3][6]=='@')
break;
system("cls");
for(int i=0;i<=11;i++)
{
puts(a[i]);
}
}
system("cls");
cout<<"you win!";
Sleep(3000);
}
void second()
{
b:
system("color 2");
char a[20][20]={" ",
" ",
" ##### ",
" #H # ",
" # OO# ### ",
" # O # #*# ",
" ### ###*# ",
" ## *# ",
" # # # ",
" # #### ",
" ##### ",};
system("cls");
for(int i=0;i<=11;i++)
{
puts(a[i]);
}
int x,y;
x=3,y=3;
while(1)
{
char z;
z=getch();
if(z=='r')
goto b;
if(z=='w')
{
if(a[x-1][y]!='#')
{
if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O'&&a[x-2][y]!='@')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='O';
}
else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='@';
}
else if(a[x-1][y]!='O'&&a[x-1][y]!='@')
{
a[x][y]=' ';
x--;
a[x][y]='H';
}
}
}
if(z=='a')
{
if(a[x][y-1]!='#')
{
if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='O'&&a[x][y-2]!='@')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='O';
}
else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='@';
}
else if(a[x][y-1]!='O'&&a[x][y-1]!='@')
{
a[x][y]=' ';
y--;
a[x][y]='H';
}
}
}
if(z=='d')
{
if(a[x][y+1]!='#')
{
if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O'&&a[x][y+2]!='@')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='O';
}
else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='@';
}
else if(a[x][y+1]!='O'&&a[x][y+1]!='@')
{
a[x][y]=' ';
y++;
a[x][y]='H';
}
}
}
if(z=='s')
{
if(a[x+1][y]!='#')
{
if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='O'&&a[x+2][y]!='@')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='O';
}
else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='@';
}
else if(a[x+1][y]!='O'&&a[x+1][y]!='@')
{
a[x][y]=' ';
x++;
a[x][y]='H';
}
}
}
check2(a);
if(a[5][9]=='@'&&a[6][9]=='@'&&a[7][9]=='@')
break;
system("cls");
for(int i=0;i<=11;i++)
{
puts(a[i]);
}
}
system("cls");
cout<<"you win!";
Sleep(3000);
}
void third()
{
c:
system("color 1");
char a[20][20]={" ",
" ",
" ####### ",
" # ### ",
" ##O### # ",
" # H O O # ",
" # **# O ## ",
" ##**# # ",
" ######## ",
" ",
" ",};
system("cls");
for(int i=0;i<=11;i++)
{
puts(a[i]);
}
int x,y;
x=5,y=4;
while(1)
{
char z;
z=getch();
if(z=='r')
goto c;
if(z=='w')
{
if(a[x-1][y]!='#')
{
if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O'&&a[x-2][y]!='@')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='O';
}
else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]!=' ')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='@';
}
else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]==' ')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='O';
}
else if(a[x-1][y]!='O'&&a[x-1][y]!='@')
{
a[x][y]=' ';
x--;
a[x][y]='H';
}
}
}
if(z=='a')
{
if(a[x][y-1]!='#')
{
if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='O'&&a[x][y-2]!='@')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='O';
}
else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]!=' ')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='@';
}
else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]==' ')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='O';
}
else if(a[x][y-1]!='O'&&a[x][y-1]!='@')
{
a[x][y]=' ';
y--;
a[x][y]='H';
}
}
}
if(z=='d')
{
if(a[x][y+1]!='#')
{
if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O'&&a[x][y+2]!='@')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='O';
}
else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]!=' ')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='@';
}
else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]==' ')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='O';
}
else if(a[x][y+1]!='O'&&a[x][y+1]!='@')
{
a[x][y]=' ';
y++;
a[x][y]='H';
}
}
}
if(z=='s')
{
if(a[x+1][y]!='#')
{
if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='O'&&a[x+2][y]!='@')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='O';
}
else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]!=' ')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='@';
}
else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]==' ')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='O';
}
else if(a[x+1][y]!='O'&&a[x+1][y]!='@')
{
a[x][y]=' ';
x++;
a[x][y]='H';
}
}
}
check3(a);
if(a[6][4]=='@'&&a[6][5]=='@'&&a[7][4]=='@'&&a[7][5]=='@')
break;
system("cls");
for(int i=0;i<=11;i++)
{
puts(a[i]);
}
}
system("cls");
cout<<"you win!";
Sleep(3000);
}
void forth()
{
d:
system("color 4");
char a[20][20]={" ",
" ",
" #### ",
" ## # ",
" #HO # ",
" ##O ## ",
" ## O # ",
" #*O # ",
" #**@*# ",
" ###### ",
" ",};
system("cls");
for(int i=0;i<=11;i++)
{
puts(a[i]);
}
int x,y;
x=4,y=3;
while(1)
{
char z;
z=getch();
if(z=='r')
goto d;
if(z=='w')
{
if(a[x-1][y]!='#')
{
if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O'&&a[x-2][y]!='@')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='O';
}
else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]!=' ')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='@';
}
else if(a[x-2][y]!='#'&&a[x-1][y]=='@'&&a[x-2][y]!='O'&&a[x-2][y]!='@'&&a[x-2][y]==' ')
{
a[x][y]=' ';
x--;
a[x][y]='H';
a[x-1][y]='O';
}
else if(a[x-1][y]!='O'&&a[x-1][y]!='@')
{
a[x][y]=' ';
x--;
a[x][y]='H';
}
}
}
if(z=='a')
{
if(a[x][y-1]!='#')
{
if(a[x][y-2]!='#'&&a[x][y-1]=='O'&&a[x][y-2]!='O'&&a[x][y-2]!='@')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='O';
}
else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]!=' ')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='@';
}
else if(a[x][y-2]!='#'&&a[x][y-1]=='@'&&a[x][y-2]!='O'&&a[x][y-2]!='@'&&a[x][y-2]==' ')
{
a[x][y]=' ';
y--;
a[x][y]='H';
a[x][y-1]='O';
}
else if(a[x][y-1]!='O'&&a[x][y-1]!='@')
{
a[x][y]=' ';
y--;
a[x][y]='H';
}
}
}
if(z=='d')
{
if(a[x][y+1]!='#')
{
if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O'&&a[x][y+2]!='@')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='O';
}
else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]!=' ')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='@';
}
else if(a[x][y+2]!='#'&&a[x][y+1]=='@'&&a[x][y+2]!='@'&&a[x][y+2]!='O'&&a[x][y+2]==' ')
{
a[x][y]=' ';
y++;
a[x][y]='H';
a[x][y+1]='O';
}
else if(a[x][y+1]!='O'&&a[x][y+1]!='@')
{
a[x][y]=' ';
y++;
a[x][y]='H';
}
}
}
if(z=='s')
{
if(a[x+1][y]!='#')
{
if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='O'&&a[x+2][y]!='@')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='O';
}
else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]!=' ')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='@';
}
else if(a[x+2][y]!='#'&&a[x+1][y]=='@'&&a[x+2][y]!='O'&&a[x+2][y]!='@'&&a[x+2][y]==' ')
{
a[x][y]=' ';
x++;
a[x][y]='H';
a[x+1][y]='O';
}
else if(a[x+1][y]!='O'&&a[x+1][y]!='@')
{
a[x][y]=' ';
x++;
a[x][y]='H';
}
}
}
check4(a);
if(a[7][3]=='@'&&a[8][3]=='@'&&a[8][4]=='@'&&a[8][5]=='@'&&a[8][6]=='@')
break;
system("cls");
for(int i=0;i<=11;i++)
{
puts(a[i]);
}
}
system("cls");
system("color 0f");
cout<<"you win!";
Sleep(3000);
}
int main()
{
cout<<"\n\n\n\n\n ******************************************\n\n"
<<" 欢迎来到推箱子\n\n"
<<" 游戏说明:\n"
<<" 请用小写输入法操作,wasd为上下左右移动\n"
<<" 游戏中H为你,O,@为可推动的箱子,\n 将箱子全部推动到*处即获胜\n"
<<" 作者:敲代码的猫\n"
<<" 按任意键继续\n\n"
<<" ******************************************\n";
getch();
system("cls");
first();
system("cls");v
second();
system("cls");
third();
system("cls");
forth();
return 0;
}
2021.2.2