1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#include <iostream>
#include <time.h>
#include <conio.h>
int main() {
int bingoMap[25];
int playerInputNum;
int idx1, idx2, tmp;
int rowStar, colStar;
int bingoCount = 0;
bool isDuplicate = true;
srand((unsigned int)time(NULL));
for (int i = 0; i < 25; ++i) {
bingoMap[i] = i + 1;
}
for (int i = 0; i < 100; ++i) {
idx1 = rand() % 25;
idx2 = rand() % 25;
tmp = bingoMap[idx1];
bingoMap[idx1] = bingoMap[idx2];
bingoMap[idx2] = tmp;
}
while (true) {
system("cls");
for (int i = 0; i < 5; ++i) {
for (int j = 0; j < 5; ++j) {
if (bingoMap[i * 5 + j] == INT_MAX) std::cout << "*\t";
else std::cout << bingoMap[i * 5 + j] << "\t";
}
std::cout << std::endl;
}
std::cout << std::endl << "Bingo Count : " << bingoCount << std::endl;
if (bingoCount >= 5) {
std::cout << std::endl << "5줄 빙고 완성 ! " << std::endl;
break;
}
bingoCount = 0;
std::cout << std::endl << "1~25 사이의 숫자를 입력하세요(0 : 종료) : ";
std::cin >> playerInputNum;
if (playerInputNum == 0) break;
if (playerInputNum < 0 || playerInputNum>25) continue;
isDuplicate = true;
for (int i = 0; i < 25; ++i) {
if (playerInputNum == bingoMap[i]) {
bingoMap[i] = INT_MAX;
isDuplicate = false;
}
}
if (isDuplicate) continue;
//가로 세로 빙고 확인
for (int i = 0; i < 5; ++i) {
rowStar = colStar = 0;
for (int j = 0; j < 5; ++j) {
if (bingoMap[i * 5 + j] == INT_MAX) ++rowStar;
if (bingoMap[j * 5 + i] == INT_MAX) ++colStar;
}
if (rowStar == 5) ++bingoCount;
if (colStar == 5) ++bingoCount;
}
//좌측 상단 대각선 빙고 확인
rowStar = 0;
for (int i = 0; i < 25; i += 6) {
if (bingoMap[i] == INT_MAX) ++rowStar;
}
if (rowStar == 5) ++bingoCount;
//우측 상단 대각선 빙고 확인
rowStar = 0;
for (int i = 4; i <= 20; i += 4) {
if (bingoMap[i] == INT_MAX) ++rowStar;
}
if (rowStar == 5) ++bingoCount;
}
std::cout << std::endl << "게임을 종료합니다" << std::endl;
return 0;
}
|
cs |
빙고 게임 전체 코드입니다. 1 ~ 25까지 작성된 5 x 5 맵을 출력하고 사용자가 입력하는 숫자들을 하나씩 지워서 *로 변경합니다. 빙고가 5줄 이상 나오면 게임이 클리어됩니다.
6 번째 라인은 5 x 5 맵을 저장할 배열
7 번째 라인은 사용자가 입력할 숫자를 받을 변수
9 번째 라인은 가로 세로 각각 *의 개수를 카운트해서 저장할 변수
10 번째 라인은 현재까지 빙고 개수를 저장할 변수
11 번째 라인은 이전 값과 중복된 숫자를 입력하였는지 체크하기 위한 변수
나머지 부분은 셔플 알고리즘을 구현한 코드입니다.
- 참고 링크 : [C/C++] 로또 구현 (tistory.com)
system("cls") 함수를 통해 콘솔 창을 정리하고 5x5 배열을 출력합니다.
빙고 개수가 5개 이상이라면 게임을 클리어 합니다. 그렇지 않다면 빙고 개수를 0으로 다시 초기화합니다.
사용자로부터 1 ~ 25 사이 임의의 숫자를 입력받습니다.
0이 입력된다면 프로그램 종료, 0 ~ 25 범위 밖의 숫자를 입력하면 재입력, 이전에 입력했던 값을 또 입력했다면 중복으로 인해 재입력을 처리합니다.
5 x 5 맵에서 가로와 세로의 * 개수를 카운트하여 빙고 줄 개수를 증가시키는 코드입니다.
대각선 빙고를 확인하기 위한 코드입니다. 아래는 5x5 맵의 배열 인덱스를 나타낸 것입니다.
아래를 천천히 확인하며 규칙을 찾기 바랍니다.
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
잘못된 부분이나 개선 사항은 언제나 편하게 댓글로 지적해주세요.
감사합니다.
출처
'C,C++ > 코드정리' 카테고리의 다른 글
[C/C++] 학생 관리 프로그램 만들기(feat. 구조체) (0) | 2022.09.16 |
---|---|
[C/C++] 빙고 게임 AI 대전 (0) | 2022.09.08 |
[C/C++] 숫자 퍼즐 게임 구현 (0) | 2022.09.07 |
[C/C++] 야구게임 구현 (0) | 2022.09.07 |
[C/C++] 로또 구현 (셔플 알고리즘) (0) | 2022.09.07 |
댓글