테트리스 안드로이드 자바 소스 참고 음....
테트리스를 안드로이드 앱으로 구현하는데 필요한 소스입니다.
개인적으로 기록해 둔 것이라 모든 상황에 적용되지 않을 수 있습니다.
안드로이드 자바 코딩 소스
activity_main.xml
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.example.tetris.TetrisView
android:id="@+id/tetrisView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
TetrisView 클래스, 게임 로직
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView; public class TetrisView extends SurfaceView implements SurfaceHolder.Callback { private TetrisThread tetrisThread; public TetrisView(Context context, AttributeSet attrs) {
super(context, attrs);
getHolder().addCallback(this);
tetrisThread = new TetrisThread(getHolder(), this);
setFocusable(true);
}
public void surfaceCreated(SurfaceHolder holder) {
tetrisThread.setRunning(true);
tetrisThread.start();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
tetrisThread.setRunning(false);
while (retry) {
try {
tetrisThread.join();
retry = false;
} catch (InterruptedException e) {
// 오류 처리
}
}
}
public void draw(Canvas canvas) {
// 게임 보드 그리기 로직 추가
}
}
TetrisThread
import android.graphics.Canvas;
import android.view.SurfaceHolder;
public class TetrisThread extends Thread {
private SurfaceHolder surfaceHolder;
private TetrisView tetrisView;
private boolean running;
public TetrisThread(SurfaceHolder holder, TetrisView view) {
surfaceHolder = holder;
tetrisView = view;
running = false;
}
public void setRunning(boolean run) {
running = run;
}
public void run() {
while (running) {
Canvas canvas = null;
try {
canvas = surfaceHolder.lockCanvas();
synchronized (surfaceHolder) {
// 게임 업데이트 로직 추가
tetrisView.draw(canvas);
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}