开发实例系列:一、舒尔特方格小游戏,付源码和APK

舒尔特方格 ,生成随机数,从小到大依次点击,时间越短越好。

底部带源码和apk下载

注意功能点:

一、使用TableLayout自动生成表格

       这一部分是参考网上的帖子,找不到原连接了;

       自定义TableLayout, 以下是源码

public class TableBorderLayout extends TableLayout {
    private Context mContext;
    private BaseAdapter mAdapter;
    private int column = 0; //每行的个数


    public TableBorderLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        setStretchAllColumns(true);
    }

    public void setAdapter(BaseAdapter baseAdapter, int column) {
        if (baseAdapter == null || baseAdapter.getCount() == 0) {
            return;
        }
        this.mAdapter = baseAdapter;
        this.column = column;//个数

        drawLayout();
    }

    private void drawLayout() {
        removeAllViews();
        int realcount = mAdapter.getCount();//数据的总数,list.size(); 例如:size = 18
        int count = 0;
        if (realcount < column) {//如果集合里的数据 小于 行个数   例如:18 > 5
            count = column;
        } else if (realcount % column != 0) {   // 18 % 5 = 3    3 != 0
            count = realcount + column - (realcount % column); // 18 + 5 - 3 = 20  count=20
        } else {
            count = realcount;
        }

        TableRow tableRow = null; //每一行的tableRow
        for (int i = 0; i < count; i++) {  //i < 20, 会循环20次,添加20个格子,但数据总数只有18,所以最后两个是空的
            final int index = i;
            View view = null;
            if (index >= realcount) {
                view = mAdapter.getView((realcount - 1), null, null);
                view.setVisibility(INVISIBLE);//没有数据不显示
            } else {
                view = mAdapter.getView(index, null, null);
            }

            if (index % column == 0) { //整行,每次取余为0 就会新增一行实现自增长,最大数为20,个数为5,会增四行
                tableRow = new TableRow(mContext);
            }

            if (tableRow != null) {//添加view
                tableRow.addView(view);
            }

            if (index % column == 0) {
                addView(tableRow, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            }
        }
    }
}

adapter源码:

public class MyAdapter extends BaseAdapter {

    private List<Integer> dataList;
    private LayoutInflater mInflater;
    private int type;
    private View.OnClickListener clickListener;
    private Context context;
    private List<Integer> isR = new ArrayList<>(); //随机色彩R
    private List<Integer> isG = new ArrayList<>(); //随机色彩G
    private List<Integer> isB = new ArrayList<>(); //随机色彩B

    public MyAdapter(Context context, List<Integer> dataList, View.OnClickListener clickListener, int type) {
        this.mInflater = LayoutInflater.from(context);
        this.dataList = dataList;//总数据
        this.clickListener = clickListener;
        this.type = type; //用来判断是 行个数是否为7、9
        this.context = context;
    }

    public MyAdapter(Context context, List<Integer> dataList, View.OnClickListener clickListener, int type, List<Integer> isR, List<Integer> isG, List<Integer> isB) {
        this.mInflater = LayoutInflater.from(context);
        this.dataList = dataList;
        this.clickListener = clickListener;
        this.type = type;
        this.context = context;
        this.isR = isR;
        this.isG = isG;
        this.isB = isB;
    }

    @Override
    public int getCount() {
        return dataList.size();
    }

    @Override
    public Object getItem(int i) {
        return dataList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if (view == null) {
            view = mInflater.inflate(R.layout.item_click_interface_list, null);
        }

        TextView textView = view.findViewById(R.id.tvTile);
        if (type == 7) {
            textView.setTextSize(20);//缩小字体
        } else if (type == 9) {
            textView.setTextSize(16);
        }

        if (isR.size() > 0  && isG.size() > 0 && isB.size() > 0){//生成随机色
            textView.setBackgroundColor(Color.rgb(isR.get(i+1), isG.get(i+2), isB.get(i+3)));
        }

        textView.setText("" + dataList.get(i).toString());
        textView.setId(dataList.get(i).intValue());//设置ID

        textView.setOnClickListener(clickListener);
        return view;
    }
}

二、打乱数字

      打乱数字比较简单,使用Collections.shuffle()方法,已下是关键代码:

//打乱数字
Collections.shuffle(numberList);
shuffle(List<?>) 方法用于随机排列随机使用一个默认的源指定的列表

这个方法很实用,在随机色彩也使用了该方法。



...............................以上就是应用比较关键的代码.............................

三、应用截图

共有三种模式,普通模式{3x3, 5x5, 7x7, 9x9},素数模式{5x5},奇数模式{3x3, 5x5, 7x7}。 
特殊的色彩方格模式:开启后方格底色将会带有颜色,以此来增加难度。


四、源码和APK下载

          源码:

                 github:  https://github.com/Mei-Bin/MyShulteProject

                 百度云:链接:https://pan.baidu.com/s/1pMZqNov 密码:oqqn

          APK:

                  百度云:链接:https://pan.baidu.com/s/1dFPl8FB 密码:oejm

五、最后的话:

              舒尔特这个游戏也挺有意思的,主要锻炼注意力................



    

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值