Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- rendermonkey
- 셰이더
- 3차원배열
- 배열문제
- python
- 언리얼
- 렌더몽키
- 가변배열
- 공부
- 다중상속
- 이득우언리얼
- C++
- visualstudio2022
- 그림자 효과
- swipe
- 표창던지기
- 파이썬
- 유니티
- 이득우
- 게임만들기
- premake5
- 화살표 함수
- uidesign
- 화살피하기
- 화살표 메서드
- c#
- 비주얼스튜디오
- c++class
- IMGUI
- Unity
Archives
- Today
- Total
신입 개발자 공부 과정
C++로 빙고 게임 만들기 본문
빙고게임을 만들기 위해서~
-번호를 랜덤으로 만들어주고
-0을 눌르면 게임 종료 표시
-번호를 출력해주고
-입력을 하게 해주고
-입력과 번화가 동일할 시에 *표시
-아니면 다시 입력
-숫자가 0~25까지가 아닌 숫자가 들어갔을 경우 다시 입력
-빙고 줄 체크(가로, 세로, 대가선(왼오, 오왼)
Output:
게임 시작 화면

게임 종료 화면

//코드 확인:
더보기
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
srand((unsigned int)time(0));//양의 수로 시간기능을 이용해서 랜덤하게 출력한다
int Random = rand();//변수 Random을 랜덤하게 정의
int Number[25] = {};//Number 배열을 정의하고 25개의 입력칸에 0을 입력한다.
for (int i = 0; i < 25; i++)
{
Number[i] = i + 1; //Number 배열에 1 부터 25까지 수를 차례대로 우선 입력
}
for (int i = 0; i < 100; i++)
{
int Idx1 = rand() % 25;//인덱스1을 25 까지의 랜덤 인덱스를 얻어오고
int Idx2 = rand() % 25;
int Temp = Number[Idx1];//인덱스 셔플
Number[Idx1] = Number[Idx2];
Number[Idx2] = Temp;
}
int Line = 0;//빙고 줄
//---------------------------------------------------------
while (true)//게임에서 반복해서 *을 표시해 주어야 되기 때문
{
system("cls");//화면 지워주기
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (Number[i * 5 + j] == INT_MAX)//만약 빙고 숫자가 INT_MAX값이 면 *로 출력해라
{
cout << "*\t";
}
else
cout << Number[i * 5 + j] << "\t";//세로=i * 가로 개수 5 + 가로=j 로 출력
}
cout << endl;//5개마다 줄 띄워주기
}
cout << "Bingo: " << Line << endl;
if (Line >= 5)//빙고 라인이 5개가 되면
{
cout << "Player Win" << endl;//승리 표시
break;//게임 종료
}
cout << "Input Number(0: Exit): ";//0을 입력하면 게임이 종료 될거라고 출력
int CheckNumber = 0;//입력할 변수를 정의하고
cin >> CheckNumber;//입력을 받게 해준다
if (CheckNumber == 0)//만약 입력 받은 숫자가 0이라면
break;//while문을 벗어나게 된다 = 곧, 게임이 끝나게 된다.
else if (CheckNumber < 1 || CheckNumber > 25)//빙고 게임은 0부터 25의 숫자 범위 안의 수이기에
continue; //입력 받는 값이 0보다 작거나 25보다 크면 안된다
//고로 입력 받은 값이 0보다 작거나 25보다 크면
//다시 실행해라.
bool Check = false;//실행 안되게 false라 하고(조건이 성납하지 않으면 바뀌지 않게 하려고)
for (int i = 0; i < 25; i++)
{
if (Number[i] == CheckNumber)//입력한 값이 배열 값하고 같다면
{
Number[i] = INT_MAX;
Check = true;//(CheckNumber가 맞다면 실행되게 true라고 바꿔준다)
break;//해당 값을 INT_MAX로 바꾸어 표시해 준다
//INT_MAX를 *로 바꾸어주기 위해
}
//이미 입력한 숫자를 다시 입력하지 못하게 반복시킨다
if (!Check)
continue;
}
Line = 0;
for (int i = 0; i < 5; i++)
{
int CheckCount = 0, CheckCount2 = 0;//빙고 가로 줄 카운트 하는 변수
for (int j = 0; j < 5; j++)
{
if (Number[i * 5 + j] == INT_MAX)//*하나씩 CheckCount 가로 줄 체크
++CheckCount;
if (Number[j * 5 + i] == INT_MAX)//*세로 줄
++CheckCount2;
}
if (CheckCount == 5)//CheckCount가 5개면
++Line;//빙고 가로 줄 1개 ++
if (CheckCount2 == 5)//CheckCount가 5개면
++Line;//빙고 가로 줄 1개 ++
}
//
int CheckCount3 = 0;//대각선 줄 체크 왼위->오아래
for (int i = 0; i < 25; i += 6)
{
if(Number[i] == INT_MAX)
CheckCount3++;
}
if (CheckCount3 == 5)//CheckCount가 5개면
++Line;//빙고 가로 줄 1개 ++
//
int CheckCount4 = 0;//대각선 줄 체크 오위->왼아래
for (int i = 4; i <= 20; i += 4)
{
if (Number[i] == INT_MAX)
++CheckCount4;
}
if (CheckCount4 == 5)//CheckCount가 5개면
++Line;//빙고 가로 줄 1개 ++
}
return 0;
}
AI랑 플레이 하는 빙고(easy mode)
코드 확인:
더보기
#include <iostream>
#include <time.h>
using namespace std;
//*****************
//*****************
//빙고 게임 with AI
//****************
//****************
enum class AIType
{
None,
Easy,
Hard,
Max
};
int main()
{
srand((unsigned int)time(0));//양의 수로 시간기능을 이용해서 랜덤하게 출력한다
int Random = rand();//변수 Random을 랜덤하게 정의
int AIState = 0;//*************난이도 변수
while (true)
{
system("cls");
cout << "1.Easy Mode" << endl;
cout << "2.Hard Mode" << endl;
cout << "Choose the Game Mode: ";
cin >> AIState;
//AI 모드 숫자가 1~2가 나오면 break
if (AIState > (int)AIType::None &&
AIState < (int)AIType::Max)
break;
}
int Number[25] = {};//Number 배열을 정의하고 25개의 입력칸에 0을 입력한다.
int AINumber[25] = {};//**********AI 배열 만들어주고
for (int i = 0; i < 25; i++)
{
Number[i] = i + 1; //Number 배열에 1 부터 25까지 수를 차례대로 우선 입력
AINumber[i] = i + 1;//***********
}
for (int i = 0; i < 100; i++)
{
int Idx1 = rand() % 25;//인덱스1을 25 까지의 랜덤 인덱스를 얻어오고
int Idx2 = rand() % 25;
int Temp = Number[Idx1];//인덱스 셔플
Number[Idx1] = Number[Idx2];
Number[Idx2] = Temp;
Idx1 = rand() % 25;//***************
Idx2 = rand() % 25;
Temp = AINumber[Idx1];//***************
AINumber[Idx1] = AINumber[Idx2];
AINumber[Idx2] = Temp;
}
int Line = 0;//빙고 줄
int AILine = 0;//**************
//***************인공지능이 선택하기 위해 선택되지 않은(*로 안바뀐) 값을 저장 할 배열 만들기
int SelectArray[25] = {};
int SelectCount = 0;//***************선택할 수 있는 숫자가 몇개인지를 저장할 변수
//---------------------------------------------------------
while (true)//게임에서 반복해서 *을 표시해 주어야 되기 때문
{
system("cls");//화면 지워주기
cout << "=========================Player=======================================AI===================" << endl;
//빙고판 만들기
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (Number[i * 5 + j] == INT_MAX)//만약 빙고 숫자가 INT_MAX값이 면 *로 출력해라
{
cout << "*\t";
}
else
cout << Number[i * 5 + j] << "\t";//세로=i * 가로 개수 5 + 가로=j 로 출력
}
cout << "\t||\t";
//AI 빙고판
for (int j = 0; j < 5; j++)
{
cout << "*\t";//빙고판 안보이게 하기
//if (AINumber[i * 5 + j] == INT_MAX)//만약 빙고 숫자가 INT_MAX값이 면 *로 출력해라
//{
// cout << "*\t";
//}
//else
// cout << AINumber[i * 5 + j] << "\t";//세로=i * 가로 개수 5 + 가로=j 로 출력
}
cout << endl;//5개마다 줄 띄워주기
}
//빙고 수 확인 출력
cout << "Bingo: " << Line<<"\t\t\t\t\t\t"<<"Bingo: "<<AILine << endl;
if (Line >= 5)//빙고 라인이 5개가 되면
{
cout << "Player Win" << endl;//승리 표시
break;//게임 종료
}
else if (AILine >= 5)//***********************
{
cout << "AI Win" << endl;//*************패배 표시
break;
}
else if (AILine >= 5 && Line >= 5)
cout << "Draw" << endl;//***********무승부
//종료하려면
cout << "Input Number(0: Exit): ";//0을 입력하면 게임이 종료 될거라고 출력
//입력받기
int CheckNumber = 0;//입력할 변수를 정의하고
cin >> CheckNumber;//입력을 받게 해준다
if (CheckNumber == 0)//만약 입력 받은 숫자가 0이라면
break;//while문을 벗어나게 된다 = 곧, 게임이 끝나게 된다.
else if (CheckNumber < 1 || CheckNumber > 25)//빙고 게임은 0부터 25의 숫자 범위 안의 수이기에
continue; //입력 받는 값이 0보다 작거나 25보다 크면 안된다
//고로 입력 받은 값이 0보다 작거나 25보다 크면
//다시 실행해라.
bool Check = false;//실행 안되게 false라 하고(조건이 성납하지 않으면 바뀌지 않게 하려고)
//맞춘 숫자 *로 바꾸기
for (int i = 0; i < 25; i++)
{
if (Number[i] == CheckNumber)//입력한 값이 배열 값하고 같다면
{
Number[i] = INT_MAX;
Check = true;//(CheckNumber가 맞다면 실행되게 true라고 바꿔준다)
break;//해당 값을 INT_MAX로 바꾸어 표시해 준다
//INT_MAX를 *로 바꾸어주기 위해
}
//이미 입력한 숫자를 다시 입력하지 못하게 반복시킨다
if (!Check)
continue;
}
//****************AI 숫자 *로 바꾸기
for (int i = 0; i < 25; ++i)
{
if (AINumber[i] == CheckNumber)
{
AINumber[i] = INT_MAX;
break;
}
}
//****************위에서 플레이어가 선택했으니
//****************AI차례를 만들어준다
switch ((AIType)AIState)
{
case AIType::Easy:
//입력안된 값을 찾아서 배열에 넣어준다.
SelectCount = 0;
for (int i = 0; i < 25; i++)
{
if (AINumber[i] != INT_MAX)//AI 빙고판에 * 표시가 없다면
{
SelectArray[SelectCount] = AINumber[i];
++SelectCount;
}
}
CheckNumber = SelectArray[rand() % SelectCount];
break;
case AIType::Hard:
break;
default:
break;
}
//***************
cout << "AI Select: " << CheckNumber << endl;
/*system("pause");*/
//*****************AI가 선택한 숫자도 *로 바꾸어준다.
for (int i = 0; i < 25; i++)
{
if (Number[i] == CheckNumber)
{
Number[i] = INT_MAX;
break;
}
}
for (int i = 0; i < 25; i++)
{
if (AINumber[i] == CheckNumber)
{
AINumber[i] = INT_MAX;
break;
}
}
//빙고 라인 만들기
Line = 0;
AILine = 0; //****************
for (int i = 0; i < 5; i++)
{
int CheckCount = 0, CheckCount2 = 0;//빙고 가로 줄 카운트 하는 변수
int AICheckCount = 0, AICheckCount2 = 0;
for (int j = 0; j < 5; j++)
{
if (Number[i * 5 + j] == INT_MAX)//*하나씩 CheckCount 가로 줄 체크
++CheckCount;
if (Number[j * 5 + i] == INT_MAX)//*세로 줄
++CheckCount2;
if (AINumber[i * 5 + j] == INT_MAX)//*******AI 가로 체크
++AICheckCount;
if (AINumber[j * 5 + i] == INT_MAX)//*******AI 세로 체크
++AICheckCount2;
}
if (CheckCount == 5)//CheckCount가 5개면
++Line;//빙고 가로 줄 1개 ++
if (CheckCount2 == 5)//CheckCount가 5개면
++Line;//빙고 가로 줄 1개 ++
if (AICheckCount == 5)//**********
++AILine;
if (AICheckCount2 == 5)//**********
++AILine;
}
//
int CheckCount3 = 0, AICheckCount3 = 0;//대각선 줄 체크 왼위->오아래
for (int i = 0; i < 25; i += 6)
{
if (Number[i] == INT_MAX)
CheckCount3++;
if (AINumber[i] == INT_MAX)//********************
AICheckCount3++;
}
if (CheckCount3 == 5)//CheckCount가 5개면
++Line;//빙고 가로 줄 1개 ++
if (AICheckCount3 == 5)//**************
++AILine;
int CheckCount4 = 0, AICheckCount4 = 0;//대각선 줄 체크 오위->왼아래
for (int i = 4; i <= 20; i += 4)
{
if (Number[i] == INT_MAX)
++CheckCount4;
if (AINumber[i] == INT_MAX)//****************
++AICheckCount4;
}
if (CheckCount4 == 5)//CheckCount가 5개면
++Line;//빙고 가로 줄 1개 ++
if (AICheckCount4 == 5)//*************
++AILine;
}
return 0;
}
AI랑 플레이 하는 빙고(hard mode) // 진행중
코드 확인:
'C++ > 공부' 카테고리의 다른 글
코테용 알고리즘 정리해보기 (0) | 2023.05.09 |
---|---|
코테용 알고리즘 정리해보기 (0) | 2023.05.09 |
알고리즘 (0) | 2023.05.01 |
자료구조 정리 (0) | 2023.05.01 |
IMGUI - Docking버전 사용법 (0) | 2023.01.11 |