推箱子小游戏1.0版本

版权声明:所有博客均由作者本人原创,若要转载,请注明出处。谢谢 https://blog.csdn.net/LU_Leo/article/details/80517653

这学期选修了C语言程序设计这门课程,老师要求小组做一个项目,所以我就写了这个程序(小组分工中我负责编程)

<1>这个是游戏的初始界面,总共就设计了三个关卡

<2>第一关游戏界面


<3>第二关游戏界面


<4>第三关游戏界面


<5>游戏代码如下

void color()是借鉴了别人的颜色函数,感谢!!!

扫描二维码关注公众号,回复: 3714710 查看本文章
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
#include "map.h"
int score(int q);
void color(short x)	//自定义函根据参数改变颜色 
{
    if(x>=0 && x<=15)//参数在0-15的范围颜色
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
		//只有一个参数,改变字体颜色 
    else//默认的颜色白色
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void drawmap(int n)
{    
    int c=n;
	printf("         C语言游戏之推箱子\n");
    int i,j;
    for(i=0;i<12;i++)
    {
    	for(j=0;j<12;j++)
    	{
			switch(map[c][i][j])
			{
				case 0:
				printf("  ");
                break;
        		case 1:
                color(4);
             	printf("■"); 
             	break;
	   			case 2: 
	        	color(7);
             	printf("♀"); 
             	break;
        		case 3:
            	color(6);
            	printf("田"); 
             	break;
        		case 4:
                color(7);
             	printf("☆"); 
                break;
       			case 6:
                color(7);
                printf("♀"); 
                break;
                case 7:
                color(6);
             	printf("★"); 
             	break;
            	default:
				break; 
            }
        } 
            color(7);//回复默认颜色 
            printf("\n");
        
    }
    printf("\n");
    printf("score=%d\n",score(n-1)); 
}
void play(int n)
{   int c=n;
	int x,y;
	int i,j;
	for(i=0;i<12;i++)
	{
		for(j=0;j<12;j++)
		{
			if(map[c][i][j]==2||map[c][i][j]==6)//定位人的位置 
			{
				x=i;
				y=j;
				break;
			}
        }
	} 
	switch(getch())
	{
		case 'W':
		case 'w':
			if(map[c][x-1][y]==0||map[c][x-1][y]==4)//上面的位置是空 空的目的地 
				{
				map[c][x][y]-=2;//减掉2, 人走了, 变为空地 
				map[c][x-1][y]+=2; 
				}
			else if(map[c][x-1][y]==3||map[c][x-1][y]==7)//上面是箱子或者箱子在目的地上 
			{
				if(map[c][x-2][y]==0||map[c][x-2][y]==4)//箱子上面是空地
				//可以移动
				{
				map[c][x][y]-=2;//人走了
				map[c][x-1][y]-=1;//人来了+2 箱子推上去了-3
				map[c][x-2][y]+=3;
				} 
			} 
		   break;
		case 'S':
	    case 's':
			if(map[c][x+1][y]==0||map[c][x+1][y]==4)//下面的位置是空 空的目的地 
				{
				map[c][x][y]-=2;//减掉2, 人走了, 变为空地 
				map[c][x+1][y]+=2; 
				}
			else if(map[c][x+1][y]==3||map[c][x+1][y]==7)//下面是箱子或者箱子在目的地上 
			{
				if(map[c][x+2][y]==0||map[c][x+2][y]==4)//箱子下面是空地
				//可以移动
				{
				map[c][x][y]-=2;//人走了
				map[c][x+1][y]-=1;//人来了+2 箱子推下去了-3
				map[c][x+2][y]+=3;
				} 
			} 
		   break;
	    case 'A':
		case 'a':
			if(map[c][x][y-1]==0||map[c][x][y-1]==4)//上面的位置是空 空的目的地 
				{
				map[c][x][y]-=2;//减掉2, 人走了, 变为空地 
				map[c][x][y-1]+=2; 
				}
			else if(map[c][x][y-1]==3||map[c][x][y-1]==7)//左面是箱子或者箱子在目的地上 
			{
				if(map[c][x][y-2]==0||map[c][x][y-2]==4)//箱子左面是空地
				//可以移动
				{
				map[c][x][y]-=2;//人走了
				map[c][x][y-1]-=1;//人来了+2 箱子推上去了-3
				map[c][x][y-2]+=3;
				} 
			} 
		   break;
		case 'D':
		case 'd':
			if(map[c][x][y+1]==0||map[c][x][y+1]==4)//右面的位置是空 空的目的地 
				{
				map[c][x][y]-=2;//减掉2, 人走了, 变为空地 
				map[c][x][y+1]+=2; 
				}
			else if(map[c][x][y+1]==3||map[c][x][y+1]==7)//右面是箱子或者箱子在目的地上 
			{
				if(map[c][x][y+2]==0||map[c][x][y+2]==4)//箱子右面是空地
				//可以移动
				{
				map[c][x][y]-=2;//人走了
				map[c][x][y+1]-=1;//人来了+2 箱子推上去了-3
				map[c][x][y+2]+=3;
				} 
			} 
		   break;
		default:
			break;
	}
} 
int judge(int n)
{
  //游戏结束,所有箱子都推到目的上
  //判断数组是否有3,没有3结束,箱子都推到角落,游戏结束 
  //判断箱子是否在角落
  //赢了返回1 输了返回-1 游戏中返回0
  int i,j;
  int c=n;
  int num=0; 
  int score=0; 
  for(i=0;i<12;i++)
  { 
  	for(j=0;j<12;j++)
  	{
		if(map[c][i][j]==3) 
		{
		num++;
		if((map[c][i-1][j]==1||map[c][i+1][j]==1)&&(map[c][i][j-1]==1||map[c][i][j+1]==1))//箱子是否在角落 
		 return -1;//游戏结束 
	    }
	} 
  } 
	if(num==0)
	{
	return 1;//没有空箱子 
	}
	else
	{
	score=3-num;
	return 0;//游戏进行中 
	}
}
int score(int q)
{  
   int c=q;
   int n=0;
   int i,j;
   for(i=0;i<12;i++)
  { 
  	for(j=0;j<12;j++)
  	{
  	if(map[c][i][j]==7)
    	n++;
    }
  }
  return n; 
} 
int main(void)
{
    //设置窗口标题 
    SetConsoleTitle("推箱子过关游戏 ");
    //设置窗口大小 cols列 lines行 
    system("mode con cols=40 lines=20");
    //begin:
	int choice;
   
	printf("欢迎来到推箱子游戏环节!\n"
	"本游戏共有多个关卡\n"
	"请输入你的选择(1-3)");
    scanf("%d",&choice);
    system("cls");
    begin:
    while(judge(choice-1)==0)
    {
	drawmap(choice-1);
	play(choice-1);
	system("cls");
	}
	drawmap(choice-1);
	if(judge(choice-1)==1)
	{
	   if(choice==3)
	   { 
	    printf("\nYOU WIN!\n");
		return 0; 
	   } 
	   else
	   { 
	   choice++;
	   system("cls"); 
	   goto begin;
	   
       } 
	}
    else if(judge(choice-1)==-1)
	{
	printf("Game Over!\a"); 
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/LU_Leo/article/details/80517653