日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

几十行代码写完数独APP

發布時間:2024/3/24 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 几十行代码写完数独APP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看了幾個網上的數獨的游戲,感覺設計上,總是比較麻煩。特別一些是通過繪圖函數來實現數獨的,對新手來說不太友好。于是乎想到了用GridLayout去實現一個簡單的數獨。

本文涉及的內容

一個基本的數獨包含了數獨界面設計,題目的生成,數獨的填入,結果的判斷
這里只涉及數獨界面的設計和數獨的填入。

主要代碼

布局設計

利用動態生成9x9的textView,插入到GridLayout控件里面。這里控件要設置為水平優先,即插入的控件首先在水平方向上逐個分布,直到超出最大列數。這兩個按鈕的功能這里沒有去實現,可以忽略。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><GridLayoutandroid:id="@+id/gl"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"></GridLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_weight="1"android:text="檢查結果" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_weight="1"android:text="自動完成" /></LinearLayout> </LinearLayout>

代碼邏輯

onCreate事件里面生成TextView數組tile,并設置上下文菜單。這個菜單是通過長按textview控件會自動跳出的。內置一個int[][] suduku數組,作為數獨的題目。0表示空格,程序只在這些位置上設置相應textview的上下文菜單。最后,利用setLayoutParams去實現數獨格子之間的間隔,還要注意宮格之間的間隔要寬一些,具體參考下面的代碼

實現代碼

public class MainActivity extends AppCompatActivity {private GridLayout mGl;private TextView[][] tile = new TextView[9][9];private TextView mCurrTextView = null;private final String[] TxtMenu = {" ", "1", "2", "3", "4", "5", "6", "7", "8", "9"};//內置的數獨題目private int[][] suduku = {{0, 1, 5, 2, 6, 8, 7, 9, 3},{3, 2, 9, 7, 4, 1, 5, 6, 8},{6, 7, 8, 3, 5, 9, 2, 1, 4},{0, 3, 2, 5, 7, 4, 1, 8, 6},{8, 5, 4, 9, 1, 6, 3, 7, 2},{1, 6, 7, 8, 3, 2, 4, 5, 9},{5, 8, 3, 6, 2, 0, 0, 4, 1},{2, 9, 1, 4, 0, 5, 6, 3, 7},{7, 4, 6, 1, 9, 3, 8, 2, 5}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mGl = (GridLayout) findViewById(R.id.gl);mGl.setColumnCount(9);mGl.setRowCount(9);mGl.setBackgroundColor(Color.BLUE);for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {tile[i][j] = new TextView(this);tile[i][j].setText(TxtMenu[suduku[i][j]]);//txt[(9*i+j)%10]tile[i][j].setTag(9 * i + j);if (suduku[i][j] == 0) {tile[i][j].setTextColor(Color.BLUE);registerForContextMenu(tile[i][j]);}GridLayout.LayoutParams para = new GridLayout.LayoutParams();para.width = 118;para.height = para.width;para.setMargins(1, 1, 1, 1);if (i % 3 == 2 && j % 3 == 2) {para.setMargins(1, 1, 8, 8);}tile[i][j].setLayoutParams(para);tile[i][j].setGravity(Gravity.CENTER);tile[i][j].setBackgroundColor(Color.WHITE);tile[i][j].setTextSize(36);tile[i][j].setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));mGl.addView(tile[i][j]);}}}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);MenuInflater menuInflater = new MenuInflater(this);int col = (int) (v.getTag()) % 9;int row = (int) (v.getTag()) / 9;mCurrTextView = tile[row][col];for (int i = 0; i < TxtMenu.length; i++) {menu.add(TxtMenu[i] == " " ? "X" : TxtMenu[i]);}}@Overridepublic boolean onContextItemSelected(MenuItem item) {//Log.i("onContextItemSelected",item.getTitle().toString());String str = item.getTitle().toString();mCurrTextView.setText(str == "X" ? " " : str);int tag = (int) mCurrTextView.getTag();int row = tag / 9;int col = tag % 9;suduku[row][col] = str == "X" ? 0 : Integer.parseInt(str);return super.onContextItemSelected(item);} }

實現效果

總結

這是一個極簡單的數獨設計,代碼非常少。不過,代碼不是按照面向對象的思路設計的,所以要復用比較麻煩。既然求簡,那就這樣吧

總結

以上是生活随笔為你收集整理的几十行代码写完数独APP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。