hello,大家好,好久不见,今天我又来更新小游戏啦!
本次代码是c++小游戏推箱子,这是以前我参加比赛的一个小游戏代码,今天我良心大发,来把这个代码送给大家啦,喜欢的网友可以关注我,我会免费分享高质量c++小游戏代码,话不多说,代码来啦!
注:拿代码吱一声,点个赞也行
#include
#include
#include
//总关数
int guanshu = 5;
//第一关
char a[20][20]={
"######",
"# ##",
"#S* #",
"#**O #",
"# OO #",
"# #",
"######"
};
int alength = 7;//地图行数量
int xa=3,yb=2;//初始小人的位置
int num = 3;//箱子位置数量
//第二关
char a2[20][20]={
"########",
"# ##",
"## ## ##",
"# O #",
"##*O * #",
"# S# #",
"########"
};
int alength2 = 7;//地图行数量
int xa2=6,yb2=5;//初始小人的位置
int num2 = 2;//箱子位置数量
//第三关
char a3[20][20]={
" ##### ",
" # S### ",
" # O # ",
"### # ##",
"#*# # #",
"#*O # #",
"#* O #",
"########"
};
int alength3 = 8;//地图行数量
int xa3=2,yb3=4;//初始小人的位置
int num3 = 3;//箱子位置数量
//第四关
char a4[20][20]={
" #######",
" ## # S#",
" # # #",
" #O O #",
" # O## #",
"### O # ##",
"#**** # ",
"######### "
};
int alength4 = 8;//地图行数量
int xa4=2,yb4=9;//初始小人的位置
int num4 = 4;//箱子位置数量
//第五关
char a5[20][20]={
"##########",
"## ###",
"##O### #",
"# S O O #",
"# **# O ##",
"##**# ##",
"##########"
};
int alength5 = 7;//地图行数量
int xa5=4,yb5=3;//初始小人的位置
int num5 = 4;//箱子位置数量
int getx(int g) {
if(g == 1) {
return xa-1;
}else if(g == 2) {
return xa2-1;
}else if(g == 3) {
return xa3-1;
}else if(g == 4) {
return xa4-1;
}else if(g == 5) {
return xa5-1;
}
}
int gety(int g) {
if(g == 1) {
return yb-1;
}else if(g == 2) {
return yb2-1;
}else if(g == 3) {
return yb3-1;
}else if(g == 4) {
return yb4-1;
}else if(g == 5) {
return yb5-1;
}
}
int getLength(int g) {
if(g == 1) {
return alength;
}else if(g==2){
return alength2;
}else if(g==3){
return alength3;
}else if(g==4){
return alength4;
}else if(g==5){
return alength5;
}
}
int getNum(int g) {
if(g == 1) {
return num;
}else if(g==2){
return num2;
}else if(g==3){
return num3;
}else if(g==4){
return num4;
}else if(g==5){
return num5;
}
}
int printA(int g) {
for(int i=0;i<=getLength(g);i++){
if(g == 1) {
puts(a[i]);
}else if(g==2){
puts(a2[i]);
}else if(g==3){
puts(a3[i]);
}else if(g==4){
puts(a4[i]);
}else if(g==5){
puts(a5[i]);
}
}
}
char getAXY(int g,int x,int y) {
if(g == 1) {
return a[x][y];
}else if(g == 2) {
return a2[x][y];
}else if(g == 3) {
return a3[x][y];
}else if(g == 4) {
return a4[x][y];
}else if(g == 5) {
return a5[x][y];
}
}
void setAXY(int g,int x,int y,char c) {
if(g == 1) {
a[x][y] = c;
}else if(g == 2) {
a2[x][y] = c;
}else if(g == 3) {
a3[x][y] = c;
}else if(g == 4) {
a4[x][y] = c;
}else if(g == 5) {
a5[x][y] = c;
}
}
void Prepare(){
// 设置颜色 // f0-f7 7个颜色
system("color 0");
// 隐藏光标 // 句柄
HANDLE hOut;
//光标信息的结构体类型
CONSOLE_CURSOR_INFO curInfo;
//获得标准输出的句柄。
hOut=GetStdHandle(STD_OUTPUT_HANDLE);
//由光标填充的字符单元格的百分比。
curInfo.dwSize=1;
//游标的可见性。 如果游标可见,则此成员为true。
curInfo.bVisible=0;
SetConsoleCursorInfo(hOut,&curInfo);
// 设置标题 //
SetConsoleTitle("推箱子");
}
void Welcome(){
printf("\n\n 推 箱 子");
printf("\n\n 请按任意键开始");
printf("\n\n 进入每一关游戏后请先按Enter键获得提示");
getch();
system("cls");
printf("\n\n 注:本游戏版权归(大家可以在c++代码第200行把括号内的文字改成自己名字)所有");
system("color 4");
getch();
//清屏
system("cls");
}
void Set(){
HANDLE hOut;
//表示一个字符在控制台屏幕上的坐标
COORD pos={0,0};
hOut=GetStdHandle(STD_OUTPUT_HANDLE);
//将光标设置到pos位置
SetConsoleCursorPosition(hOut,pos);
}
int main(){
Prepare();
Welcome();
system("color 07");
char ch;
//第一关
for(int p=1;p<=guanshu;p++) {
int g = p;
int x =getx(g);
int y = gety(g);
int cnt=0;//计数,统计消掉的数量
//将二维数组输出到屏幕中,
printA(g);
while(1){
ch=getch();
if(ch==-32){
ch=getch();//按下任意一个按键
if(ch==80){//按下向下键
if(getAXY(g,x+1,y)==' ') {//下方是空格
setAXY(g,x,y,' ');//a[x][y]=' ';
x++;
setAXY(g,x,y,'S');//a[x][y]='S';
}
else if(getAXY(g,x+1,y)=='O'){//下方是箱子
if(getAXY(g,x+2,y)==' '){//下下个格子是空格
setAXY(g,x,y,' ');//a[x][y]=' ';
x++;
setAXY(g,x,y,'S');//a[x][y]='S';//小人向下移动
setAXY(g,x+1,y,'O');//a[x+1][y]='O';//箱子向下移动
}
else if(getAXY(g,x+2,y)=='*') {//下下个格子是位置
setAXY(g,x,y,' ');//a[x][y]=' ';
x++;
setAXY(g,x,y,'S');//a[x][y]='S';//小人向下移动
setAXY(g,x+1,y,' ');//a[x+1][y]=' ';//箱子覆盖了,变成空格
cnt++;//消掉的数量+1
}
}
}else if(ch==72){ //按下上键
if(getAXY(g,x-1,y) ==' '){//上方是空格
setAXY(g,x,y,' ');//a[x][y]=' ';
x--;
setAXY(g,x,y,'S');//a[x][y]='S';
}
else if(getAXY(g,x-1,y)=='O'){//上方是箱子
if(getAXY(g,x-2,y) ==' '){//上上方是空格
setAXY(g,x,y,' ');//a[x][y]=' ';
x--;
setAXY(g,x,y,'S');//a[x][y]='S';
setAXY(g,x-1,y,'O');//a[x-1][y]='O';
}
else if(getAXY(g,x-2,y)=='*'){//上上方是箱子位置
setAXY(g,x,y,' ');//a[x][y]=' ';
x--;
setAXY(g,x,y,'S');//a[x][y]='S';
setAXY(g,x-1,y,' ');//a[x-1][y]=' ';
cnt++;
}
}
}
else if(ch==75){//按下左键
if(getAXY(g,x,y-1)==' '){//左边是空格
setAXY(g,x,y,' ');//a[x][y]=' ';
y--;
setAXY(g,x,y,'S');//a[x][y]='S';
}
else if(getAXY(g,x,y-1)=='O'){
if(getAXY(g,x,y-2)==' '){
setAXY(g,x,y,' ');//a[x][y]=' ';
y--;
setAXY(g,x,y,'S');//a[x][y]='S';
setAXY(g,x,y-1,'O');//a[x][y-1]='O';
}
else if(getAXY(g,x,y-2)=='*'){
setAXY(g,x,y,' ');//a[x][y]=' ';
y--;
setAXY(g,x,y,'S');//a[x][y]='S';
setAXY(g,x,y-1,' ');//a[x][y-1]=' ';
cnt++;
}
}
}
else if(ch==77) {//按下右键
if(getAXY(g,x,y+1)==' '){
setAXY(g,x,y,' ');//a[x][y]=' ';
y++;
setAXY(g,x,y,'S');//a[x][y]='S';
}
else if(getAXY(g,x,y+1)=='O'){
if(getAXY(g,x,y+2)==' '){
setAXY(g,x,y,' ');//a[x][y]=' ';
y++;
setAXY(g,x,y,'S');//a[x][y]='S';
setAXY(g,x,y+1,'O');//a[x][y+1]='O';
}
else if(getAXY(g,x,y+2)=='*'){
setAXY(g,x,y,' ');//a[x][y]=' ';
y++;
setAXY(g,x,y,'S');//a[x][y]='S';
setAXY(g,x,y+1,' ');//a[x][y+1]=' ';
cnt++;
}
}
}
}
printf("--*******************--\n");
printf("游戏说明:S 你所操控的人\n");
printf(" # 墙\n");
printf(" * 你需要把箱子放到的地方\n");
printf(" O 你的箱子\n");
printf(" 所有关卡都有解\n") ;
printf("本游戏只能用上下左右四个键来操控\n");
printf("--*******************--\n");
Set();//将光标设置回到第一个位置,重新打印图形
printA(g);
if(cnt==getNum(g))
break;
}
if(g < guanshu) {
printf("\n\n\n\n\n\n\n\n\n\n恭喜你,通过第%d关!\n",g);
printf("\n 请稍等");
}else {
printf("恭喜你,通关啦!\n");
}
Sleep(3000);
system("cls");
}
return 0;
}