Làm game Android trong 2 ngày - phần source code

file main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="@drawable/bg">
    <LinearLayout android:orientation="vertical"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:id="@+id/cellPanel">
        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="65dp" android:id="@+id/cellPack">
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1"/>
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
        </LinearLayout>
        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="65dp" android:id="@+id/cellPack">
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1"/>
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
        </LinearLayout>
        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="65dp" android:id="@+id/cellPack">
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1"/>
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
        </LinearLayout>
        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="65dp" android:id="@+id/cellPack">
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1"/>
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
        </LinearLayout>
        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="65dp" android:id="@+id/cellPack">
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1"/>
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
        </LinearLayout>
        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="65dp" android:id="@+id/cellPack">
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1"/>
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
        </LinearLayout>
        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="65dp" android:id="@+id/cellPack">
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1"/>
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
        </LinearLayout>
        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="65dp" android:id="@+id/cellPack">
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1"/>
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
        </LinearLayout>
        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="65dp" android:id="@+id/cellPack">
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1"/>
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
            <com.colrist.Hiramem.HiraButton
                    android:text="Btn"
                    android:layout_height="wrap_content"
                    android:layout_width="0dp"
                    android:layout_weight="1" />
        </LinearLayout>
    </LinearLayout>
    <LinearLayout android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="110dp"
                  android:layout_weight="1"
                  android:background="@drawable/bottom"
                  android:visibility="visible" android:layout_alignParentLeft="true"
                  android:layout_alignParentTop="false"
                  android:layout_alignParentBottom="true" android:id="@+id/controlPanel">
        <ImageButton
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton"
                android:layout_weight="1"
                android:background="@drawable/random"/>
        <TextView
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:text="-"
                android:layout_weight="1"
                android:id="@+id/textView" android:textColor="@android:color/background_dark" android:textSize="30dp"
                android:gravity="center" android:background="@drawable/kana"/>
        <ImageButton
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:id="@+id/imageButton1" android:background="@drawable/reset"/>
    </LinearLayout>
</RelativeLayout>


File GlobalVars.java

package com.colrist.Hiramem;

import java.util.ArrayList;

/**
 * Created with IntelliJ IDEA.
 * User: King
 * Date: 23/03/2013
 * Time: 10:19
 * To change this template use File | Settings | File Templates.
 */
public class GlobalVars {
    public static ArrayList<HiraButton> buttonList = new ArrayList<HiraButton>();
    public static HiraButton currentClick = null;
}


File HiraButton.java

package com.colrist.Hiramem;

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created with IntelliJ IDEA.
 * User: King
 * Date: 23/03/2013
 * Time: 09:17
 */
public class HiraButton extends View {

    public String text = "A";
    public Boolean isSelected = false;
    public Boolean Enabled = true;

    public HiraButton(Context context) {
        super(context);
        GlobalVars.buttonList.add(this);
    }

    public HiraButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        GlobalVars.buttonList.add(this);
    }

    public HiraButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        GlobalVars.buttonList.add(this);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (Enabled) {
            Paint p = new Paint();
            if (!isSelected) {
                p.setColor(Color.parseColor("#3773D2"));
                canvas.drawRect(5, 5, getWidth() - 5, getHeight() - 5, p);
            } else {
                p.setColor(Color.parseColor("#6096eb"));
                canvas.drawRect(1, 1, getWidth() - 1, getHeight() - 1, p);
                p.setColor(Color.WHITE);
                p.setTextSize(getWidth()*0.65f);
                canvas.drawText(text, getWidth() / 2 - p.measureText(text) / 2, getHeight() / 2 + p.measureText(text) / 1.5f, p);
            }
        }
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, w, oldw, oldh);    //To change body of overridden methods use File | Settings | File Templates.
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
                MeasureSpec.getSize(heightMeasureSpec));
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (Enabled) {
            GlobalVars.currentClick = this;
            ((Activity)getContext()).onTouchEvent(event);
            return true;
        } else return false;
    }
}

File Hiramem.java

package com.colrist.Hiramem;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

public class Hiramem extends Activity {

    public int maxProcess = 0;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Resize control panel height to match screen
        int height = getWindowManager().getDefaultDisplay().getWidth() / 3;
        LinearLayout controlPanel = (LinearLayout)findViewById(R.id.controlPanel);
        controlPanel.getLayoutParams().height = height;
        controlPanel.requestLayout();

        // resize cell height to match screen
        int cheight = getWindowManager().getDefaultDisplay().getWidth() / 5;
        LinearLayout cellPack = (LinearLayout)findViewById(R.id.cellPack);
        cellPack.getLayoutParams().height = cheight;
        cellPack.requestLayout();

        // Calculate max amount of visible cells
        maxProcess = 5 * ((getWindowManager().getDefaultDisplay().getHeight() - height) / cheight + 1);

        // Filter the cell list, remove unused cells
        if (!GlobalVars.buttonList.isEmpty()) {
            int cnt = GlobalVars.buttonList.size() - 1;
            while (cnt >= maxProcess) {
                GlobalVars.buttonList.get(cnt).Enabled = false;
                GlobalVars.buttonList.remove(cnt);
                cnt = GlobalVars.buttonList.size() - 1;
            }
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                // Close all cells
                if (!GlobalVars.buttonList.isEmpty()) {
                    for (int i = 0; i < GlobalVars.buttonList.size(); i++) {
                        if (i < maxProcess) {
                            GlobalVars.buttonList.get(i).isSelected = false;
                            GlobalVars.buttonList.get(i).invalidate();
                        }
                    }
                }
                // Open only current cell
                if (GlobalVars.currentClick != null) {
                    GlobalVars.currentClick.isSelected = true;
                    GlobalVars.currentClick.invalidate();
                }
            } break;
        }
        return super.onTouchEvent(event);    //To change body of overridden methods use File | Settings | File Templates.
    }
}

Nhận xét