본문 바로가기

코딩

빙고 ver2(문자열)

입력할 때 실시간으로 중복 검출하는 부분에서 많은 고민이 있었다.

뭔가 코드가 좀 난잡해진 것 같은 기분이다...

#include<iostream>
#include<string>
#include<time.h>
using namespace std;

int main()
{
	string bingo[5][5];	//빙고 배열
	string input; //입력값 변수
	int x = 0, y = 0; //출력 도와줄 변수
	bool isGoob = true; //중복 검출용 변수
	int success = 0, count = 0; //빙고 확인용 변수
	
	//빙고 입력
	while (x < 5 && y < 5) //입력 다되면 while문 종료 조건
	{
		cout << "x : " << x << ", y : " << y << " 칸 입력 -> ";
		cin >> input;

		isGoob = true;

		//중복확인
		for (int y = 0; y < 5; y++)
		{
			for (int x = 0; x < 5; x++)
			{
				if (bingo[x][y] == input)
				{
					cout << "다시 입력" << endl;
					isGoob = false;
				}

			}
		}
		
		//중복검출용 변수 확인
		if (isGoob)
			bingo[x][y] = input;
		else
			continue;

		//반복을 위한 증감식
		if (x != 4)
		{
			x++;
		}
		else
		{
			y++;
			x = 0;
		}		
	}
	cout << "=============================" << endl;	
		

	//3빙고 시 종료조건
	while (success < 3)
	{
		//빙고 출력
		for (int y = 0; y < 5; y++)
		{
			for (int x = 0; x < 5; x++)
			{
				if (bingo[x][y] == "!@#$%")
				{
					cout << "X" << "\t";
				}
				else
				{
					cout << bingo[x][y] << "\t";
				}				
			}
			cout << endl << endl;
		}
		cout << "빙고 개수 : " << success << endl;
		cout << "입력 -> ";
		cin >> input;
		
		//중복입력 체크
		isGoob = false;
		for (int y = 0; y < 5; y++)
		{
			for (int x = 0; x < 5; x++)
			{
				if (bingo[x][y] == input)
				{
					bingo[x][y] = "!@#$%";
					isGoob = true;
				}
			}
		}
		if (!isGoob) //중복 시 출력
		{
			cout << "다시 입력" << endl << endl;
			continue;
		}

		//반복을 위해 success변수 초기화
		success = 0;
		//가로
		for (int y = 0; y < 5; y++)
		{
			count = 0;
			for (int x = 0; x < 5; x++)
			{
				if (bingo[x][y] == "!@#$%")
				{
					count++;
				}
			}
			if (count == 5)
			{
				success++;
			}
		}

		//세로
		for (int x = 0; x < 5; x++)
		{
			count = 0;
			for (int y = 0; y < 5; y++)
			{
				if (bingo[x][y] == "!@#$%")
				{
					count++;
				}
			}
			if (count == 5)
			{
				success++;
			}
		}

		//대각선
		int countL = 0;
		int countR = 0;
		for (int x = 0; x < 5; x++)
		{
			if (bingo[x][x] == "!@#$%")
			{
				countL++;
			}
			if (countL == 5)
			{
				success++;
			}

			if (bingo[4 - x][x] == "!@#$%")
			{
				countR++;
			}
			if (countR == 5)
			{
				success++;
			}
		}		
	}

	cout << success << "빙고 완성!!!!" << endl;
	cout << "프로그램 종료합니다." << endl;
	cin >> input;
}

2.0 ver Patch Note

배열 초기화 및 중복검출 부분 코드 재정립

필요 없는 변수 삭제 및 새로운 변수 추가

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string bingo[5][5];	//빙고 배열
	string input; //입력값 변수	
	bool isGoob = true; //중복 검출용 변수
	int success = 0, count = 0; //빙고 확인용 변수
	
	for (int y = 0; y < 5; y++)
	{
		for (int x = 0; x < 5; x++)
		{
			//중복검출 반복횟수용 변수
			int index = y * 5 + x;

			cout << "x : " << x << ", y : " << y << " -> ";
			cin >> input;
			
			isGoob = true;
			//현재 입력이 될 위치 바로 전까지의 값들과 비교
			for (int i = 0; i < index; i++)
			{
				//(0,0)위치부터 시작하기 위한 변수
				int _x = i % 5;
				int _y = i / 5;

				if (bingo[_x][_y] == input)
				{
					cout << "중복" << endl;
					isGoob = false;
					break;
				}
			}
			//중복일 때 실행
			if (!isGoob)
			{
				x--; //다음 위치로 넘어가지 않게 하려고 감소
				continue;
			}
			//중복이 아니면 그때 초기화
			bingo[x][y] = input;
		}
	}
	
	cout << "=============================" << endl;	
		

	//3빙고 시 종료조건
	while (success < 3)
	{
		//빙고 출력
		for (int y = 0; y < 5; y++)
		{
			for (int x = 0; x < 5; x++)
			{
				if (bingo[x][y] == "!@#$%")
				{
					cout << "X" << "\t";
				}
				else
				{
					cout << bingo[x][y] << "\t";
				}				
			}
			cout << endl << endl;
		}
		cout << "빙고 개수 : " << success << endl;
		cout << "입력 -> ";
		cin >> input;
		cout << "========================================" << endl;
		
		//중복입력 체크
		isGoob = false;
		for (int y = 0; y < 5; y++)
		{
			for (int x = 0; x < 5; x++)
			{
				if (bingo[x][y] == input)
				{
					bingo[x][y] = "!@#$%";
					isGoob = true;
				}
			}
		}
		if (!isGoob) //중복 시 출력
		{
			cout << "다시 입력" << endl << endl;
			continue;
		}

		//반복을 위해 success변수 초기화
		success = 0;
		//가로
		for (int y = 0; y < 5; y++)
		{
			count = 0;
			for (int x = 0; x < 5; x++)
			{
				if (bingo[x][y] == "!@#$%")
				{
					count++;
				}
			}
			if (count == 5)
			{
				success++;
			}
		}

		//세로
		for (int x = 0; x < 5; x++)
		{
			count = 0;
			for (int y = 0; y < 5; y++)
			{
				if (bingo[x][y] == "!@#$%")
				{
					count++;
				}
			}
			if (count == 5)
			{
				success++;
			}
		}

		//대각선
		int countL = 0;
		int countR = 0;
		for (int x = 0; x < 5; x++)
		{
			if (bingo[x][x] == "!@#$%")
			{
				countL++;
			}
			if (countL == 5)
			{
				success++;
			}

			if (bingo[4 - x][x] == "!@#$%")
			{
				countR++;
			}
			if (countR == 5)
			{
				success++;
			}
		}		
	}

	cout << success << "빙고 완성!!!!" << endl;
	cout << "프로그램 종료합니다." << endl;
	cin >> input;
}

'코딩' 카테고리의 다른 글

포인터 별찍기  (0) 2022.10.27
달팽이 배열  (0) 2022.10.27
빙고 게임  (0) 2022.10.25
슬라이드 게임  (0) 2022.10.24
Low High Seven 게임  (0) 2022.10.19