近期在朋友圈,朋友转了一个html小游戏【壹秒】,游戏的规则是:用户按住button然后释放,看谁能精准地保持一秒的时间。^_^刚好刚才在linuxserver上调试程序的时候server挂了,腾出点时间分享下前天自己做的这个小游戏。
话不多说,直接上图:
呐,作为一个对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>
首先在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("第一次按下"+' '+x1+' '); } 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游戏代码下在:一秒游戏源代码