Matlab tetris

22
TETRIS! In MATLAB 진재훈 최두영 이하영 윤지혜 Supporter : 전유림 조교님
  • Upload

    -
  • Category

    Software

  • view

    93
  • download

    5

Transcript of Matlab tetris

Page 1: Matlab tetris

TETRIS! In MATLAB

진재훈 최두영 이하영 윤지혜 Supporter : 전유림 조교님

Page 2: Matlab tetris

개요

실제 TETRIS MATLAB 에서 만든 TETRIS

Page 3: Matlab tetris

TETRIS BOARD

HIGHEST SCORE BOARD

SCORE BOARD

INPUT PLAYER NAME

GAME START / PAUSE

BGM SETTING / BGM PLAY

GAME RESET

DIFFICULTY SETTING

PROJECT NAME

Page 4: Matlab tetris

기능

TETRIS 의 RULE ① 총 7가지 block 이 랜덤하게 생성 ② 생성된 block이 한 칸씩 내려옴 ③ 좌우 버튼으로 block 위치를 옮김 ④ 위 방향키로 block을 회전함 ⑤ 바닥이나 다른 block에 의해 막히면

그 block이 멈추고 다음 block 이 내려옴

⑥ 한 줄이 block으로 꽉 차면 그 줄이 사라짐

⑦ 쌓인 block이 맨 윗줄에 닿으면 Game Over 가 됨

추가 FUNCTION ① BGM 선택 , 반복 PLAY 기능 ② 난이도 선택 기능 ③ 점수/플레이어 표시 기능 ④ 최고 기록의 점수/플레이어 표시

기능 ⑤ 오류 대비나 빠른 재시작을 위한

RESET 기능

Page 5: Matlab tetris

Coding – 보드 세팅

TETRIS BOARD SETTING (틀 그려놓기), axes 설정

테트리스 판을 미리 그려놓음

테트리스의 block 상태를 나타내주는 행렬을 만듬.

Page 6: Matlab tetris

Coding - 게임시작

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

Page 7: Matlab tetris

Coding – BGM(1)

존재하는 파일을 audioread로 읽어옴

BGM의 PLAY 시간을 공식을 이용하여 bgm.time 에 저장

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

소리 정보를 audioplayer에 저장

Page 8: Matlab tetris

Coding – BGM(2)

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

Page 9: Matlab tetris

Coding Coding – BGM(3)

AudioPlayer에 들어가는 값과, 반복 시간만 바꾸면 어떤 BGM이라도 사용 가능

SET으로 TIMER를 재설정 하기 이전에 timer와 audioplayer를 멈춰야함

음악이 PLAY되고 있다면 그 음악을 종료하고 바뀐 노래를 재생

Page 10: Matlab tetris

Coding – GAME RULE

Handles.board.data – 이 값이 바뀌면 그림으로 나타남

handles.board.state 변수를 사용함으로써 한 함수로 여러 기능을 할 수 있게 함

Page 11: Matlab tetris

Coding – Game Rule

Board.data 의 정보를 그림으로 표현 Board.data 의 값에 따라 색깔이 변화함 (0 이면 하얀색이라 보이지 않고, 6이면 ‘y’이므로 그 칸을 노란색으로 칠함)

Disp_board 함수를 따로 만듦으로써 여러 함수에서 board.data 가 바뀌면 별도의 코드를 작성할 필요 없이 이 함수를 실행시키면 되게 하였다.

Page 12: Matlab tetris

Coding Coding – Game Rule

Board.rx와 board.ry는 각각 움직이는 block이 현재 위치한 x좌표와 y좌표, board.sb는 board.block의 행렬의 크기

Board.random을 곱해줌으로써 각 모양이 다른 색깔을 띄도록 해줌

이 함수에서 만들어진 Block에 관한 값들을 이용하여 블록을 왼쪽, 오른쪽, 아래로 이동시키고 회전시키는 작업을 진행

Board.state 가 0 이면 실행 – 실행완료후 board.state 1로 이동

Page 13: Matlab tetris

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번으로 이동

Page 14: Matlab tetris

Coding Coding – Game Rule

Page 15: Matlab tetris

Coding Coding – Game Rule

사용한 비교문과, 블록 이동을 살펴보기 위해 move_right의 코드를 가져옴

우선, 블록이 오른쪽 벽에 닿아있을 때 실행하면 오류가 나므로 if문을 이용하여 그 경우 실행이 되지 않게 한다.

Board.sb(2) – block의 높이를 switch문에 넣어 비교

각 블록을 하나하나 비교하여 오른쪽에 block이 없을 경우에만 실행되도록 조건을 작성

Page 16: Matlab tetris

Coding Coding – Game Rule

우선 기존 board.data에 있던 block을 지우기 전에 a에 저장한다.

새 data를 넣기 위해 Board.data에 저장되어있던 Block의 정보를 지운다.(뺀다)

X위치데이터가 바뀐 새 Block을 Board.data에 다시 저장한다.(더한다)

바뀐 Block 정보만큼 handles.board.rx(보드의 x위치 정보)를 갱신한다.

총 네 STEP으로 Board 데이터 갱신을 완료하였다.

Page 17: Matlab tetris

Coding – Game Rule

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

Page 18: Matlab tetris

Coding – Game Rule

Board.State 가 3이면 실행 (블록 아래로 내리기가 완료되면 새 블록을 만들기 전에 실행)

만약 한 줄이 다 차면 그 줄의 위치를 clr에 저장한다.

만약 clr이 0이 아닐 경우( 다 찬 줄이 있을 경우) 그 줄을 지우고 그 위의 줄들을 한 칸씩 내린다. 또한, 점수를 100점 추가한다.

만약 20번째 (맨 위) 줄에 block 이 있다면 게임을 종료하기 위해 state 2로 간다.

정상적으로 종료되었다면 다시 block을 만들기 위해 state 0으로 간다.

Page 19: Matlab tetris

Coding – Game Rule

State 가 2가 되거나 reset버튼을 누르면 게임이 종료된다.

START 버튼의 string 이 GAME OVER로 바뀌고, 모든 값이 초기값으로 변한다.

최고기록과 점수를 비교하여 최고기록보다 높으면 최고점수/플레이어를 갱신한다.

Page 20: Matlab tetris

Coding – Game Rule Set_board와 마찬가지로 다른 함수를 실행하기 위한 중간함수 게임이 Play중일 때만 동작하도록 전체에 if문을 걸고 조건으로 timer가 돌고 있을 때 실행되도록 주었다.

위 버튼은 block 돌리기, 아래 버튼은 block 내리기, 좌우 버튼은 각각 block을 좌우로 이동시키는 버튼이다. 이는 모두 block이 내려오고 있을 때만 의미가 있으므로 board.state가 1일 때만 동작하도록 하였다.

Page 21: Matlab tetris

Q&A

Page 22: Matlab tetris

THE END

~감사합니다~