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 2021-02-07 05:28:42
Processing time 0.0152 sec