그 외 공부

[SW기초실습1] #Mission 2, Qt를 이용한 두더지 게임

ssangeun 2015. 8. 4. 17:01

*두더지 게임 전체설명

<!--[if !supportEmptyParas]--> <!--[endif]-->

 label 두 개와 hbox 네 개를 vbox에 붙여, 첫 번째 label은 시간을 나타내고 네 개의 hbox는 두더지가 나올 버튼 16개가 만들어지고 마지막 labelcatch수가 나온다.

 임의의 위치에 두더지가 나오는 방법은 버튼들을 배열에 넣고 인덱스값을 rand로 선택하게 만든다. 두더지가 나오면 3초만 유지가 되고 그 전에 눌러야 catch수가 올라간다. 두더지가 나오는 버튼과 내가 누른 버튼이 일치하면 catch++가 되고 “O”가 사라진다. “O"가 사라진 후에도 그 버튼을 누르면 catch++이 되는 문제를 막기위해 사용하지 않는 버튼을 하나 만들고 그 버튼을 배열 맨끝자리에 저장을 해준다. 그다음 두더지를 맞추었으면 인덱스번호를 사용하지 않는 버튼이 저장되어있는 맨끝자리의 인덱스의 번호로 바꾸어주면 ”O“가 사라진후에도 누르면 catch++이 되는 문제를 막을 수 있다. 맞추었거나 두더지가 3초 이상을 유지하였을 때는 다음 두더지의 차례를 위해 reset을 하는 함수를 만들어주었다. 두더지 게임 시간인 1분이 다 되었을 때는 첫 번째 label에 시간이 아닌 ”Done“을 출력하고 게임을 끝낸다.


-code

 code

설명 

 

 변수를 선언해준다버튼은 0~16까지 총 17개이고 버튼을저장하기 위한 배열을 button[16]을 만든다.

변수Done은 1분이 다지나가고 나서 label1에 “Done”을 출력해주기 위해서 사용된다. TIMEOUT은 1분인 60()로 선언해 준다.

 

 k는 배열의 인덱스이고 0~15까지를 랜덤으로 넣어준다.버튼들을 초기화 시켜주는 reset함수에서는 0~15까지의 버튼을 for문으로 초기화시켜준다. presentQuiz함수는 catch수를 마지막label에 출력해준다.

 

 버튼을 클릭했을 때 랜덤으로 나타나는 두더지 button[k]와 같을 때(두더지 버튼을 맞추었을 때

done은 시간이 다되었는지 확인하는 변수이고 시간 안에 두더지 버튼을 맞추면 먼저 reset함수로 초기화가 되고 catch++가 되고 catch를 출력하는 함수presentQuiz를 불러오고 catch중복체크를 막기 위해 k를 사용하지 않는 버튼번호 16으로 바꾸어준다.

시간이 다된 DONE=1일 경우 시간 label1“DONE”을 출력한다.

 

 sec%3==0(3초간격으로)&&remainingTime!=0(남아있는 시간이 있을 때) 초기화를 시키고 k를 랜덤으로 값을 넣어주고 그 버튼에 “O”를 표시한다

remainingTime0보다 크면 return 1로 계속 반복되게 하고 0이면 시간이 다 되었다고 변수 doneDONE1을 넣어준다.

 

 rand중복을 막기위해서 srand(time(0))을 써준다

1000msec(1)마다 time_handler함수를 부른다. label1에 시작하는 시간 1:00을 출력하고 label1vbox맨 위에 올려준다.

버튼 총16개를 만들기 위해 hbox 4개를 만들어준다.

 

버튼을 만들때 배열에 넣어주고 catch중복을 막기위해 만든 button[16]은 만들기만 한다.

 

 모든 hbox를 차례대로 vbox에 올려주고 마지막으로 catch수를 보여주기 위한 마지막label 'Catch'를 만들어주고 vbox위에 올려준다. 그다음 다 완성된 vboxwindow에 올려준다.


-결과

 

 시간은 1분부터 1초 단위로 줄어든다

두더지는 랜덤으로 나타난다.

 

 랜덤으로 나타낸 두더지를 잡으면 catch가 올라가고 두더지를 잡으면 두더지가 사라진다. 다른 버튼을 눌렀을 때는 catch가 증가되지 않으며 두더지는 3초만 출연한다.

 

 1분이 지났을 때는 게임이 종료되고 Done이 표시가 된다. 더 이상 버튼을 눌러도 catch수는 유지된다. Done이 떴을 때 보여주는 catch 수는 1분 동안 잡은 총 두더지 수이다.