U E D R , A S I H C RSS

Cpp/2011년스터디


1. 스터디 소개

  • 2학기에 들어가기 전에 잉여로운 방학시간을 이용해서 C++에 관한 여러가지를 공부해보는 스터디입니다.
  • 스터디 시간: 둘 모두 학교에 오는 저녁시간(7시~10시).
  • 참가자: 김태진, 고한종
  • 진행 방식: 간단하게 C++책을 학습한뒤 테트리스 코드 레이스로 둘이 같이 짜면서 필요한 부분을 다시 탐독한다.

2. 목표

  • 클래스에 관해 공부하고, 그걸 토대로 프로그램을 짜본다.
  • OOP에 한발 다가선다.
  • 테트리스를 완성한다.

3. 진행 상황

3.1. 8.1~5

  • 클래스부분을 간단하게 공부해봄.
  • 테트리스를 짜는중.
  • 움직이는 블럭을 클래스화해서 짜려고 하는 중.
  • 어떻게 짤지 설계는 대충 끝낸 상태이고, 코딩에 들어가는 중.

3.2. 8.11~12

  • XCode에서 코드를 좀 더 업그레이드 시켜보려고 했으나 망할 VS2008 '윈도' 에만 돌아가는 것들(Windows.h)이 있어 실패하고 한종이 컴퓨터에서만 짜기로 했음.
  • 역시 마소는 표준따위 무시하는 마레기.
  • 시간에 따라 블럭을 내려오게 하려고 하고 있으나 뭔가 이상함.
    • 12시 13분 현재, 블럭이 갑자기 사라지는 현상을 수정하고 지정한 시간에 따라 조금씩 내려가게 하는데 성공.

3.3. 8.13~14

  • 모이진 않고 혼자 했음. 미안.
  • 태진이 한텐 좀 미안한데 혼자서 따로 만들어 보고 있었다. X코드와 VS2008은 서로 다른점이 너무 많아서 둘이 같이하면 이래저래 진행이 안될것 같아서; 움직이는 블록과 이미 자리잡은 블럭(+배경) 그리고 이들을 움직이게 하는 함수. 이렇게 3개를 class화 했다. 이 중 이미 자리를 잡은 블럭은 다른 두개의 객체에서 접근가능하면서, 유일하게 하나만 존재해야 했다. 그래서 찾아본결과. 싱글톤 패턴이란게 있어서... 이것 때문에 하루동안 고생했다. 어쨋든 성공 ㅋㅋ 뭔가 끝이 보이는 느낌이다. 근데 왠지 완성시키고 나면 종나 느릴것 같아..

3.4. 8.20~21

  • 사실 저 저번 때부터 이럴것 같은 조짐이 있었지. 결국 파토 ㅋㅋㅋㅋ 혼자서 합니다 이왕시작한거 테트리스는 만들고 끝내야 겠으!
  • 그래서 어제 밤에 초벌 완성
    • 근데 안돌아가
      • 보니까 동적할당한답시고 포인터형만 선언해놓고 정리를 안함
    • 블럭이 키를 누르니까 1칸만 움직인다.. 테트리스 블럭은 4칸짜리일텐데.. 1칸
      • 이때서야 깨달았다. 아 함수만 선언해놓고 순서를 안정해 놨구나.
    • 이번엔 블럭이 안떨어져
      • 이건 보니까 시간 재설정을 안해줘서 시간재는 카운터가 음의수를 향해 달려가는 중이였다.
    • 드디어 성공하나 싶더니 이번엔 블럭이 벽을 뚫고 지나가는구나
      • Set함수에 false를 반환하는것도 대충해놨었고. false를 받았을시 작업도 안 설정 해놨었다.. 으아
    • 아 됐으 이제 해볼까! -> 블럭이 바닥에 도달해서 죽어야 하는데 죽지않고 버틴다. 게다가 왼쪽으로 이동하기 까지!
      • 이건 바닥에 도달하는 조건을 if(MKB()==false)로 했었던가? 인데.. MKB에 들어가보니 false 반환이 없었다.. 헐.
      • 왼쪽이동은 switch 문에 break;를 안써놔서 그런거였다 ㅡㅡ;
    • 위의 문제를 해결하니 블럭이 원하는데로 잘 죽고 잘 생성되더라. 근데 1줄을 없애려 하니...
      • 없애야 하는 줄위의 모든 쌓여있던 블럭이 소멸
      • 그 다음턴에 생긴 블럭을 땅에 놓자마자 rayer배열이 터짐! 근데 이건 절대 터질리가 없는 변수라는거?!
      • 위의 상황은 디버그일때 일이고 릴리즈일때는.. 프로그램이 죽진 않으나.... 말로 표현할수가 없다.
      • 블럭을 대충쌓아 Game Over 상황을 연출하려 해봤더니 디버그모드에서는 맵의 높은곳에 도착하기도전에 rayer폭파 -_-
      • 릴리즈에선... 안죽어... 사실 죽는 조건을 잘못 설정한 탓도 있긴한데.. 심지어 그냥 냅두면 부활도 한다 으앜 뭐지!

참고 : 경악스러운 문제의 그 릴리즈 http://pds22.egloos.com/pds/201108/21/51/Tetris-rino2.exe

조작은 WASD와 ,.로합니다. space는 아직 못합니다 ㅜㅠ
,는 반시계방향회전
.는 시계방향회전
w를 누르면 시계방향 회전입니다.

4. 후기

  • 고한종 - 정보은닉, 상속, 생성자, 소멸자, 복사생성자... 뭐가 이리 많앜ㅋㅋㅋ // 대한민국은 윈도가 甲
    • 실질적 갑은 맥이란다 -
  • 고한종 - 디버그 모드와 릴리즈 모드의 차이를 이번 기회를 통해 느끼게 되었다.. 속도차이 엄청나고.. 디버그 에러가 나고 안나고 차이정도, 근데 그게 꽤나 인상깊은.... 이상한것이 만들어졌다. 아, 설계도 겁나 중요한걸 깨달음 ㅡㅡ; 나중에가서 고치려면 매우 힘듬.

5. 후일담

  • 스터디는 끝났지만(?) 난 아직도 테트리스를 붙잡고 있다.
    • 컬러기능            미묘하게 적용됨.
    • Hold기능            (완성/패널티와 횟수제한이 없음ㅋㅋㅋ)
    • 다음에 나올 블럭 보여주는 기능            완성
    • 랭킹기능
    • 난이도 증가            완성
    • 2인플레이
    • 시작시 맵을 선택 가능하게
    • 절차지향적으로 먼저 짜본다
    • 객체지향적으로 짜보고 고친다. 확장성까지 고려된 말끔한 형태가 나올때까지.....

  • 보니까 06년도에 06학번을 대상으로 테트리스 만들기 라는 활동도 있었고 10년 데블스캠프에서도 테트리스가 언급되었던것 같은데 아예 새싹교실할때 테트리스를 포함해보는건 어떨까. 기본적인 블럭낙하에 줄이 없어지고 점수가 표시되는 정도라면 잘되는 새싹반은 완성도 가능하지 않을까?
    • 새싹이 1학기 끝날때 끝나는데, 그때는 시험기간이지. 보통 테트리스를 만든다면 여름방학이지 싶다 ㅋㅋ -김태진

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2011-11-03 16:22:28
Processing time 0.3877 sec