matlab tetris

22
TETRI S! In MATLAB 진진진 진진진 진진진 진진진 Supporter : 진진진

Upload: -

Post on 16-Aug-2015

60 views

Category:

Software


2 download

TRANSCRIPT

TETRIS!In MATLAB 진재훈 최두영

이하영 윤지혜Supporter : 전유림 조교님

개요

실제 TETRIS

MATLAB 에서 만든 TETRIS

진재훈

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 - 게임시작

SET 으로 TIMER 의 간격을 조절함으로써 난이도 설정

Coding – BGM(1)

존재하는 파일을 audioread 로 읽어옴BGM 의 PLAY 시간을 공식을 이용하여 bgm.time 에 저장

BGM 이 끝나면 다시 틀어줄 Timer 를 생성

소리 정보를 audioplayer 에 저장

Coding – BGM(2)

Play 시간을 공식으로 가져올 경우 자리수가 소수점 셋째자리를 넘어가면 이러한 경고가 뜨므로 ceil 을 통해 올림하여 사용한다 .

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

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

블록 돌리기도 마찬가지로 조건이 성립된다면 4 STEP 의 DATA 갱신 과정을 거친다 .

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 일 때만 동작하도록 하였다 .

Q&A

THE END

~ 감사합니다 ~