華容道局面輸出

下面是蒐集到的華容道的局面,和C語言的文本輸出。

使用S表示小兵,LR表示橫向大將,UD表示縱向大將,BBBB表示曹操。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

enum
{
	H_BORDER = 1,
	V_BORDER = 2,
	X_CORNER = 3,
	X_SPACER = 4,
	
	MAP_WIDTH = 4,
	MAP_HEIGHT = 5
};

void set_border(int map[2 * MAP_WIDTH + 1][2 * MAP_HEIGHT + 1], int x, int y, int w, int h)
{
	int i, j;
	x = 2 * x;
	y = 2 * y;
	w = 2 * w + 1;
	h = 2 * h + 1;
	
	map[x][y] |= X_CORNER;         map[x + w - 1][y] |= X_CORNER;
	map[x][y + h - 1] |= X_CORNER; map[x + w - 1][y + h - 1] |= X_CORNER;
	
	for(i = 1; i < w - 1; i++)
	{
		map[x + i][y] |= H_BORDER;
		map[x + i][y + h - 1] |= H_BORDER;
	}

	for(i = 1; i < h - 1; i++)
	{
		map[x][y + i] |= V_BORDER;
		map[x + w - 1][y + i] |= V_BORDER;
	}
	
	for(i = 1; i < w - 1; i++)
	{
		for(j = 1; j < h - 1; j++)
		{
			map[x + i][y + j] |= X_SPACER;
		}
	}
}

const char *nchar(char ch, int count)
{
	static char buffer[256];
	
	if(count >= 255) count = 255;
	
	memset(buffer, ch, count);
	buffer[count] = 0;
	
	return buffer;
}

void print_map(const char mapstring[20])
{
	int i, x, y, count;
	
	int map[2 * MAP_WIDTH + 1][2 * MAP_HEIGHT + 1] = {0};
	
	int bossExist = 0;
	
	for(i = 0; i < 20; i++)
	{
		printf("%c", mapstring[i]);
		
		if(i % MAP_WIDTH == MAP_WIDTH - 1) printf("\n");
	}

	for(i = 0; i < 20; i++)
	{
		switch(mapstring[i])
		{
		case 'B':
			if(bossExist) break;
			bossExist = -1;
			x = i % MAP_WIDTH;
			y = i / MAP_WIDTH;
			set_border(map, x, y, 2, 2);
			break;
		case 'U':
			x = i % MAP_WIDTH;
			y = i / MAP_WIDTH;
			set_border(map, x, y, 1, 2);
			break;
		case 'L':
			x = i % MAP_WIDTH;
			y = i / MAP_WIDTH;
			set_border(map, x, y, 2, 1);
			break;
		case 'S':
			x = i % MAP_WIDTH;
			y = i / MAP_WIDTH;
			set_border(map, x, y, 1, 1);
			break;
		case ' ':
			break;
		}
	}

	for(y = 0; y < 2 * MAP_HEIGHT + 1; y++)
	{
		for(x = 0; x < 2 * MAP_WIDTH + 1; x++)
		{
			count = (x % 2) ? 3 : 1;
			switch(map[x][y])
			{
			case 0:
				printf("%s", nchar(':', count));
				break;
			case X_SPACER:
				printf("%s", nchar(' ', count));
				break;
			case H_BORDER:
			case H_BORDER | X_SPACER:
				printf("%s", nchar('-', count));
				break;
			case V_BORDER:
			case V_BORDER | X_SPACER:
				printf("|");
				break;
			case X_CORNER:
			case X_CORNER | X_SPACER:
				printf("+");
				break;
			}
		}
		printf("\n");	
	}
	printf("\n");
	printf("\n");
}


int main()
{
	int i;
	const char * maps[] = 
	{
		//一橫類開局式
		"UBBU"
		"DBBD"
		"ULRU"
		"DSSD"
		"S  S",
		
		"UBBU"
		"DBBD"
		"SLRS"
		"USSU"
		"D  D",
		
		" BB "
		"UBBU"
		"DUUD"
		"SDDS"
		"LRSS",
		
		"UBBU"
		"DBBD"
		"SSSS"
		"ULRU"
		"D  D",
		
		"SBBS"
		"UBBU"
		"DSSD"
		"ULRU"
		"D  D",
		
		"UBBS"
		"DBBS"
		"ULRU"
		"DU D"
		"SD S",
		
		"SBBS"
		"SBBS"
		"UUUU"
		"DDDD"
		" LR ",
		
		"SBBS"
		"UBBU"
		"DUUD"
		"SDDS"
		" LR ",
		
		"UBBS"
		"DBBS"
		"UUUS"
		"DDDS"
		" LR ",
		
		"UBBS"
		"DBBS"
		"ULRU"
		"DSUD"
		" SD ",
		
		"UBBS"
		"DBBS"
		"ULRS"
		"DUUS"
		" DD ",
		
		"SBBS"
		"SBBS"
		" LR "
		"UUUU"
		"DDDD",
		
		//二橫類開局式
		"UBBS"
		"DBBS"
		"LRSS"
		"ULRU"
		"D  D",
		
		"UBBU"
		"DBBD"
		"SU S"
		"SD S"
		"LRLR",
		
		"SBBS"
		"UBBU"
		"DU D"
		"SD S"
		"LRLR",
		
		"UBBS"
		"DBBS"
		"ULRU"
		"DLRD"
		"S  S",
		
		"UBBU"
		"DBBD"
		"LRLR"
		"SU S"
		"SD S",
		
		//三橫類開局式
		"UBBU"
		"DBBD"
		"SLRS"
		"SLRS"
		" LR ",
		
		"SBBS"
		"UBBU"
		"DLRD"
		"SLRS"
		" LR ",
		
		"SBBU"
		"SBBD"
		"ULRS"
		"DLRS"
		" LR ",
		
		"SBBS"
		"SBBS"
		"UULR"
		"DDLR"
		" LR ",
		
		"UBBU"
		"DBBD"
		"LRLR"
		"SLRS"
		"S  S",
		
		"UBBU"
		"DBBD"
		"SLRS"
		"LRLR"
		"S  S",
		
		//四橫類開局式
		"UBBS"
		"DBBS"
		"LRLR"
		"LRLR"
		"S  S",
		
		"SBBS"
		"SBBS"
		"U LR"
		"D LR"
		"LRLR",
		
		"UBBS"
		"DBBS"
		"SLRS"
		"LRLR"
		" LR ",
		
		//五橫類開局式
		"SBBS"
		"SBBS"
		"LRLR"
		"LRLR"
		" LR ",
		
		NULL
	};

	for(i = 0; maps[i] != NULL; i++)
	{
		print_map(maps[i]);
	}

	return 0;
}


下面是程序輸出的前面幾個局面
UBBU
DBBD
ULRU
DSSD
S  S
+---+-------+---+
|   |       |   |
|   |       |   |
|   |       |   |
+---+-------+---+
|   |       |   |
|   +---+---+   |
|   |   |   |   |
+---+---+---+---+
|   |:::::::|   |
+---+:::::::+---+


UBBU
DBBD
SLRS
USSU
D  D
+---+-------+---+
|   |       |   |
|   |       |   |
|   |       |   |
+---+-------+---+
|   |       |   |
+---+---+---+---+
|   |   |   |   |
|   +---+---+   |
|   |:::::::|   |
+---+:::::::+---+


 BB 
UBBU
DUUD
SDDS
LRSS
::::+-------+::::
::::|       |::::
+---+       +---+
|   |       |   |
|   +---+---+   |
|   |   |   |   |
+---+   |   +---+
|   |   |   |   |
+---+---+---+---+
|       |   |   |
+-------+---+---+


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章