U E D R , A S I H C RSS

고한종/십자가돌리기




본문

0. 이전에 한거 다 필요없고 완성본.

#include<stdio.h>
#include<Windows.h>
//system("cls");  -> 비쥬얼 스튜디오에서 화면 깨끗하게 하는 법.
// ㄴ#include<windows.h> 선언후 사용.
// #include<conio.h>의 clrscr();은 비쥬얼 C++에서는 안써진다더라. 왜그럴까 ㅠㅜ

int scale;// 전역 변수를 써야 한다니 ㅜㅠ
int i,j; //i는 행, j는 열.
int k,z; //각각 그냥 변수.

void frame1() // 성공
{
	z=0;
	k=0;
	for(i=1;i<=2*scale-1;i++)
	{
		for(j=1;j<=2*scale-1;j++)
		{
			if(i<scale && j==scale){printf("%2.d\n",1+k++);}
			if(i==scale && j!=scale&&j!=2*scale-1){printf("%2.d",2*scale+z++);}
			if(i==scale && j==2*scale-1){printf("%2.d\n",2*scale+z++);} // 우왕 ()안에서도 연산이 되네?
			if(i==scale && j==scale){printf("%2.d",1+k++);}
			if(i>scale && j==scale){printf("%2.d\n",1+k++);}
			if(j<scale && i!=scale){printf("  ");}
		}
	}
	
	Sleep(250);
	system("cls");
}

void frame2()
{
	z=0;
	k=0;
	for(i=1;i<=2*scale-1;i++)
	{
		for(j=1;j<=2*scale-1;j++)
		{
			if(i==j && i<scale){printf("%2.d",2*scale+z++);}
			if(i==j && i>scale){printf("%2.d\n",2*scale+z++);}
			if((i+j)==2*scale && i<=scale){printf("%2.d\n",1+k++);}
			if((i+j)==2*scale && i>scale){printf("%2.d",1+k++);}
			
			if(i>j || i+j<2*scale){if(i!=j && i+j!=2*scale){printf("  ");}}//잉여칸
		}
	}
	Sleep(250);
	system("cls");
}

void frame3()
{
	z=0;
	k=0;
	for(i=1;i<=2*scale-1;i++)
	{
		for(j=1;j<=2*scale-1;j++)
		{
			if(i<scale && j==scale){printf("%2.d\n",2*scale+k++);}
			if(i==scale && j!=2*scale-1){printf("%2.d",2*scale-1-(z++));}
			if(i==scale && j==2*scale-1){printf("%2.d\n",2*scale-1-(z++));}
			if(i>scale && j==scale){printf("%2.d\n",2*scale+k++);}
			if(j<scale && i!=scale){printf("  ");}

		}
	}
	Sleep(250);
	system("cls");
}

void frame4()
{
	z=0;
	k=0;
	for(i=1;i<=2*scale-1;i++)
	{
		for(j=1;j<=2*scale-1;j++)
		{
			if(i==j && i<scale){printf("%2.d",2*scale-1-(z++));}
			if(i==j && i>=scale){printf("%2.d\n",2*scale-1-(z++));}
			if((i+j)==2*scale && i<scale){printf("%2.d\n",2*scale+k++);}
			if((i+j)==2*scale && i>scale){printf("%2.d",2*scale+-1+k++);}
			
			if(i>j || i+j<2*scale){if(i!=j && i+j!=2*scale){printf("  ");}}//잉여칸

		}
	}
	Sleep(250);
	system("cls");
}

void frame5()
{
	z=0;
	k=0;
	for(i=1;i<=2*scale-1;i++)
	{
		for(j=1;j<=2*scale-1;j++)
		{
			if(i<scale && j==scale){printf("%2.d\n",2*scale-1-(z++));}
			if(i==scale && j!=scale&&j!=2*scale-1){printf("%2.d",4*scale-3-(k++));}
			if(i==scale && j==2*scale-1){printf("%2.d\n",4*scale-3-(k++));}
			if(i==scale && j==scale){printf("%2.d",2*scale-1-(z++));}
			if(i>scale && j==scale){printf("%2.d\n",2*scale-1-(z++));}
			if(j<scale && i!=scale){printf("  ");}

		}
	}
	Sleep(250);
	system("cls");
}

void frame6()
{
	z=0;
	k=0;
	for(i=1;i<=2*scale-1;i++)
	{
		for(j=1;j<=2*scale-1;j++)
		{
			if(i==j && i<scale){printf("%2.d",4*scale-3-(z++));}
			if(i==j && i>scale){printf("%2.d\n",4*scale-3-(z++));}
			if((i+j)==2*scale && i<=scale){printf("%2.d\n",2*scale-1-(k++));}
			if((i+j)==2*scale && i>scale){printf("%2.d",2*scale-1-(k++));}
			
			if(i>j || i+j<2*scale){if(i!=j && i+j!=2*scale){printf("  ");}}//잉여칸

		}
	}
	Sleep(250);
	system("cls");
}

void frame7()
{
	z=0;
	k=0;
	for(i=1;i<=2*scale-1;i++)
	{
		for(j=1;j<=2*scale-1;j++)
		{
			if(i<scale && j==scale){printf("%2.d\n",4*scale-3-(z++));}
			if(i==scale && j!=2*scale-1){printf("%2.d",1+k++);}
			if(i==scale && j==2*scale-1){printf("%2.d\n",1+k++);}
			if(i>scale && j==scale){printf("%2.d\n",4*scale-3-(z++));}
			if(j<scale && i!=scale){printf("  ");}

		}
	}
	Sleep(250);
	system("cls");
}

void frame8()
{
	z=0;
	k=0;
	for(i=1;i<=2*scale-1;i++)
	{
		for(j=1;j<=2*scale-1;j++)
		{
			if(i==j && i<scale){printf("%2.d",1+k++);}
			if(i==j && i>=scale){printf("%2.d\n",1+k++);}
			if((i+j)==2*scale && i<scale){printf("%2.d\n",4*scale-3-(z++));}
			if((i+j)==2*scale && i>scale){printf("%2.d",4*scale-3-(z++));}
			
			if(i>j || i+j<2*scale){if(i!=j && i+j!=2*scale){printf("  ");}}//잉여칸

		}
	}
	Sleep(250);
	system("cls");
}
/*
{
	z=1;
	k=0;
	for(i=1;i<=2*scale-1;i++)
	{
		for(j=1;j<=2*scale-1;j++)
		{

		}
	}
	Sleep(250);
	system("cls");
}

이 구조가 반복 되는데 이걸 함수로 선언 할 순 없을까? 
안에 어떤게 얼마나 들어갈지 모르겠어서 파라미터를 
뭘로 해야 할지 감이 안오는데 -_-;
*/
int main()
{
	int spin =0;

A:
	printf("사용하실 스케일을 입력하세요.\n");
	Sleep(100);
	printf("1 => 1\n2 => 5\n3 => 9\nn => 4n-3\n");
	printf("20보다 크게 입력하면 모양이 깨집니다.주의!\n");
	scanf_s("%d",&scale);

	if(scale>20)
	{
		printf("그래서 막아놈\n");
		goto A;
	}
	while(1)
	{
		int f;

		spin++;

		for(f=0;f<8;f++)
		{
			if(f%8==0)// f가 짝수 일때.
			{
				printf("회전수 : %d\n",spin);
				frame1();

			}
			else if(f%8==1)
			{
				printf("회전수 : %d\n",spin);
				frame2();
			}
			else if(f%8==2)
			{
				printf("회전수 : %d\n",spin);
				frame3();
			}
			else if(f%8==3)
			{
				printf("회전수 : %d\n",spin);
				frame4();
			}
			else if(f%8==4)
			{
				printf("회전수 : %d\n",spin);
				frame5();
			}
			else if(f%8==5)
			{
				printf("회전수 : %d\n",spin);
				frame6();
			}
			else if(f%8==6)
			{
				printf("회전수 : %d\n",spin);
				frame7();
			}
			else
			{
				printf("회전수 : %d\n",spin);
				frame8();
			}

			
		}
	}
	return 0;
}

이거 완전 길지만 배열도,행열도 없이 오로지 수열만으로 십자가돌리기를 성공함. 작업시간 6시간 이상인듯 ㅜㅠ (지금시각 새벽 3시45분, 분명 10시 30분쯤에 앉았었고, 그이전에도 짜둔게 있었는데 이정도.. ㅜㅠ)

입력받은 수에따라 크기가 변합니당
크기가 변해도 모양은 유지합니당
스핀수가 체크됩니다.

끄읕



소감

  • 노가다로 짠게 좀 아쉽다.
    • 그래서 어떻게든 안노가다로 해보려했는데 결국 작업자체가 노가다.
  • 함수선언 + for문으로 하는데 거의 성공했다. (숫자가 어려워서 *로 도전중이다.)
    • 그래서 결국 성공. 나 잉여력 쩌는 듯.
  • 처음으로 흥미롭게 하는 프로젝트 (.. 라기엔 좀 초라한듯) 인것 같다.
    • 민규랑 진경이가 이거보고 기겁했다 신ㅋ난ㅋ다ㅋ
  • 목표는 스케일을 입력받고 항상 원하는 모양으로 출력되게 하는것이다. (입력 한도는 int 한계까지)
    • 이건 벌써 실현 불가능이라고 판명. 화면이 버티질 못한다 ㄷㄷ;;
      • 그래서 막았다. 굳. 근데 goto문 임. 대체할 방법 없나?

  • 암튼 성공 아 신난다.

  • 아 근데 20초과 수 입력하는거 막는건 성공했는데 문자를 입력하면 아무것도 안뜨는게 좀 짜증난다. 이거 어떻게 막아야 할까. 도움이 필요하다 ㅜㅠ



결론 : 나만 알아보는듯.?

덧글


  • 뭐야 이코드 무서워 이걸 배열없이 하다니 - 정진경
  • 이 코드 읽기가 무섭다 그냥 이런 게 있구나 해야겠어 ㅋㅋ - 장용운
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2011-04-17 14:03:49
Processing time 0.3972 sec