게임 수학 - 더하기, 빼기 연산자
게임에서 사용하는 더하기 연산자에 대해 알아보고 주의사항을 살펴본다.
언어에서 데미지를 주거나 현재 HP 구현하는 경우 다음과 같이 사용할 수 있다.
int main() {
int hp = 100;
printf("Current HP: %d", hp);
return 0;
}
Current HP: 100
코드의 100 값의 HP 변수로 만들고 캐릭터에게 할당할 수 있게 된다.
플러스(+) 연산자
다음으로 레벨업이 되어 최대 HP 설정하고 싶다면 더하기 연산자를 사용하면 된다.
int main() {
int hp = 100;
int level_hp = 20;
hp += level_hp;
printf("MAX HP: %d", hp);
return 0;
}
MAX HP: 120
한계를 정하지 않고 계속 레벨업하게 된 경우 int 형 타입이 정해진 최댓값을 넘기게 된 경우 문제가 발생한다.
이는 오버플로우 발생으로 생기는 문제인데 살펴보도록 한다.
int main() {
int current_hp = 0x7fffffff; // 2147483647
printf("Current HP: %d\n", current_hp);
int level_hp = 1;
current_hp += level_hp;
printf("Level UP!\n");
printf("Current HP: %d", current_hp);
return 0;
}
Current HP: 2147483647
Level UP!
Current HP: -2147483648
극단적인 상황이지만 int 형의 양수의 정수 끝의 값은 2147483647
이다.
이를 넘기게되면 오버플로우가 발생해 양수의 값이 음수로 변하게 된다.
이러한 현상을 오버플로우 또는 정수 오버플로우라고도 한다.

그리고 플러스 연산자는 앞의 값과 뒤의 값 순서는 상관없다.
예: A + B = B + A
- 10 + 15 = 25
- 15 + 10 = 25
빼기(-) 연산자
빼기 연산자는 앞에서 설명한 현재 HP 코드 예시를 가져다 사용하도록 하겠다.
현재 HP가 피해를 입어서 감소하는 상황이 있다.
int main() {
int hp = 100;
printf("My Current HP: %d\n", hp);
int effect_damage = 15;
printf("Monster Attact!: %d\n", effect_damage);
hp -= effect_damage;
printf("My Current HP: %d", hp);
return 0;
}
My Current HP: 100
Monster Attact!: 15
My Current HP: 85
음수 빼기
음수를 뺀다는 것은 그 수를 더하라는 것과 같다.
예를 들어 "10 - (-7)
"수식과 같이 주어진 경우 본인은 문맥에서 아직 이해하기 어려워 -1 * (-x) = x
계산한다고 생각하고 있다.
예:
- 0 - (-7) = 17
- - (-7) + 10= 17
뺄셈 순서
뺄셈은 덧셈과 다르게 연산 앞 뒤 값을 파악해야한다.
다음과 같은 실수가 발생할 수 있다.
예:
- A - B != B - A
- 10 - 15 = -5
- 15 - 10 = 5
- -5 != 5
참고문헌
