Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
게 임 기 획

포 트 폴 리 오

애니팡 퍼즐시스템 역기
획

2013. 08. 21 배상욱 (hzael@naver.com)
시작하기 전에
게 임 기 획

지 원

포 트 폴 리 오
왜 했는가?

•기획을 경험해보기 위해서

3
왜 애니팡인가?

•경험이 없어 쉬우면서도 유명한 게임을 선택

4
왜 퍼즐시스템인가?

•익숙하면서도 가장 중요한 요소이기 때문에

5
허접한 VBA는 무엇인가?

•역기획 내용을 그대로 구현해 보고자 하였습니
다.

6
하고 싶은 이야기는?

7

•애니팡 퍼즐 시스템 파악

•그것의 역기획(PPT)
•역기획의 구현 (VBA)
•분석 및 새로운 시스템 도입 가능성(PPT, VBA)
애니팡 알고리즘
게 임 기 획

지 원

포 트 폴 리 오
애니팡 알고리즘

실행

게임시간

9

필드생성

<0

블럭생성

종료

이동/선택
애니팡 알고리즘
이동/선택

10

없음

검사

지울게 있음

블럭지움

빈칸채움
애니팡 알고리즘

11

빈칸채움

검사

지울게 있음

블럭지움

없음

이동/선택

있음

검사

움직일게 없음

블럭생성
간단히 하자면

블록 이동

3줄 검사

12

지움

채움
흔한 시행착오
게 임 기 획

지 원

포 트 폴 리 오
애니팡은 쉬운 게임이다?

MATCH-3 게임들,
다양한 만큼 익숙하다

14
애니팡의 규칙

15

애니팡의 주요 규칙 3개
•3개의 블럭을 한줄로 맞추면 터진다
•시간 제한은 1분이다
•블럭을 터뜨리고 3초 이내에
다른 블럭을 터뜨리면 콤보가 이어진다
애니팡의 규칙

16

이러면 터진
다

그러므로
정의는

“같은 캐릭터 블록 3개를 가로나 세로 일렬로 맞추면,
블록이 삭제된다.”
애니팡의 규칙

17

이 경우에는?
3개가 터지면 하나가 남는
다
그러므로 3개 이상으로 변
경
그러므로
정의는

“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,
블록이 삭제된다.”
애니팡의 규칙

18

그럼 이런 경우에는?
다음과 같이
정의하면 될까?
“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,

그러므로
정의는

블록이 삭제된다.
가로와 세로가 각 3개 이상이 결합된 모양의 ...
답은

19

한 묶음으로 삭제되지 않는다
정의가 잘못 되었기 때문이다
- 이미 가로 블럭이 삭제된 후

그러므로
정의는

“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,
블록이 삭제된다.
가로와 세로가 ...
애니팡의 규칙

20

모두 삭제하기 위해서는,

적어도 다음과 같이 정의해야 한다

“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,

그러므로
정의는

그 블록은 ‘삭제대상’으로 메모리에 저장된다.
삭제...
이 과정을 거쳐

•수백 번의 수정을 하였고,

•VBA로 그 실행가능 여부를 확인하였습니다

21
퍼즐 시스템
게 임 기 획

지 원

포 트 폴 리 오
실행

게임시간

필드생성

<0

블럭생성

종료

이동/선택
필드 생성

24

•이동시킬 블록이 필요,
•이동할 필드와 필드를 한정지어 주는 벽이 필요
•필드의 위치는 좌표로 표시한다

OBJECT

좌표, 벽, 필드, 블록
좌표
7x7

25

• 9x9칸의 형태
- 7x7개의 블록을 수용

• 좌표하나는 셀을 의미
- 좌표 하나당 하나의 셀을 할당한다

좌 표 ( y, x ) 는 좌 표 범 위 내 의 임 의 의 좌 표 를 의 미 한 다 ...
벽
7x7

26

• 9x9칸의 형태
- 7x7개의 블록을 둘러 싼 셀들을 벽으로 한다
- 블록, 빈공간과 다른 값을 갖는다

• 고정되어 있고, 지워지지 않는다
- 파이어팡, 앵그리팡 등에 의해 지워지지 않는다
- ...
필드

27

• 벽으로 둘러싸인 공간

• 필드 7x7, 49개의 블록으로 채워진다
- 빈공간이 생기면 바로 채워진다

정의

(2,2)부터 (8,8) 까지의 범위를 필드로 하며, 범위 내
셀 값은 “none”로 한다...
블록

28

• 기본 블록 7개
- 원숭이, 병아리, 강아지, 토끼, 쥐, 돼지, 고양이 총 7개

• 파이어팡
- 폭탄 컨셉

• 랜덤팡
- 블록 5개를 한 번에 지우면 생성

다

- 랜덤팡을 선택하면 기본 블록 ...
그 외의 OBJECT들

• 시간 – 시작 후 60초가 지나면 게임 종료

• 콤보 – 콤보 파트에서 다룸
• 점수 – 점수 파트에서 다룸
• 라스트팡 – 라스트팡 파트에서 다룸
• 피버모드 – 피버모드 파트에서 다룸
...
실행

게임시간

필드생성

<0

블록생성

종료

이동/선택
블록 생성

• 이 때까지의 설정을 바탕으로 블록 생
성

31
블록 생성

32

.

.

.

8

9

.

.

2

3

4

5

49

6

7

.

1

48

셀에 적힌 순서대로 랜덤한 chr 값을 넣는
다.
진행하다보면

3개 짜리가 생긴
다

33
3개짜리가 안생기려면?

34

7

즉, (y,x)에

(y,x)

제외

2

생성될 블록의 왼쪽과 아래쪽 2칸의 셀값을 검
사
두개의 셀값이 같다면
블록 생성

35

• 필드에 블 록 을 채 운 다 .
• 순서
(8,2)부터 (8,8)까지채우고 (7,2)로 이동하여 (7,8)까
지 채우는 방식으로 x축을 모두 채우면 y-1로 이동하여
최종적으로 (2,8)까지 채운...
실행

게임시간

필드생성

<0

블록생성

종료

이동/선택
블록 선택

• 블록을 선택하면 블록을 움직일 수 있다

37
블록을 선택하면

• 일반 블록은 이동할 수 있게 된다
• 특수 블록은 고유한 기능이 있다
• 일반 블록이 이동하여 지울게 없을 경우
다시 원상복귀

38
블록 선택/이동 정의

39

• 기본 블록을 선택하여 이동시킨다.
• ( y, x ) 의 블 록 을 선 택 하 면 해 당 블 록 의 모 습 이 변 하 여
다른 블록들과 구분할 수 있으며, 이동가능한 상태가 된
다. (...
검사

이동/선택

없음

지울게 있음

블록지움

빈칸채움
지울게 있는지 확인하는 단계
• “팡체크”로 명명
• 시행착오에서 다루었던 내용

“같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추
면,

그 블록은 ‘삭제대상’으로 메모리에 저장된다.
삭제대상의 각 블록은 (삭...
모든 경우의 수를 검사하는 방법

42

빨간색 블록을 왼쪽으로 이동하였
다
빨간색 블록이 터질 수 있는 패턴
은
‘ㅓ’범위 내에서만 가능하다
블록이 3개 이상 뭉쳐 있는 형태는 이 단계에 존재 불
가
ㅓ 범위 내의 존재가능한 모든 패턴

43

블록 이동 시
터질 수 있는
모든 패턴
총 12개
이 패턴을 적용하여…

44

실험해 보자

지워지긴하는데…

아래의 3개 짜리는?
왜 생길까?

45

빨간색 블록을 왼쪽으로 이동시키
면
검은색 블록은 오른쪽으로 이동
블록 이동 시
두 블록을 모두 신경써야한다
그러므로

46

빨간색 블록의 경우와 마찬가지로
총 12개의 패턴
합쳐서 총 24개의 패턴

1회 이동 시 24개의 패턴을 검사한다
팡체크

47

상, 하, 좌, 우 한 방향당 24개씩
96개의 패턴이 존재
한 방향으로 이동 시

해당 방향 검사만 실행
팡체크

48

• 이동 시킨 블록을 중심으로 터질 블록이 있는지 확인한다.
• 종류

상, 하, 좌, 우 한 방향 당 2개씩 총 8개의 팡체크가 있다. 하나의 팡
체크는 12개의 패턴이 있다. “왼쪽팡체크1”, ”왼쪽...
왼쪽팡체크1

49

(y-2,x-1)

(y-1,x-1)

(y,x-3)

(y,x-2)

(y,x-1)

(y,x)

(y+1,x-1)

(y+2,x-1)

• 블록을 왼쪽으로 이동시키면 (y,x)의 chr값을 in...
왼쪽팡체크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,...
그 외 팡체크

51

(y-1,x)
(y,x-1) (y,x) (y,x+1)
(y+1,x)

• 왼쪽팡체크와 같은 순서를 따른다
• inttemp2의 값은 상, 하, 좌, 우 에 따라 (y-1,x), (y+1,x), (...
검사

이동/선택

없음

지울게 있음

블록지움

빈칸채움
블록지움

53

삭제 시 애니메이션 있음

지워진 블록이 다시 채워
지기 까지 일정 시간 소
요
약 1초

게임에서 딜레이 역할
블록지움

정의

54

• “삭제대상”내 셀의 chr값과 sp값을 “none”으로 변경하며 0.5초 동
안 삭제될 때 나타나는 애니메이션이 나온다. (블록채움시간 0.5초)
끝?

55

• 너무 짧아서… 콤보 추가
콤보

56

블록이 지워지면

콤보가 생성된다
이런 상황에서도?

57

블록을 터트린 후
블록이 새로 차면서
3칸이 맞춰졌다.

콤보가 추가될까?
콤보가 아니라 체인

58

Combo 대신 Chain 추가
체인도 늘어날 수록
점수가 증가하지만

자동으로 맞춰지는 블록
은
매우 드물다
그럼 콤보는 언제 생성될까?
• 직접 블록을 움직여 터트릴 때 1추가
• 파이어팡을 터트릴 때 1추가
• 랜덤팡을 터트릴 때 1추가
• 단, 콤보가 추가된 후 새로운 콤보 추
가 없이 3초가 지나면 콤보는 0이 된다
•...
콤보에 영향을 미치는 요인?

• 파이어팡, 랜덤팡을 사용 시 시간이 멈춘다
- 애니팡을 해본 사람이라면 폭탄, 랜덤팡의 중요성을 알것이다

• 2초

60
콤보

61

• 일정 조건을 만족하면 콤보가 생성되고 콤보가 높을 수록 더 높은
점수를 얻는다.
• 콤보생성조건
직접움직인 블록이 터지거나, 랜덤팡, 파이어팡을 사용하면
“combocount” 메모리의 값을 1 추가한...
검사

이동/선택

없음

지울게 있음

블록지움

빈칸채움
빈칸채움

63

블록지움 후
빈칸을 검사하여
메꾼다
어떻게?

64

• 위에서 아래로
중력에 이끌리듯

빈칸 위의 블록들을 내린
다
맨 위칸에 새로운 블록 생

65
빈칸채움 완료

• 간단하다

66
그러나

67

???
월간 수학동아 2012년 11월호 49페이지 애니팡기획자 인터뷰
정리하면,

68

• 빈칸을 채우기 전에 움직여서 터트릴 수 있는
블록의 여부를 검사
• 없다면, 터트릴 수 있는 블록을 생성
빈칸채움

이 상태로 터질게 있는지 검사할 수 있을까?

69
터질게 있는지 검사위해 ( = 팡 가능검사)

이 상태로 만들어야 한다

70
그러므로

71

• 빈칸 검사부터 실시
필드 중 빈칸 검사
.

72

.

.

48

49

6

7

none

8

9

.

.

.

1

2

3

4

5

순서대로 셀의 chr값을 검사
그 값이 “none”이면 다음 과정으로
블록을 아래로 내린다

73

(2,x)
(3,x)

(y-1,x)
(y,x)

(y,x)

(y-1,x)부터 (2,x)까지 복사
(y,x)부터 (3,x)까지로 붙여넣
기
블록이 정리 되었는지 확인
(2,x)
(3,x)

위에는 블록이 없어야 한다
(y,x)부터 맨위까지 검사하여
블록이 없어야 종료

(y,x)

(3,x)

블록이 있다면 다음 과정으로

아래는 빈칸이 없어야 한다
(y,...
블록이 정리 되었는지 확인

• 위 과정을 2회 실행

75
블록이 정리 되었는지 확인
(2,x)

범위 중 블록이 있다
다음과정으로
(y,x)

(2,x)

범위중 빈칸이 없다
(y,x)를 한칸 위로
(y,x)

76
블록이 정리 되었는지 확인
(2,x)

(y,x)

마찬가지로
(2,x)

(y,x)

(y,x)를 한칸 위로

77
블록이 정리 되었는지 확인
(2,x)

(y,x)

(2,x)

(y,x)

78
블록 정리 완료

79

(2,x)

범위 중 블록이 없다
(y,x)

완료
블록 생성 준비 완료

“팡가능검사” 후
블록을 생성한다

80
팡가능 검사

• 터질게 있는지 검사

81
터질 수 있는 모양

1 2 3

1
2
3

82

1 2 3

1
2
3

1 2 3

1
2
3

주황색을 움직이면 터트릴 수 있는 모양
4개 짜리는?

83

1
2
3
4

필요 없다

1
2
3

이걸로 검사 가
능
팡가능 갯수 검사

84

2개
팡가능 갯수 검사

85

0개
지울 수 있는 블록이 없으므로

(y,x)

86

지울 수 있는 블록 생
성
어떻게?

87

1 2 3

1
2
3

1 2 3

1
2
3

1 2 3

1
2
3

여기에 경우의 수 모두 대
입
팡가능 블록 패턴
(y,
x)

(y,
x)

(y,
x)

(y,
x)

88

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)
(y,
x)

(y,
x)

(y,
x)

(y,
x...
팡가능 블록 패턴

• 세로도 총 24개
- 그림은 생략

89
검사 방법

• 각 패턴 모양 대로 검사하여
• 주황색 두개의 chr값이 같을 경우,
•(y,x)에 해당 chr값을 입력한다

90
예를 들어

91

(y,
x)

위의 패턴대로
셀의 chr값 검사

두 셀의 chr값은 모두 7
그러므로 (y,x)에
Chr7을 입력한다
그 결과로

92

팡가능 블록 생성
두번째 빈칸 채움

93

팡가능 블록이 있으므
로
두번째 빈칸 채움

94

랜덤으로 블록 생
성
세번째도 마찬가지
빈칸 채움 완료

95
빈칸채움

96

• 블록지움이 끝나고 “필드”의 빈칸을 검사하여 채운다.
• 검사 방법
1. 블록생성 순서대로 셀 값이 “none”인지를 검사한다.
2. 그 결과가 참이라면, (y-1,x)부터 (2,x)까지의 chr값...
팡가능검사

97

• 빈칸에 블록을 생성하기 전 “필드”를 검사하여 „이동하여 3개가
연달아 배열될 수 있는 블록‟이 있는지를 확인한다.
• 블록생성 순서대로 임의의 좌표 (y,x)를 이동시키며, 각 셀 마다

정의
...
팡가능블록생성

98

• 움직여서 터트릴 수 있는 블록이 없는 경우 움직여서 터트릴 수
있는 블록을 생성한다.
• 움직여서 터트릴 수 있는 블록 은 “팡가능블록”으로 정의한다.
• 빈칸채움에서 블록을 생성해야할 빈칸 ...
내친김에

• 팡 불가 블록을 생성해보자

99
왜?

100

• 애니팡을 하면서 항상 느끼는 점

터트릴게 항상 모자라
다
혹시

101

• 팡가능 블록 수가 제한되어 있나?
그래서

102

• 실험해 보았다
애니팡의 팡가능 블록 개수

• 총 50회 실시
- 5회 터트린 후 개수

103
역기획 VBA

104

• 총 50회 실시
- 5회 터트린 후 개수
팡가능 블록 수 비교

• 애니팡 평균 4.6 개
• 역기획 평균 4.4 개
• 비슷하다

105
팡가능 갯수 비교

• 그런데 왜 애니팡이 훨씬 어렵지?

106
난이도 비교 분석

107

블록 사이의 검은색 배경은
또 하나의 색으로 인식되어
기억할 수 있는 블록 수를 줄
임
사실 두개의 색 남색,검은색

캐릭터는 여러가지 색으로
구성되어 있어
블록의 인지 방해
그 외에 색깔 ...
어쨋든

108

• 팡불가 블록을 생성하자
- 난이도 조절용
원리는

109

팡가능 블록 생성과 같
다
차이점은

110

(y,
x)
차이점은

111

(y,
x)
차이점은

112

(y,
x)
차이점은

113

(y,
x)
차이점은

• chr값을 제외 시키는 것

114
팡불가블록생성

115

• 움직여서 터트릴 수 있는 블록이 너무 많은 경우 움직여서 터트릴
수 없는 블록을 생성한다.
• 움직여서 터트릴 수 없는 블록 은 “팡불가블록”으로 정의한다.

• 빈칸채움에서 블록을 생성해야...
빈칸채움
검사

지울게 있음

블럭지움

없음

이동/선택

있음

검사

움직일게 없음

블럭생성
빈칸 채움이 끝난 필드

117
그런데…

118

이건 언제 생겼지?
빈칸채움 완료 후

• 3개짜리가 있을 수 있다
- 3개 이상도 가능

• 바로 Chain

119
그러므로

120

• 필드 검사 필요
= 필드체크
필드검사에 들어가기 전

• 겪은 시행 착오들

121
시행착오

122

지워야할 블록 모양
들
시행착오 직선검사

123

ok

ok

ok

ok

ok

ok
ok

ok

ok

남는 부분이 있다

o
k

o
k
시행착오 가로세로검사
ok

ok

ok

ok

ok
o
k ok
o
k

124

o ok
k

o ok
k

o
k

ok

겹치는 부분이 있다
폭탄 생성 및 점수계산에서 불리

o
k
그래서,

125

• 선택한 방법
필드체크 방법 결정

3칸이 검색되면
상하좌우를 검사하여
한칸씩 추가하면 어떨까?

126
우선은,

127

.

.

.

8

9

.

.

2

3

4

5

49

6

7

.

(y,x)

48

순서대로 세 칸씩 검
사
가로 3칸 검사

128

.

.

.

48

49

6

7

(y,x)
8

9

.

.

.

1

2

3

4

5

3개 모두 같은 색이
면
다음은,

129

.

.

.

48

49

6

7

(y,x)
8

9

.

.

.

1

2

3

4

5

세로검사
합쳐진 모양부터 제거하기 위
이 외에도

130

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

이런 모양들을 검
사
검사결과가 참이면
.

131

.

.

48

49

6

7

(y,x)
8

9

.

.

.

1

2

3

4

5
좌표 저장

132

.

.

.

48

49

6

7

(y,x)
8

9

.

.

.

1

2

3

4

5

(y,x)좌표를
rngcrs1메모리에 저장
검사가 종료되면,
.

crs2

133

.

.

crs3 (y,x)

crs1
8

9

.

.

.

1

2

3

4

5

6

7

가로 세로가 겹쳐진 형태
의
다음 단계는

134

crs1

상하좌우 검사
Rngcrs1부터
위쪽 검사

(y-1,x)
(y,x)

135

rngcrs1의 좌표를 (y,x)로 설정
(y-1,x)와 (y,x)의 chr값을 비교
같으면 rngcrs1의 범위에
(y-1,x)를 추가한다
위쪽 검사

(y-2,x)

(y,x)

136

다음은
(y-2,x)의 값이 같으면 추가
위쪽 검사

137

(y-3,x)

(y,x)

값이 다르면 검사 종료
다음은 좌측 검사
왼쪽 검사

(y,x-1) (y,x)

138

값이 다르면 검사 종료
다음은 아래쪽 검사
아래쪽 검사

(y,x)
(y+1,x)

139

값이 다르면 검사 종료
다음은 오른쪽 검사
오른쪽 검사

140

범위추가
(y,x) (y,x+1)
오른쪽 검사

141

범위추가
(y,x)

(y,x+2)
오른쪽 검사

142

값이 다르면
(y,x)

(y,x+2)

검사 종료
상하좌우검사가 끝나면,

(y,x)

추가된
Rngcrs1의 범위
딱맞는다

143
삭제

144

(y,x)
같은 방법으로

(y,x)

145

가로 모양 지움

세로 모양 지움
(y,x)
삭제

146

(y,x)

(y,x)
결과

147

체인 삭제 후 빈칸이 생
김
빈칸을 채우려면

• 다시 “빈칸채움”으로

148
빈칸채움

필드
체크

지울게 있음

블럭지움
그리고,

150

• 다시 필드체크
빈칸채움

필드
체크
지울게 없음

지울게 있음

블럭지움
지울게 없을 때까지

• 반복

152
빈칸채움

필드
체크
지울게 없음

지울게 있음

블럭지움
지울게 없다

• 필드체크 종료

154
필드체크

155

• 빈칸채움 후 필드를 검사하여 터트릴 블록이 있는지 검사한다.

• 검사방법
1. 블록생성 순서대로 임의의 좌표 (y,x)를 이동시키며 각 셀 마다 위의 9개 패턴
모양대로 셀의 chr값을 검사한다...
상하좌우검사

156

• 터트릴 블록의 상하좌우를 검사하여 터트릴 범위를 추가/확정한
다.
• 검사방법

1. “위쪽검사” 실행

정의

2. “왼쪽검사” 실행
3. “아래쪽검사” 실행
4. “오른쪽검사” 실행

5....
위쪽검사

157

• 터트릴 블록의 위쪽을 검사하여 터트릴 범위를 추가/확정한다.
• 검사방법

1. (y,x)의 chr값을 crstemp1 메모리에 저장한다.

정의

2. (y-a,x)의 chr값을 crstemp2...
왼쪽검사

158

• 터트릴 블록의 왼쪽을 검사하여 터트릴 범위를 추가/확정한다.
• 검사방법

1. (y,x)의 chr값을 crstemp1 메모리에 저장한다.

정의

2. (y,x-a)의 chr값을 crstemp2...
아래쪽검사

159

• 터트릴 블록의 아래쪽을 검사하여 터트릴 범위를 추가/확정한다.
• 검사방법

1. (y,x)의 chr값을 crstemp1 메모리에 저장한다.

정의

2. (y+a,x)의 chr값을 crstem...
오른쪽검사

160

• 터트릴 블록의 오른쪽을 검사하여 터트릴 범위를 추가/확정한다.
• 검사방법

1. (y,x)의 chr값을 crstemp1 메모리에 저장한다.

정의

2. (y,x+a)의 chr값을 crstem...
빈칸채움
필드
체크

지울게 있음

블럭지움

없음

이동/선택

있음

팡가능
검사

움직일게 없음

블럭생성
팡가능 검사는

• 이미 다룬 내용에 추가

162
팡가능검사

163

• 빈칸에 블록을 생성하기 전 “필드”를 검사하여 „이동하여 3개가 연달아 배열될
수 있는 블록‟이 있는지를 확인한다.
• 블록생성 순서대로 임의의 좌표 (y,x)를 이동시키며, 각 셀 마다
48개...
빈칸채움
필드
체크

지울게 있음

블럭지움

없음

이동/선택

있음

팡가능
검사

움직일게 없음

블럭생성
빈칸채움
필드
체크

지울게 있음

블럭지움

없음

이동/선택

있음

팡가능
검사

움직일게 없음

블럭생성
처음부터,

166

• 반복
언제까지?

167

• 0초까지
실행

게임시간

필드생성

<0

블럭생성

종료

이동/선택
애니팡 알고리즘

• 종료

169
특수팡 및 기타 파트

• 시작

170
파이어팡

랜덤팡

앵그리팡

피버모드

라스트팡

점수
파이어팡 일명폭탄

172
선택하면 터진다

173
언제 생길까?

174

노란 색 게이지가 꽉차면

하나 추가
그럼 노란 게이지는?

175

블록을 터트릴 때마다 찬다
블록 60개 = 폭탄 1개
그럼…

• 블록이 터지는 갯수를 알아야 한다

176
어떻게?

177

• 블록이 터지면…
공통적으로,

178

빈 칸이 생긴다
다시 채워지기 전에,

• 빈 칸을 개수

179
파이어팡
생성

빈칸채움
검사

지울게 있음

블럭지움

없음

이동/선택

있음

검사

움직일게 없음

블럭생성
검사

이동/선택

없음

지울게 있음

블록지움

빈칸채움

파이어팡
생성
빈칸을 개수하여,

182

누적이 60이 넘으
면
빈칸을 개수하여,

183

폭탄을 생성하고

누적 카운트를 0으로
그런데…

184

• 폭탄 생성 위치는?
높은 행, 낮은 열 순

높은 행

낮은 열

185
폭탄 생성 완료

186
파이어팡 생성

187

• 파이어팡을 생성한다.
• 생성방법
1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “파이어팡생성”

단계를 실행한다.

정의

2. 필드의 (8,2)부터 (2,8)까지 모든 셀의 chr값...
이제 쓰는 일만 남았다

188
언제 사용할 수 있나?

• 블록을 이동시키는 대신 사용

189
실행

게임시간

필드생성

<0

블럭생성

종료

이동/선택
파이어팡 사용 시,

• 어떻게 터질까?

191
폭탄을 사용하면,

192

폭탄이 있던 열
모두 터짐
맨 아래 행

모두 터짐
정리하면,

• “이동/선택” 페이즈에서 사용
• 폭탄이 있던 열과 맨 아래 행 터짐

193
파이어팡 사용

194

• 파이어팡을 사용한다.
• 사용방법
이동/선택 단계에서 파이어팡을 선택하면 파이어팡이 사용된다.

정의

• 터지는 범위
선택한 파이어팡의 좌표 (y,x). (2,x)부터 (7,x)까지, (8...
끝?

195

• 이면 좋겠지만…
역기획 과정 중,

• 가장 힘들고 복잡했던 부분
• 특수팡 파트

196
특수 팡의 관계

197

파이어팡의 범위에
랜덤팡이나
앵그리팡이 있다면

터질까?
특수 팡의 관계

198

파이어팡의 범위에

파이어팡이 있다면
터질까?
특수 팡의 관계

199

앵그리팡을 터트리
면
파이어팡이 터질까?
특수 팡의 관계

200

랜덤팡을 터트려서
토끼가 걸리면
앵그리팡은?
특수 팡의 관계

• 모두 실험해 보았다

201
특수 팡의 관계

202

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X
...
특수 팡의 관계

203

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X
...
특수 팡의 관계

204

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X
...
특수 팡의 관계

205

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

터치 제외

앵그리팡

X

X

O

단, ...
그런데,

206

• 이게 무슨 의미일까?
파이어팡이 터지면,

207

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

...
파이어팡이 터지면,

208

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

...
예를 들어,

209

파이어팡을 사용했
다
파이어팡의 삭제범위

210

그 안에
랜덤팡과 앵그리팡이 있
다
첫째로,

211

랜덤팡이 사용된
다
병아리가 선택
둘째로,

212

앵그리팡이 사용된
다
3x3칸 선택
마지막으로,

213

삭제
파이어팡 사용 완료

214

빈칸채움으로
그러므로,

215

• 파이어팡의 정의는
파이어팡 사용

216

• 파이어팡을 사용한다.
• 사용방법
이동/선택 단계에서 파이어팡을 선택하면 파이어팡이 사용된다.

• 터지는 범위

정의

선택한 파이어팡의 좌표 (y,x). (2,x)부터 (7,x)까지, (...
같은 방식으로,

217

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X
...
자세한 건,

218

• 앵그리팡에서…
파이어팡

랜덤팡

앵그리팡

피버모드

라스트팡

점수
랜덤팡

219
생성 조건

221

• 같은 블록 5개 배열
생성 조건 1

222

블록이동으로
생성 조건

223

• 혹은
생성 조건 2

224

빈칸채움으로
생성 조건 2

225

생성
그러면,

226

• 랜덤팡 생성 위치는?
생성 조건 1

227

블록이동으로
생성 조건 1

228

이동한 블록의 좌표
(y,x)
생성 조건 2

229

자동생성은
첫번째,

230

아래
두번째,

231

왼쪽
파이어팡
생성

빈칸채움

검사

랜덤팡
생성
지울게 있음

블럭지움

없음

이동/선택

있음

검사

움직일게 없음

블럭생성
검사

이동/선택

없음

지울게 있음

블록지움

파이어팡
생성

빈칸채움

랜덤팡
생성
랜덤팡 생성

234

• 랜덤팡을 생성한다.
• 생성방법
블록이동이나 빈칸채움으로 5개 이상의 같은 블록이 한 번에 터지
는 경우 랜덤팡을 생성한다.

• 생성위치

정의

1. 모든 “블록지움”과 “빈칸채움” 단계의...
이어서,

235

• 랜덤팡 사용
랜덤팡을 사용하면,

236

7종의 기본 캐릭터
중
랜덤으로
한 개의 캐릭터 결정
모두 삭제

237
랜덤팡 사용 시,

238

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X...
랜덤팡 사용

239

• 랜덤팡을 사용한다.
• 사용방법
이동/선택 단계에서 랜덤팡을 선택하면 랜덤팡이 사용된다.

• 터지는 범위

정의

1. randomtemp메모리에 chr값 chrR을 저장한다. R = ran...
파이어팡

랜덤팡

앵그리팡

피버모드

라스트팡

점수
앵그리팡의 생성 조건

• 랜덤팡과 같다

241
파이어팡
생성

빈칸채움

검사

랜덤팡
생성

앵그리팡
생성

지울게 있음

블럭지움

없음

이동/선택

있음

검사

움직일게 없음

블럭생성
검사

이동/선택

없음

지울게 있음

블록지움

파이어팡
생성

빈칸채움

랜덤팡
생성

앵그리팡
생성
다만,

244

• 4개의 블록이 터지면 앵그리팡
앵그리팡 생성

245

• 앵그리팡을 생성한다.
• 생성방법
블록이동이나 빈칸채움으로 4개 이상의 같은 블록이 한 번에 터지
는 경우 앵그리팡을 생성한다.

정의

• 생성위치
1. 모든 “블록지움”과 “빈칸채움” 단...
그런데,

246

• 4개나 5개가 터지는 걸 어떻게 알 수 있을까?
블록 이동으로 터트릴 때

• 팡체크 패턴으로 알 수 있다

247
팡체크

248

4개

5개 이상
팡체크 시 해당 패턴이 실행되면,

• 랜덤팡 혹은 앵그리팡 생성 실행

249
그 외 팡체크

250

(y-1,x)
(y,x-1) (y,x) (y,x+1)
(y+1,x)

• 왼쪽팡체크와 같은 순서를 따른다

• inttemp2의 값은 상, 하, 좌, 우 에 따라 (y-1,x), (y+1,x),...
앵그리팡 생성

251

• 앵그리팡을 생성한다.
• 생성방법
angryvalue = true이면, 다음의 위치에 앵그리팡을 생성하고,
angryvalue 를 false로 한다. angryvalue = false이면, ...
랜덤팡 생성

252

• 랜덤팡을 생성한다.
• 생성방법
randomvalue = true이면, 다음의 위치에 랜덤팡을 생성하고,
randomvalue 를 false로 한다. randomvalue = false이면, ...
자동 생성 시에는?

• 블록을 개수

253
상하좌우검사가 끝나면,

선택된 범위 내
(y,x)

셀의 수를 검사

254
상하좌우검사

255

• 터트릴 블록의 상하좌우를 검사하여 터트릴 범위를 추가/확정한
다.
• 검사방법
1. “위쪽검사” 실행

2. “왼쪽검사” 실행

정의

3. “아래쪽검사” 실행
4. “오른쪽검사” 실행
5. ...
다시 돌아가서

• 앵그리팡 사용

256
앵그리팡은

257

딱히 사용 방법 없음

앵그리팡인데 웃고 있다.
앵그리팡에서 스마일팡으로 컨셉을 바꾸었지만, 선데이
토즈에서 공식적으로 명칭을 바꾸지 않았다.
앵그리팡을 포함하여 터트리면,

258

앵그리팡을 중심으로
3x3칸 추가 터트림
엄밀히 말하면,

259

“삭제대상”에
3x3의 범위 추가
앵그리팡을 고려해야 하는 블록 지움들
팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡
...
정리하면, 앵그리팡은

• 사용할 수 없고, 지워지면 3x3추가 터트림

261
즉,

262

• 범위추가만 존재
앵그리팡 사용

263

• 블록이 지워 질 때 앵그리팡의 삭제 범위를 추가한다.
• 사용방법
블록이 지워 질 때 “삭제대상”의 범위를 검사하여 셀의 sp값이

A이면 아래의 앵그리팡의 “범위”를 추가한다.

정의

•...
파이어팡을 터트려 보자

264
팡팡팡

265

삭제
랜덤팡, 앵그리팡 추가 삭제

잘 돌아간다

266
그러나

267

• 문제점
앵그리팡을 터트리자

268
앵그리팡을 터트리자

269

여기있던 파이어팡
이??
파이어팡은

270

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X

O
...
그러므로

271

“삭제대상”에서
파이어팡 제외
덤으로

272

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X

O

필...
이제…

273

• 잘 되겠지?
팡팡팡

274

삭제
어라?

275

랜덤팡이
안지워진다
왜?

276

• “삭제대상”에서 제외 되었기 때
문
“삭제대상”에서 제외하는 것이 아니라,

277

애초에 “삭제대상”으로
추가하지 않아야 한다
앵그리팡의 범위 추가 시

278

범위 내 셀의 sp값을 검사

파이어팡, 랜덤팡 대상 제외
설정된 범위를

279

“삭제대상”으로 추가
이 내용을

280

• 모든 특수 팡에 적용
앵그리팡은

281

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X

O
...
파이어팡은

282

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X

O
...
피버모드는

283

팡종류

파이어팡

랜덤팡

앵그리팡

블록선택

O

O

X

블록이동

X

X

O

파이어팡

X

O

O

랜덤팡

X

X

XX

앵그리팡

X

X

O

피버팡

X

X

O
...
그러므로

284

• 내용을 수정하면
앵그리팡 사용

285

• 블록이 지워 질 때 앵그리팡의 삭제 범위를 추가한다.
• 사용방법
블록이 지워 질 때 “삭제대상”의 범위를 검사하여 셀의 sp값이
A이면 아래의 앵그리팡의 “범위”를 추가한다.

정의

• ...
파이어팡 사용

286

• 파이어팡을 사용한다.
• 사용방법
이동/선택 단계에서 파이어팡을 선택하면 파이어팡이 사용된다.

• 터지는 범위

정의

선택한 파이어팡의 좌표는 (y,x). (2,x)부터 (7,x)까지, ...
피버모드는

287

• 나중에…
특수 팡의 마지막 내용

• sp값?

288
Chr값이 아니라

• sp값인 이유?

289
만약 앵그리팡의 chr값이 A라면,

290
만약 앵그리팡의 chr값이 A라면,

291

3개의 토끼가 배열
그러나 터지지 않음
chr4
chr4
A

값이 다르기 때문
그렇기 때문에 앵그리팡은

• 기본 블록의 역할을 하면서도
• 기본 블록과 구분할 수 있는 값 필요

292
그것이 바로

293

• sp값
이것으로

294

• 특수팡 파트 완료
파이어팡

랜덤팡

앵그리팡

피버모드

라스트팡

점수
피버모드

296

피버모드에선

더 많이 터진다
피버모드의 원리

• 블록이 하나 터지면,
• 상하좌우의 블록이 같이 터진다

297
3개가 터지면,

298

주황색이 추가 범위
단, 이동시킨 블록이 터질때만 적용
피버모드 발동 조건

• 피버모드가 아닌 상태에서
• 연속으로 5콤보 달성

299
즉,

300

• 피버모드의 생성 단계는

• 콤보를 카운트 하는
검사

이동/선택

없음

지울게 있음

블록지움

빈칸채움
블록을 지운 후

• 콤보를 카운트 할 때

302
또한,

303

• 콤보와 개별적으로
• 피버카운트 개수
- 피버모드가 아닌 상태에서의 콤보 수
콤보

304
• 일정 조건을 만족하면 콤보가 생성되고 콤보가 높을 수록 더 높은 점수를 얻는다.
• 콤보생성조건
직접움직인 블록이 터지거나, 랜덤팡, 파이어팡을 사용하면 “combocount” 메모리의 값을 1
추가한...
블록지움

305

• fevervalue = false 일 때
“삭제대상”내 셀의 chr값과 sp값을 “none”으로 변경하며 0.5초 동
안 삭제될 때 나타나는 애니메이션이 나온다. (블록채움시간 0.5초)

• f...
피버모드

306

• fevervalue가 true이면 피버모드가 활성화된 것으로 한다.
• fevertime
피버모드는 4초 동안 유지된다.

정의

1. 피버모드가 활성화되면, fevertime = 4로 되고, 1...
파이어팡

랜덤팡

앵그리팡

피버모드

라스트팡

점수
라스트팡

• 유일하게 게임이 끝나고 실행

308
실행

게임시간

필드생성

<0

블럭생성

종료

이동/선택

라스트팡
게임이 끝나면, 조작은 불가능 하지만…

310

남아 있는
폭탄,
앵그리팡,
랜덤팡이 터진다.
덤으로 빈칸이 채워지며 터지
는 체인도 있다.
게임은 끝났지만,

• 마지막 콤보가 적용되어 점수 계산

311
그외

312

• 특이사항 없음
라스트팡

313

• 라스트팡

게임 종료 후, 남아있는 파이어팡, 랜덤팡, 앵그리팡을 사용한다.

정의

• 방법
블록생성 순서대로 임의의 셀(y,x)을 검사하여, 해당 셀의 sp값이
“A” 혹은 “R” 혹은 “bo...
파이어팡

랜덤팡

앵그리팡

피버모드

라스트팡

점수
애니팡의 주요 시스템

315

게임의 목적이자 보
상
무엇이든

316

• 터지면 점수를 얻는다
3칸이 터지면

317

250점
폭탄이 터지면

318

5250점
콤보에 따라

319

• 점수가 다름
3칸이 터지면

320

20콤보 이상
4000점
폭탄이 터지면

321

20콤보 이상
35250점
이 외에

322

• 정식으로 공개된 자료 없음
- 거의 없음
또한, 실제모니터링 결과

• 애니팡 점수 계산에도 버그발견
- 상당히 많다

323
결국

324

• 똑같이는 구현하지 못했다
그래서

325

• 알려진 데이터를 기반으로
• 임의로 점수 테이블을 만들었다
점수 테이블

326

유형
3개

1

2

3

4

5

6

7

8

9

10

250

450

550

650

750

850

950

1050

1200

1400

4개
5개

500

900

1...
주황색은 확실한 데이터

327

유형
3개

1

2

3

4

5

6

7

8

9

10

250

450

550

650

750

850

950

1050

1200

1400

4개
5개

500

...
이 점수를

328

• 어떻게 적용할까?
검사단계와 지움단계 사이

• “삭제대상” 생성 시 실행

329
검사

이동/선택

없음

지울게 있음

점수

블록지움

빈칸채움
빈칸채움
검사

지울게 있음

블럭지움
점수

없음

이동/선택

있음

검사

움직일게 없음

블럭생성
왼쪽팡체크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...
그 외 팡체크

333

(y-1,x)
(y,x-1) (y,x) (y,x+1)
(y+1,x)

• 왼쪽팡체크와 같은 순서를 따른다

• inttemp2의 값은 상, 하, 좌, 우 에 따라 (y-1,x), (y+1,x),...
상하좌우검사

334

• 터트릴 블록의 상하좌우를 검사하여 터트릴 범위를 추가/확정한
다.
• 검사방법
1. “위쪽검사” 실행

2. “왼쪽검사” 실행
3. “아래쪽검사” 실행

정의

4. “오른쪽검사” 실행
5. ...
앵그리팡 사용

335

• 블록이 지워 질 때 앵그리팡의 삭제 범위를 추가한다.
• 사용방법
블록이 지워 질 때 “삭제대상”의 범위를 검사하여 셀의 sp값이
A이면 아래의 앵그리팡의 “범위”를 추가한다.

정의

• ...
블록지움

336

• fevervalue = false 일 때
“삭제대상”내 셀의 chr값과 sp값을 “none”으로 변경하며 0.5초 동
안 삭제될 때 나타나는 애니메이션이 나온다. (블록채움시간 0.5초)
• fe...
폭탄,랜덤팡은

337

• 사용할 때
실행

게임시간

필드생성

<0

블록생성

종료

이동/선택
블록 선택/이동 정의

339

• 기본 블록을 선택하여 이동시킨다.
• ( y, x ) 의 블 록 을 선 택 하 면 해 당 블 록 의 모 습 이 변 하 여
다른 블록들과 구분할 수 있으며, 이동가능한 상태가 된다. (...
점수

340
• 블록이 터지면 점수를 추가한다.

• comboscore_3line
점수테이블의 유형 “3개” 행 combocount 열에 따라 점수를 추가한다.
• comboscore_4line
점수테이블의 유형 “...
역기획 분석
게 임 기 획

지 원

포 트 폴 리 오
처음의 의도

342

• 똑같이 만들자
만들어 진 것은

• …….

343
주요 차이점1

• 점수 시스템

344
점수 파트에서 다룬대로

• 모니터링하여 점수를
파악하는데는 한계가 있었고
- 터지는 블록이 너무 많아 세기도 힘들다…

345
그 외에도

• vba로 만든 역기획과 애니팡과
의 난이도 차로 점수 차이가 있다

346
주요 차이점2

• 난이도

347
이미 다룬

348

• 블록 모양과 색
난이도 비교 분석

349

블록 사이의 검은색 배경은
또 하나의 색으로 인식되어
기억할 수 있는 블록 수를 줄
임
사실 두개의 색 남색,검은색

캐릭터는 여러가지 색으로
구성되어 있어
블록의 인지 방해
그 외에 색깔 ...
그 외에도

350

• 조작의 문제도 있다
- 터치와 키보드
주요 차이점3

• 시스템 상 문제

351
애니팡은

352

블록이 터지는 중에도
다른 블록의 이동이 가능하다
그러나 VBA에서는

• 불가능하다

353
예를들어

354

• 블록을 이동시키면
빈칸채움이 완료될 때까지
행동 불가
실행

게임시간

필드생성

<0

블록생성

종료

이동/선택
검사

이동/선택

없음

지울게 있음

블록지움

빈칸채움
빈칸채움
검사

지울게 있음

블럭지움

없음

이동/선택

있음

검사

움직일게 없음

블럭생성
이제야

358

• 이동/선택 가능
결과적으로, VBA역기획은

• 기다리는 시간이 증가

359
이것이 미치는 영향 2가지

• 난이도 하락
• 플레이 시간 감소

360
난이도 하락

361

애니팡의 경우,

블록을 터트리면
이펙트가 끝나기 전에
다음 블록을 찾아야
콤보가 이어진다
그러나 VBA역기획은

• 다음 블록을 찾을 시간이
• 충분하므로
• 긴박함이 없다

362
또한, 시간이 충분하다는 것은

• 블록을 움직일 시간 보다는
• 기다리는 시간이 많다는 것이므로

• 움직일 수 있는 총 블록 양 감소
- 점수 하락

363
그래서 생각한 것

• 최대한 애니팡의 요소를 살려보자

364
첫째, 긴박함

365

찾을 시간이 많은 대신
다음 블록을 움직일 시간을
적게 준다
실험을 거쳐

366

• 정한 시간 4초
- 애니팡의 3초보다 길지만,
방향키로 이동해야 하기 때문
에 4초가 적절했다.
결과

367

• 그래도 쉽다
그래서 생각한 것

368

• 팡가능 블록을 줄이자

팡불가블록
그 결과

369

• 어려워 졌다
- 바로 바로 찾아내지 못하면
콤보가 끊길 정도의 난이도
난이도

370

• 해결
둘째, 플레이시간

애니팡의 묘미는 20콤보 유지
…

- 하지만 VBA역기획에서는 20콤보에 도달할 때 쯤이면

371
플레이시간이 짧아지면

• 콤보, 점수 시스템을 충분히 활용할 수 없
다

372
그래서 간단하게

• 시간을 늘림

373
120초

374

• 점수는 비슷하게 나온다

• 하지만, 지루하다
- 너무 길다
90초로 수정

• 점수는 낮게 나오지만
• 20콤보 이상을 충분히 활용 가능

375
그래서

376

• 90초로 결정
난이도 문제

377

• 해결 완료
마지막으로

378

• 애니팡은 반드시 터질 것이 있다

팡가능검사
마지막으로

• VBA역기획은 터질 것이 없을 때도 있다

379
사실은

애니팡도 움직일 게 없을 때가 많
다

380
그러므로

381

• 패스
이로써

382

• 역기획 분석 종료
추가 콘텐츠
게 임 기 획

지 원

포 트 폴 리 오
애니팡을 하면서 아쉬웠던 점

• 안터지는 블록끼리 뭉쳐있을 때

384
아래 5칸

385

터트릴 게 없다
위에 채워지는 것들로만 터트릴 수 있다
랜덤한 요소때문에

• 게임이 지루해질 수 있다

386
그래서

387

• 생각해 낸 요소
바로

388

마그넷
두 곳에 마그넷이 생성되면

• 생각해 낸 요소

389
두 곳에 마그넷이 생성되면

• 생각해 낸 요소

390
두 곳에 마그넷이 생성되면

둘 사이 영역 터트
림

391
그럼

392

쓸모없는 영역이 갱신된
다
만약

393

• 다시 채워졌는데 또 움직일게 없다
면
- 번개폭탄 사용……. 비슷한 의도로 만들어졌을 수도
…….
어쨋든

394

• 어떻게 생성될까?
아이템 사용

역기획에서 아이템은 다루지 않았지만…

원하는 때 사용가능하
다

395
첫 번째 마그넷 생성

396

위의 마그넷을 터치하
고,
첫 번째 마그넷 생성

397

필드 중 하나의 블록 터
치
첫 번째 마그넷 생성

398

그럼 위의 마그넷이 사라지
고

해당 위치에 마그넷 생성
두 번째 마그넷 생성

399

블록을 맞춘
다
두 번째 마그넷 생성

400

그럼 해당 위치
에
마그넷 생성
두개의 마그넷이 생성되면

범위를 설정
후
해당 범위 삭
제

401
그러므로

402

• 정의는
마그넷 생성

403

• 마그넷팡을 생성한다

정의

• 방법
1. 게임을 시작하기 전에 마그넷팡을 구매한다.
2. 게임 도중 점수 옆의 마그넷팡아이콘을 클릭하면, magnetvalue1 = true,
magnetva...
블록 선택/이동 정의

404

• 기본 블록을 선택하여 이동시킨다.
• magnetvalue1
Magnetvalue1 = true이면, 아래의 “블록 선택/이동”의 실행을 취소하고, 선택된 블록의 sp값을“M”
으로 ...
검사

이동/선택

없음

지울게 있음

파이어팡
생성

블록지움

랜덤팡
생성

빈칸채움

앵그리팡
생성

두번째
마그넷
생성
두번째마그넷생성

406

• 두번째 마그넷팡을 생성한다.

정의

• Magnetvalue2 = true이면, 커서가 위치한 좌표 (y,x)의 셀의 chr값이 none이고,
sp값이 none이면, 해당 셀의 sp값을 ...
마그넷 사용

407

• 마그넷팡을 사용한다.

정의

• magnetvalue3 = true이면, rngM1과 rngM2의 좌표 내 행과 열을 모두 선택한
다. 범위 내의 랜덤팡과 파이어팡은 “삭제대상‟에서 제외하고...
예상되는 장점

• 새로운 전략 구사 가능
- 원하는 때 사용 가능

• 운이 없을 때 구제 받을 수 있다
- 판이 안좋을 때

408
예상되는 단점

• 조작이 힘들다
- 3번의 조작이 필요. 콤보를 잇기 어려움.

• 재미를 해칠 수 있다
- 어떻게 될지는 미지수

409
추가 콘텐츠 생성

• 완료

410
이상으로

411

• 애니팡 역기획 완료
끝

412

감사합니다
배상욱
hzael@naver.com
ㅓ 범위 내의 존재가능한 모든 패턴

ex1

블록 이동 시
터질 수 있는
모든 패턴
총 12개
원래 페이지
필드 중 빈칸 검사
.

ex2

.

.

48

49

6

7

none

8

9

.

.

.

1

2

3

4

5

순서대로 셀의 chr값을 검사
그 값이 “none”이면 다음 과정으로

원래 페이지
팡가능 블록 패턴
(y,
x)

(y,
x)

(y,
x)

(y,
x)

ex3

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)
(y,
x)

(y,
x)

(y,
x)

(y,
...
팡가능 블록 패턴
(y,
x)

(y,
x)

(y,
x)

(y,
x)

ex4

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)
(y,
x)

(y,
x)

(y,
x)

(y,
...
팡가능 블록 패턴
(y,
x)

(y,
x)

(y,
x)

(y,
x)

ex5

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)
(y,
x)

(y,
x)

(y,
x)

(y,
...
우선은,

ex6

.

.

.

8

9

.

.

2

3

4

5

49

6

7

.

(y,x)

48

순서대로 세 칸씩 검
사
원래 페이지
이 외에도

ex7

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

(y,x)

이런 모양들을 검
사

원래 페이지
팡가능 블록 패턴
(y,
x)

(y,
x)

(y,
x)

(y,
x)

ex8

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)

(y,
x)
(y,
x)

(y,
x)

(y,
x)

(y,
...
팡체크

ex9

4개

5개 이상

원래 페이지
팡불가블록 생성 방법

ex10

(y,
x)

원래 페이지
팡가능블록 생성 방법
(y,
x)

ex11

위의 패턴대로
셀의 chr값 검사

두 셀의 chr값은 모두 7
그러므로 (y,x)에
Chr7을 입력한다
원래 페이지
게임기획 포트폴리오 애니팡역기획 배상욱
게임기획 포트폴리오 애니팡역기획 배상욱
Upcoming SlideShare
Loading in …5
×

게임기획 포트폴리오 애니팡역기획 배상욱

34,666 views

Published on

배상욱 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

Published in: Entertainment & Humor
  • Be the first to comment

게임기획 포트폴리오 애니팡역기획 배상욱

  1. 1. 게 임 기 획 포 트 폴 리 오 애니팡 퍼즐시스템 역기 획 2013. 08. 21 배상욱 (hzael@naver.com)
  2. 2. 시작하기 전에 게 임 기 획 지 원 포 트 폴 리 오
  3. 3. 왜 했는가? •기획을 경험해보기 위해서 3
  4. 4. 왜 애니팡인가? •경험이 없어 쉬우면서도 유명한 게임을 선택 4
  5. 5. 왜 퍼즐시스템인가? •익숙하면서도 가장 중요한 요소이기 때문에 5
  6. 6. 허접한 VBA는 무엇인가? •역기획 내용을 그대로 구현해 보고자 하였습니 다. 6
  7. 7. 하고 싶은 이야기는? 7 •애니팡 퍼즐 시스템 파악 •그것의 역기획(PPT) •역기획의 구현 (VBA) •분석 및 새로운 시스템 도입 가능성(PPT, VBA)
  8. 8. 애니팡 알고리즘 게 임 기 획 지 원 포 트 폴 리 오
  9. 9. 애니팡 알고리즘 실행 게임시간 9 필드생성 <0 블럭생성 종료 이동/선택
  10. 10. 애니팡 알고리즘 이동/선택 10 없음 검사 지울게 있음 블럭지움 빈칸채움
  11. 11. 애니팡 알고리즘 11 빈칸채움 검사 지울게 있음 블럭지움 없음 이동/선택 있음 검사 움직일게 없음 블럭생성
  12. 12. 간단히 하자면 블록 이동 3줄 검사 12 지움 채움
  13. 13. 흔한 시행착오 게 임 기 획 지 원 포 트 폴 리 오
  14. 14. 애니팡은 쉬운 게임이다? MATCH-3 게임들, 다양한 만큼 익숙하다 14
  15. 15. 애니팡의 규칙 15 애니팡의 주요 규칙 3개 •3개의 블럭을 한줄로 맞추면 터진다 •시간 제한은 1분이다 •블럭을 터뜨리고 3초 이내에 다른 블럭을 터뜨리면 콤보가 이어진다
  16. 16. 애니팡의 규칙 16 이러면 터진 다 그러므로 정의는 “같은 캐릭터 블록 3개를 가로나 세로 일렬로 맞추면, 블록이 삭제된다.”
  17. 17. 애니팡의 규칙 17 이 경우에는? 3개가 터지면 하나가 남는 다 그러므로 3개 이상으로 변 경 그러므로 정의는 “같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추 면, 블록이 삭제된다.”
  18. 18. 애니팡의 규칙 18 그럼 이런 경우에는? 다음과 같이 정의하면 될까? “같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추 면, 그러므로 정의는 블록이 삭제된다. 가로와 세로가 각 3개 이상이 결합된 모양의 블럭은 하나의 묶음으로 인식되어 같이 삭제된다.” 라고 하면 될까?
  19. 19. 답은 19 한 묶음으로 삭제되지 않는다 정의가 잘못 되었기 때문이다 - 이미 가로 블럭이 삭제된 후 그러므로 정의는 “같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추 면, 블록이 삭제된다. 가로와 세로가 각 3개 이상이 결합된 모양의 블럭은 하나의 묶음으로 인식되어 같이 삭제된다.”
  20. 20. 애니팡의 규칙 20 모두 삭제하기 위해서는, 적어도 다음과 같이 정의해야 한다 “같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추 면, 그러므로 정의는 그 블록은 ‘삭제대상’으로 메모리에 저장된다. 삭제대상의 각 블록은 (삭제대상이 가로일 경우) 위 아 래 세로 검사를 하여 블록이 3개 이상인지 확인하여, 그 값이 참일 경우 해당 블록들을 삭제대상 메모리에 추가 한다.
  21. 21. 이 과정을 거쳐 •수백 번의 수정을 하였고, •VBA로 그 실행가능 여부를 확인하였습니다 21
  22. 22. 퍼즐 시스템 게 임 기 획 지 원 포 트 폴 리 오
  23. 23. 실행 게임시간 필드생성 <0 블럭생성 종료 이동/선택
  24. 24. 필드 생성 24 •이동시킬 블록이 필요, •이동할 필드와 필드를 한정지어 주는 벽이 필요 •필드의 위치는 좌표로 표시한다 OBJECT 좌표, 벽, 필드, 블록
  25. 25. 좌표 7x7 25 • 9x9칸의 형태 - 7x7개의 블록을 수용 • 좌표하나는 셀을 의미 - 좌표 하나당 하나의 셀을 할당한다 좌 표 ( y, x ) 는 좌 표 범 위 내 의 임 의 의 좌 표 를 의 미 한 다 . 정의 임의의 좌표가 상, 하, 좌, 우로 이동 시 각각 y-1, y+1, x-1, x+1로 값을 변경한다.
  26. 26. 벽 7x7 26 • 9x9칸의 형태 - 7x7개의 블록을 둘러 싼 셀들을 벽으로 한다 - 블록, 빈공간과 다른 값을 갖는다 • 고정되어 있고, 지워지지 않는다 - 파이어팡, 앵그리팡 등에 의해 지워지지 않는다 - 블록은 벽안에서만 존재한다 - 벽은 이동하지 않고 고정되어 있다 (1,1)부터 (1,9) 까지, (9,1)부터 (9,9) 까지, 정의 (2,1)부터 (8,1) 까지, (2,9)부터 (8,9)까지의 범위를 벽으로 하며, 범위 내 셀 값은 “wall”로 한다.
  27. 27. 필드 27 • 벽으로 둘러싸인 공간 • 필드 7x7, 49개의 블록으로 채워진다 - 빈공간이 생기면 바로 채워진다 정의 (2,2)부터 (8,8) 까지의 범위를 필드로 하며, 범위 내 셀 값은 “none”로 한다. 블록으로 필드가 채워질 경우 필드의 chr 값은 해당 블록의 값을 갖는다.
  28. 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. 29. 그 외의 OBJECT들 • 시간 – 시작 후 60초가 지나면 게임 종료 • 콤보 – 콤보 파트에서 다룸 • 점수 – 점수 파트에서 다룸 • 라스트팡 – 라스트팡 파트에서 다룸 • 피버모드 – 피버모드 파트에서 다룸 29
  30. 30. 실행 게임시간 필드생성 <0 블록생성 종료 이동/선택
  31. 31. 블록 생성 • 이 때까지의 설정을 바탕으로 블록 생 성 31
  32. 32. 블록 생성 32 . . . 8 9 . . 2 3 4 5 49 6 7 . 1 48 셀에 적힌 순서대로 랜덤한 chr 값을 넣는 다.
  33. 33. 진행하다보면 3개 짜리가 생긴 다 33
  34. 34. 3개짜리가 안생기려면? 34 7 즉, (y,x)에 (y,x) 제외 2 생성될 블록의 왼쪽과 아래쪽 2칸의 셀값을 검 사 두개의 셀값이 같다면
  35. 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이면 기본 블록이 생성된다.)
  36. 36. 실행 게임시간 필드생성 <0 블록생성 종료 이동/선택
  37. 37. 블록 선택 • 블록을 선택하면 블록을 움직일 수 있다 37
  38. 38. 블록을 선택하면 • 일반 블록은 이동할 수 있게 된다 • 특수 블록은 고유한 기능이 있다 • 일반 블록이 이동하여 지울게 없을 경우 다시 원상복귀 38
  39. 39. 블록 선택/이동 정의 39 • 기본 블록을 선택하여 이동시킨다. • ( y, x ) 의 블 록 을 선 택 하 면 해 당 블 록 의 모 습 이 변 하 여 다른 블록들과 구분할 수 있으며, 이동가능한 상태가 된 다. (단, 특수 블록은 예외. 특수블록 파트에서 다룸.) 정의 • (y-1,x), (y+1,x), (y,x-1), (y,x+1) 중 하나를 선택할 수 있으며, 하나를 선택하면 그 셀의 chr값과 (y,x)의 chr값이 뒤바뀐다. • 이동 후 3개가 연달아 배열되었는지를 검사하여 검사 값이 거짓 이면 블록이 이동하기 전으로 되돌아간다. 되돌아가기 까지 1초 정 도의 시간이 걸리기 때문에 콤보를 잇는데 큰 방해 요소가 된다.
  40. 40. 검사 이동/선택 없음 지울게 있음 블록지움 빈칸채움
  41. 41. 지울게 있는지 확인하는 단계 • “팡체크”로 명명 • 시행착오에서 다루었던 내용 “같은 캐릭터 블록 3개 이상을 가로나 세로 일렬로 맞추 면, 그 블록은 ‘삭제대상’으로 메모리에 저장된다. 삭제대상의 각 블록은 (삭제대상이 가로일 경우) 위 아 래 세로 검사를 하여 블록이 3개 이상인지 확인하여, 그 값이 참일 경우 해당 블록들을 삭제대상 메모리에 추가 한다. 이 검사가 종료되면 삭제대상의 범위를 삭제한다.” • 더 확실한 방법이 있다. 41
  42. 42. 모든 경우의 수를 검사하는 방법 42 빨간색 블록을 왼쪽으로 이동하였 다 빨간색 블록이 터질 수 있는 패턴 은 ‘ㅓ’범위 내에서만 가능하다 블록이 3개 이상 뭉쳐 있는 형태는 이 단계에 존재 불 가
  43. 43. ㅓ 범위 내의 존재가능한 모든 패턴 43 블록 이동 시 터질 수 있는 모든 패턴 총 12개
  44. 44. 이 패턴을 적용하여… 44 실험해 보자 지워지긴하는데… 아래의 3개 짜리는?
  45. 45. 왜 생길까? 45 빨간색 블록을 왼쪽으로 이동시키 면 검은색 블록은 오른쪽으로 이동 블록 이동 시 두 블록을 모두 신경써야한다
  46. 46. 그러므로 46 빨간색 블록의 경우와 마찬가지로 총 12개의 패턴 합쳐서 총 24개의 패턴 1회 이동 시 24개의 패턴을 검사한다
  47. 47. 팡체크 47 상, 하, 좌, 우 한 방향당 24개씩 96개의 패턴이 존재 한 방향으로 이동 시 해당 방향 검사만 실행
  48. 48. 팡체크 48 • 이동 시킨 블록을 중심으로 터질 블록이 있는지 확인한다. • 종류 상, 하, 좌, 우 한 방향 당 2개씩 총 8개의 팡체크가 있다. 하나의 팡 체크는 12개의 패턴이 있다. “왼쪽팡체크1”, ”왼쪽팡체크2” , 정의 “오른쪽팡체크1”, “오른쪽팡체크2”, “위쪽팡체크1”, “위쪽팡체크2”, “아래쪽팡체크1”, “아래쪽팡체크2”. • 이동/선택 단계에서 블록을 이동시킨 방향에 따라 팡체크의 방향 도 정해진다. 예) 왼쪽이동 -> 왼쪽팡체크1 -> 왼쪽팡체크2 -> 지움단계
  49. 49. 왼쪽팡체크1 49 (y-2,x-1) (y-1,x-1) (y,x-3) (y,x-2) (y,x-1) (y,x) (y+1,x-1) (y+2,x-1) • 블록을 왼쪽으로 이동시키면 (y,x)의 chr값을 inttemp1 메모리에 저장하고 (y,x-1)의 chr값을 inttemp2 메모리에 저장한다. 정의 • 주황색의 범위 내 모든 블록의 chr값을 검사한다. • 위의 12개의 패턴 모양 대로 inttemp2와 패턴 범위 내 블록들의 Chr값을 비교하여 값이 모두 참이면 그 블록을 „삭제대상‟으로 한 다. (블록수가 많은 순서대로 검사)
  50. 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. 그 외 팡체크 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˚회전) • 삭제대상이 있으면 “지움”단계로 들어간다. 삭제대상이 없으면 이동/선택단계로 돌아가고, 이동한 블록을 다시 돌려 놓는다.
  52. 52. 검사 이동/선택 없음 지울게 있음 블록지움 빈칸채움
  53. 53. 블록지움 53 삭제 시 애니메이션 있음 지워진 블록이 다시 채워 지기 까지 일정 시간 소 요 약 1초 게임에서 딜레이 역할
  54. 54. 블록지움 정의 54 • “삭제대상”내 셀의 chr값과 sp값을 “none”으로 변경하며 0.5초 동 안 삭제될 때 나타나는 애니메이션이 나온다. (블록채움시간 0.5초)
  55. 55. 끝? 55 • 너무 짧아서… 콤보 추가
  56. 56. 콤보 56 블록이 지워지면 콤보가 생성된다
  57. 57. 이런 상황에서도? 57 블록을 터트린 후 블록이 새로 차면서 3칸이 맞춰졌다. 콤보가 추가될까?
  58. 58. 콤보가 아니라 체인 58 Combo 대신 Chain 추가 체인도 늘어날 수록 점수가 증가하지만 자동으로 맞춰지는 블록 은 매우 드물다
  59. 59. 그럼 콤보는 언제 생성될까? • 직접 블록을 움직여 터트릴 때 1추가 • 파이어팡을 터트릴 때 1추가 • 랜덤팡을 터트릴 때 1추가 • 단, 콤보가 추가된 후 새로운 콤보 추 가 없이 3초가 지나면 콤보는 0이 된다 • 또한, 피버모드가 실행될 때 마다 콤보 가능 시간(최초 3초)은 0.5초 줄어든다 59
  60. 60. 콤보에 영향을 미치는 요인? • 파이어팡, 랜덤팡을 사용 시 시간이 멈춘다 - 애니팡을 해본 사람이라면 폭탄, 랜덤팡의 중요성을 알것이다 • 2초 60
  61. 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의 값은 고정되어 변하지 않는다.
  62. 62. 검사 이동/선택 없음 지울게 있음 블록지움 빈칸채움
  63. 63. 빈칸채움 63 블록지움 후 빈칸을 검사하여 메꾼다
  64. 64. 어떻게? 64 • 위에서 아래로
  65. 65. 중력에 이끌리듯 빈칸 위의 블록들을 내린 다 맨 위칸에 새로운 블록 생 65
  66. 66. 빈칸채움 완료 • 간단하다 66
  67. 67. 그러나 67 ??? 월간 수학동아 2012년 11월호 49페이지 애니팡기획자 인터뷰
  68. 68. 정리하면, 68 • 빈칸을 채우기 전에 움직여서 터트릴 수 있는 블록의 여부를 검사 • 없다면, 터트릴 수 있는 블록을 생성
  69. 69. 빈칸채움 이 상태로 터질게 있는지 검사할 수 있을까? 69
  70. 70. 터질게 있는지 검사위해 ( = 팡 가능검사) 이 상태로 만들어야 한다 70
  71. 71. 그러므로 71 • 빈칸 검사부터 실시
  72. 72. 필드 중 빈칸 검사 . 72 . . 48 49 6 7 none 8 9 . . . 1 2 3 4 5 순서대로 셀의 chr값을 검사 그 값이 “none”이면 다음 과정으로
  73. 73. 블록을 아래로 내린다 73 (2,x) (3,x) (y-1,x) (y,x) (y,x) (y-1,x)부터 (2,x)까지 복사 (y,x)부터 (3,x)까지로 붙여넣 기
  74. 74. 블록이 정리 되었는지 확인 (2,x) (3,x) 위에는 블록이 없어야 한다 (y,x)부터 맨위까지 검사하여 블록이 없어야 종료 (y,x) (3,x) 블록이 있다면 다음 과정으로 아래는 빈칸이 없어야 한다 (y,x)부터 맨 앞래까지 검사하여 (y,x) 빈칸이 없으면 (y,x)를 한칸 위로 빈칸이 있으면 복사/붙여넣기 (8,x) 74
  75. 75. 블록이 정리 되었는지 확인 • 위 과정을 2회 실행 75
  76. 76. 블록이 정리 되었는지 확인 (2,x) 범위 중 블록이 있다 다음과정으로 (y,x) (2,x) 범위중 빈칸이 없다 (y,x)를 한칸 위로 (y,x) 76
  77. 77. 블록이 정리 되었는지 확인 (2,x) (y,x) 마찬가지로 (2,x) (y,x) (y,x)를 한칸 위로 77
  78. 78. 블록이 정리 되었는지 확인 (2,x) (y,x) (2,x) (y,x) 78
  79. 79. 블록 정리 완료 79 (2,x) 범위 중 블록이 없다 (y,x) 완료
  80. 80. 블록 생성 준비 완료 “팡가능검사” 후 블록을 생성한다 80
  81. 81. 팡가능 검사 • 터질게 있는지 검사 81
  82. 82. 터질 수 있는 모양 1 2 3 1 2 3 82 1 2 3 1 2 3 1 2 3 1 2 3 주황색을 움직이면 터트릴 수 있는 모양
  83. 83. 4개 짜리는? 83 1 2 3 4 필요 없다 1 2 3 이걸로 검사 가 능
  84. 84. 팡가능 갯수 검사 84 2개
  85. 85. 팡가능 갯수 검사 85 0개
  86. 86. 지울 수 있는 블록이 없으므로 (y,x) 86 지울 수 있는 블록 생 성
  87. 87. 어떻게? 87 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 여기에 경우의 수 모두 대 입
  88. 88. 팡가능 블록 패턴 (y, x) (y, x) (y, x) (y, x) 88 (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) 가로 총 24개 (y, x) (y, x) (y, x) (y, x) (y, x)
  89. 89. 팡가능 블록 패턴 • 세로도 총 24개 - 그림은 생략 89
  90. 90. 검사 방법 • 각 패턴 모양 대로 검사하여 • 주황색 두개의 chr값이 같을 경우, •(y,x)에 해당 chr값을 입력한다 90
  91. 91. 예를 들어 91 (y, x) 위의 패턴대로 셀의 chr값 검사 두 셀의 chr값은 모두 7 그러므로 (y,x)에 Chr7을 입력한다
  92. 92. 그 결과로 92 팡가능 블록 생성
  93. 93. 두번째 빈칸 채움 93 팡가능 블록이 있으므 로
  94. 94. 두번째 빈칸 채움 94 랜덤으로 블록 생 성 세번째도 마찬가지
  95. 95. 빈칸 채움 완료 95
  96. 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. 팡가능검사 97 • 빈칸에 블록을 생성하기 전 “필드”를 검사하여 „이동하여 3개가 연달아 배열될 수 있는 블록‟이 있는지를 확인한다. • 블록생성 순서대로 임의의 좌표 (y,x)를 이동시키며, 각 셀 마다 정의 48개의 패턴 모양으로 해당하는 셀 값들을 검사한다. 패턴의 두 주 황색 셀과 검은색 셀, 3가지 셀의 chr값이 모두 같을 경우 mvablecount = mvablecount +1 로 한다. (최초0) • (y,x)가 (2,8)이 되면 검사를 종료한다.
  98. 98. 팡가능블록생성 98 • 움직여서 터트릴 수 있는 블록이 없는 경우 움직여서 터트릴 수 있는 블록을 생성한다. • 움직여서 터트릴 수 있는 블록 은 “팡가능블록”으로 정의한다. • 빈칸채움에서 블록을 생성해야할 빈칸 (y,x)가 정해지면, 정의 팡가능 검사를 하여 팡가능블록을 생성할지 랜덤블록을 생성할지 를 정한다. • 방법 팡가능 블록 생성시 빈칸(y,x)에 48개의 패턴을 적용하여 각 패턴마 다 두 주황색의 값이 동일한지를 검사한다. 값이 동일하다면 빈칸 (y,x)에 해당 chr값을 입력하고 생성을 종료한다. (24개 모두 동일한 값이 없다면, 랜덤한 블록을 생성한다.)
  99. 99. 내친김에 • 팡 불가 블록을 생성해보자 99
  100. 100. 왜? 100 • 애니팡을 하면서 항상 느끼는 점 터트릴게 항상 모자라 다
  101. 101. 혹시 101 • 팡가능 블록 수가 제한되어 있나?
  102. 102. 그래서 102 • 실험해 보았다
  103. 103. 애니팡의 팡가능 블록 개수 • 총 50회 실시 - 5회 터트린 후 개수 103
  104. 104. 역기획 VBA 104 • 총 50회 실시 - 5회 터트린 후 개수
  105. 105. 팡가능 블록 수 비교 • 애니팡 평균 4.6 개 • 역기획 평균 4.4 개 • 비슷하다 105
  106. 106. 팡가능 갯수 비교 • 그런데 왜 애니팡이 훨씬 어렵지? 106
  107. 107. 난이도 비교 분석 107 블록 사이의 검은색 배경은 또 하나의 색으로 인식되어 기억할 수 있는 블록 수를 줄 임 사실 두개의 색 남색,검은색 캐릭터는 여러가지 색으로 구성되어 있어 블록의 인지 방해 그 외에 색깔 톤 등 여러 요인 작용
  108. 108. 어쨋든 108 • 팡불가 블록을 생성하자 - 난이도 조절용
  109. 109. 원리는 109 팡가능 블록 생성과 같 다
  110. 110. 차이점은 110 (y, x)
  111. 111. 차이점은 111 (y, x)
  112. 112. 차이점은 112 (y, x)
  113. 113. 차이점은 113 (y, x)
  114. 114. 차이점은 • chr값을 제외 시키는 것 114
  115. 115. 팡불가블록생성 115 • 움직여서 터트릴 수 있는 블록이 너무 많은 경우 움직여서 터트릴 수 없는 블록을 생성한다. • 움직여서 터트릴 수 없는 블록 은 “팡불가블록”으로 정의한다. • 빈칸채움에서 블록을 생성해야할 빈칸 (y,x)가 정해지면, 정의 팡가능 검사를 하여 팡가능블록 혹은 팡불가블록을 생성할지 랜덤 블록을 생성할지를 정한다. • 방법 팡가능 블록 생성시 빈칸(y,x)에 48개의 패턴을 적용하여 각 패턴마 다 두 주황색의 값이 동일한지를 검사한다. 값이 동일하다면 빈칸 (y,x)에 입력할 chr값(1~7) 중 해당 chr값을 제외한다. 24개의 패턴 을 모두 적용하면 남은 chr값 중 하나를 랜덤으로 (y,x)에 입력하고 생성을 종료한다.
  116. 116. 빈칸채움 검사 지울게 있음 블럭지움 없음 이동/선택 있음 검사 움직일게 없음 블럭생성
  117. 117. 빈칸 채움이 끝난 필드 117
  118. 118. 그런데… 118 이건 언제 생겼지?
  119. 119. 빈칸채움 완료 후 • 3개짜리가 있을 수 있다 - 3개 이상도 가능 • 바로 Chain 119
  120. 120. 그러므로 120 • 필드 검사 필요 = 필드체크
  121. 121. 필드검사에 들어가기 전 • 겪은 시행 착오들 121
  122. 122. 시행착오 122 지워야할 블록 모양 들
  123. 123. 시행착오 직선검사 123 ok ok ok ok ok ok ok ok ok 남는 부분이 있다 o k o k
  124. 124. 시행착오 가로세로검사 ok ok ok ok ok o k ok o k 124 o ok k o ok k o k ok 겹치는 부분이 있다 폭탄 생성 및 점수계산에서 불리 o k
  125. 125. 그래서, 125 • 선택한 방법
  126. 126. 필드체크 방법 결정 3칸이 검색되면 상하좌우를 검사하여 한칸씩 추가하면 어떨까? 126
  127. 127. 우선은, 127 . . . 8 9 . . 2 3 4 5 49 6 7 . (y,x) 48 순서대로 세 칸씩 검 사
  128. 128. 가로 3칸 검사 128 . . . 48 49 6 7 (y,x) 8 9 . . . 1 2 3 4 5 3개 모두 같은 색이 면
  129. 129. 다음은, 129 . . . 48 49 6 7 (y,x) 8 9 . . . 1 2 3 4 5 세로검사 합쳐진 모양부터 제거하기 위
  130. 130. 이 외에도 130 (y,x) (y,x) (y,x) (y,x) (y,x) (y,x) (y,x) (y,x) (y,x) 이런 모양들을 검 사
  131. 131. 검사결과가 참이면 . 131 . . 48 49 6 7 (y,x) 8 9 . . . 1 2 3 4 5
  132. 132. 좌표 저장 132 . . . 48 49 6 7 (y,x) 8 9 . . . 1 2 3 4 5 (y,x)좌표를 rngcrs1메모리에 저장
  133. 133. 검사가 종료되면, . crs2 133 . . crs3 (y,x) crs1 8 9 . . . 1 2 3 4 5 6 7 가로 세로가 겹쳐진 형태 의
  134. 134. 다음 단계는 134 crs1 상하좌우 검사 Rngcrs1부터
  135. 135. 위쪽 검사 (y-1,x) (y,x) 135 rngcrs1의 좌표를 (y,x)로 설정 (y-1,x)와 (y,x)의 chr값을 비교 같으면 rngcrs1의 범위에 (y-1,x)를 추가한다
  136. 136. 위쪽 검사 (y-2,x) (y,x) 136 다음은 (y-2,x)의 값이 같으면 추가
  137. 137. 위쪽 검사 137 (y-3,x) (y,x) 값이 다르면 검사 종료 다음은 좌측 검사
  138. 138. 왼쪽 검사 (y,x-1) (y,x) 138 값이 다르면 검사 종료 다음은 아래쪽 검사
  139. 139. 아래쪽 검사 (y,x) (y+1,x) 139 값이 다르면 검사 종료 다음은 오른쪽 검사
  140. 140. 오른쪽 검사 140 범위추가 (y,x) (y,x+1)
  141. 141. 오른쪽 검사 141 범위추가 (y,x) (y,x+2)
  142. 142. 오른쪽 검사 142 값이 다르면 (y,x) (y,x+2) 검사 종료
  143. 143. 상하좌우검사가 끝나면, (y,x) 추가된 Rngcrs1의 범위 딱맞는다 143
  144. 144. 삭제 144 (y,x)
  145. 145. 같은 방법으로 (y,x) 145 가로 모양 지움 세로 모양 지움 (y,x)
  146. 146. 삭제 146 (y,x) (y,x)
  147. 147. 결과 147 체인 삭제 후 빈칸이 생 김
  148. 148. 빈칸을 채우려면 • 다시 “빈칸채움”으로 148
  149. 149. 빈칸채움 필드 체크 지울게 있음 블럭지움
  150. 150. 그리고, 150 • 다시 필드체크
  151. 151. 빈칸채움 필드 체크 지울게 없음 지울게 있음 블럭지움
  152. 152. 지울게 없을 때까지 • 반복 152
  153. 153. 빈칸채움 필드 체크 지울게 없음 지울게 있음 블럭지움
  154. 154. 지울게 없다 • 필드체크 종료 154
  155. 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. 상하좌우검사 156 • 터트릴 블록의 상하좌우를 검사하여 터트릴 범위를 추가/확정한 다. • 검사방법 1. “위쪽검사” 실행 정의 2. “왼쪽검사” 실행 3. “아래쪽검사” 실행 4. “오른쪽검사” 실행 5. rngcrsA의 값을 “삭제대상”으로 한다. 6. “블록지움” 실행한다. “Loopvalue”의 값을 true로 한다. 7. 해당 rngcrsA 값을 초기화한다.
  157. 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. 왼쪽검사 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. 아래쪽검사 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. 오른쪽검사 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. 거짓이면 검사를 종료한다.
  161. 161. 빈칸채움 필드 체크 지울게 있음 블럭지움 없음 이동/선택 있음 팡가능 검사 움직일게 없음 블럭생성
  162. 162. 팡가능 검사는 • 이미 다룬 내용에 추가 162
  163. 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이 아닌게 있다면, “이동/선택”을 실행한다.
  164. 164. 빈칸채움 필드 체크 지울게 있음 블럭지움 없음 이동/선택 있음 팡가능 검사 움직일게 없음 블럭생성
  165. 165. 빈칸채움 필드 체크 지울게 있음 블럭지움 없음 이동/선택 있음 팡가능 검사 움직일게 없음 블럭생성
  166. 166. 처음부터, 166 • 반복
  167. 167. 언제까지? 167 • 0초까지
  168. 168. 실행 게임시간 필드생성 <0 블럭생성 종료 이동/선택
  169. 169. 애니팡 알고리즘 • 종료 169
  170. 170. 특수팡 및 기타 파트 • 시작 170
  171. 171. 파이어팡 랜덤팡 앵그리팡 피버모드 라스트팡 점수
  172. 172. 파이어팡 일명폭탄 172
  173. 173. 선택하면 터진다 173
  174. 174. 언제 생길까? 174 노란 색 게이지가 꽉차면 하나 추가
  175. 175. 그럼 노란 게이지는? 175 블록을 터트릴 때마다 찬다 블록 60개 = 폭탄 1개
  176. 176. 그럼… • 블록이 터지는 갯수를 알아야 한다 176
  177. 177. 어떻게? 177 • 블록이 터지면…
  178. 178. 공통적으로, 178 빈 칸이 생긴다
  179. 179. 다시 채워지기 전에, • 빈 칸을 개수 179
  180. 180. 파이어팡 생성 빈칸채움 검사 지울게 있음 블럭지움 없음 이동/선택 있음 검사 움직일게 없음 블럭생성
  181. 181. 검사 이동/선택 없음 지울게 있음 블록지움 빈칸채움 파이어팡 생성
  182. 182. 빈칸을 개수하여, 182 누적이 60이 넘으 면
  183. 183. 빈칸을 개수하여, 183 폭탄을 생성하고 누적 카운트를 0으로
  184. 184. 그런데… 184 • 폭탄 생성 위치는?
  185. 185. 높은 행, 낮은 열 순 높은 행 낮은 열 185
  186. 186. 폭탄 생성 완료 186
  187. 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)
  188. 188. 이제 쓰는 일만 남았다 188
  189. 189. 언제 사용할 수 있나? • 블록을 이동시키는 대신 사용 189
  190. 190. 실행 게임시간 필드생성 <0 블럭생성 종료 이동/선택
  191. 191. 파이어팡 사용 시, • 어떻게 터질까? 191
  192. 192. 폭탄을 사용하면, 192 폭탄이 있던 열 모두 터짐 맨 아래 행 모두 터짐
  193. 193. 정리하면, • “이동/선택” 페이즈에서 사용 • 폭탄이 있던 열과 맨 아래 행 터짐 193
  194. 194. 파이어팡 사용 194 • 파이어팡을 사용한다. • 사용방법 이동/선택 단계에서 파이어팡을 선택하면 파이어팡이 사용된다. 정의 • 터지는 범위 선택한 파이어팡의 좌표 (y,x). (2,x)부터 (7,x)까지, (8,2)부터 (8,8) 까지를 “삭제대상”으로 하여 삭제한다. • bombcount bombcount = bombcount – 1 로한다. bombcount의 값이 0이하로 내려가면 그 값은 0으로 한다.
  195. 195. 끝? 195 • 이면 좋겠지만…
  196. 196. 역기획 과정 중, • 가장 힘들고 복잡했던 부분 • 특수팡 파트 196
  197. 197. 특수 팡의 관계 197 파이어팡의 범위에 랜덤팡이나 앵그리팡이 있다면 터질까?
  198. 198. 특수 팡의 관계 198 파이어팡의 범위에 파이어팡이 있다면 터질까?
  199. 199. 특수 팡의 관계 199 앵그리팡을 터트리 면 파이어팡이 터질까?
  200. 200. 특수 팡의 관계 200 랜덤팡을 터트려서 토끼가 걸리면 앵그리팡은?
  201. 201. 특수 팡의 관계 • 모두 실험해 보았다 201
  202. 202. 특수 팡의 관계 202 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한
  203. 203. 특수 팡의 관계 203 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 파이어팡은 터치로만 터트릴 수 있다
  204. 204. 특수 팡의 관계 204 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 랜덤팡은 터치와 파이어 팡
  205. 205. 특수 팡의 관계 205 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 터치 제외 앵그리팡 X X O 단, 랜덤팡으로 터지면 피버팡 X X O 일반블록 취급 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 앵그리팡은
  206. 206. 그런데, 206 • 이게 무슨 의미일까?
  207. 207. 파이어팡이 터지면, 207 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 파이어팡의 범위 내 랜덤팡과 앵그리팡 의 유무를 검사
  208. 208. 파이어팡이 터지면, 208 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 있으면, 터트린다.
  209. 209. 예를 들어, 209 파이어팡을 사용했 다
  210. 210. 파이어팡의 삭제범위 210 그 안에 랜덤팡과 앵그리팡이 있 다
  211. 211. 첫째로, 211 랜덤팡이 사용된 다 병아리가 선택
  212. 212. 둘째로, 212 앵그리팡이 사용된 다 3x3칸 선택
  213. 213. 마지막으로, 213 삭제
  214. 214. 파이어팡 사용 완료 214 빈칸채움으로
  215. 215. 그러므로, 215 • 파이어팡의 정의는
  216. 216. 파이어팡 사용 216 • 파이어팡을 사용한다. • 사용방법 이동/선택 단계에서 파이어팡을 선택하면 파이어팡이 사용된다. • 터지는 범위 정의 선택한 파이어팡의 좌표 (y,x). (2,x)부터 (7,x)까지, (8,2)부터 (8,8) 까지를 “삭제대상”으로 한다. 삭제대상 전체를 검사하여, 셀의 sp값 이 “R”이면 “랜덤팡의 범위”를 삭제대상에 추가한다. Sp값이 “A”이 면 “앵그리팡의 범위”를 삭제대상에 추가한다. 검사가 끝나면, 삭제 대상을 삭제한다. • bombcount bombcount = bombcount – 1 로한다. bombcount의 값이 0이하로 내려가면 그 값은 0으로 한다.
  217. 217. 같은 방식으로, 217 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O 블록을 이동시켜 터질 때 O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 앵그리팡이 터질 때, 피버팡이 터질 때, 필드생성으로 터질 때 앵그리팡을 검사한다
  218. 218. 자세한 건, 218 • 앵그리팡에서…
  219. 219. 파이어팡 랜덤팡 앵그리팡 피버모드 라스트팡 점수
  220. 220. 랜덤팡 219
  221. 221. 생성 조건 221 • 같은 블록 5개 배열
  222. 222. 생성 조건 1 222 블록이동으로
  223. 223. 생성 조건 223 • 혹은
  224. 224. 생성 조건 2 224 빈칸채움으로
  225. 225. 생성 조건 2 225 생성
  226. 226. 그러면, 226 • 랜덤팡 생성 위치는?
  227. 227. 생성 조건 1 227 블록이동으로
  228. 228. 생성 조건 1 228 이동한 블록의 좌표 (y,x)
  229. 229. 생성 조건 2 229 자동생성은
  230. 230. 첫번째, 230 아래
  231. 231. 두번째, 231 왼쪽
  232. 232. 파이어팡 생성 빈칸채움 검사 랜덤팡 생성 지울게 있음 블럭지움 없음 이동/선택 있음 검사 움직일게 없음 블럭생성
  233. 233. 검사 이동/선택 없음 지울게 있음 블록지움 파이어팡 생성 빈칸채움 랜덤팡 생성
  234. 234. 랜덤팡 생성 234 • 랜덤팡을 생성한다. • 생성방법 블록이동이나 빈칸채움으로 5개 이상의 같은 블록이 한 번에 터지 는 경우 랜덤팡을 생성한다. • 생성위치 정의 1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “랜덤팡생성” 단계를 실행한다. 2. 블록이동으로 생성될 경우, 선택하여 움직인 블록의 최종 위치 (y,x)에 랜덤팡이 생성된다. 3. 빈칸채움으로 생성될 경우, 블록생성 순으로 빈칸을 검사하여 높은 행에, 같은 행이라면 낮은 열에 랜덤팡을 생성한다. 4. 랜덤팡을 생성한다는 것은 셀의 sp값을 R로 하고, 해당 캐릭터 블록이 위치를 차지하는 것을 의미한다. 5. 랜덤팡이 생성되면, randomcount = randomcount + 1로 한다. (최초, randomcount = 0)
  235. 235. 이어서, 235 • 랜덤팡 사용
  236. 236. 랜덤팡을 사용하면, 236 7종의 기본 캐릭터 중 랜덤으로 한 개의 캐릭터 결정
  237. 237. 모두 삭제 237
  238. 238. 랜덤팡 사용 시, 238 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 고려 대상 없 음
  239. 239. 랜덤팡 사용 239 • 랜덤팡을 사용한다. • 사용방법 이동/선택 단계에서 랜덤팡을 선택하면 랜덤팡이 사용된다. • 터지는 범위 정의 1. randomtemp메모리에 chr값 chrR을 저장한다. R = random(1,7) 로 한다. 2. 필드 전체를 검사하여 셀 값이 randomtemp와 같을 경우 해당 셀을 삭제대상으로 추가한다. (최초, 랜덤팡의 셀이 삭제대상) 3. 삭제대상을 삭제한다. • randomcount randomcount = randomcount – 1 로한다. randomcount의 값이 0 이하로 내려가면 그 값은 0으로 한다.
  240. 240. 파이어팡 랜덤팡 앵그리팡 피버모드 라스트팡 점수
  241. 241. 앵그리팡의 생성 조건 • 랜덤팡과 같다 241
  242. 242. 파이어팡 생성 빈칸채움 검사 랜덤팡 생성 앵그리팡 생성 지울게 있음 블럭지움 없음 이동/선택 있음 검사 움직일게 없음 블럭생성
  243. 243. 검사 이동/선택 없음 지울게 있음 블록지움 파이어팡 생성 빈칸채움 랜덤팡 생성 앵그리팡 생성
  244. 244. 다만, 244 • 4개의 블록이 터지면 앵그리팡
  245. 245. 앵그리팡 생성 245 • 앵그리팡을 생성한다. • 생성방법 블록이동이나 빈칸채움으로 4개 이상의 같은 블록이 한 번에 터지 는 경우 앵그리팡을 생성한다. 정의 • 생성위치 1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “앵그리팡생성” 단계를 실행한다. 2. 블록이동으로 생성될 경우, 선택하여 움직인 블록의 최종 위치 (y,x)에 앵그리팡이 생성된다. 3. 빈칸채움으로 생성될 경우, 블록생성 순으로 빈칸을 검사하여 높은 행에, 같은 행이라면 낮은 열에 앵그리팡을 생성한다. 4. 랜덤팡을 생성한다는 것은 셀의 sp값을 A로 하고, 해당 캐릭터 블록이 위치를 차지하는 것을 의미한다.
  246. 246. 그런데, 246 • 4개나 5개가 터지는 걸 어떻게 알 수 있을까?
  247. 247. 블록 이동으로 터트릴 때 • 팡체크 패턴으로 알 수 있다 247
  248. 248. 팡체크 248 4개 5개 이상
  249. 249. 팡체크 시 해당 패턴이 실행되면, • 랜덤팡 혹은 앵그리팡 생성 실행 249
  250. 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. 앵그리팡 생성 251 • 앵그리팡을 생성한다. • 생성방법 angryvalue = true이면, 다음의 위치에 앵그리팡을 생성하고, angryvalue 를 false로 한다. angryvalue = false이면, 앵그리팡을 생성하지 않는다. 정의 • 생성위치 1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “앵그리팡생성” 단계를 실행한다. 2. 블록이동으로 생성될 경우, 선택하여 움직인 블록의 최종 위치 (y,x)에 앵그리팡이 생성된다. 3. 빈칸채움으로 생성될 경우, 블록생성 순으로 빈칸을 검사하여 높은 행에, 같은 행이라면 낮은 열에 앵그리팡을 생성한다. 4. 랜덤팡을 생성한다는 것은 셀의 sp값을 A로 하고, 해당 캐릭터 블록이 위치를 차지하는 것을 의미한다.
  252. 252. 랜덤팡 생성 252 • 랜덤팡을 생성한다. • 생성방법 randomvalue = true이면, 다음의 위치에 랜덤팡을 생성하고, randomvalue 를 false로 한다. randomvalue = false이면, 랜덤팡을 생 성하지 않는다. • 생성위치 정의 1. 모든 “블록지움”과 “빈칸채움” 단계의 사이에 “랜덤팡생성” 단계를 실행한다. 2. 블록이동으로 생성될 경우, 선택하여 움직인 블록의 최종 위치 (y,x) 에 랜덤팡이 생성된다. 3. 빈칸채움으로 생성될 경우, 블록생성 순으로 빈칸을 검사하여 높은 행에, 같은 행이라면 낮은 열에 랜덤팡을 생성한다. 4. 랜덤팡을 생성한다는 것은 셀의 sp값을 R로 하고, 해당 캐릭터 블록 이 위치를 차지하는 것을 의미한다. 5. 랜덤팡이 생성되면, randomcount = randomcount + 1로 한다. (최초, randomcount = 0)
  253. 253. 자동 생성 시에는? • 블록을 개수 253
  254. 254. 상하좌우검사가 끝나면, 선택된 범위 내 (y,x) 셀의 수를 검사 254
  255. 255. 상하좌우검사 255 • 터트릴 블록의 상하좌우를 검사하여 터트릴 범위를 추가/확정한 다. • 검사방법 1. “위쪽검사” 실행 2. “왼쪽검사” 실행 정의 3. “아래쪽검사” 실행 4. “오른쪽검사” 실행 5. rngcrsA의 범위 내 셀을 검사하여 그 수가 4개 라면, angryvalue = true로 하고, 5개 이상이라면, randomvalue = true로 한다. 6. rngcrsA의 값을 “삭제대상”으로 한다. 7. “블록지움” 실행한다. “Loopvalue”의 값을 true로 한다. 8. 해당 rngcrsA 값을 초기화한다.
  256. 256. 다시 돌아가서 • 앵그리팡 사용 256
  257. 257. 앵그리팡은 257 딱히 사용 방법 없음 앵그리팡인데 웃고 있다. 앵그리팡에서 스마일팡으로 컨셉을 바꾸었지만, 선데이 토즈에서 공식적으로 명칭을 바꾸지 않았다.
  258. 258. 앵그리팡을 포함하여 터트리면, 258 앵그리팡을 중심으로 3x3칸 추가 터트림
  259. 259. 엄밀히 말하면, 259 “삭제대상”에 3x3의 범위 추가
  260. 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 : 터지지만 일반블록으로 취급한 랜덤팡을 제외하고 모두 앵그리팡을 고려
  261. 261. 정리하면, 앵그리팡은 • 사용할 수 없고, 지워지면 3x3추가 터트림 261
  262. 262. 즉, 262 • 범위추가만 존재
  263. 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가 없을 때까지 반복한다.
  264. 264. 파이어팡을 터트려 보자 264
  265. 265. 팡팡팡 265 삭제
  266. 266. 랜덤팡, 앵그리팡 추가 삭제 잘 돌아간다 266
  267. 267. 그러나 267 • 문제점
  268. 268. 앵그리팡을 터트리자 268
  269. 269. 앵그리팡을 터트리자 269 여기있던 파이어팡 이??
  270. 270. 파이어팡은 270 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 앵그리팡에 의해 지워지지 않는다
  271. 271. 그러므로 271 “삭제대상”에서 파이어팡 제외
  272. 272. 덤으로 272 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 랜덤팡도 제외
  273. 273. 이제… 273 • 잘 되겠지?
  274. 274. 팡팡팡 274 삭제
  275. 275. 어라? 275 랜덤팡이 안지워진다
  276. 276. 왜? 276 • “삭제대상”에서 제외 되었기 때 문
  277. 277. “삭제대상”에서 제외하는 것이 아니라, 277 애초에 “삭제대상”으로 추가하지 않아야 한다
  278. 278. 앵그리팡의 범위 추가 시 278 범위 내 셀의 sp값을 검사 파이어팡, 랜덤팡 대상 제외
  279. 279. 설정된 범위를 279 “삭제대상”으로 추가
  280. 280. 이 내용을 280 • 모든 특수 팡에 적용
  281. 281. 앵그리팡은 281 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 파이어팡 제외 랜덤팡 제외
  282. 282. 파이어팡은 282 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 파이어팡만 제 외
  283. 283. 피버모드는 283 팡종류 파이어팡 랜덤팡 앵그리팡 블록선택 O O X 블록이동 X X O 파이어팡 X O O 랜덤팡 X X XX 앵그리팡 X X O 피버팡 X X O 필드배열 X X O O : 터진다. 다. X : 영향을 주지 않는다. XX : 터지지만 일반블록으로 취급한 파이어팡 제외 랜덤팡 제외
  284. 284. 그러므로 284 • 내용을 수정하면
  285. 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. 파이어팡 사용 286 • 파이어팡을 사용한다. • 사용방법 이동/선택 단계에서 파이어팡을 선택하면 파이어팡이 사용된다. • 터지는 범위 정의 선택한 파이어팡의 좌표는 (y,x). (2,x)부터 (7,x)까지, (8,2)부터 (8,8) 까지의 범위중 각 셀의 sp값을 검사하여 그 값이 “bomb”가 아니면 해당 셀을 “삭제대상”으로 한다. 삭제대상 전체를 검사하여, 셀의 sp값이 “R”이면 “랜덤팡의 범위”를 삭제대상에 추가한다. Sp값이 “A”이면 “앵그리팡의 범위”를 삭제대상에 추가한다. 검사가 끝나면, 삭제대상을 삭제한다. • bombcount bombcount = bombcount – 1 로한다. bombcount의 값이 0이하로 내려가면 그 값은 0으로 한다.
  287. 287. 피버모드는 287 • 나중에…
  288. 288. 특수 팡의 마지막 내용 • sp값? 288
  289. 289. Chr값이 아니라 • sp값인 이유? 289
  290. 290. 만약 앵그리팡의 chr값이 A라면, 290
  291. 291. 만약 앵그리팡의 chr값이 A라면, 291 3개의 토끼가 배열 그러나 터지지 않음 chr4 chr4 A 값이 다르기 때문
  292. 292. 그렇기 때문에 앵그리팡은 • 기본 블록의 역할을 하면서도 • 기본 블록과 구분할 수 있는 값 필요 292
  293. 293. 그것이 바로 293 • sp값
  294. 294. 이것으로 294 • 특수팡 파트 완료
  295. 295. 파이어팡 랜덤팡 앵그리팡 피버모드 라스트팡 점수
  296. 296. 피버모드 296 피버모드에선 더 많이 터진다
  297. 297. 피버모드의 원리 • 블록이 하나 터지면, • 상하좌우의 블록이 같이 터진다 297
  298. 298. 3개가 터지면, 298 주황색이 추가 범위 단, 이동시킨 블록이 터질때만 적용
  299. 299. 피버모드 발동 조건 • 피버모드가 아닌 상태에서 • 연속으로 5콤보 달성 299
  300. 300. 즉, 300 • 피버모드의 생성 단계는 • 콤보를 카운트 하는
  301. 301. 검사 이동/선택 없음 지울게 있음 블록지움 빈칸채움
  302. 302. 블록을 지운 후 • 콤보를 카운트 할 때 302
  303. 303. 또한, 303 • 콤보와 개별적으로 • 피버카운트 개수 - 피버모드가 아닌 상태에서의 콤보 수
  304. 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. 블록지움 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. 피버모드 306 • fevervalue가 true이면 피버모드가 활성화된 것으로 한다. • fevertime 피버모드는 4초 동안 유지된다. 정의 1. 피버모드가 활성화되면, fevertime = 4로 되고, 1초마다 fevertime = fevertime – 1 로 한다. 2. 1.을 반복하여 fevertime = 0이 되면 피버모드는 불활성화되며, fevervalue = false로 한다. • 피버모드가 활성화된 동안에는 반짝이는 이펙트를 추가한다.
  307. 307. 파이어팡 랜덤팡 앵그리팡 피버모드 라스트팡 점수
  308. 308. 라스트팡 • 유일하게 게임이 끝나고 실행 308
  309. 309. 실행 게임시간 필드생성 <0 블럭생성 종료 이동/선택 라스트팡
  310. 310. 게임이 끝나면, 조작은 불가능 하지만… 310 남아 있는 폭탄, 앵그리팡, 랜덤팡이 터진다. 덤으로 빈칸이 채워지며 터지 는 체인도 있다.
  311. 311. 게임은 끝났지만, • 마지막 콤보가 적용되어 점수 계산 311
  312. 312. 그외 312 • 특이사항 없음
  313. 313. 라스트팡 313 • 라스트팡 게임 종료 후, 남아있는 파이어팡, 랜덤팡, 앵그리팡을 사용한다. 정의 • 방법 블록생성 순서대로 임의의 셀(y,x)을 검사하여, 해당 셀의 sp값이 “A” 혹은 “R” 혹은 “bomb”라면, 각각 “앵그리팡사용”, “랜덤팡사용”, “파이어팡사용”을 실행하고, “삭제대상”을 삭제한다.
  314. 314. 파이어팡 랜덤팡 앵그리팡 피버모드 라스트팡 점수
  315. 315. 애니팡의 주요 시스템 315 게임의 목적이자 보 상
  316. 316. 무엇이든 316 • 터지면 점수를 얻는다
  317. 317. 3칸이 터지면 317 250점
  318. 318. 폭탄이 터지면 318 5250점
  319. 319. 콤보에 따라 319 • 점수가 다름
  320. 320. 3칸이 터지면 320 20콤보 이상 4000점
  321. 321. 폭탄이 터지면 321 20콤보 이상 35250점
  322. 322. 이 외에 322 • 정식으로 공개된 자료 없음 - 거의 없음
  323. 323. 또한, 실제모니터링 결과 • 애니팡 점수 계산에도 버그발견 - 상당히 많다 323
  324. 324. 결국 324 • 똑같이는 구현하지 못했다
  325. 325. 그래서 325 • 알려진 데이터를 기반으로 • 임의로 점수 테이블을 만들었다
  326. 326. 점수 테이블 326 유형 3개 1 2 3 4 5 6 7 8 9 10 250 450 550 650 750 850 950 1050 1200 1400 4개 5개 500 900 1000 1300 1500 1700 1900 2100 2400 2800 1000 1800 2000 2600 3000 3400 3800 4200 4800 5600 6개 7개 1000 1800 2000 2600 3000 3400 3800 4200 4800 5600 5000 9000 10000 13000 15000 17000 19000 21000 24000 28000 폭탄 5250 6850 7650 8450 9250 10050 10850 11650 12450 13250 랜덤 4000 5000 5500 6000 6500 7000 7500 8000 8500 9000 앵그리팡 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 피버팡 1550 1700 1900 2100 2300 2550 2900 2950 3100 3500 필드체인 4500 5000 5000 5000 5000 5000 5000 5000 5000 5000 유형 3개 11 12 13 14 15 16 17 18 19 20 20+ 1650 1800 2000 2200 2400 2600 2800 3150 3500 4000 4000 4개 5개 3300 3600 4000 4400 4800 5200 5600 6300 7000 8000 8000 6600 7200 8000 8800 9600 10400 11200 12600 14000 16000 16000 6개 7개 6600 7200 8000 8800 9600 10400 11200 12600 14000 16000 16000 33000 36000 40000 44000 48000 52000 56000 63000 70000 80000 80000 폭탄 14450 15650 16850 18850 20850 22850 25650 28450 31250 35250 35250 랜덤 10000 11000 12000 14000 16000 18000 21000 24000 27000 31000 31000 앵그리팡 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 피버팡 3700 3800 4150 4500 5000 6000 6800 7500 7800 9200 9200 필드체인 5000 5000 5000 5000 5000 5000 5000 5000 5000 5000 5000
  327. 327. 주황색은 확실한 데이터 327 유형 3개 1 2 3 4 5 6 7 8 9 10 250 450 550 650 750 850 950 1050 1200 1400 4개 5개 500 900 1000 1300 1500 1700 1900 2100 2400 2800 1000 1800 2000 2600 3000 3400 3800 4200 4800 5600 6개 7개 1000 1800 2000 2600 3000 3400 3800 4200 4800 5600 5000 9000 10000 13000 15000 17000 19000 21000 24000 28000 폭탄 5250 6850 7650 8450 9250 10050 10850 11650 12450 13250 랜덤 4000 5000 5500 6000 6500 7000 7500 8000 8500 9000 앵그리팡 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 피버팡 1550 1700 1900 2100 2300 2550 2900 2950 3100 3500 필드체인 4500 5000 5000 5000 5000 5000 5000 5000 5000 5000 유형 3개 11 12 13 14 15 16 17 18 19 20 20+ 1650 1800 2000 2200 2400 2600 2800 3150 3500 4000 4000 4개 5개 3300 3600 4000 4400 4800 5200 5600 6300 7000 8000 8000 6600 7200 8000 8800 9600 10400 11200 12600 14000 16000 16000 6개 7개 6600 7200 8000 8800 9600 10400 11200 12600 14000 16000 16000 33000 36000 40000 44000 48000 52000 56000 63000 70000 80000 80000 폭탄 14450 15650 16850 18850 20850 22850 25650 28450 31250 35250 35250 랜덤 10000 11000 12000 14000 16000 18000 21000 24000 27000 31000 31000 앵그리팡 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 피버팡 3700 3800 4150 4500 5000 6000 6800 7500 7800 9200 9200 필드체인 5000 5000 5000 5000 5000 5000 5000 5000 5000 5000 5000
  328. 328. 이 점수를 328 • 어떻게 적용할까?
  329. 329. 검사단계와 지움단계 사이 • “삭제대상” 생성 시 실행 329
  330. 330. 검사 이동/선택 없음 지울게 있음 점수 블록지움 빈칸채움
  331. 331. 빈칸채움 검사 지울게 있음 블럭지움 점수 없음 이동/선택 있음 검사 움직일게 없음 블럭생성
  332. 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. 그 외 팡체크 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. 상하좌우검사 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. 앵그리팡 사용 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. 블록지움 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 초)
  337. 337. 폭탄,랜덤팡은 337 • 사용할 때
  338. 338. 실행 게임시간 필드생성 <0 블록생성 종료 이동/선택
  339. 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. 점수 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 열에 따라 점수를 추가한다.
  341. 341. 역기획 분석 게 임 기 획 지 원 포 트 폴 리 오
  342. 342. 처음의 의도 342 • 똑같이 만들자
  343. 343. 만들어 진 것은 • ……. 343
  344. 344. 주요 차이점1 • 점수 시스템 344
  345. 345. 점수 파트에서 다룬대로 • 모니터링하여 점수를 파악하는데는 한계가 있었고 - 터지는 블록이 너무 많아 세기도 힘들다… 345
  346. 346. 그 외에도 • vba로 만든 역기획과 애니팡과 의 난이도 차로 점수 차이가 있다 346
  347. 347. 주요 차이점2 • 난이도 347
  348. 348. 이미 다룬 348 • 블록 모양과 색
  349. 349. 난이도 비교 분석 349 블록 사이의 검은색 배경은 또 하나의 색으로 인식되어 기억할 수 있는 블록 수를 줄 임 사실 두개의 색 남색,검은색 캐릭터는 여러가지 색으로 구성되어 있어 블록의 인지 방해 그 외에 색깔 톤 등 여러 요인 작용
  350. 350. 그 외에도 350 • 조작의 문제도 있다 - 터치와 키보드
  351. 351. 주요 차이점3 • 시스템 상 문제 351
  352. 352. 애니팡은 352 블록이 터지는 중에도 다른 블록의 이동이 가능하다
  353. 353. 그러나 VBA에서는 • 불가능하다 353
  354. 354. 예를들어 354 • 블록을 이동시키면 빈칸채움이 완료될 때까지 행동 불가
  355. 355. 실행 게임시간 필드생성 <0 블록생성 종료 이동/선택
  356. 356. 검사 이동/선택 없음 지울게 있음 블록지움 빈칸채움
  357. 357. 빈칸채움 검사 지울게 있음 블럭지움 없음 이동/선택 있음 검사 움직일게 없음 블럭생성
  358. 358. 이제야 358 • 이동/선택 가능
  359. 359. 결과적으로, VBA역기획은 • 기다리는 시간이 증가 359
  360. 360. 이것이 미치는 영향 2가지 • 난이도 하락 • 플레이 시간 감소 360
  361. 361. 난이도 하락 361 애니팡의 경우, 블록을 터트리면 이펙트가 끝나기 전에 다음 블록을 찾아야 콤보가 이어진다
  362. 362. 그러나 VBA역기획은 • 다음 블록을 찾을 시간이 • 충분하므로 • 긴박함이 없다 362
  363. 363. 또한, 시간이 충분하다는 것은 • 블록을 움직일 시간 보다는 • 기다리는 시간이 많다는 것이므로 • 움직일 수 있는 총 블록 양 감소 - 점수 하락 363
  364. 364. 그래서 생각한 것 • 최대한 애니팡의 요소를 살려보자 364
  365. 365. 첫째, 긴박함 365 찾을 시간이 많은 대신 다음 블록을 움직일 시간을 적게 준다
  366. 366. 실험을 거쳐 366 • 정한 시간 4초 - 애니팡의 3초보다 길지만, 방향키로 이동해야 하기 때문 에 4초가 적절했다.
  367. 367. 결과 367 • 그래도 쉽다
  368. 368. 그래서 생각한 것 368 • 팡가능 블록을 줄이자 팡불가블록
  369. 369. 그 결과 369 • 어려워 졌다 - 바로 바로 찾아내지 못하면 콤보가 끊길 정도의 난이도
  370. 370. 난이도 370 • 해결
  371. 371. 둘째, 플레이시간 애니팡의 묘미는 20콤보 유지 … - 하지만 VBA역기획에서는 20콤보에 도달할 때 쯤이면 371
  372. 372. 플레이시간이 짧아지면 • 콤보, 점수 시스템을 충분히 활용할 수 없 다 372
  373. 373. 그래서 간단하게 • 시간을 늘림 373
  374. 374. 120초 374 • 점수는 비슷하게 나온다 • 하지만, 지루하다 - 너무 길다
  375. 375. 90초로 수정 • 점수는 낮게 나오지만 • 20콤보 이상을 충분히 활용 가능 375
  376. 376. 그래서 376 • 90초로 결정
  377. 377. 난이도 문제 377 • 해결 완료
  378. 378. 마지막으로 378 • 애니팡은 반드시 터질 것이 있다 팡가능검사
  379. 379. 마지막으로 • VBA역기획은 터질 것이 없을 때도 있다 379
  380. 380. 사실은 애니팡도 움직일 게 없을 때가 많 다 380
  381. 381. 그러므로 381 • 패스
  382. 382. 이로써 382 • 역기획 분석 종료
  383. 383. 추가 콘텐츠 게 임 기 획 지 원 포 트 폴 리 오
  384. 384. 애니팡을 하면서 아쉬웠던 점 • 안터지는 블록끼리 뭉쳐있을 때 384
  385. 385. 아래 5칸 385 터트릴 게 없다 위에 채워지는 것들로만 터트릴 수 있다
  386. 386. 랜덤한 요소때문에 • 게임이 지루해질 수 있다 386
  387. 387. 그래서 387 • 생각해 낸 요소
  388. 388. 바로 388 마그넷
  389. 389. 두 곳에 마그넷이 생성되면 • 생각해 낸 요소 389
  390. 390. 두 곳에 마그넷이 생성되면 • 생각해 낸 요소 390
  391. 391. 두 곳에 마그넷이 생성되면 둘 사이 영역 터트 림 391
  392. 392. 그럼 392 쓸모없는 영역이 갱신된 다
  393. 393. 만약 393 • 다시 채워졌는데 또 움직일게 없다 면 - 번개폭탄 사용……. 비슷한 의도로 만들어졌을 수도 …….
  394. 394. 어쨋든 394 • 어떻게 생성될까?
  395. 395. 아이템 사용 역기획에서 아이템은 다루지 않았지만… 원하는 때 사용가능하 다 395
  396. 396. 첫 번째 마그넷 생성 396 위의 마그넷을 터치하 고,
  397. 397. 첫 번째 마그넷 생성 397 필드 중 하나의 블록 터 치
  398. 398. 첫 번째 마그넷 생성 398 그럼 위의 마그넷이 사라지 고 해당 위치에 마그넷 생성
  399. 399. 두 번째 마그넷 생성 399 블록을 맞춘 다
  400. 400. 두 번째 마그넷 생성 400 그럼 해당 위치 에 마그넷 생성
  401. 401. 두개의 마그넷이 생성되면 범위를 설정 후 해당 범위 삭 제 401
  402. 402. 그러므로 402 • 정의는
  403. 403. 마그넷 생성 403 • 마그넷팡을 생성한다 정의 • 방법 1. 게임을 시작하기 전에 마그넷팡을 구매한다. 2. 게임 도중 점수 옆의 마그넷팡아이콘을 클릭하면, magnetvalue1 = true, magnetvalue2 = true, magnetvalue3 = true로 한다.
  404. 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를 실행시킨다.
  405. 405. 검사 이동/선택 없음 지울게 있음 파이어팡 생성 블록지움 랜덤팡 생성 빈칸채움 앵그리팡 생성 두번째 마그넷 생성
  406. 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. 마그넷 사용 407 • 마그넷팡을 사용한다. 정의 • magnetvalue3 = true이면, rngM1과 rngM2의 좌표 내 행과 열을 모두 선택한 다. 범위 내의 랜덤팡과 파이어팡은 “삭제대상‟에서 제외하고 앵그리팡은 해당 범위를 추가하여, 최종 “삭제대상”을 삭제한다. magnetvalue3 =false로 한다.
  408. 408. 예상되는 장점 • 새로운 전략 구사 가능 - 원하는 때 사용 가능 • 운이 없을 때 구제 받을 수 있다 - 판이 안좋을 때 408
  409. 409. 예상되는 단점 • 조작이 힘들다 - 3번의 조작이 필요. 콤보를 잇기 어려움. • 재미를 해칠 수 있다 - 어떻게 될지는 미지수 409
  410. 410. 추가 콘텐츠 생성 • 완료 410
  411. 411. 이상으로 411 • 애니팡 역기획 완료
  412. 412. 끝 412 감사합니다 배상욱 hzael@naver.com
  413. 413. ㅓ 범위 내의 존재가능한 모든 패턴 ex1 블록 이동 시 터질 수 있는 모든 패턴 총 12개 원래 페이지
  414. 414. 필드 중 빈칸 검사 . ex2 . . 48 49 6 7 none 8 9 . . . 1 2 3 4 5 순서대로 셀의 chr값을 검사 그 값이 “none”이면 다음 과정으로 원래 페이지
  415. 415. 팡가능 블록 패턴 (y, x) (y, x) (y, x) (y, x) ex3 (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) 가로 총 24개 (세로 24개, 시계방향 90˚ 회전) 원래 페이지
  416. 416. 팡가능 블록 패턴 (y, x) (y, x) (y, x) (y, x) ex4 (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) 가로 총 24개 (세로 24개, 시계방향 90˚ 회전) 원래 페이지
  417. 417. 팡가능 블록 패턴 (y, x) (y, x) (y, x) (y, x) ex5 (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) 가로 총 24개 (세로 24개, 시계방향 90˚ 회전) 원래 페이지
  418. 418. 우선은, ex6 . . . 8 9 . . 2 3 4 5 49 6 7 . (y,x) 48 순서대로 세 칸씩 검 사 원래 페이지
  419. 419. 이 외에도 ex7 (y,x) (y,x) (y,x) (y,x) (y,x) (y,x) (y,x) (y,x) (y,x) 이런 모양들을 검 사 원래 페이지
  420. 420. 팡가능 블록 패턴 (y, x) (y, x) (y, x) (y, x) ex8 (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) (y, x) 가로 총 24개 (세로 24개, 시계방향 90˚ 회전) 원래 페이지
  421. 421. 팡체크 ex9 4개 5개 이상 원래 페이지
  422. 422. 팡불가블록 생성 방법 ex10 (y, x) 원래 페이지
  423. 423. 팡가능블록 생성 방법 (y, x) ex11 위의 패턴대로 셀의 chr값 검사 두 셀의 chr값은 모두 7 그러므로 (y,x)에 Chr7을 입력한다 원래 페이지

×