我也来开发2048之方块设计

简介: 这次我们的任务是实现游戏面板上的一个个小方块,我们的主面板是一个GridLayout,我们把小方块一个个加到GridLayout中,就形成了我们现在的这个游戏面板。 小方块还是比较简单的,关键是,如何做才能最有效率呢?这是我们一直考虑的,也算是职业强迫症吧,我们的小方块上其实就是显示一个数字,所以,我们可以用一个TextView或者ImageView,这个随意了,看以后的打算,是否需要自定义图片呀等等,我们暂时就用一个TextView吧,简单。

这次我们的任务是实现游戏面板上的一个个小方块,我们的主面板是一个GridLayout,我们把小方块一个个加到GridLayout中,就形成了我们现在的这个游戏面板。

小方块还是比较简单的,关键是,如何做才能最有效率呢?这是我们一直考虑的,也算是职业强迫症吧,我们的小方块上其实就是显示一个数字,所以,我们可以用一个TextView或者ImageView,这个随意了,看以后的打算,是否需要自定义图片呀等等,我们暂时就用一个TextView吧,简单。

父布局选择什么呢?其实因为我们就一个子View,所以什么布局都一样的啦,但是,还是为了效率考虑,首选FrameLayout,这个是几大布局中最简单,效率最高的了。


ok,我们还要为这个小方块实现一些方法:

1、设置显示的数字

2、根据数字设置背景颜色

3、一系列的get、set方法,这个可以在后面程序设计的时候再做

package com.xys.game2048.bean;

import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;

public class GameItem extends FrameLayout {

    // Item显示数字
    private int cardShowNum;
    // Item显示颜色
    private int colorShow;
    // 数字Title
    private TextView tvNum;
    // 数字Title LayoutParams
    private LayoutParams params;

    public GameItem(Context context, int cardShowNum) {
	super(context);
	this.cardShowNum = cardShowNum;
	// 初始化Item
	initCardItem();
    }

    /**
     * 初始化Item
     * 
     * @param context
     * @param cardShowNum
     */
    private void initCardItem() {
	// 设置背景色
	setBackgroundColor(Color.GRAY);
	tvNum = new TextView(getContext());
	setNum(cardShowNum);
	tvNum.setTextSize(30);
	tvNum.setGravity(Gravity.CENTER);
	params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
	params.setMargins(5, 5, 5, 5);
	addView(tvNum, params);
    }

    public View getItemView() {
	return tvNum;
    }

    public int getNum() {
	return cardShowNum;
    }

    public void setNum(int num) {
	this.cardShowNum = num;
	if (num == 0) {
	    tvNum.setText("");
	} else {
	    tvNum.setText("" + num);
	}
	// 设置背景颜色
	switch (num) {
	case 0:
	    tvNum.setBackgroundColor(0x00000000);
	    break;
	case 2:
	    tvNum.setBackgroundColor(0xffeee4da);
	    break;
	case 4:
	    tvNum.setBackgroundColor(0xffede0c8);
	    break;
	case 8:
	    tvNum.setBackgroundColor(0xfff2b179);
	    break;
	case 16:
	    tvNum.setBackgroundColor(0xfff59563);
	    break;
	case 32:
	    tvNum.setBackgroundColor(0xfff67c5f);
	    break;
	case 64:
	    tvNum.setBackgroundColor(0xfff65e3b);
	    break;
	case 128:
	    tvNum.setBackgroundColor(0xffedcf72);
	    break;
	case 256:
	    tvNum.setBackgroundColor(0xffedcc61);
	    break;
	case 512:
	    tvNum.setBackgroundColor(0xffedc850);
	    break;
	case 1024:
	    tvNum.setBackgroundColor(0xffedc53f);
	    break;
	case 2048:
	    tvNum.setBackgroundColor(0xffedc22e);
	    break;
	default:
	    tvNum.setBackgroundColor(0xff3c3a32);
	    break;
	}
    }
}

以上,背景设置颜色还是自定义图片,大家都可以自己修改啦


PS 需要源码的请留意,完善后会发给大家

目录
相关文章
|
3月前
|
敏捷开发 前端开发 数据可视化
如何用低代码的思路设计文字描边渐变组件
如何用低代码的思路设计文字描边渐变组件
34 1
|
3月前
OEEL——使用OEEL快速画出精美图案(以土地利用转移变化为例)
OEEL——使用OEEL快速画出精美图案(以土地利用转移变化为例)
19 0
|
5月前
|
索引
消除游戏中图标下落的原理和实现
消除游戏中图标下落的原理和实现
18 1
|
12月前
如何做一个俄罗斯方块3:形状控制
今天,我们来继续学习和实现下一个模块:玩家控制形状。在俄罗斯方块游戏中,玩家可以对下落的形状进行控制,控制分为两种,一种是控制形状的移动(左,右,下),一种是控制形状的旋转(顺时针旋转 90 度)。
103 0
|
12月前
|
小程序
如何做一个俄罗斯方块6:形状停靠
在处理形状停靠之前,有一点儿东西需要了解,就是已经停靠的方块和正在下落的方块不是一种方块,如图,红色的表示的是已经停靠的方块,绿色的表示下落的绿色方块的作用是展示当前下落的形状,红色方块的作用是标识出哪些位置已经摆放了方块。
87 0
|
12月前
|
小程序 搜索推荐 开发者
谈谈宝石方块游戏中的设计
宝石方块是在上一个俄罗斯方块工程的基础上改编的,所以制作起来很快,我只用了不到两天的时间就完成了游戏的功能,后续又花了几天的时间制作游戏的界面,优化游戏的体验。
108 0
|
12月前
如何做一个俄罗斯方块5:形状碰撞检测(下)
其实,两侧的碰撞判断跟我们上一节讲过的向下移动的碰撞判断原理是一样的,向下碰撞检测的是每一个方块下方的位置是否有其它方块,那么向左/右碰撞检测的就是每个方块左/右侧的位置是否有其他的方块。
281 0
|
12月前
|
开发工具
如何做一个俄罗斯方块4:形状碰撞检测(上)
在游戏开发中,我们所说的“碰撞”经常指的是物理碰撞,什么是物理碰撞呢?一般的在游戏开发工具中都会包含一个叫做“物理引擎”的东西,它的作用就是在游戏中模拟出现实中的物理效果。例如,我们扔一个东西,这个东西会因为重力而下落,最终落到地上,与地面发生碰撞。在游戏中,我们可以借助物理引擎,来模拟出东西下落掉到地面上的效果。当东西掉到地面上时,我们就说这个东西与地面发生了碰撞。
274 0
|
12月前
|
小程序 开发者 索引
如何做一个俄罗斯方块7:下落处理
下落处理”也是俄罗斯方块游戏循环中的最后一个环节,因为“下落处理”结束后,就又进入到了下一个新的循环中。 与之前一样,我们先来看一下什么时候需要进行“下落处理”“下落处理”是在消除完成之后进行的,消除完成之后,上方的未被消除的方块会下落,直到碰到下方的其它方块或者是第一行为止。
150 0
|
计算机视觉 Python
openCV实践项目:拖拽虚拟方块
openCV实践项目:拖拽虚拟方块
openCV实践项目:拖拽虚拟方块