일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- UI
- 점상
- 천체사진
- 이브뉴스24
- 온라인
- 유루캠
- DX라이브러리
- C언어
- 미니적도의
- 오픈스택
- 킥스타터
- 리눅스
- 라즈베리파이
- inputsystem
- 번역
- 게임제작
- 미타니
- 이브온라인
- 드론
- 이브
- 유니티
- 오브젝트이동
- 자율비행
- 데포르메
- centos
- coroutine
- 스카이트래커
- 언성스토리
- This is EVE
- 포크스푼
- Today
- Total
게임개발 예제모음
3.4 간단한 선택화면 (역방향 루프) 본문
3.4 간단한 선택화면 (역방향 루프)
전 섹션에서는 아래방향으로의 루프를 재현해보았다. 그렇다면 반대방향으로 루프는 어떻게 해야 할까. 언뜻 생각하기에 SelectNum변수에 +1을 해서 아래방향으로 진행했으니 그 반대로 -1을 하면 되지 않을까 하는 생각이 들게 된다. 하지만 -1을 하게 되면 수열의 진행은 다음과 같아 진다.
0, -1, -2, -3, -4, 0, -1, -2, -3, -4........
우리가 원하는 루프는
0, 4, 3, 2, 1, 0, 4, 3, 2, 1.......
이다. 빼는 계산으로는 불가능하다는 것을 알았으니 더하는 계산으로 동일하게 구현해야 한다. 이 때에는 -1이 아니라 +4를 해주면 원하는 값을 얻을 수 있다. 나누는 수에서 -1한 수를 더하는 것으로 역루프가 성립된다. 전 섹션에서 사용했던 예제에 역루프를 추가해 보자
#include <DxLib.h> int Key[256]; int gpUpdateKey(){ char tmpKey[256]; GetHitKeyStateAll( tmpKey ); for( int i=0; i<256; i++ ){ if( tmpKey[i] != 0 ){ Key[i]++; } else { Key[i] = 0; } } return 0; } // 메뉴항목에 필요한 구조체 선언 typedef struct{ int x, y; // 좌표 변수 char name[128]; // 항목 이름 변수 } MenuElement_t; int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); // 메뉴항목은 5개를 만든다. MenuElement_t MenuElement[5]={ { 80, 100, "새 게임" }, // 구조체 내부에 선언된 순서대로 각각의 값이 저장된다. (x,y,name 순서) { 100, 150, "보너스" }, { 100, 200, "도움말" }, { 100, 250, "설정" }, { 100, 300, "게임종료" }, }; int SelectNum = 0; // 현재 선택 번호 while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){ // 계산 구문 if( Key[ KEY_INPUT_DOWN ] == 1 ){ // 아래 방향키 처리 SelectNum = ( SelectNum + 1 ) % 5; } if( Key[ KEY_INPUT_UP ] == 1 ){ // 위 방향키 처리 SelectNum = ( SelectNum + 4 ) % 5; // 역 루프 계산식 } if( Key[ KEY_INPUT_DOWN ] == 1 || Key[ KEY_INPUT_UP ] == 1 ){ // 위 또는 아래 방향키가 입력 for( int i=0; i<5; i++ ){ if( i == SelectNum ){ MenuElement[i].x = 80; } else { MenuElement[i].x = 100; } } } // 묘화 구문 for( int i=0; i<5; i++ ){ // 메뉴 항목 묘화 DrawFormatString( MenuElement[i].x, MenuElement[i].y, GetColor(255,255,255), MenuElement[i].name ); } } DxLib_End(); return 0; } |
실행결과
'DX라이브러리' 카테고리의 다른 글
3.6 sin함수를 이용한 매끄러운 이동 (0) | 2014.12.26 |
---|---|
3.5 sin 함수를 이용한 물체 이동 / 확대축소 (0) | 2014.12.24 |
3.3 간단한 선택화면 (0) | 2014.12.24 |
3.2 나눗셈 나머지를 이용한 루프 (0) | 2014.12.24 |
3.1 키 입력에 대응해서 캐릭터를 움직여보자 (0) | 2014.12.24 |