欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

推箱子小游戏1.0版本

程序员文章站 2023-12-23 19:51:33
...

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

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

推箱子小游戏1.0版本

<2>第一关游戏界面

推箱子小游戏1.0版本

<3>第二关游戏界面

推箱子小游戏1.0版本

<4>第三关游戏界面

推箱子小游戏1.0版本

<5>游戏代码如下

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

#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;
}

相关标签: c语言游戏编程

上一篇:

下一篇: