본문으로 바로가기

1. 리듬게임 노트가 떨어지는것을 구현

인터페이스도 구현했고, 이제 리듬게임을 c언어로 어떻게 구현할지 생각하며 여러방법을 생각하던도중에 큰 배열을 선언해서 일부분만보여주고 그걸 위로 천천히 올리면 사용자입장에서 떨어지지않을까..? 라고 생각해봤습니다. 이걸 간단하게 그림으로 설명하자면 ,

이렇게 된다. 배열을 선언할때는 포인터배열을 선언하여 저 노트자체를 랜덤으로 입력해주었는데 그이유는, 리듬을 '음악에 맞춘다'라는 것에 중점을 둔것이아니라 '맞춘다' 만 중점을두고 짰기때문에 랜덤으로 주게하였습니다.

2. 떨어지는 노트의 판정처리

떨어지는 노트의판정은 가장먼저 getch를 생각했으나 getch는 함수자체에 '대기'라는것이 있으므로 입력을 받을때까지 기다리게됩니다. 그래서 입력을 한번받을때 한칸떨어지게 됩니다. 이렇게만들면 리듬게임의 의미가없고 내가만약에 실수를하면 리듬게임의 떨어지는노트가 무시되고 넘어가야 진정한 리듬게임이 완성되기때문에 getch는 쓸수없었습니다.

여기서 선배님의 도움을 좀받아 getKeyState(https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms646301)이라는 함수를 썻는데, getKeyState라는 함수는 해당키의 정보를 읽는 함수로, 키가 눌렸는지 안눌렸는지 판단할떄 쓰입니다. 키가 눌렸는지 안눌렸는지 판단하기위해서, &연산자를 사용해야 합니다.

> (GetKeyState(해당키) & 0x8000 == true) 이런식으로 사용하면 되는데, & 0x8000의 의미는 1000 0000 0000 0000 이며 최상위 비트를 의미합니다. GetKeyState에서, 최상위 비트에 키가 눌렸는지에 대한 정보가 들어있기 떄문에, & 연산을 이용하여 최상위 비트만을 추출해낸것입니다.

1 이상은 모두 true이기 떄문에, GetKeyState(해당키) & 0x8000의 값이 true라면, 키가 눌린 상태라고 판단하고 명령을 내리면 됩니다. 이것을통해서 키가 눌렸을때 해당 노트가 그위치에 있으면 점수가 올라가는 형식입니다.

그렇지만, 코드를짤때 박자와 연결되게 맞춘것이아니고 노트를 맞춤으로써 돈과 점수를 올리는것에 목적을 두고 있기때문에 한번만 인식될 필요가 없습니다. 그래서 GetKeyState함수를 쓴것이고, 노트가 그위치에있으면 점수가 계속올라갑니다. 이런식으로 노트의 판정처리를 했으며 놓치면 점수와 돈을 잃는것이기 떄문에 놓치는것에대한 다른처리는 하지않았습니다.