기사 출처: csdn 작성자: Chen Wanfei
저자 소개
Chen Wanfei(남성)는 Central South University에서 수학과 소프트웨어 학사 학위를 취득했으며 Beijing Great Wall Software의 수석 프로그래머이자 시스템 분석가였습니다. 그는 j2se 및 j2ee 개발 분야에서 폭넓은 경험을 갖고 있습니다. 현재 j2me 연구에 참여하고 있습니다. [email protected]으로 연락하실 수 있습니다.
요약
이 기사에서는 MIDP1.0을 기반으로 하는 Tetris 게임의 디자인 계획과 전체 구현 소스 코드를 제공합니다. 게임의 가장 큰 특징은 화면 적응성입니다. 다양한 휴대폰과 PDA의 화면 크기에 관계없이 게임은 항상 최고의 디스플레이 효과를 얻을 수 있습니다. 이 게임은 J2me 무선 툴킷 2.1의 4개 에뮬레이터에서 테스트되었습니다.
면책 조항: 이 게임 코드는 원래 일본 오픈 소스 프로젝트(참조 1 참조)에서 왔으며 작성자에 의해 크게 수정되었습니다.
다음은 게임의 일부 스크린샷입니다.
설계
1. 운영과정
이 게임의 작동 과정은 매우 간단합니다. 사용자가 MIDlet을 시작한 후 게임의 메인 화면으로 들어가고 화면에 시작 화면이 표시되기 시작합니다. 사용자가 [시작] 버튼을 누른 후, 게임을 일시 정지하고 싶을 때 다시 [시작] 버튼을 누르면 게임이 일시 정지됩니다. 일시 중지되어도 게임은 계속 실행됩니다. [Exit] 버튼을 누를 때마다 게임 MIDlet이 종료됩니다.
게임 화면 흐름도는 다음과 같습니다.
2. 알고리즘
MIDP 게임 디자인은 기본적으로 스레드나 타이머를 사용하여 다시 그리기 이벤트를 생성하고 스레드와 사용자 입력을 사용하여 게임 상태를 변경합니다. 이 게임도 예외는 아닙니다. MIDlet을 시작한 후 다시 그리기 스레드가 즉시 생성되어 50ms마다 화면을 그립니다. 물론 다시 그릴 때 몇 가지 최적화 조치가 있습니다. 화면의 모든 픽셀을 다시 그릴 필요는 없지만 게임 캔버스에 고정된 낙하 물체와 같은 선택 항목이 있습니다(총 7가지 유형의 낙하 물체가 있습니다). , 4개의 작은 벽돌로 구성되어 있으며, 각각의 떨어지는 물체는 고정된 색상을 가지며 상하좌우로 회전할 수 있으므로 다시 그릴 필요가 없습니다. 게임 캔버스는 사용자 키보드 명령을 받아들이고 떨어지는 물체의 왼쪽, 오른쪽, 아래쪽 및 회전 동작을 제어할 수 있는 CommandListener입니다. 전체 게임의 흐름 제어는 게임 캔버스 객체의 Paint() 메서드에 반영됩니다. Paint()는 현재 게임 상태를 기반으로 현재 게임 화면을 그립니다. 환영 화면과 게임 오버 화면은 그리기가 매우 간단합니다. 게임 일시정지 화면을 그리는 것도 매우 쉽습니다. 페인트()가 실행될 때 실제로 다시 그리기 작업을 수행할 필요가 없도록 플래그를 설정하기만 하면 됩니다. 게임 실행 시 화면을 그리기 위해서는 낙하물이 떨어지는 현재 위치에 낙하물을 그려야 합니다. 떨어지는 물체를 그리기 전에 떨어지는 물체가 여전히 떨어질 수 있는지 확인하고, 떨어질 수 있으면 한 칸 떨어뜨린 다음 더 이상 떨어지지 않으면 게임 오버 상태인지 확인합니다. 게임 중입니다. 게임이 오버 상태인 경우 게임 상태를 게임 오버 상태로 설정하여 다음에 게임이 게임 오버 상태가 아닌 경우 캔버스에 게임 오버 화면을 그리도록 합니다. , Over 상태에서는 낙하하는 물체를 고정함과 동시에 낙하하는 물체의 현재 행 아래의 모든 행을 게임 캔버스에서 확인하여 행 삭제가 필요한지 확인합니다. 게임 맵에서 삭제된 행은 지워지고 배경색으로 삭제된 행이 그려집니다. 그런 다음 새 낙하 객체를 초기화하고 이 새 낙하 객체를 그립니다. 페인트 방법의 흐름도는 다음과 같습니다.
3.데이터 구조
이 게임에는 다음과 같은 데이터 구조가 포함됩니다.
게임 영역
게임 영역은 휴대폰이나 PDA 화면의 일부이며 영역은 정사각형이고 변의 길이는 16으로 균등하게 나누어야 합니다. (러시아 게임 영역은 정확히 길이가 작은 벽돌 16개와 작은 벽돌 16개로 이루어진 정사각형이기 때문입니다. 넓은). 이 영역은 가로와 세로 모두 화면 중앙에 위치해야 합니다. 게임 영역은 수평으로 2개 부분으로 나누어져 있으며, 한 부분은 게임 컨테이너를 표시하는 12개의 작은 벽돌 너비이고, 다른 부분은 다음 떨어지는 물체와 점수를 표시하는 4개의 작은 벽돌 너비입니다.
작은 벽돌
작은 벽돌은 드롭 및 게임 컨테이너의 일부입니다. 정사각형으로 나타나며 변의 길이는 게임 영역의 변 길이의 1/16입니다. 작은 벽돌 하나를 그리면 네 변에 1픽셀씩 남겨두고 벽돌 사이에 틈이 생기도록 흰색이나 회색으로 그려지게 됩니다. 각 작은 벽돌에는 1부터 8까지의 ID가 있습니다. 색상 배열(프로그램에서는 BRICK_COLORS라고 함)을 사용하여 이러한 8가지 색상을 저장할 수 있습니다. 특정 작은 벽돌의 ID가 3이면 작은 벽돌의 색상은 BRICK_COLORS[3-1]입니다.
떨어지는 물체
드롭은 본질적으로 16개의 작은 벽돌로 만들어진 정사각형입니다. 낙하물은 "들판" 모양, "L" 모양 등 총 7가지 종류가 있습니다. 각 떨어지는 물체에는 4가지 회전 변형이 있습니다. 각 떨어지는 물체에는 1부터 7까지의 ID가 있습니다. 떨어지는 물체의 색상은 고정되어 있기 때문입니다. 또한 BRICK_COLORS 배열에서 해당 색상의 아래 첨자 값에 1을 더해 떨어지는 객체의 ID로 사용할 수도 있습니다.
예를 들어, "L" 모양의 낙하 물체는 ID가 3이고 변형은 다음과 같습니다.
그러면 떨어지는 물체를 저장하는 데 어떤 데이터 구조가 사용됩니까? 설명을 위해 "L" 모양의 떨어지는 물체를 예로 들어 보겠습니다.
각각의 떨어지는 객체에는 4가지 상태가 있으므로, 떨어지는 객체의 4가지 상태를 저장하기 위해 길이가 4인 배열을 사용하는 것을 고려할 수 있습니다. 그러면 낙하하는 물체의 특정 상태를 표현하려면 무엇을 사용해야 할까요? 위 그림에서 알 수 있듯이 낙하하는 물체의 상태를 저장하려면 4X4 2차원 배열을 사용하는 것이 가장 적합합니다. 색깔 있는 벽돌이 나타나는 경우 값은 1이고, 배경색만 있고 그릴 필요가 없는 경우 값은 0입니다. 따라서 전체 "L"자형 낙하물체의 4가지 상태는 3차원 배열로 표현될 수 있다.
protected int blockpattern3[][][] = {
{{0, 1, 0, 0}, {0, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 0, 0}},
{{0, 0, 0, 0}, {0, 1, 1, 1}, {0, 1, 0, 0}, {0, 0, 0, 0}},
{{0, 0, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 0}, {0, 0, 1, 0}},
{{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 1, 1, 0}, {0, 0, 0, 0}}
};
게임 지도
게임 맵은 게임 컨테이너에 고정 타일을 저장하는 데 사용됩니다. 게임 컨테이너는 왼쪽과 오른쪽 벽 2개와 아래 컨테이너 바닥을 포함하여 너비가 12개의 작은 벽돌 단위이고 높이가 16개의 작은 벽돌 단위입니다. 따라서 16X12 2차원 배열(프로그램에서는 mapdata라고 함)이 고정된 벽돌을 저장하는 데 사용됩니다. mapdata[i][j]=k(k!=0)이면 게임 컨테이너의 i행과 j열에 고정된 작은 벽돌이 있고, 작은 벽돌의 색상 값은 BRICK_COLORS[k입니다. -1], k=0이면 i행과 j열에 벽돌이 없다는 뜻이다.
따라서 다음 게임 실행 시간에 대해 mapdata의 값은 {{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0 , 0,0,0,0,0,0,8}{8,0,0,0,0,0 ,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0 ,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}
{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8} {}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0, 8}
{8,0,0,0,0,0,0,0,0,1,1,8}{8,0,0,0,0,0,0,0,0,1,1,8} {8,0,0,0,0,0,7,7,5,1,1,8}{8,0,5,0,0,7,2,5,5,1,1,8}
{8,8,8,8,8,8,8,8,8,8,8,8}}
소스 코드 및 실행 코드
총 3개의 파일이 있습니다: src.rar, ketrisgame.jad, ketrisgame.jar 참고: src.rar에는 모든 소스 코드가 포함되어 있습니다. ketrisgame.jar에는 프로그램을 실행하는데 필요한 리소스 파일도 있습니다. ketrisgame.jad 파일을 생성하면 에뮬레이터에서 게임을 실행할 수 있습니다.
참고자료
http://www.javadrive.jp/j2me/game/3/index.html
<간단히 말하면 j2me>
<자바 휴대폰/PDA 프로그래밍 입문>