과제로 했던 코드와 비교하며 복습하기.
지역변수 bool 이용과 불값을 이용한 플래그 사용방법 꼭 확인하기.
#include<iostream>
#include<string>
using namespace std;
int main()
{
string bingo[5][5];
string input;
int count = 0;
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
int index = y * 5 + x; //0~24까지 25개배열 전체 지정
cout << "좌표의 이름을 정해주세요.";
cout << "[" <<"X :" << x << "]" << " "<< "["<<"Y :" << y << "] : ";
cin >> input;
bool isChecking = false; //중복검출용 불값 = 거짓 지정
for (int i = 0; i < index; i++) // index = y*5+x = x.y 0.0~4.4 (즉,전체범위)
//전체범위바로이전까지만 포문을돌리는이유는 중복검사는 입력값 바로 이전가지검사하면되기때문
{
int _x = i % 5; //i(0~24/총25개)를 5로나눈 나머지값 01234 01234 01234 01234 01234
int _y = i / 5; //i(0~24/총25개)를 5로나눈 값 00000 11111 22222 33333 44444
//가로 전체 세로 전체 !
if (bingo[_x][_y] == input) //만약 _x축 _y축 중에 입력값과 같은값이있다면
{
cout << "중복" << endl; //중복이라 출력되며
isChecking = true; //체크의 값을 참 으로 바꾼다.
break; //체크값이 참으로 바뀐채로 포문을 빠져나간다.
}
}
if (isChecking) //만약 체크값이면 x값을 -1시키고 다시입력받는다.
{
x--; //y가 -가아니고 x가-인 이유는 출력순서가 x먼저이기때문.
continue;
}
bingo[x][y] = input;
}
}
system("cls");
while (count <3) //반복문 조건 = 카운트(빙고)가3줄 되기전까지 반복 3줄=탈출
{
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
cout << bingo[x][y] << "\t"; // x5 y5 줄사이탭간격의 숫자출력
}
cout << endl; // x축 5자리출력후 줄바꾸기
}
cout << endl;
cout << "현재 빙고 개수 : " << count << endl;
cout << endl;
cout << "입력 : "; // 입력안내 출력
cin >> input; // 입력, 인풋은 스트링이므로 숫자&문자 입력가능.
if (input == "X" || input == "x") //예외처리. 선택된자리는 x처리할것이므로 x문자입력예외처리
{
cout << "다른 문자를 입력해 주세요." << endl;
continue; //안내문출력후 다시입력
}
bool isChecking = false; //위에서 입력때와같은방식으로 불값 지역변수다시선언.
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
if (bingo[x][y] == input) //빙고판의값이 인풋값과 같다면 "X" 문자로 바꾼다.
bingo[x][y] = "X";
isChecking = true; //빙고를 X로바꾸고 불값은 참으로
}
}
if (!isChecking) //만약 참이아니라면(거짓이라면)
{
cout << "중복" << endl; //중복 출력
continue; //다시입력 받기로
}
count = 0; //빙고 카운트를 위한 초기화 . 카운트 조건 시작
for (int y = 0; y < 5; y++) // 가로 카운트
{
int countX = 0; // 가로 카운트 숫자 0 초기화
for (int x = 0; x < 5; x++)
{
if (bingo[x][y] == "X") countX++; // 가로 X갯수 확인
if (countX == 5) count++; // 가로 x가 5개면 빙고1개 카운트
}
}
for (int x = 0; x < 5; x++) // 세로 카운트
{
int countY = 0; // 세로 카운트 숫자 0 초기화
for (int y = 0; y < 5; y++)
{
if (bingo[x][y] == "X") countY++; // 세로 X갯수 확인
if (countY == 5) count++; // 세로 x가 5개면 빙고1개 카운트
}
}
//대각선 카운트
int countZL = 0; //좌-우방향 카운트용 정수 초기화
int countZR = 0;//우-좌방향 카운트용 정수 초기화
for (int i = 0; i < 5; i++)
{
if (bingo[i][i] == "X") countZL++; //좌-우방향은 좌표가 0,0/1.1/2.2/3.3/4.4 같은수
if (countZL == 5) count++; //5개면 빙고 카운트+
if(bingo[i][4-i] == "X") countZR++; //우-좌방향은 좌표가 4.0/3.1/2.2/1.3/0.4
if (countZR == 5) count++; //5개면 빙고 카운트+
}
system("cls");
}
cout << "3빙고 게임 종료." << endl;
return 0;
}
'공부' 카테고리의 다른 글
달팽이 배열 알고리즘 (0) | 2022.10.26 |
---|---|
메모리의 관리(구조/스택프레임/동적할당) (2) | 2022.10.26 |
스트링 활용 빙고 (0) | 2022.10.26 |
숫자 빙고 게임 (0) | 2022.10.24 |
숫자 슬라이드 퍼즐 게임 (0) | 2022.10.23 |
댓글