<ALGORITHM>/NOTE
20210120(수)
CodeGrimie
2021. 1. 20. 17:50
삽입 정렬(Insertion Sort)
범위를 늘려가면서 검사하는 것이 특징인 정렬법.
▼ 전체 코드
#include <cstdio>
int Compare(int lhs, int rhs);
void Swap(int* lhs, int* rhs);
void InsertionSwap(int* pArr, int length);
void PrintArray(int* pArr, int length);
int main()
{
int iArr[5] = { 5,4,3,2,1 };
PrintArray(iArr, 5);
InsertionSwap(iArr, 5);
PrintArray(iArr, 5);
return (0);
}
int Compare(int lhs, int rhs)
{
return (lhs - rhs);
}
void Swap(int* lhs, int* rhs)
{
int temp = *lhs;
*lhs = *rhs;
*rhs = temp;
}
void InsertionSwap(int* pArr, int length)
{
for (int i = 1; i < length; i++)
{
for (int j = i; j > 0; j--)
{
if (Compare(pArr[j - 1], pArr[j]) > 0)
Swap(&pArr[j - 1], &pArr[j]);
else
break;
}
}
}
void PrintArray(int* pArr, int length)
{
printf("{ ");
for (int i = 0; i < length; i++)
{
printf("%d ", pArr[i]);
}
printf("}\n");
};
두 점 사이의 거리값
▼ 게임 수학 기초 중의 기초
#include <cmath>
double GetDistance(double x1, double y1, double x2, double y2)
{
return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
게임은 두 점 사이의 거리 값에서 시작해서 두 점 사이의 거리 값으로 끝난다고 해보 과언이 아니다.
우리나라 중학교 의무 교육에서 배우는 삼각 함수가 이렇게 중요하고 쓸모 있는 존재였다니..
몬스터를 피하는 게임
플레이어가 좌표를 하나 입력하고 컴퓨터가 랜덤 한 좌표를 입력해서 피격 유무를 가리는 게임이다.
▼ 작동 모습
랜덤 함수라고는 하지만 똑같은 패턴으로 값을 던지는 걸 발견했다.
이걸 문제를 해결하려면 srand()라는 걸 사용해서 시드(Seed)를 바꿔줘야 한다.
시간문제로 적용시키지는 못했지만
double형 좌표를 배열로 표시하는 데 성공한 것에 의의를 둔다.
▼ 이것저것 시험해본다고 코드는 더럽다.
#include <cstdio>
#include <cstdlib>
#include <clocale>
#include <cmath>
// 좌표 구조체
typedef struct _Point2D {
double x;
double y;
}Point2D;
double GetDistance(Point2D p1, Point2D p2);
int ConvertToInt(double d);
void DrawArray(Point2D p1, Point2D p2);
int main()
{
_wsetlocale(LC_ALL, L"Korean");
Point2D p1 = { 0.0f,0.0f };
Point2D p2 = { 0.0f,0.0f };
double monsterAttackRange = 3.0f;
while (1)
{
wprintf(L"▦▦ 플레이어 턴 ▦▦\n");
wprintf(L"플레이어 좌표 : ");
scanf_s("%lf %lf", &p1.x, &p1.y);
printf("\n");
wprintf(L"▦▦ 몬 스 터 턴 ▦▦\n");
wprintf(L"몬스터가 좌표를 입력합니다.\n");
p2.x = (rand() % 10) * 1.0f;
p2.y = (rand() % 10) * 1.0f;
printf("\n");
double distance = GetDistance(p1, p2);
wprintf(L"▦▦ 결 과 ▦▦\n");
DrawArray(p1, p2);
wprintf(L"◎ 플레이어 좌표(%lf, %lf)\n", p1.x, p1.y);
wprintf(L"● 몬 스 터 좌표(%lf, %lf)\n", p2.x, p2.y);
printf("\n");
wprintf(L"몬스터의 공격범위 : %lf\n", monsterAttackRange);
wprintf(L"몬스터로부터 거리 : %lf\n", distance);
if (distance <= monsterAttackRange)
{
wprintf(L"몬스터에게 공격받았습니다.\n");
break;
}
else
{
printf("\n");
wprintf(L"※ 다시 시도합니다.\n");
}
}
return (0);
}
double GetDistance(Point2D p1, Point2D p2)
{
return sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
}
int ConvertToInt(double d)
{
double temp = 0;
temp = floor(d);
if (d - temp > 0.5)
return (int)(ceil(d));
else if (d - temp == 0)
return (int)(d);
else
return (int)(floor(d));
}
void DrawArray(Point2D p1, Point2D p2)
{
wchar_t iArr[100];
int x1, y1, x2, y2 = 0;
x1 = ConvertToInt(p1.x);
y1 = ConvertToInt(p1.y);
x2 = ConvertToInt(p2.x);
y2 = ConvertToInt(p2.y);
for (int i = 0; i < 100; i++)
{
iArr[i] = L'□';
}
iArr[x1 + y1 * 10] = L'◎';
iArr[x2 + y2 * 10] = L'●';
for (int i = 0; i < 100; i++)
{
if (i > 0 && i % 10 == 0)
printf("\n");
wprintf(L"%c", iArr[i]);
}
printf("\n");
}