
#include <iostream>
#include <windows.h>

using namespace std;

const short SIZE_VAL = 9;
const short SPEED = 60;
const short SEAM_SPEED = 100;

void output_battle_seam(bool);
void output_seam(void);
void cross_seam(void);

int main()
{
	bool judge = TRUE;
	short cont = 0;

	do {
		if(judge == TRUE)
			output_battle_seam(judge);
		if(judge == FALSE) {
			output_seam();
			Sleep(SEAM_SPEED);
		}
		cross_seam();

		Sleep(SEAM_SPEED);
		judge = FALSE;
	} while(cont++, cont < 6);

	getchar();

	return 0;
}

void output_battle_seam(bool judge)
{

	HANDLE hOut;
	COORD coset;
	short pos_x = 4, pos_y = 2, plus = 1;

	hOut = GetStdHandle(STD_OUTPUT_HANDLE);

	coset.X = pos_x;
	coset.Y = pos_y;
	SetConsoleCursorPosition(hOut, coset);
	puts("¡");
	if(judge == TRUE)
		Sleep(SPEED);

	for(short i = 0; i < SIZE_VAL; i++) {
		switch (i % 4) {
			case 0:
				if(i == SIZE_VAL - 1)
					plus--;
				for(short j = 0; j < plus; j++) {
					coset.Y = ++pos_y;
					SetConsoleCursorPosition(hOut, coset);
					puts("¡");
					if(j + 1 != plus)
						Sleep(SPEED);
				}
				break;
			case 1:
				for(short j = 0; j < plus; j++) {
					pos_x -= 2;
					coset.X = pos_x;
					SetConsoleCursorPosition(hOut, coset);
					puts("¡");
					if(j + 1 != plus)
						Sleep(SPEED);
				}
				plus++;
				break;
			case 2:
				for(short j = 0; j < plus; j++) {
					coset.Y = --pos_y;
					SetConsoleCursorPosition(hOut, coset);
					puts("¡");
					if(j + 1 != plus)
						Sleep(SPEED);
				}
				break;
			case 3:
				for(short j = 0; j < plus; j++) {
					pos_x += 2;
					coset.X = pos_x;
					SetConsoleCursorPosition(hOut, coset);
					puts("¡");
					if(j + 1 != plus)
						Sleep(SPEED);
				}
				plus++;
				break;
		}
		Sleep(SPEED);
	}
}

void output_seam()
{

	HANDLE hOut;
	COORD coset;
	short cro_y = ((SIZE_VAL - 1) / 2) + 1, cro_x = ((SIZE_VAL - 1) / 2) + 1;

	hOut = GetStdHandle(STD_OUTPUT_HANDLE);

	for(short i = 0; i < cro_y; i++) {
		coset.X = 0;
		coset.Y = i;
		SetConsoleCursorPosition(hOut, coset);
		for(short j = 0; j < cro_x; j++)
			printf("¡");
	}
}

void cross_seam()
{

	HANDLE hOut;
	COORD coset;
	short cro_y = ((SIZE_VAL - 1) / 2) + 1, cro_x = ((SIZE_VAL - 1) / 2) + 1;

	hOut = GetStdHandle(STD_OUTPUT_HANDLE);

	for(short i = 0; i < cro_y; i++) {
		coset.X = 0;
		coset.Y = i;
		SetConsoleCursorPosition(hOut, coset);
		for(short j = 0; j < cro_x; j++)
			printf("  ");
	}
}