最近微信上很火的小游戏【壹秒】android版——开发分享

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

话不多说,直接上图:

最近微信上很火的小游戏【壹秒】android版——开发分享   最近微信上很火的小游戏【壹秒】android版——开发分享

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


UI设计与开发

    采用RelativeLayout相对布局来控制整个界面比较灵活。基本的布局相信对你们来说都很easy,都是简单的排版。主要在于按住“按住”按钮之后怎么实现布局变长,这里提一下。我的思路是显示秒数布局一开始包含了全部所需要的空间,这个布局采用高度随内容增长,然后写一个高度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);


时间计算逻辑

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

代码如下:

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游戏代码下在:一秒游戏源码








版权声明:本文为博主原创文章,未经博主允许不得转载。

最近微信上很火的小游戏【壹秒】android版——开发分享

上一篇:C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取


下一篇:websocket即时通讯java SpringMVC mybatis 后台框架 集成代码生成器开发利器 全部源码【集成微信接口开发】