SonHyeWon / SnakeGame

GNU General Public License v3.0
0 stars 2 forks source link

과일 x좌표의 짝수 보정 연산법 수정 #19

Closed SonHyeWon closed 4 years ago

SonHyeWon commented 4 years ago

문제 파트 및 상황 서술

저는 main.c에서 과일의 x, y, color 값을 설정하는 부분을 createFruit 함수로 분리하는 중입니다. 이때 과일의 x좌표는 짝수 값을 가져야 하고, 이를 위해 원본 코드에서 사용한 연산은 다음과 같습니다.

fruit.x = (rand() % screen.width) & ~1; /* force x even and within [0, MAXX-1] */

저희는 가독성 증진을 목적으로 코드를 개선중이기 때문에, 팀 회의에서 위의 연산법을 수정하자고 결론냈습니다. 그러나 구체적인 방법에 대해서는 논의하지 않은 듯 하여 이슈를 작성하게 되었습니다.

원하는 작동 방식

제가 생각한 방법은 다음과 같습니다.

bool isEven(int number){
    인자로 받은 수가 짝수인지 검사 후 
    짝수면 true, 홀수면 false 반환
}

void createFruit(SCREEN screen, FRUIT* fruit){
    //x좌표 연산만 표현
        CELL endP = screen.endPoint
    int tmpX

    tmpX = 과일의 x좌표를 우선 rand() % (endP.x) 로 생성
    fruit->x = ( isEven(tmpX) ? tmpX : (tmpX - 1) );

        //이후 y, color 값 등을 연산
}

숫자가 짝수인지 판단해주는 isEven 함수를 생성하여 createFruit에서 호출하는 방법입니다. createFruit 함수에서는 먼저 임시로 tmpX에 랜덤 값을 저장하고, isEven의 반환값에 따라 삼항 연산자로 짝수 보정을 실행하는 것은 어떨까요? 다른 방법이나, 변수 이름에 대한 조언 등이 있다면 감사히 받겠습니다.

hongyj9823 commented 4 years ago

클린코드의 주제에 맞게 가독성을 기준으로 생각해 본다면 확실히 짝수를 판별해 주는 함수를 따로 생성하여 구성하는 것이 좋다고 봅니다. 의견 감사합니다.

MtNight commented 4 years ago

startPoint는 고려하지 않는 건가요?

mellime commented 4 years ago

좋은 의견 감사합니다! 함수화가 가능한 부분이라면 함수로 만드는 것이 좋다고 생각해요. 다만, 삼항 연산자보다 if 조건문을 사용하는 것이 가독성 향상에 도움이 되지 않을까 생각합니다.

SonHyeWon commented 4 years ago

@MtNight 좋은 지적 감사합니다. x 좌표에 strP.x도 더해줘야 하겠네요. @mellime if 조건문을 사용하게 되면 함수를 하나 더 생성해야할 것 같다고 생각해서 삼항 연산자를 사용했었는데, 함수 안에 if 조건문을 넣는게 더 좋을 듯 하네요. 감사합니다.

MtNight commented 4 years ago

확인했습니다

mellime commented 4 years ago

@SonHyeWon isEven 함수 안에 if 조건문을 사용한다는 의미이신가요?

SonHyeWon commented 4 years ago

@mellime 아뇨 createFruit 함수 안쪽입니다! 이슈에 제가 작성한 fruit->x = ( isEven(tmpX) ? tmpX : (tmpX - 1) ); 이

if( isEven(tmpX) == False ) { tmpX -= 1; }

fruit->x = strP.x + tmpX;

이런식으로 되도록 의견 주신거 맞나요?

mellime commented 4 years ago

@SonHyeWon 네! 맞습니다. 'isEven(tmpX) == false'가 아닌 '!isEven(tmpX)' 로 써도 좋을 것 같아요. 답변 감사합니다.

SonHyeWon commented 4 years ago

모두 의견주셔서 감사합니다! 반영하여 작성하도록 하겠습니다.