배상욱 hzael@naver.com
1. 위 내용은 애니팡 역기획입니다. 애니팡의 실제 시스템 및 기획과 전혀 상관이 없는 개인이 만든 포트폴리오입니다.
2. 역기획 내용 중 틀린 내용 및 오류가 있습니다. 너그러이 보아 주시면 감사하겠습니다.
3. 이 슬라이드의 구성 및 배경을 제외한 내용은 저의 지적재산이므로 무단 도용을 금지합니다.
4. 슬라이드의 구성은 이상균님의 게임 기획 튜토리얼의 배경을 많은 부분 참고하였습니다.
5. 슬라이드 컨버팅 중 변형된 곳이 있습니다.
6. 전리품 분배 시스템 기획 http://www.slideshare.net/SwooBae/ss-28736021
7. 전리품 분배 시스템 기획 - 아이템의 획득 DOCX 버젼 http://www.slideshare.net/SwooBae/ss-28736246
17. 애니팡의 규칙
17
이 경우에는?
3개가 터지면 하나가 남는
다
그러므로 3개 이상으로 변
경
그러므로
정의는
“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,
블록이 삭제된다.”
18. 애니팡의 규칙
18
그럼 이런 경우에는?
다음과 같이
정의하면 될까?
“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,
그러므로
정의는
블록이 삭제된다.
가로와 세로가 각 3개 이상이 결합된 모양의 블럭은
하나의 묶음으로 인식되어 같이 삭제된다.”
라고 하면 될까?
19. 답은
19
한 묶음으로 삭제되지 않는다
정의가 잘못 되었기 때문이다
- 이미 가로 블럭이 삭제된 후
그러므로
정의는
“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,
블록이 삭제된다.
가로와 세로가 각 3개 이상이 결합된 모양의 블럭은
하나의 묶음으로 인식되어 같이 삭제된다.”
20. 애니팡의 규칙
20
모두 삭제하기 위해서는,
적어도 다음과 같이 정의해야 한다
“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,
그러므로
정의는
그 블록은 ‘삭제대상’으로 메모리에 저장된다.
삭제대상의 각 블록은 (삭제대상이 가로일 경우) 위 아
래 세로 검사를 하여 블록이 3개 이상인지 확인하여, 그
값이 참일 경우 해당 블록들을 삭제대상 메모리에 추가
한다.
21. 이 과정을 거쳐
•수백 번의 수정을 하였고,
•VBA로 그 실행가능 여부를 확인하였습니다
21
24. 필드 생성
24
•이동시킬 블록이 필요,
•이동할 필드와 필드를 한정지어 주는 벽이 필요
•필드의 위치는 좌표로 표시한다
OBJECT
좌표, 벽, 필드, 블록
25. 좌표
7x7
25
• 9x9칸의 형태
- 7x7개의 블록을 수용
• 좌표하나는 셀을 의미
- 좌표 하나당 하나의 셀을 할당한다
좌 표 ( y, x ) 는 좌 표 범 위 내 의 임 의 의 좌 표 를 의 미 한 다 .
정의
임의의 좌표가 상, 하, 좌, 우로
이동 시 각각 y-1, y+1, x-1, x+1로 값을 변경한다.
26. 벽
7x7
26
• 9x9칸의 형태
- 7x7개의 블록을 둘러 싼 셀들을 벽으로 한다
- 블록, 빈공간과 다른 값을 갖는다
• 고정되어 있고, 지워지지 않는다
- 파이어팡, 앵그리팡 등에 의해 지워지지 않는다
- 블록은 벽안에서만 존재한다
- 벽은 이동하지 않고 고정되어 있다
(1,1)부터 (1,9) 까지, (9,1)부터 (9,9) 까지,
정의
(2,1)부터 (8,1) 까지, (2,9)부터 (8,9)까지의
범위를 벽으로 하며, 범위 내 셀 값은 “wall”로 한다.
27. 필드
27
• 벽으로 둘러싸인 공간
• 필드 7x7, 49개의 블록으로 채워진다
- 빈공간이 생기면 바로 채워진다
정의
(2,2)부터 (8,8) 까지의 범위를 필드로 하며, 범위 내
셀 값은 “none”로 한다. 블록으로 필드가 채워질 경우
필드의 chr 값은 해당 블록의 값을 갖는다.
28. 블록
28
• 기본 블록 7개
- 원숭이, 병아리, 강아지, 토끼, 쥐, 돼지, 고양이 총 7개
• 파이어팡
- 폭탄 컨셉
• 랜덤팡
- 블록 5개를 한 번에 지우면 생성
다
- 랜덤팡을 선택하면 기본 블록 중 1종의 블록을 모두 삭제한
• 앵그리팡
- 블록 4개를 한 번에 지우면 생성
- 앵그리팡이 지워질 때 앵그리팡을 중심으로 3x3칸이 추가
삭제
정의
기본 블록 7개, 특수블록 9개(파이어팡1개, 랜덤팡 1개, 앵그리팡 7개) 총 16개의 블록이
존 재 한 다 . 기 본 블 록 의 셀 값 은 원숭이, 병아리, 강아지, 토끼, 쥐, 돼지, 고양이 순 서 대 로 ” c h r 1 ” , “ c h r 2 ” ,
“chr3”, “chr4”, “chr5”, “chr6”, “chr7” 값을 갖는다.
- 기본블록마다 각1개씩 총 7개 존재
하나의 셀에 하나의 chr값만을 갖는다.
(특수 블록은 특수 블록 파트에서 따로 다룬다.)
29. 그 외의 OBJECT들
• 시간 – 시작 후 60초가 지나면 게임 종료
• 콤보 – 콤보 파트에서 다룸
• 점수 – 점수 파트에서 다룸
• 라스트팡 – 라스트팡 파트에서 다룸
• 피버모드 – 피버모드 파트에서 다룸
29
35. 블록 생성
35
• 필드에 블 록 을 채 운 다 .
• 순서
(8,2)부터 (8,8)까지채우고 (7,2)로 이동하여 (7,8)까
지 채우는 방식으로 x축을 모두 채우면 y-1로 이동하여
최종적으로 (2,8)까지 채운다.
• 블록의 선택
블록에 chrA값을 입력한다.
정의
chrA A=random(1,7)
단 , ( y, x ) 에 블 록 을 채 워 넣 을 경 우 ( y + 1 , x ) , ( y + 2 , x )
의 chr값을 검사하여 연속하는 두 값이 같을 경우, 이
셀 에 한 해 그 c h r 값 을 제 외 한 다 . ( y, x - 1 ) , ( y, x - 2 ) 에 도
똑같이 적용하며, 둘 다 참일 경우 중복으로 적용가능하
다.
(셀의 chr값이 none 이면 빈칸, chrA이면 기본 블록이
생성된다.)
38. 블록을 선택하면
• 일반 블록은 이동할 수 있게 된다
• 특수 블록은 고유한 기능이 있다
• 일반 블록이 이동하여 지울게 없을 경우
다시 원상복귀
38
39. 블록 선택/이동 정의
39
• 기본 블록을 선택하여 이동시킨다.
• ( y, x ) 의 블 록 을 선 택 하 면 해 당 블 록 의 모 습 이 변 하 여
다른 블록들과 구분할 수 있으며, 이동가능한 상태가 된
다. (단, 특수 블록은 예외. 특수블록 파트에서 다룸.)
정의
• (y-1,x), (y+1,x), (y,x-1), (y,x+1) 중 하나를 선택할 수 있으며,
하나를 선택하면 그 셀의 chr값과 (y,x)의 chr값이 뒤바뀐다.
• 이동 후 3개가 연달아 배열되었는지를 검사하여 검사 값이 거짓
이면 블록이 이동하기 전으로 되돌아간다. 되돌아가기 까지 1초 정
도의 시간이 걸리기 때문에 콤보를 잇는데 큰 방해 요소가 된다.
41. 지울게 있는지 확인하는 단계
• “팡체크”로 명명
• 시행착오에서 다루었던 내용
“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,
그 블록은 ‘삭제대상’으로 메모리에 저장된다.
삭제대상의 각 블록은 (삭제대상이 가로일 경우) 위 아
래 세로 검사를 하여 블록이 3개 이상인지 확인하여, 그
값이 참일 경우 해당 블록들을 삭제대상 메모리에 추가
한다.
이 검사가 종료되면 삭제대상의 범위를 삭제한다.”
• 더 확실한 방법이 있다.
41
42. 모든 경우의 수를 검사하는 방법
42
빨간색 블록을 왼쪽으로 이동하였
다
빨간색 블록이 터질 수 있는 패턴
은
‘ㅓ’범위 내에서만 가능하다
블록이 3개 이상 뭉쳐 있는 형태는 이 단계에 존재 불
가
43. ㅓ 범위 내의 존재가능한 모든 패턴
43
블록 이동 시
터질 수 있는
모든 패턴
총 12개
47. 팡체크
47
상, 하, 좌, 우 한 방향당 24개씩
96개의 패턴이 존재
한 방향으로 이동 시
해당 방향 검사만 실행
48. 팡체크
48
• 이동 시킨 블록을 중심으로 터질 블록이 있는지 확인한다.
• 종류
상, 하, 좌, 우 한 방향 당 2개씩 총 8개의 팡체크가 있다. 하나의 팡
체크는 12개의 패턴이 있다. “왼쪽팡체크1”, ”왼쪽팡체크2” ,
정의
“오른쪽팡체크1”, “오른쪽팡체크2”, “위쪽팡체크1”, “위쪽팡체크2”,
“아래쪽팡체크1”, “아래쪽팡체크2”.
• 이동/선택 단계에서 블록을 이동시킨 방향에 따라 팡체크의 방향
도 정해진다.
예) 왼쪽이동 -> 왼쪽팡체크1 -> 왼쪽팡체크2 -> 지움단계
50. 왼쪽팡체크2
50
(y-2,x-1) (y-2,x)
(y-1,x-1) (y-1,x)
(y,x-3)
(y,x-2)
(y,x-1)
(y,x)
(y,x+2) (y,x+3)
(y+1,x-1) (y+1,x)
(y+2,x-1) (y+2,x)
• 왼쪽팡체크1이 끝난 다음 실행한다.
• 회색의 범위 내 모든 블록의 chr값을 검사한다.
정의
• 위의 12개의 패턴 모양 대로 inttemp1과 패턴 범위 내 블록들의
Chr값을 비교하여 값이 모두 참이면 그 블록을 „삭제대상‟으로 추가한다.(단, 12
개의패턴 모양은 180˚ 회전한 모양)
• 삭제대상이 있으면 “지움”단계로 들어간다. 삭제대상이 없으면
이동/선택단계로 돌아가고, 이동한 블록을 다시 돌려 놓는다.
51. 그 외 팡체크
51
(y-1,x)
(y,x-1) (y,x) (y,x+1)
(y+1,x)
• 왼쪽팡체크와 같은 순서를 따른다
• inttemp2의 값은 상, 하, 좌, 우 에 따라 (y-1,x), (y+1,x), (y,x-1),
(y,x+1)의 chr값이다.
정의
• 12개의 패턴 모양 은 위쪽팡체크 시 시계방향으로 90 ˚ 회전, 아래
쪽팡체크 시 시계반대방향으로 90 ˚ 회전, 오른쪽팡체크 시
180˚ 회전한 모양으로 한다. (팡체크2 는 그 모양을 다시 180˚회전)
• 삭제대상이 있으면 “지움”단계로 들어간다. 삭제대상이 없으면
이동/선택단계로 돌아가고, 이동한 블록을 다시 돌려 놓는다.
59. 그럼 콤보는 언제 생성될까?
• 직접 블록을 움직여 터트릴 때 1추가
• 파이어팡을 터트릴 때 1추가
• 랜덤팡을 터트릴 때 1추가
• 단, 콤보가 추가된 후 새로운 콤보 추
가 없이 3초가 지나면 콤보는 0이 된다
• 또한, 피버모드가 실행될 때 마다 콤보
가능 시간(최초 3초)은 0.5초 줄어든다
59
60. 콤보에 영향을 미치는 요인?
• 파이어팡, 랜덤팡을 사용 시 시간이 멈춘다
- 애니팡을 해본 사람이라면 폭탄, 랜덤팡의 중요성을 알것이다
• 2초
60
61. 콤보
61
• 일정 조건을 만족하면 콤보가 생성되고 콤보가 높을 수록 더 높은
점수를 얻는다.
• 콤보생성조건
직접움직인 블록이 터지거나, 랜덤팡, 파이어팡을 사용하면
“combocount” 메모리의 값을 1 추가한다. (최초 combocount =0)
combocount가 1이상이면 콤보가 활성화 되고 combotime이 3으로
설정되어 1초에 1씩 줄어든다.
정의
• 콤보가능시간
combocount가 1이상일 때 추가없이 combotime이 0이 되면,
combocount는 0으로 초기화되고 combotime은 비활성화된다. 피
버모드를 활성화시킬 때마다 combotime의 최대값은 0.5초씩 줄어
든다. Combotime의 최대값이 1.5초가 되면 더이상 줄어들지 않는
다.
• 콤보시간연장
파이어팡이나 랜덤팡을 사용하면 애니메이션이 끝날 때까지(2초)
combotime의 값은 고정되어 변하지 않는다.
74. 블록이 정리 되었는지 확인
(2,x)
(3,x)
위에는 블록이 없어야 한다
(y,x)부터 맨위까지 검사하여
블록이 없어야 종료
(y,x)
(3,x)
블록이 있다면 다음 과정으로
아래는 빈칸이 없어야 한다
(y,x)부터 맨 앞래까지 검사하여
(y,x)
빈칸이 없으면 (y,x)를 한칸 위로
빈칸이 있으면 복사/붙여넣기
(8,x)
74
96. 빈칸채움
96
• 블록지움이 끝나고 “필드”의 빈칸을 검사하여 채운다.
• 검사 방법
1. 블록생성 순서대로 셀 값이 “none”인지를 검사한다.
2. 그 결과가 참이라면, (y-1,x)부터 (2,x)까지의 chr값을 복사하여
(y,x)부터 (3,x)까지 붙여넣기 한다.
2-1. 끝까지 검사하여 모두 셀 값이 “none”이 아니라면 “필드검사”를 실
행한다.
정의
3. (y,x)부터 (2,x)까지를 선택하여 해당 범위의 셀 값들을 검사하여 빈칸이 아닌게 있
으면 4.를 실행한다.
3-1. 모두 빈칸이라면 5.를 실행한다.
4. (y,x)부터 (8,x)까지를 선택하여 해당 범위의 셀 값들을 검사하여 빈칸이 있으면 1.
부터 다시 반복한다.
4-1. 빈칸이 없으면 y = y-1로 하고 1.부터 다시 반복한다.
5. “팡가능검사”를 실행한다.
6. 팡가능검사 결과 값이 0이면 “팡가능블록”을 생성하고, 0이 아니면 해당 셀에
chrA값을 입력한다.
chrA
A=random(1,7)
97. 팡가능검사
97
• 빈칸에 블록을 생성하기 전 “필드”를 검사하여 „이동하여 3개가
연달아 배열될 수 있는 블록‟이 있는지를 확인한다.
• 블록생성 순서대로 임의의 좌표 (y,x)를 이동시키며, 각 셀 마다
정의
48개의 패턴 모양으로 해당하는 셀 값들을 검사한다. 패턴의 두 주
황색 셀과 검은색 셀, 3가지 셀의 chr값이 모두 같을 경우
mvablecount = mvablecount +1 로 한다. (최초0)
• (y,x)가 (2,8)이 되면 검사를 종료한다.
98. 팡가능블록생성
98
• 움직여서 터트릴 수 있는 블록이 없는 경우 움직여서 터트릴 수
있는 블록을 생성한다.
• 움직여서 터트릴 수 있는 블록 은 “팡가능블록”으로 정의한다.
• 빈칸채움에서 블록을 생성해야할 빈칸 (y,x)가 정해지면,
정의
팡가능 검사를 하여 팡가능블록을 생성할지 랜덤블록을 생성할지
를 정한다.
• 방법
팡가능 블록 생성시 빈칸(y,x)에 48개의 패턴을 적용하여 각 패턴마
다 두 주황색의 값이 동일한지를 검사한다. 값이 동일하다면 빈칸
(y,x)에 해당 chr값을 입력하고 생성을 종료한다.
(24개 모두 동일한 값이 없다면, 랜덤한 블록을 생성한다.)
115. 팡불가블록생성
115
• 움직여서 터트릴 수 있는 블록이 너무 많은 경우 움직여서 터트릴
수 없는 블록을 생성한다.
• 움직여서 터트릴 수 없는 블록 은 “팡불가블록”으로 정의한다.
• 빈칸채움에서 블록을 생성해야할 빈칸 (y,x)가 정해지면,
정의
팡가능 검사를 하여 팡가능블록 혹은 팡불가블록을 생성할지 랜덤
블록을 생성할지를 정한다.
• 방법
팡가능 블록 생성시 빈칸(y,x)에 48개의 패턴을 적용하여 각 패턴마
다 두 주황색의 값이 동일한지를 검사한다. 값이 동일하다면 빈칸
(y,x)에 입력할 chr값(1~7) 중 해당 chr값을 제외한다. 24개의 패턴
을 모두 적용하면 남은 chr값 중 하나를 랜덤으로 (y,x)에 입력하고
생성을 종료한다.
155. 필드체크
155
• 빈칸채움 후 필드를 검사하여 터트릴 블록이 있는지 검사한다.
• 검사방법
1. 블록생성 순서대로 임의의 좌표 (y,x)를 이동시키며 각 셀 마다 위의 9개 패턴
모양대로 셀의 chr값을 검사한다.
1-1. 주황색 범위의 chr값이 모두 동일하면 rngcrsA메모리에 (y,x)의 좌표를 저장한
다.(rngcrsA의 최초 값 “nothing”, A = 1 ~ 20)
1-2. 임의의 좌표(y,x)가 (2,6)이 되면 (y,x)의 이동을 종료한다
1-3. 저장된 rngcrsA값 각각에 대해 1-4.~ 1-5.의 과정을 수행한다. (최초,rngcrs1)
정의
1-4. rngcrsA의 값이 nothing이라면 A = A + 1
1-4. rngcrsA의 값이 nothing이 아니라면 그 위치의 좌표를 (y,x)로 할당한다.
1-5. (y,x)를 중심으로 “상하좌우검사”를 실시한다.
2. 블록생성 순서대로 임의의 좌표 (y,x)를 이동시키며 각 셀 마다 (y,x), (y,x+1),
(y,x+2) 셀의 chr값을 검사한다.
2-1. 1-1부터 1-5의 과정을 수행하되 주황색의 범위를 (y,x), (y,x+1), (y,x+2)로 한다.
3. 블록생성 순서대로 임의의 좌표 (y,x)를 이동시키며 각 셀 마다 (y,x), (y-1,x),
(y-2,x) 셀의 chr값을 검사한다.
3-1. 1-1부터 1-5의 과정을 수행하되 주황색의 범위를 (y,x), (y-1,x), (y-2,x) 로 한다.
4. Loopvalue의 값이 true라면, “빈칸채움”을 실행하고 그 값을 false로 바꾼다.
5. Loopvalue의 값이 false라면, “팡가능검사”를 실행한다.
156. 상하좌우검사
156
• 터트릴 블록의 상하좌우를 검사하여 터트릴 범위를 추가/확정한
다.
• 검사방법
1. “위쪽검사” 실행
정의
2. “왼쪽검사” 실행
3. “아래쪽검사” 실행
4. “오른쪽검사” 실행
5. rngcrsA의 값을 “삭제대상”으로 한다.
6. “블록지움” 실행한다. “Loopvalue”의 값을 true로 한다.
7. 해당 rngcrsA 값을 초기화한다.
157. 위쪽검사
157
• 터트릴 블록의 위쪽을 검사하여 터트릴 범위를 추가/확정한다.
• 검사방법
1. (y,x)의 chr값을 crstemp1 메모리에 저장한다.
정의
2. (y-a,x)의 chr값을 crstemp2 메모리에 저장한다. (y-2 >= a > 0,
최초 a=1)
3. crstemp1과 crstemp2를 비교하여 그 값이 참이면, (y-a,x)를
rngcrsA의 범위에 추가한다.
4. crstemp1과 crstemp2를 비교하여 그 값이 참이면, a=a+1, 1. 부
터 다시 진행한다. (a>y-2이면, 검사를 종료한다.)
5. 거짓이면 검사를 종료한다.
158. 왼쪽검사
158
• 터트릴 블록의 왼쪽을 검사하여 터트릴 범위를 추가/확정한다.
• 검사방법
1. (y,x)의 chr값을 crstemp1 메모리에 저장한다.
정의
2. (y,x-a)의 chr값을 crstemp2 메모리에 저장한다. (x-2 >= a > 0,
최초 a=1)
3. crstemp1과 crstemp2를 비교하여 그 값이 참이면, (y,x-a)를
rngcrsA의 범위에 추가한다.
4. crstemp1과 crstemp2를 비교하여 그 값이 참이면, a=a+1, 1. 부
터 다시 진행한다. (a>x-2이면, 검사를 종료한다.)
5. 거짓이면 검사를 종료한다.
159. 아래쪽검사
159
• 터트릴 블록의 아래쪽을 검사하여 터트릴 범위를 추가/확정한다.
• 검사방법
1. (y,x)의 chr값을 crstemp1 메모리에 저장한다.
정의
2. (y+a,x)의 chr값을 crstemp2 메모리에 저장한다. (8-y>= a > 0,
최초 a=1)
3. crstemp1과 crstemp2를 비교하여 그 값이 참이면, (y+a,x)를
rngcrsA의 범위에 추가한다.
4. crstemp1과 crstemp2를 비교하여 그 값이 참이면, a=a+1, 1. 부
터 다시 진행한다. (a>8-y이면, 검사를 종료한다.)
5. 거짓이면 검사를 종료한다.
160. 오른쪽검사
160
• 터트릴 블록의 오른쪽을 검사하여 터트릴 범위를 추가/확정한다.
• 검사방법
1. (y,x)의 chr값을 crstemp1 메모리에 저장한다.
정의
2. (y,x+a)의 chr값을 crstemp2 메모리에 저장한다. (8-x>= a > 0,
최초 a=1)
3. crstemp1과 crstemp2를 비교하여 그 값이 참이면, (y,x+a)를
rngcrsA의 범위에 추가한다.
4. crstemp1과 crstemp2를 비교하여 그 값이 참이면, a=a+1, 1. 부
터 다시 진행한다. (a>8-x이면, 검사를 종료한다.)
5. 거짓이면 검사를 종료한다.
163. 팡가능검사
163
• 빈칸에 블록을 생성하기 전 “필드”를 검사하여 „이동하여 3개가 연달아 배열될
수 있는 블록‟이 있는지를 확인한다.
• 블록생성 순서대로 임의의 좌표 (y,x)를 이동시키며, 각 셀 마다
48개의 패턴 모양으로 해당하는 셀 값들을 검사한다. 패턴의 두 주황색 셀과 검
은색 셀, 3가지 셀의 chr값이 모두 같을 경우 mvablecount = mvablecount +1 로
한다. (최초0)
정의
• (y,x)가 (2,8)이 되면 검사를 종료한다.
• 검사 결과 mvablecouont 값이 0이고, bombcount 값이 0이고,
randomcount 값도 0이면, 터트릴 수 있는 블록이 없으므로
“블록생성”을 실행한다.(bombcount,randomcount는 파이어팡,
랜덤팡의 갯수)
• 검사 결과 위의 세 값 중 하나라도 0이 아닌게 있다면,
“이동/선택”을 실행한다.
187. 파이어팡 생성
187
• 파이어팡을 생성한다.
• 생성방법
1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “파이어팡생성”
단계를 실행한다.
정의
2. 필드의 (8,2)부터 (2,8)까지 모든 셀의 chr값을 검사한다. 각 셀마
다 그 값이 “none”이면, dltcount = dltcount + 1으로 한다.
(최초, dltcount = 0)
3. dltcount의 값이 60이상이면, 블록생성 순서대로 셀의 chr값을
검사하여 그 값이 “none”이면, 해당 셀의 sp 값을 “bomb”로 하고,
dltcount값은 0으로 초기화한다.
4. dltcount의 값이 60이상이면, bombcount = bombcount + 1로 한
다. (최초, bombcount = 0)
194. 파이어팡 사용
194
• 파이어팡을 사용한다.
• 사용방법
이동/선택 단계에서 파이어팡을 선택하면 파이어팡이 사용된다.
정의
• 터지는 범위
선택한 파이어팡의 좌표 (y,x). (2,x)부터 (7,x)까지, (8,2)부터 (8,8)
까지를 “삭제대상”으로 하여 삭제한다.
• bombcount
bombcount = bombcount – 1 로한다. bombcount의 값이 0이하로
내려가면 그 값은 0으로 한다.
216. 파이어팡 사용
216
• 파이어팡을 사용한다.
• 사용방법
이동/선택 단계에서 파이어팡을 선택하면 파이어팡이 사용된다.
• 터지는 범위
정의
선택한 파이어팡의 좌표 (y,x). (2,x)부터 (7,x)까지, (8,2)부터 (8,8)
까지를 “삭제대상”으로 한다. 삭제대상 전체를 검사하여, 셀의 sp값
이 “R”이면 “랜덤팡의 범위”를 삭제대상에 추가한다. Sp값이 “A”이
면 “앵그리팡의 범위”를 삭제대상에 추가한다. 검사가 끝나면, 삭제
대상을 삭제한다.
• bombcount
bombcount = bombcount – 1 로한다. bombcount의 값이 0이하로
내려가면 그 값은 0으로 한다.
234. 랜덤팡 생성
234
• 랜덤팡을 생성한다.
• 생성방법
블록이동이나 빈칸채움으로 5개 이상의 같은 블록이 한 번에 터지
는 경우 랜덤팡을 생성한다.
• 생성위치
정의
1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “랜덤팡생성”
단계를 실행한다.
2. 블록이동으로 생성될 경우, 선택하여 움직인 블록의 최종 위치
(y,x)에 랜덤팡이 생성된다.
3. 빈칸채움으로 생성될 경우, 블록생성 순으로 빈칸을 검사하여
높은 행에, 같은 행이라면 낮은 열에 랜덤팡을 생성한다.
4. 랜덤팡을 생성한다는 것은 셀의 sp값을 R로 하고, 해당 캐릭터
블록이 위치를 차지하는 것을 의미한다.
5. 랜덤팡이 생성되면, randomcount = randomcount + 1로 한다.
(최초, randomcount = 0)
239. 랜덤팡 사용
239
• 랜덤팡을 사용한다.
• 사용방법
이동/선택 단계에서 랜덤팡을 선택하면 랜덤팡이 사용된다.
• 터지는 범위
정의
1. randomtemp메모리에 chr값 chrR을 저장한다. R = random(1,7)
로 한다.
2. 필드 전체를 검사하여 셀 값이 randomtemp와 같을 경우 해당
셀을 삭제대상으로 추가한다. (최초, 랜덤팡의 셀이 삭제대상)
3. 삭제대상을 삭제한다.
• randomcount
randomcount = randomcount – 1 로한다. randomcount의 값이 0
이하로 내려가면 그 값은 0으로 한다.
245. 앵그리팡 생성
245
• 앵그리팡을 생성한다.
• 생성방법
블록이동이나 빈칸채움으로 4개 이상의 같은 블록이 한 번에 터지
는 경우 앵그리팡을 생성한다.
정의
• 생성위치
1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “앵그리팡생성”
단계를 실행한다.
2. 블록이동으로 생성될 경우, 선택하여 움직인 블록의 최종 위치
(y,x)에 앵그리팡이 생성된다.
3. 빈칸채움으로 생성될 경우, 블록생성 순으로 빈칸을 검사하여
높은 행에, 같은 행이라면 낮은 열에 앵그리팡을 생성한다.
4. 랜덤팡을 생성한다는 것은 셀의 sp값을 A로 하고, 해당 캐릭터
블록이 위치를 차지하는 것을 의미한다.
250. 그 외 팡체크
250
(y-1,x)
(y,x-1) (y,x) (y,x+1)
(y+1,x)
• 왼쪽팡체크와 같은 순서를 따른다
• inttemp2의 값은 상, 하, 좌, 우 에 따라 (y-1,x), (y+1,x), (y,x-1),
(y,x+1)의 chr값이다.
정의
• 12개의 패턴 모양 은 위쪽팡체크 시 시계방향으로 90 ˚ 회전, 아래쪽팡체크 시
시계반대방향으로 90 ˚ 회전, 오른쪽팡체크 시
180˚ 회전한 모양으로 한다. (팡체크2 는 그 모양을 다시 180˚회전)
• 삭제대상이 있으면 “지움”단계로 들어간다. 삭제대상이 없으면
이동/선택단계로 돌아가고, 이동한 블록을 다시 돌려 놓는다.
• 빨간 테두리의 패턴이 실행되면, 4개는 angryvalue = true, 5개는
randomvalue = true로 한다. (두 값 모두 최초, false)
251. 앵그리팡 생성
251
• 앵그리팡을 생성한다.
• 생성방법
angryvalue = true이면, 다음의 위치에 앵그리팡을 생성하고,
angryvalue 를 false로 한다. angryvalue = false이면, 앵그리팡을
생성하지 않는다.
정의
• 생성위치
1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “앵그리팡생성”
단계를 실행한다.
2. 블록이동으로 생성될 경우, 선택하여 움직인 블록의 최종 위치
(y,x)에 앵그리팡이 생성된다.
3. 빈칸채움으로 생성될 경우, 블록생성 순으로 빈칸을 검사하여
높은 행에, 같은 행이라면 낮은 열에 앵그리팡을 생성한다.
4. 랜덤팡을 생성한다는 것은 셀의 sp값을 A로 하고, 해당 캐릭터
블록이 위치를 차지하는 것을 의미한다.
252. 랜덤팡 생성
252
• 랜덤팡을 생성한다.
• 생성방법
randomvalue = true이면, 다음의 위치에 랜덤팡을 생성하고,
randomvalue 를 false로 한다. randomvalue = false이면, 랜덤팡을 생
성하지 않는다.
• 생성위치
정의
1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “랜덤팡생성”
단계를 실행한다.
2. 블록이동으로 생성될 경우, 선택하여 움직인 블록의 최종 위치 (y,x)
에 랜덤팡이 생성된다.
3. 빈칸채움으로 생성될 경우, 블록생성 순으로 빈칸을 검사하여 높은
행에, 같은 행이라면 낮은 열에 랜덤팡을 생성한다.
4. 랜덤팡을 생성한다는 것은 셀의 sp값을 R로 하고, 해당 캐릭터 블록
이 위치를 차지하는 것을 의미한다.
5. 랜덤팡이 생성되면, randomcount = randomcount + 1로 한다. (최초,
randomcount = 0)
255. 상하좌우검사
255
• 터트릴 블록의 상하좌우를 검사하여 터트릴 범위를 추가/확정한
다.
• 검사방법
1. “위쪽검사” 실행
2. “왼쪽검사” 실행
정의
3. “아래쪽검사” 실행
4. “오른쪽검사” 실행
5. rngcrsA의 범위 내 셀을 검사하여 그 수가 4개 라면, angryvalue
= true로 하고, 5개 이상이라면, randomvalue = true로 한다.
6. rngcrsA의 값을 “삭제대상”으로 한다.
7. “블록지움” 실행한다. “Loopvalue”의 값을 true로 한다.
8. 해당 rngcrsA 값을 초기화한다.
260. 앵그리팡을 고려해야 하는 블록 지움들
팡종류
파이어팡
랜덤팡
앵그리팡
블록선택
O
O
X
블록이동
X
X
O
파이어팡
X
O
O
랜덤팡
X
X
XX
앵그리팡
X
X
O
피버팡
X
X
O
필드배열
X
X
O
260
O : 터진다.
다.
X : 영향을 주지 않는다.
XX : 터지지만 일반블록으로 취급한
랜덤팡을 제외하고
모두 앵그리팡을 고려
263. 앵그리팡 사용
263
• 블록이 지워 질 때 앵그리팡의 삭제 범위를 추가한다.
• 사용방법
블록이 지워 질 때 “삭제대상”의 범위를 검사하여 셀의 sp값이
A이면 아래의 앵그리팡의 “범위”를 추가한다.
정의
• 터지는 범위
1. 셀의 sp값이 A인 셀의 좌표(y,x)를 중심으로 (y-1,x-1), (y-1,x),
(y-1,x+1), (y,x-1), (y,x+1), (y+1,x-1), (y+1,x), (y+1,x+1)을 “삭제대
상”에 추가한다.
2. 1.에서 갱신된 삭제대상의 범위를 다시 검사하여 셀의 sp값이 A
이면 1.부터 반복한다. 갱신된 삭제대상의 모든 셀의 sp값을 검사
하여 A가 없을 때까지 반복한다.
285. 앵그리팡 사용
285
• 블록이 지워 질 때 앵그리팡의 삭제 범위를 추가한다.
• 사용방법
블록이 지워 질 때 “삭제대상”의 범위를 검사하여 셀의 sp값이
A이면 아래의 앵그리팡의 “범위”를 추가한다.
정의
• 터지는 범위
1. 셀의 sp값이 A인 셀의 좌표(y,x)를 중심으로 (y-1,x-1), (y-1,x),
(y-1,x+1), (y,x-1), (y,x+1), (y+1,x-1), (y+1,x), (y+1,x+1)의 sp값을
검사하여 값이 존재하지 않을 경우에만 해당 셀을 “삭제대상”에 추
가한다.
2. 1.에서 갱신된 삭제대상의 범위를 다시 검사하여 셀의 sp값이 A
이면 1.부터 반복한다. 갱신된 삭제대상의 모든 셀의 sp값을 검사
하여 A가 없을 때까지 반복한다.
286. 파이어팡 사용
286
• 파이어팡을 사용한다.
• 사용방법
이동/선택 단계에서 파이어팡을 선택하면 파이어팡이 사용된다.
• 터지는 범위
정의
선택한 파이어팡의 좌표는 (y,x). (2,x)부터 (7,x)까지, (8,2)부터 (8,8)
까지의 범위중 각 셀의 sp값을 검사하여 그 값이 “bomb”가 아니면
해당 셀을 “삭제대상”으로 한다. 삭제대상 전체를 검사하여, 셀의
sp값이 “R”이면 “랜덤팡의 범위”를 삭제대상에 추가한다. Sp값이
“A”이면 “앵그리팡의 범위”를 삭제대상에 추가한다. 검사가 끝나면,
삭제대상을 삭제한다.
• bombcount
bombcount = bombcount – 1 로한다. bombcount의 값이 0이하로
내려가면 그 값은 0으로 한다.
304. 콤보
304
• 일정 조건을 만족하면 콤보가 생성되고 콤보가 높을 수록 더 높은 점수를 얻는다.
• 콤보생성조건
직접움직인 블록이 터지거나, 랜덤팡, 파이어팡을 사용하면 “combocount” 메모리의 값을 1
추가한다. (최초 combocount =0) combocount가 1이상이면 콤보가 활성화 되고
combotime이 3으로 설정되어 1초에 1씩 줄어든다.
• fevercount
1. combocount가 1추가 될 때 마다, fevercount = fevercount + 1로 한다.
정의
(최초, fevercount = 0)
2. fevercount가 5가 되면 fevervalue = true 로 하고 fevercount = 0으로 한다. fevervalue가
true인 동안 fevercount는 0으로 값이 고정된다.
• 콤보가능시간
Combocount가 1이상일 때 추가없이 combotime이 0이 되면, combocount는 0으로 초기화
되고 combotime은 비활성화된다. 피버모드를 활성화시킬 때마다 combotime의 최대값은
0.5초씩 줄어든다. Combotime의 최대값이 1.5초가 되면 더이상 줄어들지 않는다.
• 콤보시간연장
파이어팡이나 랜덤팡을 사용하면 애니메이션이 끝날 때까지(2초) combotime의 값은 고정
되어 변하지 않는다.
305. 블록지움
305
• fevervalue = false 일 때
“삭제대상”내 셀의 chr값과 sp값을 “none”으로 변경하며 0.5초 동
안 삭제될 때 나타나는 애니메이션이 나온다. (블록채움시간 0.5초)
• fevervalue = true 일 때
정의
1. “삭제대상”의 범위 내 임의의 셀(y,x)에 대하여 (y,x)를 중심으로
(y-1,x), (y,x-1), (y,x+1), (y+1,x) 각 네 개의 셀의 sp값을 검사하여
값이 존재하지 않을 경우에만 해당 셀을 “삭제대상”에 추가한다.
2. “삭제대상”내 셀의 chr값과 sp값을 “none”으로 변경하며 0.5초
동안 삭제될 때 나타나는 애니메이션이 나온다. (블록채움시간 0.5
초)
306. 피버모드
306
• fevervalue가 true이면 피버모드가 활성화된 것으로 한다.
• fevertime
피버모드는 4초 동안 유지된다.
정의
1. 피버모드가 활성화되면, fevertime = 4로 되고, 1초마다
fevertime = fevertime – 1 로 한다.
2. 1.을 반복하여 fevertime = 0이 되면 피버모드는 불활성화되며,
fevervalue = false로 한다.
• 피버모드가 활성화된 동안에는 반짝이는 이펙트를 추가한다.
313. 라스트팡
313
• 라스트팡
게임 종료 후, 남아있는 파이어팡, 랜덤팡, 앵그리팡을 사용한다.
정의
• 방법
블록생성 순서대로 임의의 셀(y,x)을 검사하여, 해당 셀의 sp값이
“A” 혹은 “R” 혹은 “bomb”라면, 각각 “앵그리팡사용”, “랜덤팡사용”,
“파이어팡사용”을 실행하고, “삭제대상”을 삭제한다.
332. 왼쪽팡체크2
332
(y-2,x-1) (y-2,x)
(y-1,x-1) (y-1,x)
(y,x-3)
(y,x-2)
(y,x-1)
(y,x)
(y,x+2) (y,x+3)
(y+1,x-1) (y+1,x)
(y+2,x-1) (y+2,x)
• 왼쪽팡체크1이 끝난 다음 실행한다.
• 회색의 범위 내 모든 블록의 chr값을 검사한다.
• 위의 12개의 패턴 모양 대로 inttemp1과 패턴 범위 내 블록들의
정의
Chr값을 비교하여 값이 모두 참이면 그 블록을 „삭제대상‟으로 추가한다.(단, 12개의패턴 모양은
180˚ 회전한 모양)
• 삭제대상으로 추가한 패턴 모양의 블록 수가 7개 이면, comboscore_7line, 6개는
comboscore_6line, 5개는 comboscore_5line, 4개는 comboscore_4line, 3개는 comboscore_3line
을 실행시킨다.
• 삭제대상이 있으면 “지움”단계로 들어간다. 삭제대상이 없으면
이동/선택단계로 돌아가고, 이동한 블록을 다시 돌려 놓는다.
333. 그 외 팡체크
333
(y-1,x)
(y,x-1) (y,x) (y,x+1)
(y+1,x)
• 왼쪽팡체크와 같은 순서를 따른다
• inttemp2의 값은 상, 하, 좌, 우 에 따라 (y-1,x), (y+1,x), (y,x-1),
(y,x+1)의 chr값이다.
정의
• 12개의 패턴 모양 은 위쪽팡체크 시 시계방향으로 90 ˚ 회전, 아래쪽팡체크 시 시계반대방향으
로 90 ˚ 회전, 오른쪽팡체크 시
180˚ 회전한 모양으로 한다. (팡체크2 는 그 모양을 다시 180˚회전)
• 삭제대상으로 추가한 패턴 모양의 블록 수가 7개 이면, comboscore_7line, 6개는
comboscore_6line, 5개는 comboscore_5line, 4개는 comboscore_4line, 3개는 comboscore_3line
을 실행시킨다.
• 삭제대상이 있으면 “지움”단계로 들어간다. 삭제대상이 없으면
이동/선택단계로 돌아가고, 이동한 블록을 다시 돌려 놓는다.
334. 상하좌우검사
334
• 터트릴 블록의 상하좌우를 검사하여 터트릴 범위를 추가/확정한
다.
• 검사방법
1. “위쪽검사” 실행
2. “왼쪽검사” 실행
3. “아래쪽검사” 실행
정의
4. “오른쪽검사” 실행
5. rngcrsA의 범위 내 셀을 검사하여 그 수가 4개 라면, angryvalue
= true로 하고, 5개 이상이라면, randomvalue = true로 한다.
6. rngcrsA의 값을 “삭제대상”으로 한다.
7. fldchain = fldchain + 1로 한다. (최초, fldchain = 0)
8. comboscore_fld를 실행시킨다.
9. “블록지움” 실행한다. “Loopvalue”의 값을 true로 한다.
10. 해당 rngcrsA 값을 초기화한다.
335. 앵그리팡 사용
335
• 블록이 지워 질 때 앵그리팡의 삭제 범위를 추가한다.
• 사용방법
블록이 지워 질 때 “삭제대상”의 범위를 검사하여 셀의 sp값이
A이면 아래의 앵그리팡의 “범위”를 추가한다.
정의
• 터지는 범위
1. 셀의 sp값이 A인 셀의 좌표(y,x)를 중심으로 (y-1,x-1), (y-1,x),
(y-1,x+1), (y,x-1), (y,x+1), (y+1,x-1), (y+1,x), (y+1,x+1)의 sp값을
검사하여 값이 존재하지 않을 경우에만 해당 셀을 “삭제대상”에 추
가한다. Comboscore_angry를 실행한다.
2. 1.에서 갱신된 삭제대상의 범위를 다시 검사하여 셀의 sp값이 A
이면 1.부터 반복한다. 갱신된 삭제대상의 모든 셀의 sp값을 검사
하여 A가 없을 때까지 반복한다.
336. 블록지움
336
• fevervalue = false 일 때
“삭제대상”내 셀의 chr값과 sp값을 “none”으로 변경하며 0.5초 동
안 삭제될 때 나타나는 애니메이션이 나온다. (블록채움시간 0.5초)
• fevervalue = true 일 때
정의
1. “삭제대상”의 범위 내 임의의 셀(y,x)에 대하여 (y,x)를 중심으로
(y-1,x), (y,x-1), (y,x+1), (y+1,x) 각 네 개의 셀의 sp값을 검사하여
값이 존재하지 않을 경우에만 해당 셀을 “삭제대상”에 추가한다.
Comboscore_fever를 실행한다.
2. “삭제대상”내 셀의 chr값과 sp값을 “none”으로 변경하며 0.5초
동안 삭제될 때 나타나는 애니메이션이 나온다. (블록채움시간 0.5
초)
339. 블록 선택/이동 정의
339
• 기본 블록을 선택하여 이동시킨다.
• ( y, x ) 의 블 록 을 선 택 하 면 해 당 블 록 의 모 습 이 변 하 여
다른 블록들과 구분할 수 있으며, 이동가능한 상태가 된다. (단,
특수 블록은 예외. 특수블록 파트에서 다룸.)
• (y-1,x), (y+1,x), (y,x-1), (y,x+1) 중 하나를 선택할 수 있으며,
정의
하나를 선택하면 그 셀의 chr값과 (y,x)의 chr값이 뒤바뀐다.
• 이동 후 3개가 연달아 배열되었는지를 검사하여 검사 값이 거짓이면 블록이
이동하기 전으로 되돌아간다. 되돌아가기 까지 1초 정도의 시간이 걸리기 때문
에 콤보를 잇는데 큰 방해 요소가 된다.
•랜덤팡, 파이어팡
선택한 블록의 sp값이 “R”이면 “랜덤팡사용”을 실행시키고,
comboscore_random을 실행시킨다. “bomb”이면 “파이어팡사용”을 실행시키고,
comboscore_bomb를 실행시킨다.
340. 점수
340
• 블록이 터지면 점수를 추가한다.
• comboscore_3line
점수테이블의 유형 “3개” 행 combocount 열에 따라 점수를 추가한다.
• comboscore_4line
점수테이블의 유형 “4개” 행 combocount 열에 따라 점수를 추가한다.
• comboscore_5line
점수테이블의 유형 “5개” 행 combocount 열에 따라 점수를 추가한다.
• comboscore_6line
점수테이블의 유형 “6개” 행 combocount 열에 따라 점수를 추가한다.
정의
• comboscore_7line
점수테이블의 유형 “7개” 행 combocount 열에 따라 점수를 추가한다.
• comboscore_bomb
점수테이블의 유형 “폭탄” 행 combocount 열에 따라 점수를 추가한다.
• comboscore_random
점수테이블의 유형 “랜덤” 행 combocount 열에 따라 점수를 추가한다.
• comboscore_angry
Comboscore = comboscore + 1000로 한다.
• comboscore_fever
점수테이블의 유형 “피버팡” 행 combocount 열에 따라 점수를 추가한다.
• comboscore_fld
점수테이블의 유형 “필드체인” 행 fldchain 열에 따라 점수를 추가한다.
403. 마그넷 생성
403
• 마그넷팡을 생성한다
정의
• 방법
1. 게임을 시작하기 전에 마그넷팡을 구매한다.
2. 게임 도중 점수 옆의 마그넷팡아이콘을 클릭하면, magnetvalue1 = true,
magnetvalue2 = true, magnetvalue3 = true로 한다.
404. 블록 선택/이동 정의
404
• 기본 블록을 선택하여 이동시킨다.
• magnetvalue1
Magnetvalue1 = true이면, 아래의 “블록 선택/이동”의 실행을 취소하고, 선택된 블록의 sp값을“M”
으로 한다. 선택된 셀의 좌표를 rngM1에 저장한다. Magnetvalue1 = false로 한다.(최초, rngM1 =
nothing, 셀의 sp값이 M이면 “마그넷팡”의 이미지로 바뀐다.)
• ( y, x ) 의 블 록 을 선 택 하 면 해 당 블 록 의 모 습 이 변 하 여
정의
다른 블록들과 구분할 수 있으며, 이동가능한 상태가 된다. (단, 특수 블록
은 예외. 특수블록 파트에서 다룸.)
• (y-1,x), (y+1,x), (y,x-1), (y,x+1) 중 하나를 선택할 수 있으며,
하나를 선택하면 그 셀의 chr값과 (y,x)의 chr값이 뒤바뀐다.
• 이동 후 3개가 연달아 배열되었는지를 검사하여 검사 값이 거짓이면 블록이 이동하기 전으로 되
돌아간다. 되돌아가기 까지 1초 정도의 시간이 걸리기 때문에 콤보를 잇는데 큰 방해 요소가 된다.
• 랜덤팡, 파이어팡
선택한 블록의 sp값이 “R”이면 “랜덤팡사용”을 실행시키고, comboscore_random을 실행시킨다.
“bomb”이면 “파이어팡사용”을 실행시키고, comboscore_bomb를 실행시킨다.
406. 두번째마그넷생성
406
• 두번째 마그넷팡을 생성한다.
정의
• Magnetvalue2 = true이면, 커서가 위치한 좌표 (y,x)의 셀의 chr값이 none이고,
sp값이 none이면, 해당 셀의 sp값을 “M”으로 한다. (y,x)의 chr값이나 sp값이
none이 아닐 경우, 이동 전의 셀의 좌표(y,x)의 sp값을 “M”으로 한다. rngM2(최
초, nothing)에 최종(y,x)좌표를 저장한다. Magnetvalue2 = false로 한다.
(해당 셀에 랜덤팡이나, 앵그리팡이 있다면 생성되지 않고, 다음번에 생성된다.)
• “마그넷사용”을 실행한다.
407. 마그넷 사용
407
• 마그넷팡을 사용한다.
정의
• magnetvalue3 = true이면, rngM1과 rngM2의 좌표 내 행과 열을 모두 선택한
다. 범위 내의 랜덤팡과 파이어팡은 “삭제대상‟에서 제외하고 앵그리팡은 해당
범위를 추가하여, 최종 “삭제대상”을 삭제한다. magnetvalue3 =false로 한다.
408. 예상되는 장점
• 새로운 전략 구사 가능
- 원하는 때 사용 가능
• 운이 없을 때 구제 받을 수 있다
- 판이 안좋을 때
408
409. 예상되는 단점
• 조작이 힘들다
- 3번의 조작이 필요. 콤보를 잇기 어려움.
• 재미를 해칠 수 있다
- 어떻게 될지는 미지수
409