av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

java實(shí)現(xiàn)單詞小游戲

瀏覽:20日期:2022-08-16 10:59:06

本文實(shí)例為大家分享了java實(shí)現(xiàn)單詞小游戲的具體代碼,供大家參考,具體內(nèi)容如下

介紹

公司最近有一個(gè)競技場項(xiàng)目,里面有一個(gè)單詞小游戲。

游戲大概就是隨機(jī)生成一個(gè)5*5的棋盤,上面有單詞的字母,通過滑動連出正確的單詞。

棋盤生成算法

思路

首先隨機(jī)選個(gè)一個(gè)起點(diǎn),從這個(gè)點(diǎn)開始鋪單詞。

分別選取上下左右四個(gè)方向作為下一個(gè)字母的擺放位置,不能觸邊也不能走重復(fù)路,直到平鋪完所有的單詞。

如果在棋盤能平鋪下單詞的情況下,找不到路徑,就從四個(gè)角作為起點(diǎn),必能找到路徑。

代碼

import java.util.*;/** * @author Wang Guolong * @version 1.0 * @date 2020/7/31 5:50 下午 */public class GenerateWordBoard { private static char[][] board; public static void main(String[] args) { GenerateWordBoard g = new GenerateWordBoard(); g.generateCharBoard('vocabulary', 5, 5); } private void generateCharBoard(String word, int m, int n) { // 單詞為空 直接返回 if (word.isEmpty()) { return; } // 單詞長度大于棋盤 鋪不下 直接返回 if (word.length() > m * n) { return; } // 初始化棋盤 全為* initBoard(m, n); char[] wordChar = word.toCharArray(); // 隨機(jī)選取一個(gè)位置開始 Random random = new Random(); int randomX = random.nextInt(m); int randomY = random.nextInt(n); // 開始從隨機(jī)位置dfs鋪單詞 從index 0 開始 boolean result = generateDfs(board, wordChar, randomX, randomY, 0); // 如果沒有找到路線 那么從四個(gè)角開始 必能找到一條路 if (!result) { List<int[]> starts = Arrays.asList(new int[]{0, 0}, new int[]{0, n - 1}, new int[]{m - 1, 0}, new int[]{m - 1, n - 1}); // 隨機(jī)四個(gè)角的一個(gè) Collections.shuffle(starts); // 初始化棋盤 initBoard(m, n); // dfs鋪單詞 generateDfs(board, wordChar, starts.get(0)[0], starts.get(0)[1], 0); } // 查看結(jié)果 for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { System.out.print(board[i][j] + ' '); } System.out.println(); } } private void initBoard(int m, int n) { // 初始化 board = new char[m][n]; for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { board[i][j] = ’*’; } } } /** * 返回true則為找到一條路 返回false為死路 */ private boolean generateDfs(char[][] board, char[] wordChar, int i, int j, int index) { // 碰到邊 或者碰到已經(jīng)走過的位置 不能走了 死路 if (i >= board.length || i < 0 || j >= board[0].length || j < 0 || board[i][j] == ’/’) { return false; } // 擺放一個(gè)字母 board[i][j] = wordChar[index]; //如果已經(jīng)達(dá)到單詞長度則直接返回 找到一條路 if (index == wordChar.length - 1) { return true; } // 記錄當(dāng)前矩陣元素 char tmp = board[i][j]; // 修改為/ 表示已經(jīng)訪問過 board[i][j] = ’/’; // 向上下左右四個(gè)方向開啟遞歸 // 查看能走幾個(gè)方向 隨機(jī)選擇一個(gè) List<int[]> directions = Arrays.asList(new int[]{-1, 0}, new int[]{1, 0}, new int[]{0, -1}, new int[]{0, 1}); Collections.shuffle(directions); boolean res = false; for (int k = 0; k < directions.size(); k++) { int di = i + directions.get(k)[0], dj = j + directions.get(k)[1]; boolean partialRes = generateDfs(board, wordChar, di, dj, index + 1); if (k == 0) { res = partialRes; } else { res = res || partialRes; } // 如果res為true 說明找到一條路 就不再遍歷了 還原后返回true if (res) { // 還原矩陣元素 board[i][j] = tmp; return true; } } // 還原矩陣元素 board[i][j] = ’*’; return false; }}

運(yùn)行結(jié)果

java實(shí)現(xiàn)單詞小游戲java實(shí)現(xiàn)單詞小游戲java實(shí)現(xiàn)單詞小游戲java實(shí)現(xiàn)單詞小游戲

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产成人毛片 | 欧美在线中文字幕 | 久久久久久久av | 91亚洲国产成人精品性色 | 亚洲欧美日韩色图 | 在线视频日本 | 成人免费网站在线观看 | 午夜影院在线 | 成人黄性视频 | 欧美国产综合 | 欧美精品亚洲 | 狠狠干天天 | 久久免费网 | 国产欧美一区二区精品忘忧草 | 四虎影院www | 日韩成人小视频 | 羞羞的网站 | 福利视频午夜 | 国产免费一级 | 在线免费观看黄色片 | 成人免费动漫 | 青青国产 | 中文字幕在线观看一区二区三区 | 成人午夜毛片 | 一道本在线观看 | h片在线播放 | 午夜黄视频 | 日本免费在线视频 | 日本在线不卡视频 | 日韩一区二区三区在线播放 | 深夜福利久久 | 国产一区二区在线视频 | 午夜精品视频在线 | av不卡在线观看 | 天天操夜夜爽 | 国产一区福利 | 黄色a一级片 | 国产成人一区二区 | 99视频免费在线观看 | 欧美一区二区三区在线观看视频 | 青青草网址 |