android小游戏——2048 核心功能的实现(1)

本文介绍了如何实现2048游戏的核心功能,包括游戏初始化、布局设计和左滑手势的处理。通过创建GridLayout并设置TextView,文章详细讲解了在Android中如何使用代码实现游戏界面。在游戏逻辑方面,阐述了如何处理滑动手势,特别是左滑时如何检查矩阵以确定滑动条件,并进行数字的合并与生成。
摘要由CSDN通过智能技术生成

这一分类,我打算自己做一些简单易做小游戏。一方面可以巩固自己学的知识,一方面做出来也可以自己玩。自己玩自己做的游戏相信别有一番风味~想到什么游戏里的好点子可以立即更新游戏,这种感觉想必是pangpang的!

游戏简介

2048我就不多说了,大家应该都知道。

项目流程

我打算先实现游戏功能,界面什么的先一切从简~所以大体的界面流程就是一开始的点击开始游戏之后直接跳转到游戏界面。

开始行动

新建一个项目,在里面新建两个Activity,分别为StartActivity和GameActivity
这里写图片描述

开始界面

在activity_start里面就只放一个Button用来跳转到GameActivity

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="start"
        android:text="开始游戏"
        android:textSize="20sp" />

</LinearLayout>

然后在StartActivity把start方法写好:

package com.example.a2048;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class StartActivity extends AppCompatActivity {
   
    @Override
    public void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
    }

    public void start(View view)
    {
        startActivity(new Intent(this,GameActivity.class));
    }
}

那么这样子我们就成功写好了两个界面之间的跳转。到这一步我们应该没有什么问题。下面我们来分析分析GameActivity应该怎么写。

游戏界面

一般的2048应该是由16个格子构成,一开始游戏随机两个格子出现两个数字,随着手指的滑动,这两个格子会向屏幕一侧偏移直至边缘,如果两数字相同且随着手指移动方向摆放则把两个数字相加。

我们先把上述的功能实现吧。

layout

用最笨的方法就是在布局中使用GridLayout(网格布局),里面写16个TextView。
由于原生的GridLayout只支持API21以上的手机,所以我们这里为了兼容性就用v7包里面的GridLayout,在gradle里面加一句compile 'com.android.support:gridlayout-v7:25.3.1'

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:columnCount="4"
    app:rowCount="4">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        android:textSize="20sp"
        android:gravity="center"
        android:text="1" />
    <TextView
        android:id="@+id/tv2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        android:textSize="20sp"
        android:gravity="center"
        android:text="1" />
    <TextView
        android:id="@+id/tv3"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        android:textSize="20sp"
        android:gravity="center"
        android:text="1" />
    <TextView
        android:id="@&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值