반응형

안드로이드 스튜디오 코틀린 초간단 터치 게임 제작 Kotlin easy touch game source 

 

안드로이드 스튜디오 코틀린 접한진 1년 넘었지만 하루에 5분 정도만 해서

실력이 빨리 느는 것 같진 않습니다.  

윈도 프로그램만 하다 안드로이드 와서 체개가 달라서 아직 익숙하지 않은 것  같습니다.

원래 자바를 할까 생각했지만 코틀린이 구글에서 민다고 해서 코틀린을 선택하게 됐습니다.


초 간단 원 터치 게임입니다. 소스에 이것저것 넣어봤자  처음 하시는 분들이 이해하는데 복잡하기만 하고

간단하게 메인 부분 코딩만 보는게  도움이 될 것 같습니다.

저처럼 안드로이드 스튜디오 입문하실때 고생하시는 분에게 조금이라도 도움이 되길 바라며 포스팅합니다.

 

기본 실행은 안드로이드 스튜디오 실행한 후 코틀린 선택, Empty Activity 만들고

shfit+10으로 빌드해서 기본으로 있는 HELLOW WORLD까지

실행하실 줄 안다는 전제하에 그 부분은 패스하겠습니다~

 

에뮬레이터는 Pixel 2 에서 실행했습니다.

 

빨간 원이 나타났다 사라 졌다 하는데, 터치하면 1점을 얻는 것입니다.

 


소스는 Import 밑에부터 시작됩니다..

변수 선언

 


MainActivity 부분


원을 그리고 점수를 출력하는 GameView 부분입니다., GameView 화면 터치 부분 아래 계속 이어집니다.

터치 이벤트 부분

 


 

 


타임어 스레드 부분 처리


 

타임어 스레드 설정 

 

소스량도 얼마안되니  직접 입력해 보시는게 도움이 될것 같습니다.ㅋ^^~


소스는 Import 밑에서 부터 시작 됩니다.


var sysEnd_:Int=0   //1이 되면 타임어 쓰레드가 종료 
val random=Random() //난수를 발생하기 위해 

var cx=0f   //원이 나타날 중심 
var cy=0f 
val ra=200f //반지름을 뜻한다 

var gametime=100        //타임어 쓰레드 속도를 조절해서 원이나타나는 시간을 조절 
var gametimec=gametime  //원이 출력되는 원본 시간 보관 

var score:Int=0 //점수 

class MainActivity : AppCompatActivity() { 

    lateinit private var Gv:GameView //GameView Activity 선언 
     
    override fun onCreate(savedInstanceState: Bundle?) { 
        super .onCreate(savedInstanceState) 
//        setContentView(R .layout .activity_main) //원래 Activity 는 실행하지 않음 
         
        SetTimerm()  //타임어 쓰레드 실행 
     
        Gv=GameView(this)   //GameView Activity 설정 
        setContentView(Gv)  //GameView Activity 실행 
    } 
     
    override fun onDestroy() { 
        super.onDestroy() 
         
        sysEnd_ = 1 //앱 종료시 타임어도 종료 
    } 


private class GameView(context: Context):View(context) { 
     override fun onDraw(canvas: Canvas) {
       super.onDraw(canvas)

        val paint = Paint()

        canvas.drawColor(Color.WHITE)

        paint.isFilterBitmap = true 
        paint.isAntiAlias 
        paint.color = Color.RED 
        canvas.drawCircle(cx.toFloat(), cy.toFloat(), ra.toFloat(), paint) 
     
        paint.color = Color.BLACK 
        paint.setTextSize(100f); 
        canva.drawText("점수 $score",0f,100f,paint); 
         
        invalidate() //화면 갱신 
    }

    override fun onTouchEvent(eventx: MotionEvent?): Boolean { 

        var tcx = 0f 
        var tcy = 0f 
        var cxl = cx - ra 
        var cxr = cx + ra 
        var cxt = cy - ra 
        var cxb = cy + ra 
         
        tcx = eventx!!.x 
        tcy = eventx!!.y 

        when  (eventx.actionMasked) { 
            MotionEvent.ACTION_DOWN -> { //터치다운할때만 판별하게 
                 
                if (tcx > cxl) { 
                    if (tcx < cxr) { 
                        if (tcy > cxt) { 
                            if (tcy < cxb) { 
                         
                                score++ 
                            } 
                        } 
                    } 
                } 
            } 
        } 
    return true 
    } 
} //GameView 종료부분 



//난수 발생 함수 
//za-는 난수를 발생 시킬 범위값 
fun GetRnd(za:Int):Float{ 
    var rlt:Int=0 
    var rltf:Float 
     
    rlt=random.nextInt(za) 
     
    rltf=rlt.toFloat() //난수가 integer로 발생하니 float 로 바꾸어줌 
     
    return rltf 



fun GameMainLoopm(){ //타임어 스레드 부분 
     
    gametimec++ 
    if(gametimec<gametime){return} //설정한 시간이 아니면 실행하지 않게 
    gametimec=0 
        
    cx= GetRnd(1000) //1000x1000 범위내에서 원이 그려지게 
    cy= GetRnd(1000) 



fun SetTimerm() 

    timer(period=10,initialDelay=1000) //1초(1000/10) 주기마다 호출,처음 시작시 딜러이 1초를 줍니다  . 
    { 
        GameMainLoopm() 
        if (sysEnd_!=0){ cancel() } 
    } 
}

 

반응형

+ Recent posts