1개의 함수는 1개의 역할

: 코드가 늘어나는 것을 우려하지 말 것

: 다른 사람에게 이게 어떤 상황인지를 알려주는 것을 우선적으로 삼을 것

// :: 합계와 평균 계산
void SumAndAverage(std::vector<int>& a, int& total, float& avg) {
	// :: 합계 계산
    total = std::accumulate(a.begin(), a.end(), 0);
    // :: 평균 계산
    avg = !a.empty() ? ((float)total / a.size()) : 0.0f;
}

=>

// :: 합계 계산
int sum(std::vector<int>& a) {
	return std::accumulate(a.begin(), a.end(), 0);
}

// :: 평균 계산
float average(std::vector<int>& a) {
	return !a.empty() ? ((float)sum(a) / a.size()) : 0.0f;
}

 

블로그 이미지

RIsN

,

case 내부의 함수화

: 코드가 늘어나는 것을 우려하지 말 것

: 다른 사람에게 이게 어떤 상황인지를 알려주는 것을 우선적으로 삼을 것

// :: 플레이어 클래스
class Player {
	...생략
    void update(float deltaTime) {
    	switch(state) {
  		case STATE_RUN: // :: 걷기 상태
        	if(input.isLeft())
            	velocity.x = -RUNNING_SPEED;
        	if(input.isRight())
            	velocity.x = RUNNING_SPEED;
            velocity.y = 0.0f;
            if(input.isJump()) {
            	velocity.y = -JUMP_SPEED;
                state = STATE_JUMP;
            }
            position += velocity * deltaTime;
            break;
        case STATE_JUMP: // :: 점프 상태
        	position += velocity * deltaTime;
            velocity.y += GRAVITY * deltaTime;
            if(isLanding())
            	state = STATE_RUN;
            break;
        case STATE_DAMGE: // :: 데미지 상태
        	...생략
            break;
        }
    }
};

=>

void update(float deltaTime) {
	switch(state) {
    case STATE_RUN: run(deltaTime); break;
    case STATE_JUMP: jump(deltaTime); break;
    case STATE_DAMAGE: damage(deltaTime); break;
    }
}

 

'Programming' 카테고리의 다른 글

[용어] 얕은 복사, 깊은 복사  (0) 2022.03.12
[Code] 1개의 함수는 1개의 역할  (0) 2021.02.13
[Code] 검색 반복문 분리  (0) 2021.02.13
[Code] if가 필요없는 가위바위보  (0) 2021.02.11
[Code] 조기 리턴 활용  (0) 2021.02.10
블로그 이미지

RIsN

,

검색 반복문 분리

: 코드가 늘어나는 것을 우려하지 말 것

: 다른 사람에게 이게 어떤 상황인지를 알려주는 것을 우선적으로 삼을 것

// :: 공격 범위 내부에 있는 캐릭터를 검색하고 공격
for(iter i = actors.begin(); i != actors.end(); ++i) {
	if((*i)->distance(position) <= 5) {
    	attack(*i);
        break;
    }
}

=>

auto target = findTarget(position, 5);
if(target != nullptr) {
	attack(target);
}

 

블로그 이미지

RIsN

,

if가 필요없는 가위바위보

// :: 0 : 바위, 1 : 가위, 2 : 보
Result Judgement(Hand my, Hand target) {
	// :: 가위바위보 판정
    static const Result result[3][3] = {
    	// :: 바위, 가위, 보(상대방)
    	{Draw, Win, Lose}, // :: 바위
        {Lose, Draw, Win}, // :: 가위
        {Win, Lose, Draw} // :: 보
    }
    return result[my][target];
}

출처 : C와 C++ 게임 코드로 알아보는 코딩의 기술

'Programming' 카테고리의 다른 글

[Code] case 내부의 함수화  (0) 2021.02.13
[Code] 검색 반복문 분리  (0) 2021.02.13
[Code] 조기 리턴 활용  (0) 2021.02.10
[Code] 보기 쉬운 Code를 만드는 법  (0) 2021.02.10
[Code] 중복 사용 조건식 함수화  (0) 2021.02.10
블로그 이미지

RIsN

,

조기 리턴 활용

: 코드가 늘어나는 것을 우려하지 말 것

: 다른 사람에게 이게 어떤 상황인지를 알려주는 것을 우선적으로 삼을 것

void update() {
	if(health > 0) { // :: 체력이 있는 지 확인
    	if(lifeTime > 0) { //:: 수명이 남아있는지 확인
        
        	// :: 살아있을 때의 처리
        }
    }
}

=>

void update() {
	if(health <= 0) return; // :: 체력이 없다면 리턴
    	if(lifeTime <= 0) return; // :: 수명이 없다면 리턴
    
    	// :: 살아있을 때의 처리
}

 

블로그 이미지

RIsN

,

전제조건

  • 각 개인의 차이가 있다고 생각하며, 어디까지나 이것은 개인 취향에 부합한 것들로 정리
  • 주석 없는 코드 보다 주석 있는 코드가 좋다고 생각하는 취향

Code 작성 순서

  1. 일단 작성해보기
  2. 처음 작성했던 함수를 밑그림으로 다시 제대로 함수를 제작
  3. 함수의 핵심이 무엇인지 이해
  4. 읽는 사람의 관점에서 이해가 가능한지 다시 확인

보기 쉬운 Code를 만드는 법


문서작성 : 2021-02-10

업데이트 : 2021-02-13

참고문헌 : C와 C++ 게임 코드로 알아보는 코딩의 기술

'Programming' 카테고리의 다른 글

[Code] 검색 반복문 분리  (0) 2021.02.13
[Code] if가 필요없는 가위바위보  (0) 2021.02.11
[Code] 조기 리턴 활용  (0) 2021.02.10
[Code] 중복 사용 조건식 함수화  (0) 2021.02.10
[Code] 설명 전용 변수 사용  (0) 2021.02.10
블로그 이미지

RIsN

,

중복 사용 조건식 함수화

: 코드가 늘어나는 것을 우려하지 말 것

: 다른 사람에게 이게 어떤 상황인지를 알려주는 것을 우선적으로 삼을 것

: 중복 사용이 되는 것을 기준으로 삼을 것

if (speed >= 10.0f && !(y > 0.0f) && state != STATE_DAMAGE) {
	생략
}

=>

// :: 점프 중인지 확인(간단하게 y = 0의 위치를 지면으로 설정)
bool isJump() {
	return y > 0.0f;
}

// :: 데미지 중인지 확인
bool isDmage() {
	return state == STATE_DAMAGE;
}

// :: 대시 중인지 확인
bool isDash() {
	if(isJump()) return false;
    if(isDamage()) return false;
    if(speed < 10.0f) return false;
    return true;
}

if(isDash()) {
	생략
}

 

 
 

 

 

'Programming' 카테고리의 다른 글

[Code] 검색 반복문 분리  (0) 2021.02.13
[Code] if가 필요없는 가위바위보  (0) 2021.02.11
[Code] 조기 리턴 활용  (0) 2021.02.10
[Code] 보기 쉬운 Code를 만드는 법  (0) 2021.02.10
[Code] 설명 전용 변수 사용  (0) 2021.02.10
블로그 이미지

RIsN

,

설명 전용 변수 사용

: 코드가 늘어나는 것을 우려하지 말 것

: 다른 사람에게 이게 어떤 상황인지를 알려주는 것을 우선적으로 삼을 것

if (speed >= 10.0f && !(y > 0.0f) && state != STATE_DAMAGE) {
	생략
}

=>

const bool isJump = y > 0.0f;
const bool isDamage = state == STATE_DAMAGE;
const bool isDash = (speed >= 10.0f) && !isJump && !isDamage;
if(isDash) {
	생략
}

 

블로그 이미지

RIsN

,

프로젝트명 : Second Step

프로젝트 목적 : First Step 포트폴리오 프로젝트 완성, 복습, 성공적인 취업

[최신 프레젠테이션(준비중)]

프로젝트 시작 : 2021-02-04

 

=====

 

[사용 에셋]

 

 

=====

youtu.be/kDFrB3nGh6A

[개발 일지]

  • 제작 준비

[수정 필요]

  • 여러 버그들

[차후 이해가 필요한 것]

 

==========

 

블로그 이미지

RIsN

,

백준 1193 : 분수찾기

C# 2021. 2. 3. 23:24

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

1/1 1/2 1/3 1/4 1/5
2/1 2/2 2/3 2/4
3/1 3/2 3/3
4/1 4/2
5/1

이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
첫째 줄에 분수를 출력한다.

:: 성공

 

: 설명 :

> 속도가 중요함 = 공식을 써서 풀라는 것...

 

> 각 단계마다 +1씩 개수들이 증가한다.

>> 1단계(1/1) 2단계(1/2, 2/1) 3단계(3/1, 2/2, 1/3)

 

> 그러니 우선 받은 숫자가 몇 단계 다음인지를 확인한다.

>> 14의 경우 5단계 다음에 온다.

 

> 그 후 다음 단계 가장 처음에 오는 숫자의 번째를 확인(5단계 다음 시작은 11번째부터).

> 지금 받은 숫자가 5단계 다음 시작해서 몇 번째에 오는지 확인(11번째부터 14번째까지니까 6단계 시작해서 4번째, 차이는 3)

> 그 다음은 홀수 짝수를 구분해서 분수를 보여주면 된다.

>> 5단계는 홀수,

>>> 그러니 시작은 5/1 거기서 차이(3)만큼 위는 빼고, 아래는 더한다.

>>> 나오는 것은 2/4

 

: 개선점 : 수학에 대한 이해

using System;

namespace Math00
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: Read
            string input = Console.ReadLine();

            // :: Set
            int checkNumber = int.Parse(input);

            // :: Find
            int count = 1;
            int range = 1;
            int firstNumber = 1;
            while(true)
            {
                // ::: EXIT
                if (checkNumber <= range)
                    break;

                count += 1;
                firstNumber = range + 1;
                range += count;
            }

            // :: Get
            int up = 1;
            int down = 1;
            if(count % 2 == 1)
            {
                up = count - (checkNumber - firstNumber);
                down = 1 + (checkNumber - firstNumber);
            } else if(count % 2 == 0)
            {
                up = 1 + (checkNumber - firstNumber);
                down = count - (checkNumber - firstNumber);
            }

            // :: Print
            string print = string.Format("{0}/{1}", up, down);
            Console.WriteLine(print);
        }
    }
}

 

 

'C#' 카테고리의 다른 글

Javascript의 getInt16()를 C#으로 Convert  (0) 2022.12.20
GetHashCode  (0) 2021.04.23
백준 2292 : 벌집  (0) 2021.02.02
백준 1712 : 손익분기점  (0) 2021.02.01
백준 1316 : 그룹 단어 체커  (0) 2021.01.30
블로그 이미지

RIsN

,