반응형
경일게임아카데미 프로그래밍반 28기 4일차 수업과제 (21. 04. 13)
오늘은 C++을 활용하여 볼링게임을 제작해봅시다.
컴퓨터랑 대결하는게 아닌 1인 빙고게임 입니다!
사전조건 :
1. 빙고판에 1 ~ 25 숫자가 무작위로 화면에 나옵니다.
2. 빙고판에 있는 숫자를 사용자가 입력하면 빙고판에 # 마킹으로 변환이 됩니다.
3. 5줄 마킹으로 변한될 떄 빙고 카운트가 올라갑니다.
4. 빙고 카운트가 5일 경우 승리합니다.
함수를 사용한 버전입니다.
#include <iostream>
#include <time.h>
using namespace std;
// 변수 선언
int Bingo_Ary[25]; // 빙고판에 1부터 ~ 25의 숫자를 담을 배열
int Bingo_Count = 0; // 현재 빙고가 완성된 갯수
const int Marking = 'X'; // 사용자가 숫자를 입력했을 떄 마킹하는 변수
// 빙고 배열에 값 삽입
void Init()
{
for (int i = 0; i < 25; i++)
Bingo_Ary[i] = i + 1;
}
// 빙고판 셔플
void Shuffle()
{
// Shuffle 전용 변수 선언
int dest, sour, temp;
// Shuffle
for (int i = 0; i < 25; i++)
{
dest = rand() % 25;
sour = rand() % 25;
temp = Bingo_Ary[dest];
Bingo_Ary[dest] = Bingo_Ary[sour];
Bingo_Ary[sour] = temp;
}
}
// 빙고판 출력
void Show_Bingo_boder()
{
system("cls");
cout << "========== B I N G O ==========" << endl;
cout << Bingo_Count << "개 빙고중!" << endl;
for (int i = 0; i < 25; i++)
{
if (i % 5 == 0) cout << endl;
if (Bingo_Ary[i] == Marking)
cout << (char)Bingo_Ary[i] << '\t';
else
cout << (int) Bingo_Ary[i] << '\t';
}
cout << endl << endl;
}
// 사용자 숫자 입력
int Input_User_Val()
{
// 사용자의 입력 받는 변수 선언
int User_Val;
// 값 입력
cout << "숫자를 입력해주세요 : ";
cin >> User_Val;
return User_Val;
}
// 마킹
void SetMarking(int num)
{
for (int i = 0; i < 25; i++)
{
if (Bingo_Ary[i] == num)
{
Bingo_Ary[i] = Marking;
break;
}
}
}
// 가로, 세로, 대각선 줄 완성
void Bingo_Check()
{
Bingo_Count = 0;
for (int i = 0; i <= 1; i++)
{
// 가로
if (Bingo_Ary[i * 5] == Marking && Bingo_Ary[i * 5 + 1] == Marking &&
Bingo_Ary[i * 5 + 2] == Marking && Bingo_Ary[i * 5 + 3] == Marking &&
Bingo_Ary[i * 5 + 4] == Marking
)
Bingo_Count++;
// 세로
if (Bingo_Ary[i] == Marking && Bingo_Ary[i + 5 * 1] == Marking &&
Bingo_Ary[i + 5 * 2] == Marking && Bingo_Ary[i + 5 * 3] == Marking &&
Bingo_Ary[i + 5 * 4] == Marking
)
Bingo_Count++;
// 오른쪽 아래 대각선 (/)
if (i == 0)
{
if (Bingo_Ary[0] == Marking && Bingo_Ary[6] == Marking &&
Bingo_Ary[12] == Marking && Bingo_Ary[18] == Marking && Bingo_Ary[24] == Marking)
{
Bingo_Count++;
}
}
if (i == 0)
{
// 왼쪽 아래 대각선 (\)
if (Bingo_Ary[4] == Marking && Bingo_Ary[8] == Marking &&
Bingo_Ary[12] == Marking && Bingo_Ary[16] == Marking && Bingo_Ary[20] == Marking)
{
Bingo_Count++;
}
}
}
}
int main()
{
Init();
Shuffle();
while (true)
{
Show_Bingo_boder();
SetMarking(Input_User_Val());
Bingo_Check();
// 승리
if (Bingo_Count >= 5) break;
}
Show_Bingo_boder();
cout << "승리!" << endl;
}
함수를 사용하지 않은 버전입니다.
#include <iostream>
#include <time.h>
using namespace std;
// 변수 선언
int User_Val; // 사용자 값 입력
int Bingo_Ary[25]; // 25개의 배열 빙고판 선언
int Bingo_Count = 0; // 빙고가 된 변수 선언
int dest, sour, temp; // 셔플용 전용 변수 선언
const int Marking = '#'; // 사용자 숫자를 빙고판에 마킹할때 사용하는 변수 선언
int main()
{
// 25개의 배열 빙고판 값 삽입
for (int i = 0; i < 25; i++)
Bingo_Ary[i] = i + 1;
// 빙고판 셔플
for (int i = 0; i < 25; i++)
{
// Shuffle
dest = rand() % 25;
sour = rand() % 25;
temp = Bingo_Ary[dest];
Bingo_Ary[dest] = Bingo_Ary[sour];
Bingo_Ary[sour] = temp;
}
while (true)
{
// 빙고판 출력
system("cls");
cout << "========== B I N G O ==========" << endl;
// 빙고 카운터 출력
cout << Bingo_Count << "개 빙고중!" << endl;
for (int i = 0; i < 25; i++)
{
if (i % 5 == 0) cout << endl;
if (Bingo_Ary[i] == Marking)
cout << (char)Bingo_Ary[i] << '\t';
else
cout << (int)Bingo_Ary[i] << '\t';
}
cout << endl << endl;
// 사용자 값 입력
cout << "숫자를 입력해주세요 : ";
cin >> User_Val;
for (int i = 0; i < 25; i++)
{
if (Bingo_Ary[i] == User_Val)
{
Bingo_Ary[i] = Marking;
break;
}
}
// 가로, 세로, 대각선 줄 완성 체크
Bingo_Count = 0;
for (int i = 0; i < 25; i++)
{
// 가로
if (Bingo_Ary[i * 5] == Marking && Bingo_Ary[i * 5 + 1] == Marking &&
Bingo_Ary[i * 5 + 2] == Marking && Bingo_Ary[i * 5 + 3] == Marking &&
Bingo_Ary[i * 5 + 4] == Marking
)
Bingo_Count++;
// 세로
if (Bingo_Ary[i] == Marking && Bingo_Ary[i + 5 * 1] == Marking &&
Bingo_Ary[i + 5 * 2] == Marking && Bingo_Ary[i + 5 * 3] == Marking &&
Bingo_Ary[i + 5 * 4] == Marking
)
Bingo_Count++;
// 오른쪽 아래 대각선 (/)
if (i == 0)
{
if (Bingo_Ary[0] == Marking && Bingo_Ary[6] == Marking &&
Bingo_Ary[12] == Marking && Bingo_Ary[18] == Marking && Bingo_Ary[24] == Marking)
{
Bingo_Count++;
}
}
if (i == 0)
{
// 왼쪽 아래 대각선 (\)
if (Bingo_Ary[4] == Marking && Bingo_Ary[8] == Marking &&
Bingo_Ary[12] == Marking && Bingo_Ary[16] == Marking && Bingo_Ary[20] == Marking)
{
Bingo_Count++;
}
}
}
if (Bingo_Count >= 5) break;
}
// 게임 종료
system("cls");
cout << "========== B I N G O ==========" << endl;
cout << Bingo_Count << "개 빙고중!" << endl;
for (int i = 0; i < 25; i++)
{
if (i % 5 == 0) cout << endl;
if (Bingo_Ary[i] == Marking)
cout << (char)Bingo_Ary[i] << '\t';
else
cout << (int)Bingo_Ary[i] << '\t';
}
cout << "승리!" <<endl << endl;
}
반응형
'학원 > 경일게임아카데미' 카테고리의 다른 글
7. 다섯번째 수업 과제 [카드게임 제작] (0) | 2022.12.02 |
---|---|
6. 다섯번째 수업 (0) | 2022.12.01 |
4. 네번째 수업 (0) | 2022.11.29 |
3. 세번째 수업 (0) | 2022.11.28 |
2. 두번째 수업 (1) | 2022.11.27 |