我的开发惯例。先把界面设计出来,看过我前面博客的朋友应该知道了。
接上次。今天的主要目的是设计界面,主界面事实上比較简单了,我们先上图:
层次并不复杂。难点在于中间游戏面板的设计,这个我们留着下次具体讲咯
主布局是一个LinearLayout。这个非常easy看出来,主要是Button样式的改造,我使用了一个自己定义shape加selector来实现。这几个Button主要就是shape颜色的不同
以下显示一个Shape来演示样例:
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><shape android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="#33444444" />
<!-- 设置按钮的四个角为弧形 -->
<!-- android:radius 弧形的半径 -->
<corners android:radius="10dip" />
<!-- padding:Button里面的文字与Button边界的间隔 -->
<padding android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp" />
</shape></item>
<item><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="#3EC5FF" />
<!-- 设置按钮的四个角为弧形 -->
<!-- android:radius 弧形的半径 -->
<corners android:radius="10dip" />
<!-- padding:Button里面的文字与Button边界的间隔 -->
<padding android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp" />
</shape></item>
</selector>
以下就是主布局的所有代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="3dp" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:background="@drawable/orange_button"
android:text="2048"
android:textSize="50sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/score_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_margin="5dp"
android:background="@drawable/gray_button"
android:gravity="center"
android:text="Scroe"
android:textSize="25sp" />
<TextView
android:id="@+id/scroe"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/score_title"
android:layout_centerHorizontal="true"
android:layout_margin="5dp"
android:background="@drawable/light_orange_button"
android:gravity="center"
android:text="10000"
android:textSize="15sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/record_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_margin="5dp"
android:background="@drawable/gray_button"
android:gravity="center"
android:text="Record"
android:textSize="25sp" />
<TextView
android:id="@+id/record"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/record_title"
android:layout_centerHorizontal="true"
android:layout_margin="5dp"
android:background="@drawable/light_orange_button"
android:gravity="center"
android:text="20000"
android:textSize="15sp" />
</RelativeLayout>
</LinearLayout>
<com.xys.game2048.view.GameView
android:id="@+id/gameView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</com.xys.game2048.view.GameView>
<LinearLayout
style="?android:attr/buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="3dp" >
<Button
android:id="@+id/btn_revert"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="@drawable/blue_button"
android:text="Revert" />
<Button
android:id="@+id/btn_restart"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="@drawable/blue_button"
android:text="Restart" />
<Button
android:id="@+id/btn_option"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="@drawable/blue_button"
android:text="Options" />
</LinearLayout>
</LinearLayout>
相信大家不用多少介绍也能看懂了,我就不多介绍了。
游戏中要实现的功能主要有以下几点:
1、主标题上显示应该达到的目标,假设你没达到过2048则显示2048,假设超过了。则显示下一个目标。如4096
2、Score记录当前游戏分数,Record记录历史最高记录
3、Revert用于撤销上次的移动。玩过2048的肯定深有感触,一不小心移错一步,就掉坑里爬不出来了。可是如今市面上的2048基本上都没这个功能。所以这次准备加上这个功能
4、Options。这个是国际惯例了
以上,今天的基本就是这样。
PS 须要源代码的朋友能够留言,完好后会公布所有源代码