C/C++
- 별찍기 구현
- 포스팅 링크 : [C/C++] 별찍기 구현 (tistory.com)
- 로또 구현
- 셔플 알고리즘에 대해 알게 되었음.
- 포스팅 링크 : [C/C++] 로또 구현 (tistory.com)
- 야구게임 구현
- 사용자의 입력 값을 배열로 받고 해당 값에 대한 예외 처리 등을 하기 위해 처음에는 for문을 사용함.
- 알아보니 for문의 연산 속도는 비교적 느린 편이었음. => for문 대신 바로 배열 인덱스에 접근하는 방식으로 수정함
- for문이 굳이 필요없는 경우 가급적 사용을 줄이자.
- 포스팅 링크 : [C/C++] 야구게임 구현 (tistory.com)
- 숫자 퍼즐 게임 구현
- 기존 강의 코드에서 해결이 불가능한 퍼즐 맵에 대한 수정을 추가하였음.
- 엔터없이 바로 입력이 가능한 _getch() 함수에 대해 처음 알게됨.
- 단순히 사용만 했는데 _getch() 함수에 대해 조금 찾아봐야 할 것 같음.
- 포스팅 링크 : [C/C++] 숫자 퍼즐 게임 구현 (tistory.com)
- 빙고 게임 구현
- 빙고 개수를 카운트 하는 부분을 공식을 적용할 수 있는지 최대한 고민해봄.
- 첫 번째 행과, 첫 번째 열에 대해서만 검사를 시행하면 전체 빙고 개수를 카운트 할 수 있음.
- 이에 따라 최대한 확장이 가능하도록 코드를 작성하기 위해 노력했지만 결과적으로 지저분하고 난해한 코드가 나옴.
- 직접 작성한 코드는 아래 첨부하고 포스팅에는 강사님의 코드를 작성하였음.
- 포스팅 링크 : [C/C++] 빙고 게임 구현 (tistory.com)
커스텀 빙고 게임 코드
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#include <iostream>
#include <time.h>
#include <conio.h>
int main() {
int bingoMap[25];
int starMap[25] = { 0 }; // 값이 1이면 해당 위치의 값을 지운 것이 된다.
int playerNum;
int bingoCount = 0;
int totalbingoCount = 0;
srand((unsigned int)time(NULL));
for (int i = 0; i < 25; ++i) {
bingoMap[i] = i + 1;
}
int idx1, idx2, tmp;
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 (starMap[i * 5 + j] == 1) std::cout << "*\t";
else std::cout << bingoMap[i * 5 + j] << "\t";
}
std::cout << std::endl;
}
std::cout << "1~25 사이의 숫자를 입력하세요(0 : 종료) : ";
std::cin >> playerNum;
if (playerNum == 0) break;
else if (playerNum < 0 || playerNum > 25) {
std::cout << std::endl << "잘못된 숫자를 입력하였습니다." << std::endl << std::endl;
continue;
}
for (int i = 0; i < 25; ++i) {
if (playerNum == bingoMap[i]) {
starMap[i] = 1;
break;
}
}
bingoCount = 0;
totalbingoCount = 0;
// 첫번째 행에 대한 빙고 계산(세로, 대각선)
for (int i = 0; i < 5; ++i) {
if (starMap[i] == 1) {
// 첫번째 행의 첫번째 원소(대각선, 세로 모두 계산)
if (i == 0) {
// 대각선
for (int j = 0; j < 5; ++j) {
if (starMap[j * 6] == 1) {
++bingoCount;
}
}
if (bingoCount == 5) ++totalbingoCount;
bingoCount = 0;
// 세로
for (int j = 0; j < 5; ++j) {
if (starMap[j * 5] == 1) {
++bingoCount;
}
}
if (bingoCount == 5) ++totalbingoCount;
bingoCount = 0;
}
// 첫번째 행의 마지막 원소(대각선, 세로 모두 계산)
else if (i == 4) {
//대각선
for (int j = 1; j < 6; ++j) {
if (starMap[j * 4] == 1) {
++bingoCount;
}
}
if (bingoCount == 5) ++totalbingoCount;
bingoCount = 0;
// 세로
for (int j = 1; j < 6; ++j) {
if (starMap[i * j + (j - 1)] == 1) {
++bingoCount;
}
}
if (bingoCount == 5) ++totalbingoCount;
bingoCount = 0;
}
//첫번째 행의 나머지 원소(세로 계산)
else {
for (int j = i; j < 25; j += 5) {
if (starMap[j]) {
++bingoCount;
}
}
if (bingoCount == 5) ++totalbingoCount;
bingoCount = 0;
}
}
}
for (int i = 0; i <= 20; i += 5) {
for (int j = i; j <= i + 4; ++j) {
if (starMap[j] == 1) {
++bingoCount;
}
}
if (bingoCount == 5) ++totalbingoCount;
bingoCount = 0;
}
std::cout << "현재 빙고 수는 : " << totalbingoCount << std::endl;
if (totalbingoCount >= 5) {
std::cout << "5줄 빙고 완성 !" << std::endl;
break;
}
}
std::cout << std::endl << "게임을 종료합니다." << std::endl;
return 0;
}
|
cs |
이미 다 알고있는 기본 문법을 이용한 구현이었지만 직접 작성하니 생각보다 막히는 부분도 있었고 효율적인 구현을 위해 생각해야 할 점이 많았음.
'TIL' 카테고리의 다른 글
[TIL] 20220913 성장일지 (0) | 2022.09.13 |
---|---|
[TIL] 20220908 성장일지 (0) | 2022.09.08 |
[TIL] 20220906 성장일지 (0) | 2022.09.07 |
[TIL] 20220905 성장일지 (0) | 2022.09.06 |
[TIL] 20220902 성장일지 (0) | 2022.09.02 |
댓글