Android井字游戏开发(一)开局走法

创建一个新程序:

应用名: Tic Tac Toe
公司域名: example.org
尺寸: Phone and Tablet
最低SDK: API16: Android 4.1
添加活动: Empty Activity
活动名: MainActivity
布局名: activity_main
标题: UT3

1  使用XML进行设计

1.1创建主屏幕——编辑activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    tools:context=".TicTacToeActivity">

    <fragment
        android:id="@+id/main_fragment"
        class="org.example.tictactoe.MainFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        tools:layout="@layout/fragment_main" />

</FrameLayout>

以上标签的属性解释

xmlns:android="http://schemas.android.com/apk/res/android":定义命名空间android,以便能够在后面使用包含android:的属性名

xmlns:tools="http://schemas.android.com/tools":定义命名空间tools

android:layout_width="match_parent":将视图设置为与父视图等宽。由于是顶级元素,就是与屏幕等宽。

android:layout_height="match_parent":同上,与父视图等高。每个视图都要设置宽度和高度。

android:clipChildren="false"

tools:context=".TicTacToeActivity": 指出该布局文件是供TicTacToeActivity类使用的。不同于其他属性,该属性是供可视化编辑器使用的,而不是在运行阶段使用的。

android:id="@+id/fragment_main":定义新资源标识符fragment_main,在代码或其他XML属性中使用。@+表示定义新内容,@表示引用已在其他地方定义过的内容。

class="org.example.tictactoe.MainFragment":让android知道该片段是MainFragment类的一个实例。换句话说,android在根据XML创建该片段时,将创建一个MainFragment实例。

android:layout_width="wrap_content":将片段设置为与其包含的内容等宽。

android:layout_height="wrap_content":将片段设置为与其包含的内容等高。

android:layout_gravity="center":将片段在其父视图中居中设置。还可设置为(top、bottom、left、right、center、fill、top|right等)

tools:layout="@layout/fragment_main":引用另一个XML文件

1.2 创建主片段——编辑fragment_main.xml

要将4个元素排成一列,因此使用 LinearLayout布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/menu_background"
    android:elevation="@dimen/elevation_high"    android:orientation="vertical"    android:padding="@dimen/menu_padding"    tools:context=".TicTacToeActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/menu_space"
        android:text="@string/long_app_name"
        android:textAppearance="?android:textAppearanceLarge"
        android:textSize="@dimen/menu_text_size" />

    <Button
        android:id="@+id/continue_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/menu_button_margin"
        android:padding="@dimen/menu_button_padding"
        android:text="@string/continue_label"/>

    <Button
        android:id="@+id/new_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="@dimen/menu_button_margin"
        android:padding="@dimen/menu_button_padding"
        android:text="@string/new_game_label"/>

    <Button
        android:id="@+id/about_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="@dimen/menu_button_margin"
        android:padding="@dimen/menu_button_padding"
        android:text="@string/about_label"/>

</LinearLayout>

以上标签的属性解释

android:background="@drawable/menu_background":设置整个视图的背景。

android:elevation="@dimen/elevstion_high":令视图比画布稍高。

android:orientation="vertical":指定布局的方向。可能取值vertical(排成一列), horizontal(排成一行)

android:padding="@dimen/menu_padding":让android在视图内部留出少量的空间。若在外部留空间用margin。

android:layout_marginBottom="@dimen/menu_space":在文本视图和按钮之间留出一定空间。

android:text="@string/long_app_name": 指定要显示的文本

android:textAppearance="?android:textAppearanceLarge":让文本字体比常规状态更大更粗。?表示引用了当前主题中定义的一个常量。

android:textSize="@dimen/menu_text_size" :用硬编码的方式指定了更大的字号。

android:layout_margin="@dimen/menu_button_margin":在按钮周围留出一些额外的空间。

android:padding="@dimen/menu_button_padding":在按钮内部留出一些额外的空间。

android:text="@string/continue_label":指定按钮要显示的文本。

2  编写代码

2.1 定义主活动——MainActivity.java

package org.example.tictactoe;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

2.2 主活动使用的片段——MainFragment.java

先添加about框

package org.example.tictactoe;

import android.os.Bundle;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MainFragment extends Fragment {

    private AlertDialog mDialog;

    @Override
    /**inflater 可用于将XML转换为视图
     * container 指向父容器的引用
     * savedInstanceState 保存的一些状态
     */
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView =
                inflater.inflate(R.layout.fragment_main, container, false);
        // Handle buttons here...
        // 获取视图中的按钮
        View aboutButton = rootView.findViewById(R.id.about_button);

        //设置点击监视器
        aboutButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 传入当前活动
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                // 设置对话框的标题和消息内容
                builder.setTitle(R.string.about_title);
                builder.setMessage(R.string.about_text);
                // 使得android不会再用户轻按对话框外面时关闭它
                builder.setCancelable(false);
                // 添加ok按钮
                builder.setPositiveButton(R.string.ok_label,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                // nothing
                            }
                        });
                // 负责将以上定义的对话框显示出来
                mDialog = builder.show();
            }
        });

        return rootView;
    }

    @Override
    // 如果启动另一应用,暂停包含该片段的活动
    public void onPause() {
        super.onPause();

        // Get rid of the about dialog if it‘s still up
        if (mDialog != null)
            mDialog.dismiss();
    }
}

3 定义资源

3.1 字符串

编辑res/values中的资源文件strngs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">UT3</string>
    <string name="long_app_name">Ultimate Tic Tac Toe</string>
    <string name="action_settings">Settings</string>
    <string name="restart_label">Restart</string>
    <string name="main_menu_label">Main Menu</string>
    <string name="declare_winner">%1$s is the winner</string>
    <string name="continue_label">Continue</string>
    <string name="new_game_label">New Game</string>
    <string name="about_title">About Ultimate Tic Tac Toe</string>
    <string name="about_label">About</string>
    <string name="ok_label">OK</string>
    <string name="about_text">This game is played just like
regular Tic Tac Toe with one difference: to win a tile
you have to win a smaller game of Tic Tac Toe inside that tile.\n\nA tie happens when there are no further moves.
In the case of a tie in a small board, that will count as a win for
both sides in the larger game.
</string>
</resources>

3.2 尺寸

编辑res/values中的文件dimens.xml

有两个版本的dimens.xml 文件:常规版本 和 使用w820dp标记的版本(用于宽屏设备的替代资源)

<resources>
    <dimen name="activity_horizontal_margin">8dp</dimen>
    <dimen name="activity_vertical_margin">8dp</dimen>
    <dimen name="tile_size">30dp</dimen>
    <dimen name="tile_margin">0dp</dimen>
    <dimen name="tile_padding">3dp</dimen>
    <dimen name="control_padding">20dp</dimen>
    <dimen name="small_board_padding">2dp</dimen>
    <dimen name="small_board_margin">2dp</dimen>
    <dimen name="elevation_low">4dp</dimen>
    <dimen name="elevation_high">8dp</dimen>
    <dimen name="thinking_progress_size">50dp</dimen>
    <dimen name="stroke_width">1dp</dimen>
    <dimen name="corner_radius">4dp</dimen>

    <dimen name="menu_padding">10dp</dimen>
    <dimen name="menu_space">10dp</dimen>
    <dimen name="menu_text_size">32sp</dimen>
    <dimen name="menu_button_margin">4dp</dimen>
    <dimen name="menu_button_padding">10dp</dimen>
</resources>

3.3 drawable

drawable指的是可在屏幕上绘制的任何图形对象。通常以png或jpg格式存储。在主屏幕上,应用的启动图标就是位图。

还可用XML来创建drawable。以下为主屏幕选项的背景的定义,放于res/drawable中。

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="@dimen/stroke_width"
        android:color="@color/border_color"/>
    <solid android:color="@color/field_color"/>
    <corners android:radius="@dimen/corner_radius"/>
</shape>

该文件定义了一个矩形形状,带圆角且用纯色填充。

使用XML的优点有:图形是基于矢量的,支持任意分辨率。

3.4 颜色

位于res/values下的colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="field_color">#b5cee0</color>
    <color name="border_color">#7f7f7f</color>
    <color name="dark_border_color">#4f4f4f</color>
    <color name="available_color">#7fbf7f</color>
    <color name="blue_color">#7f7fff</color>
    <color name="gray_color">#bfbfbf</color>
    <color name="purple_color">#7f007f</color>
    <color name="red_color">#ff7f7f</color>
    <color name="thinking_background_color">#cfdfdfdf</color>
</resources>

在android中,颜色表示形式有两种: #RRGGBB 和  #AARRGGBB

RR、GG、BB分别指定红色、绿色、蓝色成分。AA为alpha组分, 表示颜色的透明度(0为完全透明,255为完全不透明)

3.5 样式和主题

打开AndroidManifest.xml 有如下行

android:theme="@style/AppTheme"

按住Ctrl并单击AppTheme打开 styles.xml

修改

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Base application theme. -->
    <style name="AppTheme"
        parent="android:Theme.Holo.Light.NoActionBar.Fullscreen">
        <!-- Customize your theme here. -->
    </style>

</resources>

接下来便可运行程序,运行结果如下图

时间: 2024-10-12 18:35:18

Android井字游戏开发(一)开局走法的相关文章

Android多媒体开发介绍(转)

Android多媒体开发介绍 转自:http://blog.csdn.net/reiliu/article/details/9060557 一.       多媒体架构 基于第三方PacketVideo公司的OpenCORE来实现,支持所有通用的音频/视频/静态图像格式,包括:MPEG4.H.264.MP3.AAC.AMR.JPG.PNG.GIF等.从功能上分为两部分,一是音/视频的回放(PlayBack),二是音视频的纪录(Recorder). CODEC(编解码器)使用OpenMAX 1L

IDEA搭建Android wear开发环境,Android wear,I&#39;m comming!

随着google发布了android wear这个东西,然后又有了三星的gear,LG的G watch以及moto 360,苹果由发布了apple watch,未来可能在智能手表行业又有一场战争.当然这只是笔者的个人观点,仅供参考. 作为开发者,当然关心的是只能手表的开发了,所以我们来搭建一下android wear的开发环境吧! 搭建android wear开发环境,我们需要以下的软件Intellij 13.1.3,android-sdk 23.0.02. 首先需要下载安装好android-s

Android应用开发-小巫CSDN博客客户端之显示博文详细内容

Android应用开发-小巫CSDN博客客户端之显示博文详细内容 上篇博文给大家介绍的是如何嵌入有米广告并且获取收益,本篇博客打算讲讲关于如何在一个ListView里显示博文的详细信息,这个可能是童鞋们比较困惑的,因为一篇博客可能有标题.摘要.图片.代码等等元素组成,我们要怎么在一个界面中显示这些内容并且按照自己的指定的方式显示呢,别急,下面会告诉大家. 重新整理一下一篇博文可能有以下元素: 标题 摘要 文本内容 图片 粗标题 代码块 在UI篇小巫已经介绍了,博文详细内容的主要控件就是一个Lis

Android游戏开发之主角的移动与地图的平滑滚动

人物移动地图的平滑滚动处理 玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图. 如图所示为程序效果动画图 地图滚动的原理 在本人之前博客的文章中介绍过人物在屏幕中的移动方式,因为之前拼的游戏地图是完全填充整个手机屏幕的,所以无需处理地图的平滑滚动.这篇文章我着重的向 大家介绍一下控制人物移动后地图滚动的处理方式.举个例子 如上图所示 比如人物向右移动,如果地图贴在屏幕左边边界 将先移动人物在地图的坐标,当人物在屏幕

windows平台下Android studio开发环境搭建教程

最近,Google 已宣布,为了简化 Android 的开发力度,以重点建设 Android Studio 工具,到今年年底将停止支持Eclipse等其他集成开发环境 .而随着Android studio正式版的推出和完善,Android开发者们转向Android studio开发平台也将是大势所趋! 小弟Vike原先学习Android也是一直用的eclipse,虽然时间不长,而且用起来慢点,卡点,但是毕竟熟悉起来了,猛地要转到一个新平台,还真是相当不习惯.且不说快捷键有变化,就连Android

配置Android应用开发环境

一.安装JDK 开发 Android应用程序的时候,仅有Java运行环境(Java Runtime Environment,JRE)是不够的,需要完整的JDK(JDK包含了JRE),且要求其版本在JDK 6以上,在开发Android 5及更高版本时,需要JDK 7及其以上版本. 如果JDK不可用或版本低于JDK 6,要下载Java SE开发工具包7 . 使用JDK 7及以上版本无需再对环境变量进行设置. 若安装JDK 6,需要在cmd下使用Java命令和编译.运行程序,可以配置环境变量(具体步骤

Android内核开发:理解和掌握repo工具

由于Android源码是用repo工具来管理的,因此,搞Android内核开发,首先要搞清楚repo是什么东西,它该怎么使用?作为<Android内核开发>系列文章的第二篇,我们首先谈谈对repo工具的理解和使用. 1. repo是什么? repo是一种代码版本管理工具,它是由一系列的Python脚本组成,封装了一系列的Git命令,用来统一管理多个Git仓库. 2. 为什么要用repo? 因为Android源码引用了很多开源项目,每一个子项目都是一个Git仓库,每个Git仓库都有很多分支版本,

android入门开发教程之网络性能的优化

我在麦子学院上android开发的时候,麦子学院android开发老师讲到Android开发过程中经常会涉及到性能优化的问题,应该从基础.网络.测试等各个层面进行整合优化.现在咱们聊聊Android开发之网络性能的优化. 1)避免频繁网络请求 访问server端时,建立连接本身比传输需要跟多的时间,如非必要,不要将一交互可以做的事情分成多次交互(这需要与Server端协调好).有效管理Service 后台服务就相当于一个持续运行的Acitivity,如果开发的程序后台都会一个service不停的

Android应用开发:网络工具——Volley(二)

引言 在Android应用开发:网络工具--Volley(一)中结合Cloudant服务介绍了Volley的一般使用方法.当中包括了两种请求类型StringRequest和JsonObjectRequest.一般的请求任务相信都能够通过他们完毕了,只是在千变万化的网络编程中,我们还是希望能够对请求类型.过程等步骤进行全然的把控.本文就从Volley源代码角度来分析一下.一个网络请求在Volley中是怎样运作的.也能够看作网络请求在Volley中的生命周期. 源头RequestQueue 在使用V