matlab tetris
Post on 16-Aug-2015
61 Views
Preview:
TRANSCRIPT
TETRIS BOARD
HIGHEST SCORE BOARD
SCORE BOARD
INPUT PLAYER NAME
GAME START / PAUSE
BGM SET-TING / BGM PLAY
GAME RESET
DIFFICULTY SET-TING
PROJECT NAME
기능
TETRIS 의 RULE① 총 7 가지 block 이 랜덤하게 생성② 생성된 block 이 한 칸씩 내려옴③ 좌우 버튼으로 block 위치를 옮김④ 위 방향키로 block 을 회전함⑤ 바닥이나 다른 block 에 의해 막히면 그
block 이 멈추고 다음 block 이 내려옴
⑥ 한 줄이 block 으로 꽉 차면 그 줄이 사라짐
⑦ 쌓인 block 이 맨 윗줄에 닿으면 Game Over 가 됨
추가 FUNCTION① BGM 선택 , 반복 PLAY 기능② 난이도 선택 기능③ 점수 / 플레이어 표시 기능④ 최고 기록의 점수 / 플레이어 표시
기능⑤ 오류 대비나 빠른 재시작을 위한
RESET 기능
Coding – 보드 세팅
TETRIS BOARD SET-TING ( 틀 그려놓기 ), axes 설정
테트리스 판을 미리 그려놓음
테트리스의 block 상태를 나타내주는 행렬을 만듬 .
Coding – BGM(1)
존재하는 파일을 audioread 로 읽어옴BGM 의 PLAY 시간을 공식을 이용하여 bgm.time 에 저장
BGM 이 끝나면 다시 틀어줄 Timer 를 생성
소리 정보를 audioplayer 에 저장
Cod-ing
Coding – BGM(3)
AudioPlayer 에 들어가는 값과 , 반복 시간만 바꾸면 어떤 BGM 이라도 사용 가능
SET 으로 TIMER 를 재설정 하기 이전에 timer 와 audio-player 를 멈춰야함
음악이 PLAY 되고 있다면 그 음악을 종료하고 바뀐 노래를 재생
Coding – GAME RULEHandles.board.data – 이 값이 바뀌면 그림으로 나타남
handles.board.state 변수를 사용함으로써 한 함수로 여러 기능을 할 수 있게 함
Coding – Game Rule
Board.data 의 정보를 그림으로 표현Board.data 의 값에 따라 색깔이 변화함(0 이면 하얀색이라 보이지 않고 , 6 이면 ‘ y’ 이므로 그 칸을 노란색으로 칠함 )
Disp_board 함수를 따로 만듦으로써 여러 함수에서 board.data 가 바뀌면 별도의 코드를 작성할 필요 없이 이 함수를 실행시키면 되게 하였다 .
Cod-ingCoding – Game Rule
Board.rx 와 board.ry 는 각각 움직이는 block 이 현재 위치한 x좌표와 y 좌표 , board.sb 는 board.block 의 행렬의 크기
Board.random 을 곱해줌으로써 각 모양이 다른 색깔을 띄도록 해줌
이 함수에서 만들어진 Block 에 관한 값들을 이용하여 블록을 왼쪽 , 오른쪽 , 아래로 이동시키고 회전시키는 작업을 진행
Board.state 가 0 이면 실행 – 실행완료후 board.state 1 로 이동
Coding – Game Rule
( 코드가 길고 반복적이라 일부만 가져옴 )
Board.ry 가 1 즉 , block 이 맨 아래칸에 있을 경우에는 아래칸과 비교를 시도할 경우 오류가 나므로 if 문을 사용
Switch 문과 if 문을 반복적으로 사용하여 코드가 길어졌지만 , 오류를 줄임 .
원리 : 이 함수가 실행됐을 때 , 각 세로열의 가장 맨 아래 블록의 아래에 block이 있다면 이동을 멈추고 board.state 가 변화함
각 세로열의 맨 아래블록을 알아보기 위해 a1, a2, a3 를 사용
A1=2 A2=0
Board.state 가 2 이거나 아래 버튼을 눌렀을 경우 실행 – state 가 실행가능하면 다시 2 번 , 불가능하면 3번으로 이동
Cod-ingCoding – Game Rule
사용한 비교문과 , 블록 이동을 살펴보기 위해 move_right 의 코드를 가져옴
우선 , 블록이 오른쪽 벽에 닿아있을 때 실행하면 오류가 나므로 if 문을 이용하여 그 경우 실행이 되지 않게 한다 .
Board.sb(2) – block 의 높이를 switch 문에 넣어 비교
각 블록을 하나하나 비교하여 오른쪽에 block 이 없을 경우에만 실행되도록 조건을 작성
Cod-ingCoding – Game Rule
우선 기존 board.data 에 있던 block 을 지우기 전에 a 에 저장한다 .
새 data 를 넣기 위해 Board.data 에 저장되어있던 Block 의 정보를 지운다 .( 뺀다 )
X 위치데이터가 바뀐 새 Block 을 Board.data 에 다시 저장한다 .( 더한다 )
바뀐 Block 정보만큼 handles.board.rx( 보드의 x 위치 정보 ) 를 갱신한다 .
총 네 STEP 으로 Board 데이터 갱신을 완료하였다 .
Coding – Game Rule
Board.State 가 3 이면 실행( 블록 아래로 내리기가 완료되면 새 블록을 만들기 전에 실행 )
만약 한 줄이 다 차면 그 줄의 위치를 clr에 저장한다 .
만약 clr 이 0 이 아닐 경우 ( 다 찬 줄이 있을 경우 ) 그 줄을 지우고 그 위의 줄들을 한 칸씩 내린다 . 또한 , 점수를 100 점 추가한다 .
만약 20 번째 ( 맨 위 ) 줄에 block 이 있다면 게임을 종료하기 위해 state 2 로 간다 .
정상적으로 종료되었다면 다시 block을 만들기 위해 state 0 으로 간다 .
Coding – Game Rule
State 가 2 가 되거나 reset 버튼을 누르면 게임이 종료된다 .
START 버튼의 string 이 GAME OVER 로 바뀌고 , 모든 값이 초기값으로 변한다 .
최고기록과 점수를 비교하여 최고기록보다 높으면 최고점수 / 플레이어를 갱신한다 .
Coding – Game Rule Set_board 와 마찬가지로 다른 함수를 실행하기 위한 중간함수
게임이 Play 중일 때만 동작하도록 전체에 if 문을 걸고 조건으로 timer 가 돌고 있을 때 실행되도록 주었다 .
위 버튼은 block 돌리기 ,아래 버튼은 block 내리기 , 좌우 버튼은 각각 block 을 좌우로 이동시키는 버튼이다 .
이는 모두 block 이 내려오고 있을 때만 의미가 있으므로 board.state 가 1 일 때만 동작하도록 하였다 .
top related