U E D R , A S I H C RSS

[Lovely]boy^_^/Arcanoid

1. Korean

1.1. 일지

1.1.1. Until 10/16

  • 공 움직임
  • 비행기 움직임
  • 비행기와 공의 충돌 체크(위에서 부딪치든 옆에서 부딪치든)
  • 공이랑 블록들 충돌 체크(약간 삐리삐리하다?--; 이동량이 1이 아닌 2가 되어 버려서 그렇다.)
  • 장나라 배경화면에서 그냥 파란 하늘 배경으로 바꿨다. 좌표 계산 삽질로 인해 야자수가 짤려버렸다.
  • 옛날에는 1ms까지 멀티 타이머가 먹혔는데, 지금 하는건 5ms 이하로 하니까 끊긴다. 왜그럴까
  • 스테이지는 역시 파일로 처리

1.1.2. 10/17

  • 점수, 깨뜨린 블록, 걸린 시간 나옴
  • 약간 어설프긴 하지만 움직이는 바에 맞을때 각도 바뀐다. 속도를 정확히 유지하긴 힘들듯 하다.
  • 멀티 타이머 해결봤다. 객체가 너무 크면 그런가 보다. 전부 크기를 1/4로 줄였더니 1ms까지 먹힌다.
  • 아무리 생각해도 배열의 행과 열은 너무 헷갈린다. 한동안 그림이 90도회전되서 나오더니, 저거 고치니까 되는군.
  • 소스에 이것저것 막 넣다 보니 지금 코드가 상당히 지저분해졌다. 중복을 최대한 없애는 방향으로 해놔서 중복은 별루 없지만, 한 메소드가 너무 길고, 클래스 별 역할 분담이 제대로 이뤄지지 않은것 같다. 모든 충돌루틴이 다 CArcaBall에 집중되어 있다.
  • ... 생각해보니 데이터 통신 공부를 안하고 있었다. 제길--; 공부하쟈

1.1.3. 10/18

  • 아이템 떨어진다.
  • 컨테이너에 포인터 안 넣을라고 복사 생성자, 대입 연산자 이런것도 만들어야 했다..--;
  • 전체적인 디자인 변화 : 먼저번게 분산식이었다면, 이번건 커다란 관리 클래스에서 알아서 하는 식으로 바꼈다. OOP로부터 점점 멀어지는거 같긴 하지만..--;
  • 점점 배드볼화 되가고 있다.--;

1.1.4. 10/28

  • 그동안 시험기간이라 좀 쉬었다.
  • 충돌처리 버그 제거했다.
  • 미사일 나가는 것만 넣으면 된다.
  • 공 여러개 돌아댕기는것도 넣어볼까 한다.

1.1.5. 10/29

  • 미사일 나가는 루틴 완성

1.1.6. 10/30

  • 매번 느끼는 거지만 C++은 리팩토링하기가 정말 힘든것 같다. 이거 고치면, 헤더도 고쳐야 하고 ::앞에것도 고쳐줘야 하고.. 아 짜증나.--;
  • 열심히 리팩토링 중. 다른 객체보다 공 객체 덩치가 커지는건 어쩔수 없는건가..
  • 이쯤에서 손떼자

1.1.7. 11/12

  • 제출후 발표 그리고 끝

1.2. 캡쳐 화면 10/30(완성본)

1.4. Class

~cpp 
CArcaObject - 알카노이드에 등장하는 모든 오브젝트들의 부모 클래스(위치, 크기, 비트맵, getter/setter)
CArcaBall : public CArcaObject - 공
CArcaBar : public CArcaObject - 바
CArcaBlock : public CArcaObject - 블록
CArcaBackground - 배경
CArcaItem : public CArcaObject - 아이템
CArcaMissile : public CArcaObject - 미사일

CArcaDoc : 위의 객체들을 포함한다. 블록은 벡터로 저장한다. 아이템은 먼저 나온걸 먼저 먹게 되므로 덱으로 저장한다.
CArcaView : 그려준다.

1.5. 사용하는 특수 기능

  • MMTimer
  • 더블버퍼링 & 비트맵 마스킹

1.6. 고민중

  • 지난번에 할때는 무조건 45도로 해서 별루 생각안했지만..
  • 이번에는 움직이는 바에 맞으면 각도가 꺾여야 한단다...
  • 지난번엔 x로 1, y로 1 이렇게 움직였지만.. 이번에 대각선 길이 루트2에다가 cos22.5, sin22.5 이런걸 해버리면.. 캐스팅 될때 1,0 이 되면서 수직, 또는 수평으로만 움직일 수가 있다.
  • 그러자고 이동량을 늘리자니, 충돌처리가 애매해지고 부드럽지도 않게 되더란 말이다.
  • 기능 추가를 해야 하는데 뭘 해야 할까. 걍 갤러그를 만들어버릴까..--;

1.7. 잡담

1.7.1. MFC에 관해?

  • MFC 책에 보면 비트맵 또는 GDI 쓸때 CPen pen, *pOldPen 이렇게 해서 뭔가 이상한 짓을 하는데 갠적으로는 왜 그렇게 하는지 이해를 못하겠다. 그냥 멤버에 넣어버리면 pOldPen 이런거 안해도 되던데.. 아시는분은 갈쳐 주세요.^^;
    • 정확히 무슨 이상한 짓이라는 거지? 코드를 보여주라 --상민
      • 음. 예를 들자면 다음과 같은..

~cpp 
...
CDC *pDC = GetDC();
CPen pen, *pOldPen;
pen.CreatePen(~~);
oldpen = pDC->SelectObject(&pen);
... 그려준다 ...
pDC->SelectObject(pOldPen);
pen.DeleteObject();

  • 대충 이런건데요. 저는 왜 저렇게 하는지 잘 몰라서, 그냥 이런식으로 하거든요.

~cpp 
// 헤더
CPen pen;
...

// 소스 OnInitialUpdate() 맞나? 어쨌든 초기화 하는거에서
pen.CreatePen(만든다.);
//해주고

//그려줄때는 pDC->SelectObject(&pen);
//이런식으로 해서 그리다가

//OnDestroy()에서 DeleteObject()하는 방식을 쓰거든요.
  • 고로 요지는.. 아--; 왜 이렇게 전달이 안돼지. 저렇게 포인터 만들었다가 그리다가 다시 선택하다가 하는 이유를 잘 모르겠다는..^^;
  • 전자의 코드에 억매이는거 같은데, 전자의 코드의 전제가 여러명이 동시에 그릴려고 달려들때의 상황으로 생각하자. gdi에서는 event driven 이기 때문에 모든 책의 예제들이 항상 그런 경우를 상정하고 바로 이전의 객체로 그리기 상태로의 복귀를 전제로 하여 작성되어 있다. 하지만, 네가 그리고자 하는 영역이야 계속 하나로 선택되어 있어도 아무 상관 없는걸. CPen 이 어디로 도망가는 것도 아니고 말이지.

    나는 좀더 욕심을 부려서, pDC 까지 보관하여 ~cpp GetDC로 얻지도 않고 그릴려고 시도 했는데, 해봐 결과를 알수 있을꺼야. pDC는 끊임없이 변화를 시도하는 녀석이라 상태 유지가 되지 않더군. 바로 전까지 가진 pDC는 옛날 녀석이라 이거지, 결론으로 네가 의도하는 대로 상태 저장이 가능한 GDI Object를 그렇게 쓰는거 부담없다. --neocoin

여담으로, 전에 MFCStudy 로 할때 각도 계산까지 넣었다면 좋을뻔 했지? ^^;; 하지만 아마 그때 넣었으면 더 시간이 걸렸을꺼 같아서;; 어이 인수 과거 소스를 나에게 넘겨 쿨럭. 농담이고, 아 진작 소스 겉어 둘껄 ^^;; --neocoin

흑 ㅠ.ㅠ 예전 소스가 있었다면 제가 이거 만들고 있겠어요?; 고스트 삽질로 싸그리 날렸더니만, 생각도 못한 ZP 자료실에 실행파일만 덩그라니 남아있을줄은..;
진짜 소스 겉어서 링크 해둘껄 다들 옛날 소스 보면 정말 재미있을텐데 --neocoin

1.7.2. STL

  • 정말 STL은 내 표현의 폭을 넓혀주는 것 같다. 정말 좋다.

1.8. Tutorial

  • 시작할때는 Space
  • 블록이 깨졌을때 나오는 아이템을 20개 먹으면 미사일이 하나 생긴다. Ctrl을 누르면 미사일 발사. 지나가는 코스에 있는 블록들의 내구도 1씩 감소.(미사일이 이상하게 생겼다. 고쳐야겠다.)


2. English

2.1. Diary

2.1.1. Until 10/16

  • Ball can move.
  • Plane can move.
  • Game can check a collision shuttle and ball.
  • Game can check a collision ball and blocks, but it has a few bugs. maybe ball's move amount is 2, not 1.
  • I change a background picture from a Jang na ra picture to a blue sky picture. but my calculation of coordinate mistake cuts tree picture.
  • My previous arcanoid could process 1ms of multi media timer, but this version of arcanoid can't process over 5ms of multi media timer. why..
  • I process stage datas as files.

2.1.2. 10/17

  • Game can exhibit score, number of broken blocks, and time.
  • When a ball collides with a moving bar, its angle changes, but it's crude. Maybe it is hard that maintains a speed of a ball.
  • I resolve a problem of multi media timer(10/16). its problem is a size of a object. if its size is bigger than some size, its translation takes long time. So I reduce a size of a object to 1/4, and game can process 1ms of multi media timer.
  • A array's row and column is so confused. A long time, screen picture rotates a 90 angle, but I fixed that as change row and column.
  • Now sources become very dirty, because I add a new game skill. I always try to eliminate a duplication, and my source has few duplication. but method's length is so long, and responsiblity of classes is not divided appropriately. All collision routine is focusing on CArcaBall class.
  • ... I don't have studied a data communication. shit. --; let's study hard.

2.1.3. 10/18

  • Game can generate items.
  • I don't want pointers in container, so I had to make a copy constructor, substitute operator.--;
  • I change a design of a arcanoid. - previous version is distribute, but this version is that god class(CArcanoidDoc)' admins a total routine. in my opinion, it's more far from OOP.--;
  • It becomes like the badball--;



["Lovelyboy^_^"]
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:35
Processing time 0.0235 sec