⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.cpp

📁 一个用C写的迷宫小游戏
💻 CPP
字号:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>




#define wall  1
#define road  0
#define step  16
#define width  60
#define height 60
//#define MADE_MAN






#define ok    1
#define error 0
#define add   100

// for stacktype.id
#define RIGHT 0
#define	DOWN  1
#define	LEFT  2
#define	UP    3
#define NO_ROAD 4



char mazemap[height][width];

typedef struct
{
	int dx;
	int dy;
}postype;

typedef struct
{
	postype       seat;
    int     id;
}stacktype;

typedef  struct
{
    stacktype *base;
    stacktype *top;
	int stacksize;
}stack; 

int initstack(stack *zzchu)
{
    zzchu->base = (stacktype*)malloc(100 * sizeof(stacktype)); 
	if(zzchu->base == NULL)
		printf("the memory allocate is failing");
    zzchu->top = zzchu->base;
    zzchu->stacksize = 100;
	return ok;
}

int push(stack *zzchu, stacktype e)
{
	if(zzchu->stacksize <= (zzchu->top-zzchu->base))
	{
		zzchu->stacksize += add;
		zzchu->base = (stacktype*)realloc(zzchu->base, zzchu->stacksize * sizeof(stacktype));
		if(zzchu->base==NULL)
			return error;
		
		zzchu->top = zzchu->base+zzchu->stacksize-add;
	}
	*zzchu->top = e;
	zzchu->top += 1;
	return ok;
	
}
int pop(stack *zzchu, stacktype *e)
{
	if(zzchu->base == zzchu->top)
		return error;
	*e = *(--zzchu->top);
	return ok;
}

int main()
{
	
	postype cur_pos;
	postype exit_for_mazemap;
	stacktype cur_stack;
	
	exit_for_mazemap.dx = height - 2;
	exit_for_mazemap.dy = width - 2;
	// init the mazemap ;
	
	{
		int i, j;
		for(i=0; i<height; i++)
			for(j=0; j<width; j++)
			{
				if((i==0)||(i==(height-1))||(j==0)||(j==(width-1)))
				{
					mazemap[i][j] = wall;
				}
				else
				{
					mazemap[i][j] = road;
				}
			}
#ifdef MADE_MAN
			mazemap[1][4] = wall;
			mazemap[1][8] = wall;
			mazemap[2][1] = wall;
			mazemap[2][2] = wall;
			mazemap[2][6] = wall;
			mazemap[2][8] = wall;
			mazemap[2][11] = wall;
			mazemap[2][13] = wall;
			mazemap[2][13] = wall;
			mazemap[3][4] = wall;
			mazemap[3][8] = wall;
			mazemap[3][15] = wall;
			mazemap[4][2] = wall;
			mazemap[4][8] = wall;
			mazemap[4][10] = wall;
			mazemap[4][12] = wall;
			mazemap[4][14] = wall;
			mazemap[5][4] = wall;
			mazemap[5][5] = wall;
			mazemap[5][6] = wall;
			mazemap[5][7] = wall;
			mazemap[5][8] = wall;
			mazemap[5][11] = wall;
			mazemap[5][15] = wall;
			mazemap[6][1] = wall;
			mazemap[6][3] = wall;
			mazemap[6][9] = wall;
			mazemap[6][11] = wall;
			mazemap[6][13] = wall;
			mazemap[7][6] = wall;
			mazemap[7][11] = wall;
			mazemap[8][2] = wall;
			mazemap[8][4] = wall;
			mazemap[8][7] = wall;
			mazemap[8][9] = wall;
			mazemap[8][11] = wall;
			mazemap[8][13] = wall;
			mazemap[9][4] = wall;
			mazemap[9][5] = wall;
			mazemap[9][9] = wall;
			mazemap[9][11] = wall;
			mazemap[9][13] = wall;
			mazemap[10][1] = wall;
			mazemap[10][2] = wall;
			mazemap[10][4] = wall;
			mazemap[10][7] = wall;
			mazemap[10][8] = wall;
			mazemap[10][9] = wall;
			mazemap[10][10] = wall;
			mazemap[10][11] = wall;
			mazemap[10][13] = wall;
			mazemap[11][4] = wall;
			mazemap[11][6] = wall;
			mazemap[12][3] = wall;
			mazemap[12][4] = wall;
			mazemap[12][8] = wall;
			mazemap[12][9] = wall;
			mazemap[12][10] = wall;
			mazemap[12][11] = wall;
			mazemap[12][12] = wall;
			mazemap[12][13] = wall;
			mazemap[12][14] = wall;
			mazemap[12][15] = wall;
			mazemap[13][1] = wall;
			mazemap[13][5] = wall;
			mazemap[13][6] = wall;
			mazemap[13][7] = wall;
			mazemap[13][11] = wall;
			mazemap[13][15] = wall;
			mazemap[14][3] = wall;
			mazemap[14][9] = wall;
			mazemap[14][11] = wall;
			mazemap[14][13] = wall;
			mazemap[15][5] = wall;
			mazemap[15][7] = wall;
			mazemap[15][13] = wall;
			mazemap[16][15] = wall;
			
#else
			{
				int k;
				srand(time(NULL));
				for(k=0; k<(height-2)*(width-2)/3; k++)
				{
					i = 1 + rand()%(height-2);
					j = 1 + rand()%(width-2);
					mazemap[i][j] = wall;
				}
				mazemap[1][1] = road;
				mazemap[height-2][width-2] = road;
			}
#endif
      }
// print the mazemap;
	{
		int i,j;
		printf("the maze map is: ");
		for(i=0; i<height; i++)
		{
			printf("\n");
			for(j=0; j<width; j++)
				printf(" %c", mazemap[i][j]);
		}
		
    }
	getch();
	// initialize the stack
	stack zzchu_stack;
	stack *zzchu;
	zzchu = &zzchu_stack;
	initstack(zzchu);
    
	// start position
    cur_pos.dx = 1;
	cur_pos.dy = 1;
    
	cur_stack.seat = cur_pos;
	cur_stack.id = RIGHT;
	
	push(zzchu, cur_stack);
	mazemap[cur_pos.dy][cur_pos.dx] = wall;
    
	while(zzchu->base != zzchu->top)
	{
		switch (cur_stack.id)
		{
		case RIGHT: cur_pos.dx += 1; break;
		case DOWN: cur_pos.dy += 1; break;
		case LEFT: cur_pos.dx += -1; break;
		case UP: cur_pos.dy += -1; break;
		case NO_ROAD:
			if(cur_pos.dx== 1 && cur_pos.dy == 1)
			{
				printf("\nthe maze map hav't road for exiting; \n");
				return ok;
			}
			pop(zzchu, &cur_stack);
			pop(zzchu, &cur_stack);
			cur_stack.id += 1;
			cur_pos = cur_stack.seat;
			push(zzchu, cur_stack);
			continue;
		default:	printf("the direction is false!!!!"); break;
		}
		
		
        if(mazemap[cur_pos.dy][cur_pos.dx] == wall)
		{
			pop(zzchu, &cur_stack);
			cur_pos = cur_stack.seat;
			cur_stack.id += 1;
			push(zzchu, cur_stack);
		}
		else
		{
			cur_stack.id = RIGHT;
			cur_stack.seat = cur_pos;
			push(zzchu, cur_stack);
            if((cur_pos.dx == exit_for_mazemap.dx) && (cur_pos.dy == exit_for_mazemap.dy))
				break;
			mazemap[cur_pos.dy][cur_pos.dx] = wall;
			
		}
	}
    // initialize the maze map;
	{
		int i, j;
		for(i=0; i<height; i++)
			for(j=0; j<width; j++)
			{
				if((i==0)||(i==(height-1))||(j==0)||(j==(width-1)))
				{
					mazemap[i][j] = wall;
				}
				else
				{
					mazemap[i][j] = road;
				}
			}
#ifdef MADE_MAN
			mazemap[1][4] = wall;
			mazemap[1][8] = wall;
			mazemap[2][1] = wall;
			mazemap[2][2] = wall;
			mazemap[2][6] = wall;
			mazemap[2][8] = wall;
			mazemap[2][11] = wall;
			mazemap[2][13] = wall;
			mazemap[2][13] = wall;
			mazemap[3][4] = wall;
			mazemap[3][8] = wall;
			mazemap[3][15] = wall;
			mazemap[4][2] = wall;
			mazemap[4][8] = wall;
			mazemap[4][10] = wall;
			mazemap[4][12] = wall;
			mazemap[4][14] = wall;
			mazemap[5][4] = wall;
			mazemap[5][5] = wall;
			mazemap[5][6] = wall;
			mazemap[5][7] = wall;
			mazemap[5][8] = wall;
			mazemap[5][11] = wall;
			mazemap[5][15] = wall;
			mazemap[6][1] = wall;
			mazemap[6][3] = wall;
			mazemap[6][9] = wall;
			mazemap[6][11] = wall;
			mazemap[6][13] = wall;
			mazemap[7][6] = wall;
			mazemap[7][11] = wall;
			mazemap[8][2] = wall;
			mazemap[8][4] = wall;
			mazemap[8][7] = wall;
			mazemap[8][9] = wall;
			mazemap[8][11] = wall;
			mazemap[8][13] = wall;
			mazemap[9][4] = wall;
			mazemap[9][5] = wall;
			mazemap[9][9] = wall;
			mazemap[9][11] = wall;
			mazemap[9][13] = wall;
			mazemap[10][1] = wall;
			mazemap[10][2] = wall;
			mazemap[10][4] = wall;
			mazemap[10][7] = wall;
			mazemap[10][8] = wall;
			mazemap[10][9] = wall;
			mazemap[10][10] = wall;
			mazemap[10][11] = wall;
			mazemap[10][13] = wall;
			mazemap[11][4] = wall;
			mazemap[11][6] = wall;
			mazemap[12][3] = wall;
			mazemap[12][4] = wall;
			mazemap[12][8] = wall;
			mazemap[12][9] = wall;
			mazemap[12][10] = wall;
			mazemap[12][11] = wall;
			mazemap[12][12] = wall;
			mazemap[12][13] = wall;
			mazemap[12][14] = wall;
			mazemap[12][15] = wall;
			mazemap[13][1] = wall;
			mazemap[13][5] = wall;
			mazemap[13][6] = wall;
			mazemap[13][7] = wall;
			mazemap[13][11] = wall;
			mazemap[13][15] = wall;
			mazemap[14][3] = wall;
			mazemap[14][9] = wall;
			mazemap[14][11] = wall;
			mazemap[14][13] = wall;
			mazemap[15][5] = wall;
			mazemap[15][7] = wall;
			mazemap[15][13] = wall;
			mazemap[16][15] = wall;
			
#else
			{
				int k;
				srand(time(NULL));
				for(k=0; k<(height-2)*(width-2)/3; k++)
				{
					i = 1 + rand()%(height-2);
					j = 1 + rand()%(width-2);
					mazemap[i][j] = wall;
				}
				mazemap[1][1] = road;
				mazemap[height-2][width-2] = road;
			}
#endif
      }



	
    {
		printf("\n\nthe road of the map is: \n");
		while(zzchu->base != zzchu->top)
		{
			stacktype output;
			pop(zzchu, &output);
			printf("(%d, %d), direction=%d \n",output.seat.dy,output.seat.dx,output.id);
			mazemap[output.seat.dy][output.seat.dx] = step;
		}
	}

   
	{
		int i, j;
		printf("\nthe maze newmap is: ");
        for(i=0; i<height; i++)
		{
			printf("\n");
			for(j=0; j<width; j++)
				printf(" %c", mazemap[i][j]);
		}
	}
	getch();
	return ok;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -