U E D R , A S I H C RSS

새싹교실/2014/속도위반/0516


1. 진행사항

2. 과제

  • 1. 행렬 A를 입력받아 A^T(transpose)를 출력하는 프로그램을 만드시오.
    • 기본적으로 행렬 A는 5X5 행렬.
    • 처음 실행시 행렬의 크기도 입력받게 해서 만들어 본다면 상을 줄게요.
  • 2. Tic-Tac-Toe 게임
    • 3X3 행렬에서 먼저 한 줄을 본인의 말로 완성하면 이기는 게임
    • 기본적으로 rand함수를 이용해 컴퓨터의 말의 위치를 선택
    • 컴퓨터에 AI를 내장한다면 상을 줄게요.

2.1. 유재범

1번 코드

#include <stdio.h>
#pragma warning(disable:4996)

int arr;
int array[1000][1000] = {'\0', };

void Array(int);
void Change(int);

int main(void)
{
	int count=0, select;
	
	while(1)
	{
		if(count==0)
		{
			Array(5);
			count++;
		}
		else
		{
			printf("몇 개의 이차원 배열을 transpose하시겠습니까?");
			scanf("%d", &arr);
			Array(arr);
			count++;
		}
		printf("더 하시겠습니까? (Yes : 1, No : 2)");
		scanf("%d", &select);
		if(select==1)
			continue;
		else
			break;
	}
	return 0;
}

void Array(int arr)
{
	int i=0, j=0;
	

	for(i=0; i!=arr; i++)
	{
		for(j=0; j!=arr; j++)
			array[i][j] = (arr*i) + j+1;
	}

	for(i=0; i!=arr; i++)
	{
		for(j=0; j!=arr; j++)
			printf("%5d", array[i][j]);
		printf("\n");
	}
	printf("\n\n\n");

	Change(arr);
}

void Change(int arr)
{
	int save, i, j;
	for(i=0; i!=arr; i++)
	{
		for(j=0; j!=arr; j++)
			array[j][i] = (j*arr)+i+1;
	}

	for(i=0; i!=arr; i++)
	{
		for(j=0; j!=arr; j++)
			printf("%5d", array[j][i]);
		printf("\n");
	}
	printf("\n\n\n\n\n\n");
}

2번 코드

//1. 빙고가 되면 탈출하자.
//2. 플레이어만 계속 넣게 된다. 컴퓨터가 넣는 함수 확인하고 플레이어 while문 탈출을 확인해보자.
//3. 빙고가 됬을 때 탈출을 하지 않는다. 확인을 해보자.

#include <stdio.h>
#pragma warning(disable:4996)
#include <stdlib.h>
#include <time.h>
#include <Windows.h>

char playground[3][3]=
{
	{'\0', '\0', '\0'}, 
	{'\0', '\0', '\0'}, 
	{'\0', '\0', '\0'}
};

void PlayGround(char[3][3]);
int CheckTicTacToc(char[3][3], int, int, int, int);
int Players(int *, int *, int, char [3][3]);
void Center(char [3][3]);
void TwoSome(int, int, char [3][3]);
void BetWeen(int, int, char [3][3]);
int NonCenter(int, int, int, int *, int *, char [3][3]);
int Random(char [3][3], int *, int *, int, int, int);

int main(void)
{
	int x, y, comx, comy, win, i=0, re=0, a, b, s=0;
	//x : 플레이어가 입력하는 y축 값
	//y : 플레이어가 입력하는 x축 값
	//comx : 컴퓨터가 입력하는 y축 값
	//comy : 컴퓨터가 입력하는 x축 값
	//win : 승리를 선택하는 상수
	//i : 게임 무승부 상수
	//re : 두번째 이후로 이미 AI에 따라 문자 입력 시 그 자리에 문자가 존재할 경우
	//a, b : 두번째 게임 때 배열의 값 초기화 하기 위해 for문을 돌리는 변수
	//s : 게임 재시작 숫자
	srand((unsigned)time(NULL));
	PlayGround(playground);//출력
	while(1)//전체 게임 재시작 무한루프
	{
		for(a=0; a!=3; a++)
		{
			for(b=0; b!=3; b++)
				playground[a][b] = '\0';
		}
		
		i=0;
		s=0;
		win=0;
		x=0;
		y=0;
		comx=0;
		comy=0;
		re=0;
		//2차 게임을 하면서 모든 변수 초기화

		while(1)//플레이어와 컴퓨터가 문양을 입력하는 루프
		{
			{//플레이어 입력
				while(1)//내가 문양을 입력할 곳에 이미 문자가 있을 경우 루프
				{
					printf("어디에 두시겠습니까? : ");
					scanf("%d %d", &x, &y);
					Players(&x, &y, i, playground);//플레이어 입력 함수
					if(Players(&x, &y, i, playground)!=0)//개임 재시작 선택을 할 경우 게임 반복 루프 탈출.
						break;
					else
						continue;
				}
				i=0;//다음 확인을 위하여 i값 초기화
				

				playground[x-1][y-1]= 'U';//대입
				PlayGround(playground);//출력

				win=1;//승리 상수 설정
				CheckTicTacToc(playground, x, y, i, win);//빙고 확인 함수
				if(i==1)
					break;
				i=0;
			}
			{//컴퓨터 입력
				if(1)
					Center(playground);//중앙이 비어있는 경우
				else if(1)
					TwoSome(a, b, playground);//인접한 두 정수가 같고 그 다음 정수가 빌 경우
				
				else if(1)
					BetWeen(a, b, playground);//양 쪽이 같은 문자이고 그 사이의 도형이 비어 있는 경우
		

				else if(1)//중앙에 문자가 이미 있고 그 어떠한 규칙이 없는 경우
				{
					while(1)//문자 입력 중복 확인 루프
					{
						NonCenter(x, y, i, &comx, &comy, playground);
						if(NonCenter(x, y, i, &comx, &comy, playground)!=0)//게임 반복 변수 입력 시 게임 루프 탈출
							break;
						else
							continue;
					}
					i=0;//게임 반복 변수 입력 하지 않을 시 다음 루프를 위해 탈출

					Sleep(3000);
					printf("저는 (%d, %d)에 두겠습니다.\n", comx+1, comy+1);
					Sleep(1000);
					system("cls");

					playground[comx][comy] = 'C';//대입
					win=2;//승리 변수 설정
					PlayGround(playground);//출력

					CheckTicTacToc(playground, comx, comy, i, win);
					if(CheckTicTacToc(playground, comx, comy, i, win)==1)
						break;
					i=0;
				}
				else if(1)//중앙이 아닌 곳에 상대가 두었고 어떠한 승리 규칙이 없는 경우
				{
					while(1)
					{
						Random(playground, &comx, &comy, x, y, i);
						if(Random(playground, &comx, &comy, x, y, i)!=0)//무승부 일 경우 루프 탈출
							break;
						else
							continue;
					}
					i=0;//무승부가 아닐 경우 다음 상황을 위해 초기화

					Sleep(3000);
					printf("저는 (%d, %d)에 두겠습니다.\n", comx+1, comy+1);
					Sleep(1000);
					system("cls");

					playground[comx][comy] = 'C';//대입
					win=2;
					PlayGround(playground);//출력

					CheckTicTacToc(playground, comx, comy, i, win);
					if(CheckTicTacToc(playground, comx, comy, i, win)==0)
						break;
					i=0;
				}//양 옆이 다를 경우 else if 괄호
			PlayGround(playground);
			}//컴퓨터 입력 완료
		}//입력 루프

		if(i==1)//무승부에서 재게임 입력
			continue;
		else if(i!=2)//무승부에서 재게임 거부
			break;
		else//무승부가 아닐 경우
		{
			if(win==1)//승리자 출력
			{
				printf("플레이어 승리입니다. 게임을 한 번 더 진행하시겠습니까?\nYES : 1\tNO : 2\n");
				scanf("%d", &i);
				if(i==1)//개임 재게
					continue;
				else if(i==2)
					break;
			}
		
			else if(win==2)
			{
				printf("컴퓨터 승리입니다. 게임을 한 번 더 진행하시겠습니까?\nYES : 1\tNO : 2\n");
				scanf("%d", &s);
				if(s==1)//게임 재게
					continue;

				else if(s==2)
					break;
			}	
		}//무승부가 아닌 경우
	}//전체 입력 루프
	return 0;
}//main 함수

void PlayGround(char playground[3][3])//출력 함수
{
	printf("┌─┬─┬─┐\n│%2c│%2c│%2c│\n├─┼─┼─┤\n", playground[0][0], playground[0][1], playground[0][2]);
	printf("│%2c│%2c│%2c│\n├─┼─┼─┤\n", playground[1][0], playground[1][1], playground[1][2]);
	printf("│%2c│%2c│%2c│\n└─┴─┴─┘\n\n\n\n\n\n\n\n", playground[2][0], playground[2][1], playground[2][2]);
}
int CheckTicTacToc(char playground[3][3], int comx, int comy, int i, int win)
{
	if((playground[comx][0]==playground[comx][1] && playground[comx][1]==playground[comx][2] && playground[comx][0]!='\0' && playground[comx][1]!='\0' && playground[comx][2]!='\0') || (playground[0][comy]==playground[1][comy] && playground[1][comy]==playground[2][comy] && playground[0][comy] != '\0' && playground[1][comy] != '\0' && playground[2][comy] != '\0'))
	//가로세로 빙고 확인
		i=1;

	else if((playground[0][0]==playground[1][1] && playground[1][1]==playground[2][2] && playground[0][0] != '\0' && playground[1][1] != '\0' && playground[2][2] != '\0') || (playground[2][0]==playground[1][1] && playground[1][1]==playground[0][2] && playground[0][2] != '\0' && playground[1][1] != '\0' && playground[0][2] != '\0'))
	//대각선 빙고 확인
		i=1;
	else//빙고가 아닐 경우
	{
		if(win==1)
			printf("컴퓨터의 턴입니다.\n");
		else
			printf("플레이어의 턴 입니다.\n");
	}

	return i;
}
int Players(int * x, int * y, int i, char playground[3][3])
{
	if(playground[*x-1][*y-1] != '\0')//이미 다른 문자 존재 시
	{
		if(    playground[0][0] != '\0' && playground[0][1] != '\0' && playground[0][2] != '\0' 
			&& playground[1][0] != '\0' && playground[1][1] != '\0' && playground[1][2] != '\0' 
			&& playground[2][0] != '\0' && playground[2][1] != '\0' && playground[2][2] != '\0')
		//모든 칸에 문자가 있을 경우(위에서 문자 입력한 후 대입이 아직 되지 않아 1 칸이 빈다. 수정이 필요하다)
		{
			printf("무승부!\n 다시 게임을 하시겠습니까?\nYES : 1\tNO : 2");
			scanf("%d", &i);
		}
		
		else//단순히 겹칠 경우
		{
			printf("그 곳에는 이미 숫자가 있습니다. 다른 곳에 다시 입력해주세요.\n");
		}
	}
	else//겹치지 않을 경우 루프 탈출
		i=2;

	return i;
}
void Center(char playground[3][3])
{
	if(playground[1][1]=='\0')//중앙에 문자가 없을 경우
	{
		Sleep(3000);
		printf("저는 2, 2에 입력하겠습니다.\n");
		playground[1][1]='C';//대입
		Sleep(1000);

		PlayGround(playground);//출력
	}
}
void TwoSome(int a, int b, char playground[3][3])
{
	for(a=0; a!=3; a++)
	{
		for(b=0; b!=3; b++)
		{
			if((playground[a][0]==playground[a][1]) && playground[a][0]!='\0' && playground[a][1]!='\0' && playground[a][2]=='\0')
			{
				Sleep(3000);
				printf("저는 %d, 2에 입력하겠습니다.\n", a);
				playground[a][2] = 'C';
				Sleep(1000);
					
				PlayGround(playground);
			}
					
			else if((playground[a][1]==playground[a][2]) && playground[a][1]!='\0' && playground[a][2]!='\0' && playground[a][0]=='\0')
			{
				Sleep(3000);
				printf("저는 %d, 2에 입력하겠습니다.\n", a);
				playground[a][0] = 'C';
				Sleep(1000);

				PlayGround(playground);
			}

			if((playground[1][b]==playground[0][b]) && playground[0][b]!='\0' && playground[1][b]!='\0' && playground[2][b]=='\0')
			{
				Sleep(3000);
				printf("저는 2, %d에 입력하겠습니다.\n", b);
				playground[2][b] = 'C';
				Sleep(1000);
				PlayGround(playground);
			}

			else if((playground[1][b]==playground[2][b]) && playground[1][b]!='\0' && playground[2][b]!='\0' && playground[0][b]=='\0')
			{
				Sleep(3000);
				printf("저는 0, %d에 입력하겠습니다.\n", b);
				playground[0][b] = 'C';
				Sleep(1000);

				PlayGround(playground);
			}
		}
	}
	if(playground[1][1]!='\0')
	{
		if((playground[0][0]==playground[1][1]) && playground[0][0]!='\0' && playground[1][1]!='\0' && playground[2][2]=='\0')
		{
			Sleep(3000);
			printf("저는 1, 1에 입력하겠습니다.\n");
			playground[2][2] = 'C';
			PlayGround(playground);

			Sleep(1000);
		}
		else if((playground[2][2]==playground[1][1]) && playground[2][2]!='\0' && playground[1][1]!='\0' && playground[0][0]=='\0')
		{
			Sleep(3000);
			printf("저는 0, 0에 입력하겠습니다.\n");
			playground[0][0] = 'C';
			PlayGround(playground);
			
			Sleep(1000);
		}
	}
	else if(playground[1][1]!='\0')
	{
		if((playground[2][0]==playground[1][1]) && playground[2][0]!='\0' && playground[1][1]!='\0' && playground[0][2]=='\0')
		{
			Sleep(3000);
			printf("저는 2, 2에 입력하겠습니다.\n");
			playground[0][2] = 'C';
			PlayGround(playground);

			Sleep(1000);
		}
		else if((playground[0][2]==playground[1][1]) && playground[0][2]!='\0' && playground[1][1]!='\0' && playground[2][0]=='\0')
		{
			Sleep(3000);
			printf("저는 2, 0에 입력하겠습니다.\n");
			playground[2][0] = 'C';
			PlayGround(playground);

			Sleep(1000);
		}
	}
}
void BetWeen(int a, int b, char playground[3][3])
{
	for(a=0; a!=3; a++)
	{
		for(b=0; b!=3; b++)
		{
			if((playground[0][b]==playground[2][b]) && playground[0][b]!='\0' && playground[2][b]!='\0' && playground[1][b]=='\0')
			{
				Sleep(3000);
				printf("저는 1, %d에 입력하겠습니다.\n", b);
				playground[1][b]='C';//대입
				Sleep(1000);

				PlayGround(playground);//출력
			}

			else if((playground[a][0]==playground[a][2]) && playground[a][0]!='\0' && playground[a][2]!='\0' && playground[a][1]=='\0')
			{
				Sleep(3000);
				printf("저는 %d, 1에 입력하겠습니다.\n", a);
				playground[a][1]='C';//대입
				Sleep(1000);

				PlayGround(playground);//출력
			}

			else if((playground[0][0]==playground[2][2]) && playground[0][0]!='\0' && playground[2][2]!='\0' && playground[1][1]=='\0')
			{
				Sleep(3000);
				printf("저는 1, 1에 입력하겠습니다.\n");
				playground[1][1]='C';//대입
				Sleep(1000);

				PlayGround(playground);//출력
			}

			else if((playground[0][2]==playground[2][0]) && playground[0][2]!='\0' && playground[2][0]!='\0' && playground[1][1]=='\0')
			{
				Sleep(3000);
				printf("저는 1, 1에 입력하겠습니다.\n");
				playground[1][1]='C';//대입
				Sleep(1000);
				
				PlayGround(playground);//출력
			}
		}
	}
}
int NonCenter(int x, int y, int i, int * comx, int * comy, char playground[3][3])
{
	if(x==2 && y==2)//중앙에 상대 문자가 있을 경우
	{
		*comx=rand()%3;
		*comy=rand()%3;
		//랜덤으로 받기

		if(playground[*comx-1][*comy-1] != '\0')//문자 입력 장소에 문자 입력 여부 확인
		{
			if((playground[0][0] != '\0') && (playground[0][1] != '\0') && (playground[0][2] != '\0') && (playground[1][0] != '\0') && (playground[1][1] != '\0') && (playground[1][2] != '\0') && (playground[2][0] != '\0') && (playground[2][1] != '\0') && (playground[2][2] != '\0'))
			//9개의 문자가 모두 문자 입력 시 무승부로 판단. 무승부 시 루프 탈출(이 또한 8개가 입력된 상태에서 읽히므로 수정 필요)
			{
				printf("무승부!\n 다시 게임을 하시겠습니까?\nYES : 1\tNO : 2");
				scanf("%d", &i);
			}

			else//단순 중복일 경우
			{
				printf("그 곳에는 이미 숫자가 있습니다. 다른 곳에 다시 입력해주세요.\n");
			}
		}
		else//중복 되지 않을 경우
			i=2;
	}
	return i;
}
int Random(char playground[3][3], int * comx, int * comy, int x, int y, int i)
{
	int re=0;
	if(playground[1][1]!='C') 
	//양 옆이 다를 경우
	{
		if(re==0)//우선 정 가운데를 먹고 가므로 이를 대비하여 정 반대를 막도록 설정
		{
			* comx=3-x;				
			* comy=3-y;
		}
		else//반대 쪽에 이미 문자가 있을 경우 re라는 변수를 받는다. 이 변수가 0이 아니면 예상한 상황임으로 판단하고 랜덤으로 돌려버린다.
		{
			* comx=rand()%3;
			* comy=rand()%3;
		}

		if(playground[* comx][* comy] != '\0')//지정된 장소에 이미 문자가 있는 경우 확인
		{
			if(playground[0][0] != '\0' && playground[0][1] != '\0' && playground[0][2] != '\0' && playground[1][0] != '\0' && playground[1][1] != '\0' && playground[1][2] != '\0' && playground[2][0] != '\0' && playground[2][1] != '\0' && playground[2][2] != '\0')
			//무승부 여부. 하지만 수정 필요
			{
				printf("무승부!\n 다시 게임을 하시겠습니까?\nYES : 1\tNO : 2");
				scanf("%d", &i);
			}
				else//단순 중복
			{
				printf("그 곳에는 이미 숫자가 있습니다. 다른 곳에 다시 입력해주세요.\n");
				re++;
			}
		}
		else//비중복
			i=2;
	}
	return i;
}

  • 1번은 카운트를 받아 처음에는 5개가 출력되고 그 다음에는 사용자가 원하는대로 출력하게 설정하였습니다.
    ㅋㅋ재범 11이상 입력하니 깨지네-우진
    필요 없어 어차피 10이면 최대 1024야. 그나저나 내 코드를 왜 돌려보고 있냐?
    깨지는거 생각해보니 %5d정도면 되지 않냐?

  • 2번도 빠른 시일 내에 올리겠습니다.
  • 2번 과제 드랍합니다. 그냥 랜덤으로 돌리는건 당연히 했지만 욕심부려서 한번에 AI 하려다가 AI 코드가 너무 많아져 출력이 제대로 이루어지지 않습니다. 코드 제일 위에 문제점 썼습니다. 코드를 너무 오래 잡고 있으니 제가 아는 것이 맞는건지조차 의심되어 더이상 뭔갈 했다간 제대로 된 것도 다 날릴것만 같습니다. AI는 중앙 우선, 같은 문자 연속 위치, 같은 문자가 각 변의 끝에 위치하고 중앙이 비어 있는 경우, 그리고 그 외의 경우와 이 모든 경우에서 이미 숫자가 존재 할 경우를 나누어서 넣었고 실제로 같은 문자 연속 위치 이전 코드로는 30번 시뮬레이션 하면 중앙에 먼저 놓지 않을 경우 6회, 중앙에 먼저 플레이어가 도형을 두는 경우 2회 승리하였습니다. 실제로 저 AI로 하면 적어도 10회는 승리하지 않을까 예상합니다. 그래봐야 호접몽 시간이 되시면 코드좀 봐주셨으면 합니다.

2.2. 오영은




#include<stdio.h>
#pragma warning(disable:4996)

int trans[5][5]={0, };
int num1=0, num2=0;


int main()
{
     printf("   1   2   3   4   5   \n");
     printf(" ┌─┬─┬─┬─┬─┐\n");
     printf("1│  │★│  │  │  │\n");
     printf(" ├─┼─┼─┼─┼─┤\n");
     printf("2│  │  │  │  │  │\n");
     printf(" ├─┼─┼─┼─┼─┤\n");
     printf("3│  │  │  │  │  │\n");
     printf(" ├─┼─┼─┼─┼─┤\n");
     printf("4│  │  │  │  │  │\n");
     printf(" ├─┼─┼─┼─┼─┤\n");
     printf("5│  │  │  │  │  │\n");
     printf(" └─┴─┴─┴─┴─┘\n\n");
	 printf("표의 ★는 (1,2)좌표를 나타내는 것입니다.\n\n");




	for(num1=0;num1<5;num1++)
	{
		for(num2=0;num2<5;num2++)
		{
			 printf("(%d,%d)의 숫자를 입력하세요.\n", num1+1, num2+1);
	         scanf("%d", &trans[num1][num2]);
		}

	}
	system("pause");
	system("cls");

	 printf("   1   2   3   4   5   \n");
     printf(" ┌─┬─┬─┬─┬─┐\n1│");
	  for(num2=0;num2<5;num2++)
		 {
			 num1=0;
             printf("%2d│", trans[num1][num2]);
	     }
			
	 
	 for(num1=1;num1<5;num1++)
	 {
	 	if(num2=4)
			{
				printf("\n ├─┼─┼─┼─┼─┤\n%d│", num1+1);
				
			}
		 for(num2=0;num2<5;num2++)
		 {
             printf("%2d│", trans[num1][num2]);
		 }
	 }
      printf("\n └─┴─┴─┴─┴─┘\n\n");


	  printf("           ↓\n\n");


	   printf("   1   2   3   4   5   \n");
     printf(" ┌─┬─┬─┬─┬─┐\n1│");
	  for(num2=0;num2<5;num2++)
		 {
			 num1=0;
             printf("%2d│", trans[num2][num1]);
	     }
			
	 
	 for(num1=1;num1<5;num1++)
	 {
	 	if(num2=4)
			{
				printf("\n ├─┼─┼─┼─┼─┤\n%d│", num1+1);
				
			}
		 for(num2=0;num2<5;num2++)
		 {
             printf("%2d│", trans[num2][num1]);
		 }
	 }
      printf("\n └─┴─┴─┴─┴─┘\n\n\n");


	 system("pause");

    return 0;
}









#include<stdio.h>
#pragma warning(disable:4996)
#include <windows.h>
#include <time.h>


char trans[3][3]={0, };
int num1=0, num2=0, com1=0, com2=0, times=0;
void gotoxy(int x, int y)
{
	COORD Cur;
	Cur.X=x;
	Cur.Y=y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);
}

char ttt();


int main()
{

	printf("Tic-Tac-Toe 게임\n\n");
	printf("   1   2   3  \n");
	printf(" ┌─┬─┬─┐\n");
	printf("1│  │★│  │\n");
	printf(" ├─┼─┼─┤\n");
	printf("2│  │  │  │\n");
	printf(" ├─┼─┼─┤\n");
	printf("3│  │  │  │\n");
	printf(" └─┴─┴─┘\n");
	printf("표의 ★는 (1,2)좌표를 나타내는 것입니다.\n\n");
	system("pause");
	system("cls");



	printf("   1   2   3  \n");
	printf(" ┌─┬─┬─┐\n");
	printf("1│%2c│%2c│%2c│\n", trans[0][0], trans[0][1], trans[0][2]);
	printf(" ├─┼─┼─┤\n");
	printf("2│%2c│%2c│%2c│\n", trans[1][0], trans[1][1], trans[1][2]);
	printf(" ├─┼─┼─┤\n");
	printf("3│%2c│%2c│%2c│\n", trans[2][0], trans[2][1], trans[2][2]);
	printf(" └─┴─┴─┘\n\n");


	

	while(1)
	{
		ttt();

		if(trans[1][0]=='O' && trans[2][0]=='O' && trans[0][0]=='O' || trans[1][1]=='O' && trans[2][1]=='O' && trans[0][1]=='O' || trans[1][2]=='O' && trans[2][2]=='O' && trans[0][2]=='O' || trans[1][1]=='O' && trans[2][2]=='O' && trans[0][0]=='O' ||trans[2][0]=='O' && trans[1][1]=='O' && trans[0][2]=='O' || trans[0][1]=='O' && trans[0][2]=='O' && trans[0][0]=='O' || trans[1][0]=='O' && trans[1][1]=='O' && trans[1][2]=='O' || trans[2][1]=='O' && trans[2][0]=='O' && trans[2][2]=='O')
		{
			printf("플레이어가 이김");
			system("pause");
			break;
		}

		else if(trans[1][0]=='X' && trans[2][0]=='X' && trans[0][0]=='X' || trans[1][1]=='X' && trans[2][1]=='X' && trans[0][1]=='X' || trans[1][2]=='X' && trans[2][2]=='X' && trans[0][2]=='X' || trans[1][1]=='X' && trans[2][2]=='X' && trans[0][0]=='X' ||trans[2][0]=='X' && trans[1][1]=='X' && trans[0][2]=='X' || trans[0][1]=='X' && trans[0][2]=='X' && trans[0][0]=='X' || trans[1][0]=='X' && trans[1][1]=='X' && trans[1][2]=='X' || trans[2][1]=='X' && trans[2][0]=='X' && trans[2][2]=='X')
		{
			printf("컴퓨터가 이김");
			break;
		}

		else if(times==9)
		{
			printf("무승부입니다.");
			break;
		}
	}



	system("pause");
}

char ttt()
{


	printf("원하시는 좌표를 입력하세요. : ( , )");
	gotoxy(31,9);
	scanf("%d", &num1);
	gotoxy(33,9);
	scanf("%d", &num2);

	trans[num1-1][num2-1]='O';
	times++;

	srand((unsigned)time(NULL));
	com1=rand()%3;
	com2=rand()%3;
	printf("%d %d\n",com1,com2);
	if(trans[com1][com2]!='/0')
	{
		while(trans[com1][com2]!=0)
		{
			com1=rand()%3;
			com2=rand()%3;
		}
		trans[com1][com2]='X';
	}
	else
		trans[com1][com2]='X';
	times++;

	system("cls");
	/*printf("   1   2   3  \n");
	printf(" ┌─┬─┬─┐\n");
	printf("1│%2c│%2c│%2c│\n", trans[0][0], trans[0][1], trans[0][2]);
	printf(" ├─┼─┼─┤\n");
	printf("2│%2c│%2c│%2c│\n", trans[1][0], trans[1][1], trans[1][2]);
	printf(" ├─┼─┼─┤\n");
	printf("3│%2c│%2c│%2c│\n", trans[2][0], trans[2][1], trans[2][2]);
	printf(" └─┴─┴─┘\n\n");
	printf("원하시는 좌표를 입력하세요. : ( , )");
	gotoxy(31,9);
	scanf("%d", &num1);
	gotoxy(33,9);
	scanf("%d", &num2);*/
}


  • 어째 플레이어가 이기거나 컴퓨터가 이기면 이겼다는 메시지가 계속 나오다가 터지는데 고쳐지지가 않네요 으으

2.3. 장우진

1번 코드


#include <stdio.h>

int main()
{
	int number[5][10];
	int i=0,j;
	for(i=0;i<50;i++) number[0][i]=i;

	printf("한자리 숫자를 아래와 같은 형태로 입력해 주세요.\n");
	printf("o o o o o\no o o o o\no o o o o\no o o o o\no o o o o\n");
	printf("\n");
	for(i=0;i<5;i++) scanf("%d %d %d %d %d",&number[i][0],&number[i][1],&number[i][2],&number[i][3],&number[i][4]);
	printf("\n\n");
	printf("    │\n    │ transpose\n    ▼\n\n");
	for(i=0;i<5;i++) 
	{
		for(j=0;j<5;j++) printf("%2d",number[j][i]);
		printf("\n");
	}
	printf("\n");
	return 0;


1번코드 특별과제


#include <stdio.h>

int main()
{
	int number[100][100];
	int i=0,j;
	int matrix_size;
	for(i=0;i<10000;i++) number[0][i]=i;
	printf("n*n행렬의 크기(행&열의 갯수)를 입력해주세요. : ");
	scanf("%d",&matrix_size);
	printf("한자리 숫자를 %d*%d형태의 행렬로 입력해주세요.\n",matrix_size,matrix_size);
	printf("\n");
	
	for(i=0;i<matrix_size;i++)
	{
		for(j=0;j<matrix_size;j++)
		{
			scanf("%d",&number[i][j]);//행렬의 크기만큼 입력받도록
		}
	}
	
	printf("\n\n");
	for(i=0;i<=matrix_size/2;i++) printf(" ");
	printf("│\n");
	for(i=0;i<=matrix_size/2;i++) printf(" ");
	printf("│ transpose\n");
	for(i=0;i<=matrix_size/2;i++) printf(" ");
	printf("▼\n\n");
	for(i=0;i<matrix_size;i++) 
	{
		for(j=0;j<matrix_size;j++) printf("%2d",number[j][i]);
		printf("\n");
	}
	printf("\n");
	return 0;
}


2번 코드-A.I.포함

#include <stdio.h>
#include <Windows.h>
#include <time.h>

void UserTurn();
void ComputerTurn_Easy();
void ComputerTurn_Hard();

int o_x[3][3];

int main()
{
	int i,finish_game,mode_select,turn_select,total_count=0;
	for(i=0;i<9;i++) o_x[0][i]=0;
	
	while(1)
	{
		printf("tic-tac-toe\n");
		printf("모드를 선택해주세요.(쉬움 : 1,어려움 : 2) : ");
		scanf("%d",&mode_select);
		printf("어느쪽이 먼저 시작하시겠습니까?(1. 당신,2. 컴퓨터) : ");
		scanf("%d",&turn_select);
		if(mode_select==1) printf("쉬움을 선택하셨습니다.\n");
		else if(mode_select==2) printf("어려움을 선택하셨습니다.\n");
		else
		{
			printf("이상한 선택을 하셨습니다.\n3초후 게임이 꺼집니다.\n");
			Sleep(3000);
			return 0;
		}

		if(turn_select==1) printf("먼저 시작합니다.\n");
		else if(turn_select==2) printf("컴퓨터가 먼저 시작합니다.\n");
		else
		{
			printf("이상한 선택을 하셨습니다.\n3초후 게임이 꺼집니다.\n");
			Sleep(3000);
			return 0;
		}
		printf("3초후에 게임 시작합니다.\n");
		printf("3\n");
		Sleep(1000);
		printf("2\n");
		Sleep(1000);
		printf("1\n");
		Sleep(1000);
		printf("start~!");

		system("cls");
		printf("┌─┬─┬─┐\n");
		printf("│%c │%c │%c │\n",o_x[0][0],o_x[0][1],o_x[0][2]);
		printf("├─┼─┼─┤\n");
		printf("│%c │%c │%c │\n",o_x[1][0],o_x[1][1],o_x[1][2]);
		printf("├─┼─┼─┤\n");
		printf("│%c │%c │%c │\n",o_x[2][0],o_x[2][1],o_x[2][2]);
		printf("└─┴─┴─┘\n");
		while(1)//게임 한판
		{
			printf("tic-tac-toe\n");
			if(turn_select==1) 
			{
				UserTurn();
				total_count++;
				turn_select=2;
			}

			system("cls");
			printf("┌─┬─┬─┐\n");
			printf("│%c │%c │%c │\n",o_x[0][0],o_x[0][1],o_x[0][2]);
			printf("├─┼─┼─┤\n");
			printf("│%c │%c │%c │\n",o_x[1][0],o_x[1][1],o_x[1][2]);
			printf("├─┼─┼─┤\n");
			printf("│%c │%c │%c │\n",o_x[2][0],o_x[2][1],o_x[2][2]);
			printf("└─┴─┴─┘\n");
			if((o_x[0][0]=='o'&&o_x[0][1]=='o'&&o_x[0][2]=='o')||(o_x[1][0]=='o'&&o_x[1][1]=='o'&&o_x[1][2]=='o')||(o_x[2][0]=='o'&&o_x[2][1]=='o'&&o_x[2][2]=='o')||(o_x[0][0]=='o'&&o_x[1][0]=='o'&&o_x[2][0]=='o')||(o_x[0][1]=='o'&&o_x[1][1]=='o'&&o_x[2][1]=='o')||(o_x[0][2]=='o'&&o_x[1][2]=='o'&&o_x[2][2]=='o')||(o_x[0][0]=='o'&&o_x[1][1]=='o'&&o_x[2][2]=='o')||(o_x[2][0]=='o'&&o_x[1][1]=='o'&&o_x[0][2]=='o'))
			{
				printf("당신이 이겼습니다. 축하드립니다.\n");
				break;
			}
			else if(total_count==9)
			{
				printf("무승부입니다. 수고하셨습니다.\n");
				break;
			}
			
			if(turn_select==2)
			{
				if(mode_select==1) ComputerTurn_Easy();
				else if(mode_select==2) ComputerTurn_Hard();
				total_count++;
				turn_select=1;
			}
 			system("cls");
			printf("┌─┬─┬─┐\n");
			printf("│%c │%c │%c │\n",o_x[0][0],o_x[0][1],o_x[0][2]);
			printf("├─┼─┼─┤\n");
			printf("│%c │%c │%c │\n",o_x[1][0],o_x[1][1],o_x[1][2]);
			printf("├─┼─┼─┤\n");
			printf("│%c │%c │%c │\n",o_x[2][0],o_x[2][1],o_x[2][2]);
			printf("└─┴─┴─┘\n");
			if((o_x[0][0]=='x'&&o_x[0][1]=='x'&&o_x[0][2]=='x')||(o_x[1][0]=='x'&&o_x[1][1]=='x'&&o_x[1][2]=='x')||(o_x[2][0]=='x'&&o_x[2][1]=='x'&&o_x[2][2]=='x')||(o_x[0][0]=='x'&&o_x[1][0]=='x'&&o_x[2][0]=='x')||(o_x[0][1]=='x'&&o_x[1][1]=='x'&&o_x[2][1]=='x')||(o_x[0][2]=='x'&&o_x[1][2]=='x'&&o_x[2][2]=='x')||(o_x[0][0]=='x'&&o_x[1][1]=='x'&&o_x[2][2]=='x')||(o_x[2][0]=='x'&&o_x[1][1]=='x'&&o_x[0][2]=='x'))
			{
				printf("컴퓨터가 당신을 이겼습니다. 분발하시기바랍니다.\n");
				break;
			}
			else if(total_count==9)
			{
				printf("무승부입니다. 수고하셨습니다.\n");
				break;
			}
		}
		printf("게임을 계속 하시려면 1,그만두시려면 0을 입력하시기 바랍니다. : ");
		scanf("%d",&finish_game);
		if(finish_game==1) 
		{
			system("cls");
			for(i=0;i<9;i++) o_x[0][i]=0;
			total_count=0;	
			turn_select=0;
		}
		else break;
		turn_select=0;
	}
	printf("게임을 종료합니다.\n");
	Sleep(2000);

	return 0;
}


void UserTurn()
{
	int row_number,column_number,select_check;

	printf("당신의 차례입니다. 행과 열을 선택해주세요.\n");
	printf("행을 선택해주세요.(1~3행) : ");
	scanf("%d",&row_number);
	printf("열을 선택해주세요.(1~3열) : ");
	scanf("%d",&column_number);
	printf("선택하신곳이 %d행 %d열이 맞습니까?\n맞으면 1, 틀리면 0을 선택해주세요. : ",row_number,column_number);
	scanf("%d",&select_check);
	row_number-=1;
	column_number-=1;
	if(select_check==1)
	{
		if(o_x[row_number][column_number]=='x'||o_x[row_number][column_number]=='o')
		{
			printf("빈 공간이 아닙니다. 다시선택해주세요\n");
			UserTurn();
		}
		else o_x[row_number][column_number]='o';
	}
	else if(select_check==0) UserTurn();
}	

void ComputerTurn_Easy()
{
	int row_number,column_number;
	srand(time(NULL));
	row_number=rand();
	column_number=rand();
	row_number%=3;
	column_number%=3;
	Sleep(1);
	if(o_x[row_number][column_number]=='x'||o_x[row_number][column_number]=='o') ComputerTurn_Easy();
	else o_x[row_number][column_number]='x';
}

void ComputerTurn_Hard()
{
	int i,j,select_check,loop_out=1;
	select_check=0;
	
	if(o_x[1][1]==0) o_x[1][1]='x';
	else
	{
		for(i=0;i<3;i++) 
		{
			if(loop_out==0) break;
			for(j=0;j<3;j++)
			{
				if(o_x[i][j]=='x'&&o_x[(i+1)%3][j]=='x')//열
				{
					if(o_x[(i+2)%3][j]==0) o_x[(i+2)%3][j]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='x'&&o_x[i][(j+1)%3]=='x')//행
				{
					if(o_x[i][(j+2)%3]==0) o_x[i][(j+2)%3]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='x'&&o_x[(i+1)%3][(j+1)%3]=='x')//대각선
				{
					if(o_x[(i+2)%3][(j+2)%3]==0) o_x[(i+2)%3][(j+2)%3]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='o'&&o_x[(i+1)%3][j]=='o')//열
				{
					if(o_x[(i+2)%3][j]==0) o_x[(i+2)%3][j]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='o'&&o_x[i][(j+1)%3]=='o')//행
				{
					if(o_x[i][(j+2)%3]==0) o_x[i][(j+2)%3]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
				else if(o_x[i][j]=='o'&&o_x[(i+1)%3][(j+1)%3]=='o')//대각선
				{
					if(o_x[(i+2)%3][(j+2)%3]==0) o_x[(i+2)%3][(j+2)%3]='x';
					else continue;
					select_check++;
					loop_out=0;
					break;
				}
			}
		}
		if(select_check==0)//아무것도 아닐때
		{
			ComputerTurn_Easy();
		}
	}
}

2.4. 문태현

과제1번
#include<stdio.h>

int main()
{	
	int i, j;
	int matrix[5][5];

	printf("5행5열의 행렬을 입력하시오\n");
	
	for(i=0;i<5;i++)
	{
		
			scanf("%d %d %d %d %d",&matrix[i][0],&matrix[i][1], &matrix[i][2], &matrix[i][3],&matrix[i][4]);
		 
	}

	printf("transpose\n");

	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{ 
			printf("%d ", matrix[j][i]);
			
		}
		printf("\n");
	}
}
과제2번
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
	int matrix[3][3]={0};
	int y, x, a, b;
	srand((unsigned)time(NULL));
	

	while(1)
	{
		printf("┌─┬─┬─┐\n");
		printf("│%d │%d │%d │\n",matrix[0][0],matrix[0][1],matrix[0][2]);
		printf("├─┼─┼─┤\n");
		printf("│%d │%d │%d │\n",matrix[1][0],matrix[1][1],matrix[1][2]);
		printf("├─┼─┼─┤\n");
		printf("│%d │%d │%d │\n",matrix[2][0],matrix[2][1],matrix[2][2]);
		printf("└─┴─┴─┘\n");
	
	printf("몇행몇열을 선택하시겠습니까\n");
	while(1)
	{
		scanf("%d %d",&x,&y);
		if(matrix[x-1][y-1]==1)
			{printf("비어있는곳을선택하시오\n");
			continue;}
		else if(matrix[x-1][y-1]==2)
			{printf("비어있는곳을선택하시오\n");
			continue;}
		else if(matrix[x-1][y-1]==0)
		{
		printf("%d행 %d열을 선택하셨습니다\n",x,y);
		matrix[x-1][y-1]=1;
		break;
		}		
	}
	while(1)
		{	a=rand()%(3);
			b=rand()%(3);
			if(matrix[a][b]==1)
				continue;
			else if(matrix[a][b]==2)
				continue;
			else if(matrix[a][b]==0)
				matrix[a][b]=2;
				break;
		}
	if((matrix[0][0]==1&&matrix[0][1]==1&&matrix[0][2]==1)||(matrix[1][0]==1&&matrix[1][1]==1&&matrix[1][2]==1)
		||(matrix[2][0]==1&&matrix[2][1]==1&&matrix[2][2]==1)||(matrix[0][0]==1&&matrix[1][0]==1&&matrix[2][0]==1)||
		(matrix[0][1]==1&&matrix[1][1]==1&&matrix[2][1]==1)||(matrix[0][2]==1&&matrix[1][2]==1&&matrix[2][2]==1)||
		(matrix[0][0]==1&&matrix[1][1]==1&&matrix[2][2]==1)||(matrix[2][0]==1&&matrix[1][1]==1&&matrix[0][2]==1))
		{	
			printf("┌─┬─┬─┐\n");
			printf("│%d │%d │%d │\n",matrix[0][0],matrix[0][1],matrix[0][2]);
			printf("├─┼─┼─┤\n");
			printf("│%d │%d │%d │\n",matrix[1][0],matrix[1][1],matrix[1][2]);
			printf("├─┼─┼─┤\n");
			printf("│%d │%d │%d │\n",matrix[2][0],matrix[2][1],matrix[2][2]);
			printf("└─┴─┴─┘\n");
			printf("당신이 이겼습니다\n");
			break;
		}
	else if((matrix[0][0]==2&&matrix[0][1]==2&&matrix[0][2]==2)||(matrix[1][0]==2&&matrix[1][1]==2&&matrix[1][2]==2)
		||(matrix[2][0]==2&&matrix[2][1]==2&&matrix[2][2]==2)||(matrix[0][0]==2&&matrix[1][0]==2&&matrix[2][0]==2)||
		(matrix[0][1]==2&&matrix[1][1]==2&&matrix[2][1]==2)||(matrix[0][2]==2&&matrix[1][2]==2&&matrix[2][2]==2)||
		(matrix[0][0]==2&&matrix[1][1]==2&&matrix[2][2]==2)||(matrix[2][0]==2&&matrix[1][1]==2&&matrix[0][2]==2))
		{
			printf("┌─┬─┬─┐\n");
			printf("│%d │%d │%d │\n",matrix[0][0],matrix[0][1],matrix[0][2]);
			printf("├─┼─┼─┤\n");
			printf("│%d │%d │%d │\n",matrix[1][0],matrix[1][1],matrix[1][2]);
			printf("├─┼─┼─┤\n");
			printf("│%d │%d │%d │\n",matrix[2][0],matrix[2][1],matrix[2][2]);
			printf("└─┴─┴─┘\n");
			printf("컴퓨터가 이겼습니다\n");
			break;	
		}		
		
	
	}
	
return 0;
}

3. 후기

  • 아무 생각 없이 두번째 코드를 짰는데 뭔 문제점이 7개나 튀어나와... 코드 밀기도 힘들고. NXT 하고 과제 하고 어쩌고 하면 시간이 빠듯하다 ㅠㅠ 유재범
    • 그런 당신을 위해 다음주는 휴강. - 최다인
      • 빨리 다 나으시고 새싹 마저 해주세요 어지러워요 ㅠㅠ. - 유재범

도위반
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:53
Processing time 0.0458 sec