美文网首页
Android 九宫格移动文字小游戏

Android 九宫格移动文字小游戏

作者: silencefun | 来源:发表于2022-08-22 17:55 被阅读0次

想起来很久以前玩的那个滑块拼图。
设计思路:用八个textview 展示状态。

1.布局

image.png
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity">

<TextView
    android:id="@+id/tv_state"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="50dp"
    android:gravity="center"
    android:onClick="onClick"
    android:text="5555 "
    android:textSize="22sp" />

<TextView
    android:id="@+id/tv5"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:onClick="onClick"
    android:text="五"
    android:textSize="22sp" />

<TextView
    android:id="@+id/tv2"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_above="@id/tv5"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:onClick="onClick"
    android:text="二"
    android:textSize="22sp" />

<TextView
    android:id="@+id/tv1"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_above="@id/tv5"
    android:layout_toLeftOf="@id/tv2"
    android:gravity="center"
    android:onClick="onClick"
    android:text="一"
    android:textSize="22sp" />

<TextView
    android:id="@+id/tv3"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_above="@id/tv5"
    android:layout_toRightOf="@id/tv2"
    android:gravity="center"
    android:onClick="onClick"
    android:text="三"
    android:textSize="22sp" />

<TextView
    android:id="@+id/tv4"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_centerInParent="true"
    android:layout_toLeftOf="@id/tv5"
    android:gravity="center"
    android:onClick="onClick"
    android:text="四"
    android:textSize="22sp" />

<TextView
    android:id="@+id/tv6"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_centerInParent="true"
    android:layout_toRightOf="@id/tv5"
    android:gravity="center"
    android:onClick="onClick"
    android:text="六"
    android:textSize="22sp" />

<TextView
    android:id="@+id/tv7"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_below="@id/tv5"
    android:layout_toLeftOf="@id/tv2"
    android:gravity="center"
    android:onClick="onClick"
    android:text="七"
    android:textSize="22sp" />

<TextView
    android:id="@+id/tv8"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_below="@id/tv5"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:onClick="onClick"
    android:text="八"
    android:textSize="22sp" />

<TextView
    android:id="@+id/tv9"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_below="@id/tv5"
    android:layout_centerInParent="true"
    android:layout_toRightOf="@id/tv5"
    android:gravity="center"
    android:onClick="onClick"
    android:text=""
    android:textSize="22sp" />

</RelativeLayout>

2.实现

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

TextView tv1, tv2, tv3, tv4, tv5, tv6, tv7, tv8, tv9;
TextView tv_state;

List<TextView> textViewList = new ArrayList<>();
List<TextView> canClick = new ArrayList<>();

char[] arr = new char[9];

char space = ' ';
String string = "12345678";
String or = string + space;

int whitePos;//最后一个

int colunm = 3;


private int sum = 0;

private int num = 9;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    num = or.length();
    initview();

    arr = shuffle(or);

    updateView(false);
}

private void updateView(boolean isClick) {
    for (int i = 0; i < arr.length; i++) {
        textViewList.get(i).setText(String.valueOf(arr[i]));
        if (String.valueOf(arr[i]).equals(" ")) {
            whitePos = i;
        }
    }

    checkCanClick(whitePos);
    if (isClick) {
        sum++;
        tv_state.setText(String.format("一共走了%d步", sum));
    }
}

private void initview() {
    tv1 = findViewById(R.id.tv1);
    tv2 = findViewById(R.id.tv2);
    tv3 = findViewById(R.id.tv3);
    tv4 = findViewById(R.id.tv4);
    tv5 = findViewById(R.id.tv5);
    tv6 = findViewById(R.id.tv6);
    tv7 = findViewById(R.id.tv7);
    tv8 = findViewById(R.id.tv8);
    tv9 = findViewById(R.id.tv9);
    tv_state = findViewById(R.id.tv_state);

    textViewList.add(tv1);
    textViewList.add(tv2);
    textViewList.add(tv3);
    textViewList.add(tv4);
    textViewList.add(tv5);
    textViewList.add(tv6);
    if (num == 9) {
        textViewList.add(tv7);
        textViewList.add(tv8);
        textViewList.add(tv9);
    } else {
        tv7.setVisibility(View.GONE);
        tv8.setVisibility(View.GONE);
        tv9.setVisibility(View.GONE);
    }


}


private void checkCanClick(int pos) {
    whitePos = pos;
    canClick.clear();
    if (pos - 1 >= 0 && pos % 3 != 0) {
        canClick.add(textViewList.get(pos - 1));
    }
    if (pos + 1 < textViewList.size() && (pos + 1) % 3 != 0) {
        canClick.add(textViewList.get(pos + 1));
    }
    if (pos - colunm >= 0) {
        canClick.add(textViewList.get(pos - colunm));
    }
    if (pos + colunm < textViewList.size()) {
        canClick.add(textViewList.get(pos + colunm));
    }

    for (TextView textView : textViewList) {
        if (canClick.contains(textView)) {
            textView.setTextColor(getResources().getColor(R.color.purple_700));
        } else {
            textView.setTextColor(getResources().getColor(R.color.black));
        }
    }

}

@Override
public void onClick(View view) {

    if (canClick.contains(view)) {
        int whiteNext = textViewList.indexOf(view);
        char temp = arr[whiteNext];
        arr[whiteNext] = arr[whitePos];
        arr[whitePos] = temp;

        updateView(true);

        checkSuc();
    } else {


    }
}

private void checkSuc() {

    final StringBuilder sb = new StringBuilder();
    for (int i = 0; i < textViewList.size(); i++) {
        sb.append(textViewList.get(i).getText().toString());
    }

    if (sb.toString().equals(or)) {
        Toast.makeText(this, String.format("您已完成一共走了%d步", sum), Toast.LENGTH_SHORT).show();
        tv_state.setText(String.format("您已完成一共走了%d步", sum));
    }

}


public static char[] shuffle(String original) {
    char[] arr = original.toCharArray();
    Random rnd = new Random();
    char tmp;
    int j;

    for (int i = arr.length; i > 1; i--) {
        j = rnd.nextInt(i);
        tmp = arr[i - 1];
        arr[i - 1] = arr[j];
        arr[j] = tmp;
    }

    return arr;
}
}

相关文章

  • Android 九宫格移动文字小游戏

    想起来很久以前玩的那个滑块拼图。设计思路:用八个textview 展示状态。 1.布局 2.实现

  • 文字小游戏

    蓝天蓝蓝天, 青草青青草, 红花红红花, 绿水绿绿水; 水绿绿水绿, 花红红花红, 草青青草青, 天蓝蓝天蓝。

  • 休闲一刻,玩一玩数独。

    几年前偶尔玩上了数独,这小游戏很容易消磨时间。横纵九宫格,九个数字在横排,竖排以及每个小九宫格内都不重复。市面上有...

  • 九宫格小游戏

  • 移动端拖动小游戏

    这次来个拖动的小游戏吧,格子随机,这里以编号标识,其实就是里面的class,编号对应,底部小格子就可以拖曳到上面对...

  • 布局小技巧

    GridView 里面 九宫格,纵向的item每个宫格居中 =GridView里面 android:gravity...

  • Android优质技术资源合集二

    精选技术日/周报 Android开发技术周报 Android博客周刊 移动开发前线 Android Weekly ...

  • 安卓开发实战(1)——抽奖小游戏

    本节内容通过Android Studio 开发一个抽奖小游戏 开发步骤1——项目工程的建立1.在Android S...

  • 移动端userAgent信息获取

    移动端userAgent举例: android:5.0 (Linux; Android 7.0; MIX Buil...

  • 前两周学习

    1.1 Android定义 android Android是一款基于Linux的移动操作系统,最早由Android...

网友评论

      本文标题:Android 九宫格移动文字小游戏

      本文链接:https://www.haomeiwen.com/subject/sumigrtx.html