세라인에서 랜덤으로 블록을 생성하고 한칸이동하고 또 다시 블럭을 생성하고 모든 블럭을 한칸이동하는 반복
자바코드인데요 .. 안드로이드에서 View랑 runnable만 이용해서는 못하나요. 서피스뷰를 이용해야 하나요
이 코드를 안드로이드 코드로 어떻게 바꿔야 할지 모르겠네요
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Music extends Applet implements Runnable{
Thread clock;
Image off; // 메모리 상의 가상화면
Graphics offG; //가상화면 출력용 그래픽 컨텍스트
Random r;
Random r2;
Boolean runGame;
boolean[][]map; //게임 내의 각 칸의 상태
Color[][]colorMap; // 게임 내의 각 칸의 색
Button b1 = new Button();
Button b2 = new Button();
Button b3 = new Button();
int delayTime; //블록이 떨어지는 시간
int block;
int blockY[] = new int[120];
int[] blockX = new int[120];
Color[] color = new Color[3]; //3종류의 블록의 색상
Color[] mycolor = new Color[120];
Panel buttonPanel;
Button button1;
public void init(){ //가상화면 만들기
off = createImage(181,316); //가상화면 메모리
offG = off.getGraphics(); // 가상화면 출력
offG.setColor(Color.white);
offG.fillRect(0, 0, 192, 192);
map = new boolean[3][21];
colorMap = new Color[3][21];
select();//블록
drawBlock();//블록그리기
drawMap(); //화면
drawGrid();//선
delayTime = 100; //스레드
runGame = true;
color[0] = Color.red;
color[1] = Color.blue;
color[2] = Color.yellow;
}
int x = 0;
int y = 0;
int z = 0;
public void select(){
//블럭선택,색상선택
if(x>100){
blockX[x] =0;
blockY[y] = 0;
mycolor[z] = Color.white;
if(x==120){
runGame = false;
}
}
else{
r = new Random();
block = Math.abs(r.nextInt()%3);
blockX[x] = block;
blockY[y] = 0;
mycolor[z] = color[block];
}
x++;
y++;
z++;
}
public void stop(){
if((clock!=null)&&clock.isAlive()){
clock = null;
}
}
public void start(){ //run메소드 실행
if(clock == null){
clock = new Thread(this);
clock.start();
}
}
public void paint(Graphics g) {
//가상화면을 실제화면에 출력
g.drawImage(off,0,0,this);
}
public void update(Graphics g){
paint(g);
}
public void run(){
while(true){
try{
Thread.sleep(delayTime);
}catch(InterruptedException ie){}
//1초
dropBlock();//블럭삭제,블럭+1,블록그리기
select(); //블럭생성
drawBlock();//모든 블럭 다시그려
if(runGame){
drawBlock(); //모든 블럭 다시그려
drawMap(); //화면그리기
drawGrid(); //선그리기
}
repaint();
}
}
public void dropBlock(){//블록 1행 밑으로
removeBlock(); //모든 블록 삭제
for(int i=0;i<blockY.length;i++){
if(blockY[i]==20){
continue;
}
blockY[i] = blockY[i]+1;//다음칸
}
drawBlock();//새로그리기
}
public void removeBlock(){ //모든 블록삭제
for(int i=0;i<100;i++){
map[blockX[i]][blockY[i]] = false;
colorMap[blockX[i]][blockY[i]] = Color.white;
}
}
public void drawBlock(){ // 블록 그리기
for(int i=0;i<100;i++){
if(blockY[i]==20){
continue;
}
map[blockX[i]][blockY[i]] = true;
colorMap[blockX[i]][blockY[i]] = mycolor[i];
}
}
public void drawMap(){ //화면그리기
for(int i=0;i<3;i++){
for(int j=0; j<21; j++){
if(map[i][j]){
offG.setColor(colorMap[i][j]);
offG.fillRect(i*15, j*15, 15, 15);
}else{
offG.setColor(Color.white);
offG.fillRect(i*15,j*15,15,15);
}
}
}
}
public void drawGrid(){ //그리드 선 그리기
offG.setColor(new Color(190,190,190));
for(int i=1;i<3;i++){
offG.drawLine(i*15, 0, i*15, 15*21);
//offG.drawRect(i*15,i*15,15,15);
}
}
}
안드로이드에서도 돌릴 수 있습니다. 다만 thread에서 돌려도 되는데 ui와 관련된 코드는 다 mainthread에서 돌도록 해야합니다