저번에 올렸던 소스코드에 시작메뉴와 충돌처리, 결과창 등을 추가하여
만들어 보았습니다.
#define _CRT_SECURE_NO_WARNINGS
#define TreeHigh 19
#define DinoY 11
#define TreeDistance 80
#define CRT_SECURE_NO_WARNINGS
#define CLS system("cls")
#include <Stdio.h>
#include <windows.h>
#include <stdbool.h>
void SetConsoleView(); // 콘솔창 크기 조정하기
void gotoXY(int x, int y); // X좌표와 Y좌표 조정하기
void DinoSour(int Dinoleg); // 공룡그림 그리기
void Tree1(int TreePosition); // 첫번째 나무 모양 그리기
void Tree2(int TreePostin1); // 두번째 나무 모양 그리기
char KeyInput(); // 문자를 받는 함수
int DinolegsSwing = true; // 공룡의 다리 초깃값을 true로 놓고 함수에 대입
int main(void)
{
int TreeX2_Flag = 0; // 두번째 트리가 나오는 주기 설정
int DinosourHigh = DinoY; // 공룡의 높이를 11로 지정
int TreeX1 = TreeDistance; //첫번째 나무의 거리를 80으로 지정
int TreeX2 = TreeDistance; // 두번째 나무의 거리를 80으로 지정
int Jumping = false; // 처음 점프의 값을 false를 두고 시작
int Bottom = true; // 공룡이 바닥에 있어야만 점프를 뛸 수 있음
int JumpingLevel = false; // 점프의 최댓값에 다했다면 내려가기 위한 변수
int StartOrder = 0;
int UsersOrder = 0;
int Score = 0;
int End = 0;
SetConsoleView();
// 게임 메뉴 화면
if (StartOrder == 0)
{
printf(" ============================================================================\n");
printf(" | |\n");
printf(" | ==== ========== || \ || ========== |\n");
printf(" | || \ | | || \ || / \ |\n");
printf(" | || \ | | || \ || / \ |\n");
printf(" | || | | | || \ || | | |\n");
printf(" | || | | | || \ || | | |\n");
printf(" | || / | | || \ || \ / |\n");
printf(" | || / | | || \ || \ / |\n");
printf(" | ==== ========== || \ || ========= |\n");
printf(" | |\n");
printf(" | ======= =========== ===== ===== ====== |\n");
printf(" | / / \ | | | \ |\n");
printf(" | | / \ | | | | |\n");
printf(" | \ | | | | | / |\n");
printf(" | ======= | | | | |====== |\n");
printf(" | | \ / | | | \ |\n");
printf(" | / \ / \ / | \ |\n");
printf(" | / ========== \ / | \ |\n");
printf(" | ======== ======== |\n");
printf(" ============================================================================\n");
}
// 게임 선택 메뉴
printf(" 1. 플 레 이 2. 게 임 종 료 \n");
printf(" ");
Start:
scanf("%d", &UsersOrder);
// 만약 사용자가 2를 입력했다면 게임을 종료
if (UsersOrder == 2)
{
printf("게임을 종료합니다.\n");
exit(1);
}
// 사용자가 1을 입력헀다면 게임을 시작
if (UsersOrder == 1)
{
printf("로 딩 중....");
Sleep(1000); // 게임을 시작하기 전 콘솔을 잠깐 멈춤
CLS;
while (true)
{
Score++; // 점수를 위한 변수
if (KeyInput() == 'w'&&Bottom) //만약 w를 입력하고 공룡이 바닥에 위치한다면 점프 가능
{
Bottom = false; //점프를 한다면 bottom이 거짓으로 변한다.
Jumping = true;
}
if (Jumping)
{
DinosourHigh--; // 점프할때 y좌표 감소
}
if (DinosourHigh == 2) //만약 공룡이 일정 높이가 된다면 내려가야함 (공룡 높이의 한계)
{
JumpingLevel = true;
}
if (JumpingLevel)
{
DinosourHigh = DinoY; // 점프 높이를 DinoY(11)로 초기화
}
if (DinosourHigh == 11) // 만약 공룡이 원 위치로 돌아왔다면 다시 키입력을 받기 위한 변수들을 초기화
{
JumpingLevel = false;
Jumping = false;
Bottom = true;
}
TreeX1 -= 2; // 1번째 나무를 움직이는 변수
if (TreeX1 <= 3)
{
TreeX1 = TreeDistance; // 1번째 나무의 x좌표가 3보다 작아진다면 나무의 위치 초기화
}
if (TreeX1 == 40)
{
TreeX2_Flag += 1;; // 1번째 트리의 위치가 중간에 왔다면 2번째 트리 출력을 위한 변수 초기화
}
if (TreeX2_Flag == 1)
{
Tree2(TreeX2);
TreeX2 -= 2;
}
if (TreeX2 <= 3)
{
TreeX2 = TreeDistance; // 2번째 트리의 x좌표가 3보다 작아진다면 위치 초기화
TreeX2_Flag = 0;
}
if (TreeX1 == 7 || TreeX1 == 8) // 만약 1번째 트리의 x좌표가 7 또는 8이라면 (공룡 주위)
{
if (DinosourHigh == 11 || DinosourHigh == 10 || DinosourHigh == 9) // 공룡이 점프를 하지 않거나 조건보다 작게 점프했을때 (충돌처리)
{
End++; // 게임 종료를 위한 변수 증가
CLS;
break;
}
}
if (TreeX2 == 7 || TreeX2 == 8) //2번째 트리의 x좌표가 7 혹은 8이 되었을때 (공룡 주위)
{
if (DinosourHigh == 11 || DinosourHigh == 10 || DinosourHigh == 9) // 공룡이 점프를 하지 않거나 조건보다 작게 점프했을떄 (충돌처리)
{
End++; // 게임 종료를 위한 변수 증가
CLS;
break;
}
}
Tree1(TreeX1);
DinoSour(DinosourHigh);
Sleep(100);
CLS;
}
}
else //UsersOrder가 올바르게 입력되지 않았을 경우
{
printf("올바른 숫자를 입력하세요");
goto Start; //69번째 Start: 로 이동하여 입력을 다시 받음
}
if (End == 1) // 게임이 끝났을 경우
{
printf("\n\n");
printf(" =======================================================================================\n");
printf(" | ========= ====== ======= ====== ========= |\n");
printf(" | / / / \ / | | |\n");
printf(" | | / / \ | | | |\n");
printf(" | \ / | | | / | |\n");
printf(" | ========= | | | | / |========= |\n");
printf(" | | | \ / |===== | |\n");
printf(" | | \ \ / |\ | |\n");
printf(" | / \ ====== | \ | |\n");
printf(" | ======= ======= ========== |\n");
printf(" | |\n");
printf(" | |\n");
printf(" | |\n");
printf(" | 당신의 점수는 ? : %d |\n", Score);
printf(" | |\n");
printf(" | |\n");
printf(" =======================================================================================\n");
sleep(100);
}
}
void DinoSour(int DinoHeight) // 공룡을 나타내는 함수
{
gotoXY(0, DinoHeight);
{
printf(" $$$$$$$ \n");
printf(" $$ $$$$$ \n");
printf(" $$$$$$$$ \n");
printf("$ $$$ \n");
printf("$$ $$$$$$ \n");
printf("$$$ $$$$$ \n");
printf(" $$ $$$$$$$$$ \n");
printf(" $$$$$$$$$$$ \n");
printf(" $$$$$$$$$ \n");
printf(" $$$$$$$ \n");
if (DinolegsSwing) // 공룡 발을 움직이는 조건
{
printf(" $ $$$\n");
printf(" $$ ");
DinolegsSwing = false;
}
else
{
printf(" $$$ $ \n");
printf(" $$ ");
DinolegsSwing = true;
}
}
}
void SetConsoleView()
{
system("mode con cols=100 lines=25"); // 콘솔창을 가로 100 세로 25로 설정
system("title Google DinoSour Game - KBH"); // 콘솔창 제목을 정함
}
void gotoXY(int x, int y) // 사물의 x좌표와 y좌표를 나타내는 함수
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void Tree1(int TreePosition) //첫번째 트리
{
gotoXY(TreePosition, TreeHigh);
printf(" * ");
gotoXY(TreePosition, TreeHigh + 1);
printf(" *** ");
gotoXY(TreePosition, TreeHigh + 2);
printf("*****");
gotoXY(TreePosition, TreeHigh + 3);
printf(" * ");
gotoXY(TreePosition, TreeHigh + 4);
printf(" * ");
}
void Tree2(int TreePostin1) // 두번째 트리
{
gotoXY(TreePostin1, TreeHigh);
printf(" * ");
gotoXY(TreePostin1, TreeHigh + 1);
printf("*******");
gotoXY(TreePostin1, TreeHigh + 2);
printf(" *** ");
gotoXY(TreePostin1, TreeHigh + 3);
printf(" *** ");
gotoXY(TreePostin1, TreeHigh + 4);
printf(" *** ");
}
char KeyInput() // 키 입력을 받는 함수
{
if (kbhit() != 0)
{
return getch();
}
}
결과는 이렇습니다.
만들때는 분명 재밌었는데 다 만들고 나니 아쉬움이 많이 남습니다.
예를 들자면 소스 코드가 비주얼 스튜디오에서는 오류가 생기지만
DEV C++에서는 잘 돌아간다던지 소스코드를 더 간단하고 다른 사람 눈에도 잘 들어오게
쓸 수는 없었는지 그런 점들이 아쉬운거 같습니다.
더 열심히 해야겠습니다.
마지막으로 공룡게임을 첨부해놓겠습니다.
'C언어' 카테고리의 다른 글
C언어 공룡게임 만들기 (0) | 2020.05.18 |
---|---|
C언어 동적 메모리 할당 (0) | 2020.05.12 |
C언어 파일 입출력 (0) | 2020.05.10 |
코드업 기초 100제 완성! (0) | 2020.05.09 |