실제 게임은 조건문으로 만든다
ex) Hp가 0이면 -> 사망 애니메이션을 띄운다.
물건을 사려고 할 때 돈이 모자르면 -> 경고창을 띄운다.
물건을 사려고 할 때 돈이 있다면 -> 인벤토리로 물건을 옮긴다.
여기서 Hp와 돈은 명사 => 변수 => 메모리영역 => 램의 x위치에서 x크기로 존재하는 영역
메모리영역을 검사해서 참이면 실행코드를 실행시키고 참이 아니라면 실행코드를 실행시키지 않는다.
int Hp = 100;
if (Hp /*메모리 영역*/)
{
// 플레이어는 살아있다.
// 실행코드
}
if문은 함수의 실행 메모리 내에서만 사용할 수 있다.
= 실행될 수 있는 함수의 중괄호{ } 안에서만 쓸 수 있다.
전역에는 메모리영역이 없다.
보통 비교연산자와 많이 사용된다.
int Hp = 100;
// 죽음에 대해서 조건을 잡을 때
if (0 >= Hp /*메모리 영역*/)
{
// 플레이어는 살아있다.
// 실행코드
}
if (Hp += 10, 0 >= Hp)
{
}
조건을 연계할 때 사용
// 조건을 연계해야 할 때 else if 사용
// Hp가 100 이상이면 정상
// Hp가 99~50 사이라면 부상
// Hp가 49~10 사이라면 중상
// Hp가 10~1 사이라면 사망 직전
// Hp가 0 이하 사망
if (Hp >= 100)
{
// 정상
}
// 위 조건이 false라면
else if (Hp >= 50)
{
// 부상
}
else if (Hp >= 10)
{
// 중상
}
else if (Hp >= 1)
{
// 사망 직전
}
// if를 포함한 모든 조건이 전부 다 실패했다면 else로 들어감
else
{
// 사망
}
우리반 코딩 스탠다드
- 전역변수와 지역변수 이름 무조건 다르게 하기. ex) GlobalA, LocalA
- 무조건 초기값을 설정한다.
- 함수의 인자에는 앞에 언더바
_
를 붙인다.- 포인터를 초기화할 때 0을 사용하지 않는다.
- 경로 및 함수 변수 한글 절대 금지
- 바탕화면에 프로젝트 절대 금지 있으면 평가에 반영하겠음
- 중괄호 위치 신경 안 씀, 중괄호 생략은 X (한줄로치는거 X)
if (A == 10){
}
else {
}
int A = 10;
switch (A) {
case 10:
break;
default:
break;
}
switch문에서 break
의 의미는 탈출이다.
break는 꼭 써야하는 건 X. 상황에 맞춰서 break를 사용해야 한다.
코드 | 에러 |
---|---|
![]() | ![]() |
중괄호 { }를 사용해서 해결할 수 있다.
switch문은 조건에서 같다==
의 비교밖에 안 된다.
"메모리 == 상수" 인지만 비교할 수 있다.
case 상수A:
: "조건이 상수A라면" 이라는 뜻
case 뒤에 상수만 올 수 있다.
char ch = 'A';
switch (ch) {
case 'A': // 가능
break;
default:
break;
}
case 뒤에 모든 변수 불가능.
switch (ch) {
case 'A':
break;
case 'a':
break;
default:
break;
}
1바이트 문자형 char
''
안에서 초기화해서 표현해야 한다.
문자형 상수표현식
char Ch = 'A';
// 내가 일일이 원소를 넣어줘야 한다.
int Arr[5] = { 10, 20, 30, 40, 10 };
//생략하면 나머지를 0으로 채운다.
int Arr[5] = { 10, }; // 10, 0, 0, 0, 0
int Arr[5] = { }; // 0, 0, 0, 0, 0
'A'; // <- 문자 상수표현식
"AAAAAAA"; // <- 문자열 상수표현식
문자열은 예외가 많다.
char String0[5] = "AAAA"; //{ 'A', 'A' , 'A' , 'A' , 0 }
char String1[5] = { 'A', 'A' , 'A' , 'A' , 'A' }; //이렇게 할 필요 없음
문자열을 잘 사용(자르거나 붙이거나 다른 문자로 치환하거나)하는 능력은 기본기
putchar('A'); //글자 1 개를 출력할 수 있는 함수.
Value += 10; // Value = Value + 10 과 같음
Value -= 1;
void PlusSub(int& _left, int _right) {
_left = _left + _right;
}
int Value = 0;
int Result = 0;
Result = ++Value; // Value : 1, Result : 1
// 전위 증감 함수 만들어보기
int PPFirst(int& _Value) {
_Value = _Value + 1;
return _Value;
}
int Value = 0;
int Result = 0;
Result = Value++; // Value : 1, Result : 0
// 후위 증감 함수 만들어보기
int PPBack(int& _Value) {
int Result = _Value;
_Value = _Value + 1;
return Result;
}
while(메모리영역)문은 메모리영역의 조건이 true라면 실행코드를 1번 실행하고 다시 조건문으로 돌아간다. 조건문 > 실행문 > 조건문 > 실행문 ... 순서
while(메모리영역) 조건문 {
실행코드
}
아래 코드는 조건이 항상 true이기때문에 'A'를 무한히 출력하는 코드이다.
while(true) {
putchar('A');
}
다음과 같이 변수를 썼을 때 메모리영역이 거짓이라면 while문을 빠져나온다.
int Count = 5;
while (Count) {
putchar('A');
Count = Count - 1;
}
이것도 가능하긴 하다.
,
로 여러가지 구분 가능.
while (Count = Count - 1, Count) {
}
char String0[5] = "AAAA";
char String1[5] = { 'A', 'A' , 'A' , 'A' , 'A' };
int Count = 0;
while (String0[Count]) {
putchar(static_cast<int>(String0[Count]));
Count = Count + 1;
}
#include <iostream>
//함수의 인자로 정적배열을 쓸 수 없음
//정적배열 => 상수로 크기가 정해진 배열 ex) int Arr[10]
//그래서 포인터로 받을 수밖에 없는데 그럼 크기를 알 수 없음
void MyPrintf(char* _Ptr) {
int Count = 0;
//char* CurPtr = _Ptr + 0;
//char CurCh = *(_Ptr + 0);
//char CurCh = _Ptr[0];
while (_Ptr[Count]) {
char ch = _Ptr[Count];
putchar(ch);
Count = Count + 1;
}
}
int main()
{
char String1[5] = "ABCD";
MyPrintf(String1);
return 0;
}
실행문 > 조건문 > 실행문 > 조건문 ... 순서.
while문과 첫실행순서만 바뀐느낌.
어떤 실행코드든 최초에 1번은 실행되기를 원한다면 do while문을 사용한다.
do {
} while (true);
for 치고 > tab, tab 하면 이렇게 나온다. size_t는 나중에.
for (size_t i = 0; i < length; i++) { }
for (
int i = 0; // 초기화문
i < 10; // 조건문
i++ // 증감문
)
{
// 실행코드
}
for(; true;){
putchar('A');
}
//또는
for(;;){
putchar('A');
}
for문이나 while문 등 반복문 안에서 break하면 즉시 반복문을 종료한다.
int Count = 0;
while (true) {
++Count;
if (10 < Count) {
break;
}
}
int Hp = 100;
for (int i = 0; i < 5; i++) {
Hp -= 80;
if (Hp <= 0) {
break;
}
}
반복문에서 continue를 만나면 다시 조건문이나 증감문으로 바로 이동한다.
for (int i = 0; i < 10; i++) {
// 짝수일 때만 뭔가를 하고 싶을 때
// 홀수이면 바로 continue -> 곧바로 증감문으로 이동
if (i % 2 == 1) {
continue;
}
// 짝수일 때
int a = i;
}
int Value = 0;
while (Value < 100) { //0부터 99까지 숫자
++Value;
//짝수가 아니면 continue
if (Value % 2 != 0) {
//바로 조건문으로 이동
continue;
}
//짝수일 때
int a = Value;
}
printf는 C에서 사용하던 출력 함수다. 내부 내용이 C스타일로 짜여져 있다.
extern "C"
: 이부분을 컴파일 C스타일로 컴파일 해줘.inline
: 치환(해줄 수 있니?라는 느낌). 컴파일러의 판단하에 이 함수의 내용을 그대로 복사해서 넣을 수 있다면 이 함수가 실행된 위치에 코드를 복사하고 실행시킴. (가장 빠른 프로그램은 main에 모든 코드를 집어넣은 프로그램이다라는 농담이 있다고 함)int
: 리턴값__cdecl
printf_s
: 이름const char* _Format,
...
#include <iostream>
int StringCount(char* _Ptr) {
int Count = 0;
while (*(_Ptr + Count)) { // *(_Ptr + Count) == _Ptr[Count]
Count++;
}
return Count;
}
int StringReverse(char* _Ptr) {
int Length = StringCount(_Ptr);
int HalfLength = Length / 2;
for (int i = 0; i < HalfLength; i++) {
char tmp = _Ptr[i];
_Ptr[i] = _Ptr[Length - i - 1];
_Ptr[Length - i - 1] = tmp;
}
return 0;
}
int main()
{
{
char Arr[10] = "123456789";
int Result = StringCount(Arr); // Result에 문자열의 글자 수가 나오도록(마지막 0 제외)
int a = 0;
}
{
char Arr[10] = "ABCDEFGH";
StringReverse(Arr); // Arr에 문자열이 뒤집어서 들어가도록
int a = 0;
}
return 0;
}