近期在朋友圈,朋友转了一个html小游戏【壹秒】,游戏的规则是:用户按住button然后释放,看谁能精准地保持一秒的时间。^_^刚好刚才在linuxserver上调试程序的时候server挂了,腾出点时间分享下前天自己做的这个小游戏。

话不多说,直接上图:

近期微信上非常火的小游戏【壹秒】android版——开发分享_android   近期微信上非常火的小游戏【壹秒】android版——开发分享_小游戏_02

呐,作为一个对android无比热爱的小伙伴,腾出一个小小时间做一个小小的小游戏,也不失为一种享受哈。整个游戏比較简单,主要分为UI设计与开发和时间计算逻辑。当然,这个小游戏界面要做得美丽点,所以我側重讲下UI设计与开发。


UI设计与开发

    採用RelativeLayout相对布局来控制整个界面比較灵活。主要的布局相信对你们来说都非常easy,都是简单的排版。

主要在于按住“按住”button之后怎么实现布局变长。这里提一下。我的思路是显示秒数布局一開始包括了所有所须要的空间。这个布局採用高度随内容增长,然后写一个高度10dp的view把高度撑起来。然后其它直接隐藏,后面依据逻辑直接显示就好。

以下是我的xml布局代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#ffffff"
    >
    <!--   android:background="@drawable/bg"-->

<!--    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="one second game。ready GO。"
        android:textSize="22sp"
        android:gravity="center"
        android:textColor="#ffffff"
        android:background="#000000"/>-->

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_marginTop="30dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tip_l"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="你的"
            android:textSize="50sp"
            android:gravity="right"
            android:textColor="#666666"
            android:textStyle="bold"/>

        <TextView
            android:id="@+id/tip_r"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1.3"
            android:text="一秒钟"
            android:textSize="50sp"
            android:textColor="#FF3333"
            android:gravity="left"
            android:textStyle="bold"
            />
    </LinearLayout>

    <TextView
        android:layout_marginTop="3dp"
        android:id="@+id/tip_b"
        android:paddingLeft="8dp"
        android:layout_below="@+id/linearLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="究竟有多长?"
        android:textSize="40sp"
        android:textColor="#666666"
        android:textStyle="bold"
        android:gravity="center"/>

    <TextView
        android:layout_marginTop="15dp"
        android:id="@+id/tip_e"
        android:layout_below="@+id/tip_b"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="How long is one second?"
        android:textSize="15sp"
        android:textColor="#666666"
        android:textStyle="bold"
        android:gravity="center"/>

    <LinearLayout
        android:layout_below="@+id/tip_e"
        android:id="@+id/show_linearlayout"
        android:layout_marginLeft="50dp"
        android:layout_marginRight="50dp"
        android:layout_marginTop="3dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/show"
        android:orientation="vertical">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="10dp"/>

        <LinearLayout
            android:layout_marginTop="10dp"
            android:id="@+id/show_result"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:visibility="gone">


            <TextView
                android:id="@+id/show_result_l"
                android:layout_width="0dp"
                android:layout_weight="1.7"
                android:layout_height="wrap_content"
                android:gravity="right"
                android:textColor="#CC9933"
                android:textSize="40sp"/>

            <TextView
                android:layout_marginLeft="3dp"
                android:id="@+id/show_result_r"
                android:text="秒"
                android:gravity="left"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:textColor="#ffffff"
                android:textSize="25sp"/>
        </LinearLayout>

        <TextView
            android:paddingLeft="30dp"
            android:paddingRight="30dp"
            android:layout_marginTop="5dp"
            android:gravity="center"
            android:id="@+id/show_remark"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:textColor="#ffffff"
            android:textSize="15sp"
            android:layout_marginBottom="20dp"/>

     </LinearLayout>


    <Button
        android:layout_below="@+id/show_linearlayout"
        android:layout_centerHorizontal="true"
        android:background="@drawable/button"
        android:layout_marginTop="20dp"
        android:id="@+id/cul_bt"
        android:layout_height="120dp"
        android:layout_width="120dp"
        android:layout_gravity="center_horizontal"
        android:gravity="center"
        android:text="按住"
        android:textColor="#ffffff"
        android:textSize="30sp"/>
</RelativeLayout>


在UI界面中。为了更加美化增加了特殊字体。我加的是“方体卡通”和“华文彩云”字体。在android中显示特殊字体的方法是:假设你的IDE是eclipse,那么直接放在assets中(方法在此我不多介绍),我的IDE是android studio。假设你的IDE和我是一样的,能够使用下面方法:

首先在app→src→main文件夹下新建assets包。然后在自己项目的.iml文件里加入

<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />


之后在自己的代码中进行引用

private Typeface fangtikatong,huawencaiyun;//方体卡通,华文彩云
// 将字体文件保存在assets文件夹下。www.linuxidc.com创建Typeface对象
fangtikatong = Typeface.createFromAsset(getAssets(),"fangtikatong.ttf");
huawencaiyun = Typeface.createFromAsset(getAssets(),"huawencaiyun.TTF");
result_r.setTypeface(fangtikatong);
tip_l.setTypeface(huawencaiyun);


时间计算逻辑

    时间计算逻辑比較简单,首先对button实现触摸监听,设置两个变量记录手摁下那一刻和离开那一刻(同个触摸过程)的系统时间。后者减去前者再进行单位换算就能够算出手触碰的持续时间。

代码例如以下:

click_cl.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                if(event.getAction() == MotionEvent.ACTION_DOWN){
                    x1 = (long)System.currentTimeMillis();
                    //show = new StringBuffer("第一次按下"+'\n'+x1+'\n');
                }

                if(event.getAction() == MotionEvent.ACTION_UP){
                    x2 = (long)System.currentTimeMillis();
                    if(result_l.getVisibility() == View.GONE ||
                            result_l.getVisibility() == View.GONE ||
                            remark.getVisibility() == View.GONE ){
                        result.setVisibility(View.VISIBLE);
                        result_l.setVisibility(View.VISIBLE);
                        result_r.setVisibility(View.VISIBLE);
                        remark.setVisibility(View.VISIBLE);
                    }
                    num = (x2-x1)*1.000/1000;
                    result_l.setText(num+"");
                    //小于或等于1的先乘以1000再除以200
                    if(num <= 1){
                        remark.setText(remarks[(int)((num*1000)/200)]);
                    //大于1的先乘以1000再除以200
                    }else{
                        remark.setText(remarks[(int)((num*1000+200)/200)]);
                    }
                }
                return true;
            }
        });
到此,整个小游戏基本开发完毕,是不是也挺简单的呢?

热爱android的你们,空暇的时候也能够尝试开发自己的小游戏呢?


CSDN游戏代码下载:一秒游戏源代码

github游戏代码下在:一秒游戏源代码