( ์๋ณธ ) https://blog.naver.com/glass_sh/222643161325
Google Chrome Easter Egg - Dino game
์ธํฐ๋ท์ด ๋๊ธฐ๋ฉด ๋ํ๋๋ ๊ตฌ๊ธ ํฌ๋กฌ์ ์ด์คํฐ์๊ทธ ๊ฒ์์ด๋ค!
ํฌ๋กฌ ์ฃผ์์ฐฝ์ chrome://dino ๋ผ๊ณ ๊ฒ์ํ๋ฉด ํ๋ ์ด ๊ฐ๋ฅํ๋ค.
c++๊ณผ c๋ฅผ ์ด์ฉํ๊ณ , ์๋ ๊ธ์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์๋ค.
โ
#include <iostream>
#include <Windows.h>
#include <conio.h>
using namespace std;
#define PRINT(STR) {cout << STR << endl;}
const int KEY_ESC = 27;
const int KEY_SPACE = 32;
const int MAX_JUMP = 8; // ์ต๋ ์ ํ๋์ด
const int Y_BASE = 15; // ๊ณต๋ฃก์ ์ด๊ธฐ y์ถ
const int Y_COL = 4; // y์ถ ์ถฉ๋๊ธฐ์ค
const int TR_COL = 7; // ๋๋ฌด ์ถฉ๋ x์ถ
const int TR_START = 50; // ๋๋ฌด ์์ฑ ์์น
const int TR_END = -6; // ๋๋ฌด ์ฌ๋ผ์ง๋ ์์น
const int SLEEP = 35; // ๊ฒ์ ๊ฐฑ์ ์ฃผ๊ธฐ
// ํค ์
๋ ฅ ๊ฐ์ง
int GetKey() {
if (_kbhit() != 0) { // ํค๊ฐ ๋๋ ธ์ ๋ 0์ด ์๋ ๊ฐ์ ๋ฐํํจ
return _getch(); // ์ฝ์ ๋ฌธ์ ๋ฐํ
}
return 0;
}
// ์ปค์ ์จ๊ธฐ๊ธฐ ( ๊น๋นก์ ์ ๊ฑฐ, ํฌ๊ธฐ ์๊ฒ)
void CursorSet() {
CONSOLE_CURSOR_INFO cursorInfo = { 0, };
cursorInfo.dwSize = 1;
cursorInfo.bVisible = FALSE;
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo);
}
// ์ปค์ ์์น ์ค์
void SetKeyCursor(int _nX, int _nY) {
COORD cursorPos = { (SHORT)_nX, (SHORT)_nY };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursorPos);
}
๊ฐ์ฅ ๋จผ์ ํค ์ ๋ ฅ๊ฐ์ ๋ฐ๋ ํจ์, ๊น๋นก์ด๋ ์ปค์๋ฅผ ์จ๊ธฐ๋ ํจ์,
๊ทธ๋ฆฌ๊ณ ์ปค์ ์์น ์ค์ ํจ์๊ฐ ํ์ํ๋ค.
โ
// ๊ณต๋ฃก ๊ทธ๋ฆฌ๊ธฐ
void Dino(int Y) {
static bool bFootToggle = false;
SetKeyCursor(0, Y_BASE - Y);
PRINT(" $$$$$");
PRINT(" $$$");
PRINT(" $$");
PRINT("$$$$$");
if(bFootToggle){ PRINT(" $"); }
else{ PRINT(" $"); }
bFootToggle = !bFootToggle;
}
// ๋๋ฌด ๊ทธ๋ฆฌ๊ธฐ
void Tree(int X) {
if (X >= 0) {
SetKeyCursor(X, Y_BASE);
PRINT(" โ ");
SetKeyCursor(X, Y_BASE + 1);
PRINT("โ โ ");
SetKeyCursor(X, Y_BASE + 2);
PRINT("โ โ โ ");
SetKeyCursor(X, Y_BASE + 3);
PRINT(" โ ");
SetKeyCursor(X, Y_BASE + 4);
PRINT(" โ ");
}
else if (X >= -2) {
X = 0;
SetKeyCursor(X, Y_BASE);
PRINT(" โ ");
SetKeyCursor(X, Y_BASE + 1);
PRINT(" โ ");
SetKeyCursor(X, Y_BASE + 2);
PRINT("โ โ ");
SetKeyCursor(X, Y_BASE + 3);
PRINT("โ ");
SetKeyCursor(X, Y_BASE + 4);
PRINT("โ ");
}
else if (X >= -4) {
X = 0;
SetKeyCursor(X, Y_BASE);
PRINT("โ ");
SetKeyCursor(X, Y_BASE + 1);
PRINT("โ ");
SetKeyCursor(X, Y_BASE + 2);
PRINT("โ ");
}
}
// ๋ฐ๋ฅ ๊ทธ๋ฆฌ๊ธฐ
void Floor(int base) {
SetKeyCursor(base, Y_BASE + 5);
PRINT("ใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
กใ
ก");
}
// ์ ์ํ ๊ทธ๋ฆฌ๊ธฐ
void ScorePad(int score) {
SetKeyCursor(20, 0);
cout << "Score : " << score;
}
์์ ํจ์๋ค์ ํ๋ฉด์ ์ถ๋ ฅ๋๋ ์์๋ค!!
๊ณต๋ฃก๊ณผ ๋๋ฌด, ๋ฐ๋ฅ, ์ ์ํ์ ๋ณด์ฌ์ฃผ๋ ์ญํ ์ด๋ค.
โ
// ๊ฒ์ ๊ด๋ฆฌ ํจ์
void GameStart() {
int nScore = 0;
int nKey = -1;
int YPos = 0;
int TreePos = TR_START;
bool IsJumpping = false; // ์ ํ ์ค์ธ๊ฐ
bool IsJumpped = false; // ์ ํํ์ฌ ์ต๊ณ ์ง์ ์ ์ฌ๋๋๊ฐ
bool IsCollision = false; // ๋๋ฌด์ ์ถฉ๋ํ์๋๊ฐ
while (true) {
cout << "[ DINO GAME ]";
ScorePad(nScore);
nKey = GetKey();
switch(nKey) {
case KEY_ESC:
exit(0);
case KEY_SPACE:
IsJumpping = true;
break;
default:
break;
}
// ์ ํ ์ค์ผ ๋
if (IsJumpping) {
if (YPos < MAX_JUMP && IsJumpped == false) { // ์ฌ๋ผ๊ฐ๋ ์ค
YPos++;
}
if (IsJumpped && YPos == 0) { // ์ต๊ณ ์ง์ ๋๋ฌ ํ ์ ํ ๋
IsJumpped = false;
IsJumpping = false;
}
else if (IsJumpped) { // ์ต๊ณ ์ง์ ์ฐ์ ํ ๋ด๋ ค์ฌ๋
YPos--;
cout << "\n\n\n\n\t jump!!!!";
}
else if (YPos == MAX_JUMP) { // ์ต๊ณ ์ง์ ์ฐ์ ๋!
IsJumpped = true;
}
}
// ์ ํ ์ค์ด ์๋ ๋
else {
if (YPos > 0) {
YPos--;
}
}
if (TreePos > TR_END) {
TreePos -= 2;
}
else {
TreePos = TR_START;
}
// ์ถฉ๋
if (TreePos < TR_COL - 1) {
if (YPos<Y_COL - 1 && TreePos>TR_END + 1) {
IsCollision = true;
}
}
Tree(TreePos);
Dino(YPos);
Floor(0);
Sleep(SLEEP);
system("cls");
if (IsCollision) {
cout << endl << endl << "\t -- Game Over --\n";
cout << "\t Score : " << nScore << endl << endl;
system("pause");
return;
}
else {
nScore += 1;
}
}
}
int main() {
while (true) {
CursorSet();
GameStart();
}
}
๋ง์ง๋ง์ผ๋ก ํค๋ณด๋ ์ ๋ ฅ๊ณผ ์ ํ, ์ถฉ๋, mainํจ์ ๋ถ๋ถ์ด๋ค.
โ
[ ์์ฑ๋ณธ ]
๊ณต๋ฃก๊ฒ์^-^!!
๋ด ๊ณต๋ฃก ์ข ์น์กธํ๋ฐ ๊ทธ๋๋ ๊ท์ฌ์์ ๋ง์์ ๋ ๋ค. ์ ํ ๋ถ๋ถ์ด ์ข ํท๊ฐ๋ ธ๋๋ฐ ์ฌ๋ฐ์๋ค
=์ ==์ผ๋ก ์๋ชป์จ์ ์ฒ์์ ๊ณต๋ฃก์ด ๋ง ๋ ์๋ค๋ ๋ค...^^ ๊ฒจ์ฐ ์ฐพ์์ ๊ณ ์นจ
โ
'๐ฉโ๐ป ๊ฐ๋ฐ ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Movie App ๋ง๋ค๊ธฐ (๊ฐ์ธ ํ๋ก์ ํธ) - 1 (0) | 2023.02.20 |
---|---|
[React] Attempted import error: does not contain a default export (0) | 2023.02.20 |
[Git] local ๋ด์ฉ ๋ ์๊ฐ๋ ๊ด์ฐฎ์ ๋ ๊ฐ์ pull ํ๊ธฐ (1) | 2022.11.27 |
[๊ฐ์ฒด์งํฅ์ค๊ณ 5์์น] About SOLID principle (0) | 2022.10.28 |
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ์ด ๊ฐ์ข ์ ๋ฆฌ (0) | 2022.10.20 |