免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Java Swing高仿QQ連連看:雙拐點算法與地圖生成源碼解析

Java Swing高仿QQ連連看:雙拐點算法與地圖生成源碼解析 簡介這份基于Java實現(xiàn)的QQ連連看單機版V1.0高仿設(shè)計源碼面向Java學習者、游戲開發(fā)入門者及需要完整課設(shè)或畢設(shè)案例的開發(fā)者可用于理解經(jīng)典消除類游戲的完整實現(xiàn)流程。資源包共98個文件大小3.98MB包含5個Java核心源碼、64張PNG圖片、13個地圖文件、7個WAV音效及2個MID背景音樂另有界面貼圖、項目配置與說明文檔覆蓋從游戲邏輯、界面渲染到資源管理的各環(huán)節(jié)。已有402人學習/下載。通過項目目錄可清晰看到src代碼、resource資源、out編譯輸出及說明文檔的分層組織方式地圖與音效獨立配置便于二次開發(fā)適合作為模仿QQ連連看玩法、練習Java Swing界面與事件處理、學習資源集成的實戰(zhàn)參考。項目還包含Kotlin模塊定義文件可觀察到Java項目中的跨語言配置方式readme與地圖文件組合也為關(guān)卡編輯和規(guī)則設(shè)計提供了直觀樣例。1. 為什么一個高仿QQ連連看的Java單機版至今還是練手源碼里的優(yōu)選項目基于Java實現(xiàn)的QQ連連看單機版V1.0高仿設(shè)計源碼聽起來像十年前的課程設(shè)計存貨但真去復刻一遍你就會發(fā)現(xiàn)它把地圖生成、可解性校驗、雙拐點尋路、Swing線程模型、序列化存檔五個完整模塊壓進了一個“小游戲”的殼里。很多Java學習者抱著“這有什么難的”心態(tài)打開源碼結(jié)果不是死在死局判定上就是被圖片資源路徑整得懷疑人生。這個項目適合三類人要交Java課程設(shè)計又不想做管理系統(tǒng)的人、面試前想把Swing和基礎(chǔ)算法撿起來的人、想搞懂“一個單機游戲從代碼到可雙擊jar包”全流程的人。高仿的價值不在畫面有多像而在于它逼著你把規(guī)則、界面、數(shù)據(jù)、資源分開設(shè)計恰好是工作中最需要的那套習慣。2. 高仿QQ連連看的玩法內(nèi)核地圖生成、消除規(guī)則與雙拐點連通算法2.1 先談規(guī)則QQ連連看里的“能連”到底指什么連連看的消除規(guī)則用一句話說兩個相同圖塊之間存在一條不經(jīng)過其他圖塊的路徑且路徑的拐彎次數(shù)不超過2次。這個定義看著簡單但落地時有一個最容易漏掉的關(guān)鍵點——路徑可以走出棋盤邊界再繞回來。原始版本里棋盤四周是封閉的但經(jīng)典QQ連連看允許路徑經(jīng)由棋盤外的“空白地帶”繞行所以很多第一次寫的人會在邊界判斷上翻車。規(guī)則判斷的順序也有講究。我一般按“先直線、再一拐、再兩拐”的順序做短路判斷直線不檢查拐點一拐只需要檢查兩個候選點兩拐才需要遍歷整行整列。這道題還在Java面試題里換個馬甲出現(xiàn)過本質(zhì)是考察你有沒有把二維數(shù)組的遍歷和剪枝想清楚。圖塊從左上角到右下角的坐標換算、為邊界外擴一圈的padding技巧都是靠這個小項目刻進肌肉記憶的。2.2 地圖生成配對洗牌與可解性校驗地圖生成不是“隨機往格子里丟圖塊”這么簡單。常見做法是先把圖塊按對兒準備好保證每種圖塊數(shù)量是偶數(shù)然后洗牌填入棋盤。但這里有個隱藏的大坑純隨機洗牌會產(chǎn)生死局——明明還有大量圖塊卻沒有任何一對能在兩次拐彎內(nèi)連通。高仿版本如果開局就死局玩家第一反應就是“這游戲是壞的”。所以生成后必須做可解性校驗跑一次全圖掃描找不到任何一對可連通圖塊就重排。我先給出最基礎(chǔ)的生成器實現(xiàn)注意里面三處關(guān)鍵參數(shù)。public class MapGenerator { private final int rows; // 棋盤行數(shù) private final int cols; // 棋盤列數(shù) private final int kinds; // 圖塊種類數(shù) private final Random random new Random(); public MapGenerator(int rows, int cols, int kinds) { this.rows rows; this.cols cols; this.kinds kinds; } public int[][] create() { if ((rows * cols) % 2 ! 0) { throw new IllegalArgumentException(rows * cols 必須是偶數(shù)); } int total rows * cols; int[] pool new int[total]; // 每種圖塊出現(xiàn)次數(shù)必須成對否則永遠消不完 for (int i 0; i total / 2; i) { int type i % kinds 1; pool[2 * i] type; pool[2 * i 1] type; } int[][] grid new int[rows][cols]; for (int attempt 0; attempt 50; attempt) { shuffle(pool, random); // Fisher-Yates 洗牌 fill(grid, pool); if (hasAnyMove(grid)) { // 全圖掃描剪枝在 PathFinder 里做 return grid; } } return grid; // 兜底外部發(fā)現(xiàn)無解后重新開一局 } private void shuffle(int[] arr, Random r) { for (int i arr.length - 1; i 0; i--) { int j r.nextInt(i 1); int tmp arr[i]; arr[i] arr[j]; arr[j] tmp; } } private void fill(int[][] grid, int[] pool) { int idx 0; for (int r 0; r rows; r) { for (int c 0; c cols; c) { grid[r][c] pool[idx]; } } } private boolean hasAnyMove(int[][] grid) { for (int r1 0; r1 rows; r1) { for (int c1 0; c1 cols; c1) { if (grid[r1][c1] 0) continue; for (int r2 r1; r2 rows; r2) { for (int c2 (r2 r1 ? c1 1 : 0); c2 cols; c2) { if (grid[r2][c2] 0 || grid[r1][c1] ! grid[r2][c2]) continue; if (PathFinder.findPath(grid, r1, c1, r2, c2) ! null) { return true; } } } } } return false; } }這里rows和cols的乘積必須是偶數(shù)否則圖塊配對數(shù)量對不上。kinds參數(shù)決定圖塊種類常見配置是8×10棋盤、5到6種圖塊圖塊太少畫面單調(diào)太多會導致相鄰同型概率下降、難度失控。洗牌用Fisher-Yates注意遍歷方向是從后往前每次交換下標是“當前下標隨機余數(shù)”寫反了會引入不均勻分布。hasAnyMove里用PathFinder做全圖掃描最壞情況是O(n^4)但50次嘗試以內(nèi)通常一次就能通過實際跑起來感知不到耗時。可解性校驗的另一個實用策略是“預留可消除對”。生成棋盤后故意保留至少一對相鄰同類型圖塊保證玩家第一步必定有棋可走。這個小技巧對新手體驗很友好高仿版本里值得加上。2.3 轉(zhuǎn)彎數(shù)不超過2雙拐點查找思路與可用實現(xiàn)雙拐點查找是連連看算法題的核心也是面試里最常被追問的部分。我習慣把棋盤外擴一圈再尋路也就是內(nèi)部維護一個(rows2)×(cols2)的數(shù)組最外圈全部置0。這樣所有越界情況都變成“空白格”直線判斷、拐點判斷不需要寫任何邊界條件代碼干凈很多。下面給出完整尋路實現(xiàn)。public class PathFinder { private final int[][] data; // 外擴一圈后的網(wǎng)格0 表示空白 private final int rows, cols; public PathFinder(int[][] grid) { this.data grid; this.rows grid.length; this.cols grid[0].length; } /** 返回路徑拐點序列null 表示不通 */ public Listint[] findPath(int sr, int sc, int er, int ec) { if (data[sr][sc] 0 || data[sr][sc] ! data[er][ec]) return null; // 0 拐同行或同列直線 if (lineClear(sr, sc, er, ec)) { return route(new int[][]{{sr, sc}, {er, ec}}); } // 1 拐拐點只可能是矩形對角線的另外兩個角 int[][] corners {{sr, ec}, {er, sc}}; for (int[] p : corners) { if (data[p[0]][p[1]] 0 lineClear(sr, sc, p[0], p[1]) lineClear(p[0], p[1], er, ec)) { return route(new int[][]{{sr, sc}, p, {er, ec}}); } } // 2 拐先沿起點豎線走到某一行再橫向走到終點所在行再豎線進入終點 for (int r 0; r rows; r) { if (r sr || r er) continue; if (data[r][sc] 0 data[r][ec] 0 lineClear(sr, sc, r, sc) lineClear(r, sc, r, ec) lineClear(r, ec, er, ec)) { return route(new int[][]{{sr, sc}, {r, sc}, {r, ec}, {er, ec}}); } } // 2 拐對稱邏輯先橫向走到某一列再縱向最后橫向進入終點 for (int c 0; c cols; c) { if (c sc || c ec) continue; if (data[sr][c] 0 data[er][c] 0 lineClear(sr, sc, sr, c) lineClear(sr, c, er, c) lineClear(er, c, er, ec)) { return route(new int[][]{{sr, sc}, {sr, c}, {er, c}, {er, ec}}); } } return null; } private boolean lineClear(int r1, int c1, int r2, int c2) { if (r1 r2) { int minC Math.min(c1, c2), maxC Math.max(c1, c2); for (int c minC 1; c maxC; c) { if (data[r1][c] ! 0) return false; } return true; } if (c1 c2) { int minR Math.min(r1, r2), maxR Math.max(r1, r2); for (int r minR 1; r maxR; r) { if (data[r][c1] ! 0) return false; } return true; } return false; } private Listint[] route(int[][] points) { return new ArrayList(Arrays.asList(points)); } }findPath返回的List里保存的是拐點坐標序列畫提示線、播放消除動畫都靠它。注意第二次遍歷的剪枝兩個拐點的中間點必須是空格所以data[r][sc]和data[r][ec]都要為0這能省掉大量無效直線判斷。lineClear是純直線障礙檢查起點和終點本身有值不影響因為它只檢查中間格。循環(huán)里跳過r sr和r er是為了不把路徑繞回起點或穿越終點所在行列否則可能出現(xiàn)“原地拐彎”的假路徑。這套實現(xiàn)還有一個隱藏優(yōu)勢外擴一圈后棋盤外的任何位置都天然可達完美還原QQ連連看里的繞邊路徑。代價是內(nèi)存多出一圈但對單機版來說可以忽略。如果后續(xù)要做“自動提示”功能直接復用findPath做全圖掃描即可不需要單獨維護一套尋路邏輯。3. 用Java Swing復刻棋盤與交互類結(jié)構(gòu)、事件調(diào)度與高仿畫面3.1 類劃分把游戲引擎與界面分開替答辯和二次開發(fā)留后路很多課程設(shè)計源碼最大的問題就是“游戲規(guī)則寫在按鈕監(jiān)聽器里”一個類一千多行改個棋盤參數(shù)都心驚膽戰(zhàn)。我建議按這套分層來拆這也是java課程設(shè)計案例里老師最認可的結(jié)構(gòu)。類名職責關(guān)鍵成員Main程序入口負責啟動界面main()GameFrame主窗口持有菜單、狀態(tài)欄和面板JFrame, BorderLayoutGamePanel棋盤繪制與鼠標事件paintComponent, MouseListenerGameData游戲狀態(tài)模型存圖塊值和分數(shù)int[][] grid, score, remainGameEngine消除判斷、得分計算、重排邏輯PathFinder, MapGeneratorPathFinder連通性判斷與路徑計算findPath()AudioPlayer音效與背景音樂播放Clip, AudioSystem拆分的核心原則是GameData和PathFinder不依賴任何Swing類可以單獨寫單元測試。我在實際項目里就是這樣做的——先把規(guī)則層用純Java寫完并跑通再花一個晚上接界面出問題的概率小很多。答辯時老師問“你怎么保證算法正確”你直接說“規(guī)則層不依賴界面寫了JUnit測試”比任何解釋都有說服力。界面層要克制GamePanel只做三件事畫棋盤、響應鼠標、把點擊坐標傳給GameEngine然后把結(jié)果畫回去。不要讓GamePanel去管存檔、算分、計時否則類之間的耦合會讓你改一個需求牽一發(fā)動全身。這也是面向?qū)ο缶幊蘪ava里最常被拿出來講的高內(nèi)聚低耦合現(xiàn)場。3.2 自定義繪制棋盤paintComponent、圖片加載與雙緩沖Swing里最穩(wěn)的做法是繼承JPanel重寫paintComponent而不是用JButton擺網(wǎng)格。JButton布局在棋盤變大時會卡頓而且選中態(tài)高亮不好控制。自定義繪制則可以在一個方法里把背景、圖塊、選中框、提示線全部畫出來。核心繪制代碼長這樣。public class GamePanel extends JPanel { private final GameData data; private final Image[] images; // 圖塊圖片下標從 1 開始 private final int cellW 40; // 單格寬 private final int cellH 52; // 單格高QQ連連看圖塊偏豎長 private final int offsetX 20; // 棋盤左邊距 private final int offsetY 20; // 棋盤上邊距 public GamePanel(GameData data) { this.data data; this.images loadImages(); setBackground(new Color(0xE8, 0xE8, 0xFF)); // 淺紫背景接近原版聊天面板色調(diào) addMouseListener(new GameMouseAdapter()); } private Image[] loadImages() { Image[] arr new Image[data.getKindCount() 1]; for (int i 1; i data.getKindCount(); i) { arr[i] new ImageIcon(getClass().getResource(/img/kind_ i .png)).getImage(); } return arr; } Override protected void paintComponent(Graphics g) { super.paintComponent(g); // 先清背景避免殘影 for (int r 1; r data.getRows(); r) { for (int c 1; c data.getCols(); c) { int val data.get(r, c); if (val 0) continue; int x offsetX (c - 1) * cellW; int y offsetY (r - 1) * cellH; if (data.isSelected(r, c)) { g.setColor(new Color(0xFF, 0x60, 0x00)); g.drawRect(x - 2, y - 2, cellW 3, cellH 3); } g.drawImage(images[val], x, y, cellW, cellH, this); } } } }loadImages里用的是getResource而不是new File這是jar包能正常顯示圖片的關(guān)鍵。類路徑資源在IDEA和命令行下表現(xiàn)不一致getResource采用的是classpath規(guī)則打完jar后仍然有效。cellW和cellH要跟圖片原始寬高比匹配否則會出現(xiàn)拉伸變形高仿細節(jié)全靠這里。setBackground的顏色我選的是淺紫因為原版聊天主題是紫色系這個參數(shù)玩家感知很強。雙緩沖問題在Swing里默認是開啟的但如果你重寫paint而不是paintComponent或者沒有調(diào)用super.paintComponent就會出現(xiàn)閃爍和殘影。裁判方法只有一個最小化窗口再還原如果棋盤留下白色矩形或舊圖塊痕跡說明繪制路徑不對。消除動畫期間不要直接改data里的值再整塊重繪而是用一份“動畫層”疊加繪制。3.3 鼠標拾取與消除判定一次點擊事件里發(fā)生了什么鼠標事件是連連看交互的核心鏈路我把一次點擊的完整流程拆成五步換算坐標、判斷圖塊、處理選中/取消、嘗試消除、重繪。這里最容易出錯的是動畫期間沒有鎖定輸入玩家連點鼠標導致重入異常。我用一個volatile boolean字段做互斥動畫播放期間直接忽略點擊。public class GameMouseAdapter extends MouseAdapter { private int[] selected null; // 當前選中的圖塊坐標 {r, c} Override public void mousePressed(MouseEvent e) { if (engine.isAnimating()) return; // 動畫期間忽略點擊 int r (e.getY() - offsetY) / cellH 1; int c (e.getX() - offsetX) / cellW 1; if (!data.inBound(r, c)) return; int val data.get(r, c); if (val 0) return; // 點到已消除的空格 if (selected null) { selected new int[]{r, c}; data.setSelected(r, c, true); } else if (selected[0] r selected[1] c) { data.setSelected(r, c, false); // 再次點擊同一個塊取消選中 selected null; } else { Listint[] path PathFinder.findPath(data.getGrid(), selected[0], selected[1], r, c); if (path ! null) { data.removeAt(selected[0], selected[1]); data.removeAt(r, c); data.setSelected(selected[0], selected[1], false); engine.playEliminateAnimation(path); // 動畫結(jié)束后統(tǒng)一 repaint selected null; } else { data.setSelected(selected[0], selected[1], false); selected new int[]{r, c}; data.setSelected(r, c, true); } } repaint(); } }坐標換算的公式是“像素偏移量減掉棋盤邊距再除以單格尺寸”注意整型除法截斷。如果棋盤有邊框圖片offsetX和offsetY要對齊邊框內(nèi)側(cè)否則點擊越準確越難受。選中高亮我用的是drawRect畫一個橙色框真正的QQ連連看選中態(tài)是圖塊微微放大加光暈高仿版本里可以用drawImage縮放來實現(xiàn)代價是每幀都要重繪選中格性能稍降但視覺效果提升明顯。連線提示是另一個加分項消除成功時畫一條經(jīng)過所有拐點的折線顏色用半透明黃即可。這條線畫在動畫層動畫播完就清除不污染棋盤數(shù)據(jù)。注意Swing的繪制都在事件調(diào)度線程EDT不要在mousePressed里做耗時循環(huán)否則界面會“假死”這就是為什么findPath在幾十毫秒內(nèi)必須返回的原因。4. 單機版的關(guān)卡、存檔與音效讓V1.0具備完整交付感4.1 關(guān)卡參數(shù)與進度保存為什么我不用Java序列化而用XML單機版V1.0如果只有無盡模式玩家半小時就膩了。關(guān)卡系統(tǒng)的關(guān)鍵變量就五個行數(shù)、列數(shù)、種類數(shù)、限定時間、目標分。把這些參數(shù)化之后關(guān)卡只是不同的數(shù)值組合代碼一行都不用改。關(guān)卡參數(shù)表長這樣。關(guān)卡行數(shù)列數(shù)種類數(shù)限時(秒)目標分第1關(guān)66360300第2關(guān)88490500第3關(guān)8105120800第4關(guān)101061501000第5關(guān)101271801500種類數(shù)控制在3到7之間太少了視覺上全是相鄰同色太多了找對兒全靠運氣玄學難度會讓玩家覺得游戲不公平。存檔方案我強烈建議放棄Java原生序列化。ObjectOutputStream寫起來簡單但類一改字段舊存檔直接EOFException后悔藥都沒得吃。XML的好處是可讀、可手工修改、跨版本容錯。用java.beans.XMLEncoder做存檔代碼量不大效果比手寫XML解析器省事得多。public class Progress { private int level; private int score; private long timestamp; public Progress() {} // XMLEncoder 要求無參構(gòu)造器 // getter/setter 省略必須全寫 } public class SaveManager { public static void save(File file, Progress p) throws IOException { try (FileOutputStream fos new FileOutputStream(file)) { XMLEncoder encoder new XMLEncoder(fos); encoder.writeObject(p); encoder.close(); } } public static Progress load(File file) throws IOException { try (FileInputStream fis new FileInputStream(file)) { XMLDecoder decoder new XMLDecoder(fis); Progress p (Progress) decoder.readObject(); decoder.close(); return p; } } }XMLEncoder的硬性要求是目標類必須有公開無參構(gòu)造器并且所有需要保存的字段都有g(shù)etter/setter。它還要求不能有內(nèi)部類和lambda字段否則序列化會拋異常。除了玩家進度棋盤當前狀態(tài)也值得存檔這類“中途退出接著玩”的功能在單機版里很加好感。做法是把int[][]和剩余時間包進一個SaveData類整體序列化一次。加載存檔時要注意版本兼容我給存檔字段都加了默認值比如關(guān)卡默認1、分數(shù)默認0這樣舊檔缺字段也不會崩潰頂多多送玩家?guī)装俜植粫屚婕襾G進度。4.2 音效與背景音樂wav Clip 是最省心的單機方案Swing項目里做音效最省心的組合是javax.sound.sampled的Clip接口配wav文件。mp3需要引入第三方解析庫ogg格式兼容性更差而wav是Java原生支持里最穩(wěn)的。Clip適合播放短音效和循環(huán)BGM它一次性把音頻數(shù)據(jù)加載進內(nèi)存循環(huán)無縫不像SourceDataLine那樣要自己寫流。public class AudioPlayer { private Clip bgmClip; public void playLoop(String resourcePath) { try { if (bgmClip ! null bgmClip.isRunning()) { return; // 防止重復播放疊加 } AudioInputStream in AudioSystem.getAudioInputStream( getClass().getResourceAsStream(resourcePath)); bgmClip AudioSystem.getClip(); bgmClip.open(in); bgmClip.loop(Clip.LOOP_CONTINUOUSLY); } catch (Exception e) { System.err.println(BGM 加載失敗 e.getMessage()); } } public void playOnce(String resourcePath) { try { AudioInputStream in AudioSystem.getAudioInputStream( getClass().getResourceAsStream(resourcePath)); Clip clip AudioSystem.getClip(); clip.open(in); clip.start(); // 播放結(jié)束后無需手動 closeGC 會處理 } catch (Exception e) { System.err.println(音效播放失敗 e.getMessage()); } } }音頻格式的參數(shù)坑最值得提前說明Clip對采樣率不挑但轉(zhuǎn)換后的AudioInputStream可能是8位單聲道也可能保持原始16位立體聲。消除音效建議用短促的8位單聲道wav文件小、加載快、播放不卡BGM建議用44.1kHz采樣率的wav音質(zhì)能接受且不會在高仿界面里顯得廉價。還有一個容易忽略的點Clip對象數(shù)量不能無限增長。playOnce每次new一個Clip如果玩家快速連續(xù)消除幾十對會在同一時刻打開多個Clip系統(tǒng)音頻設(shè)備會出現(xiàn)打不開的IllegalStateException。解決方法是復用固定線程池或限制同時播放的Clip數(shù)量不超過4個。單機版里我用的方案是音效播放器內(nèi)部維護一個Clip數(shù)組做輪詢覆蓋新音效覆蓋最舊的那個效果最穩(wěn)定。4.3 界面“高仿”的最后一步布局、配色與重置邏輯高仿QQ連連看最直觀的就是配色和布局。頂部是一個計分面板顯示分數(shù)、剩余對數(shù)、當前關(guān)卡和計時器底部是“開始”“重排”“提示”“退出”四個按鈕。我建議主窗口用BorderLayout北邊放計分面板南邊放按鈕欄中心放棋盤。這樣窗口拉伸時棋盤可以跟隨變大不會出現(xiàn)按鈕擠壓棋盤的尷尬。重排功能要跟地圖生成器配合。玩家點擊“重排”棋盤內(nèi)剩余圖塊重新洗牌同時保證重排后可解。有一個細節(jié)很多源碼都不處理重排后如果還是死局要再次洗牌最多重試幾次再放棄。計時器用javax.swing.Timer而不是Thread.sleep因為Timer在EDT上觸發(fā)更新標簽不會觸發(fā)線程安全問題。每秒扣分或限時結(jié)束的邏輯都應該放在這個Timer的actionPerformed里而不是另起線程。高仿界面的最后一塊拼圖是窗口圖標和標題欄。用Toolkit.getDefaultToolkit().getImage加載一個16x16的圖標setTitle寫上“QQ連連看 單機版V1.0”窗口默認大小按棋盤尺寸加邊距計算居中顯示。這些細節(jié)不費多少代碼但決定了一個源碼是“能跑”還是“像回事”。5. 連連看單機版源碼落地避坑最容易翻車的5個現(xiàn)場記錄5.1 圖片全部不顯示控制臺報空指針現(xiàn)象在IDE里運行一切正常打成jar包后圖塊全部消失控制臺拋NullPointerException。原因代碼里用了new File(src/img/1.png)這類基于工作目錄的相對路徑。IDE運行時工作目錄是項目根目錄文件能找到jar包啟動時工作目錄是用戶雙擊的位置src目錄根本不存在getImage拿到null繪制時自然空指針。解決統(tǒng)一改為類路徑加載。所有圖片資源放在resources目錄或src/main/resources用getClass().getResource(/img/1.png)獲取URL。jar包內(nèi)部的文件路徑以classpath為根不再依賴外部目錄。順便復查一遍代碼里所有讀文件的IO不只圖片音效、存檔路徑也一樣處理。我的習慣是“凡是打包后要用的資源一律走getResourceAsStream”這樣從IDE到jar包都穩(wěn)定。5.2 死局明明還有大把方塊系統(tǒng)卻說沒有可消除項現(xiàn)象玩家把周圍能消的都消干凈后棋盤上還剩幾十個圖塊但全圖掃描找不到任何一對可消除項游戲卡死。原因地圖生成只做了隨機洗牌沒有做可解性校驗。連勝的玩家打到最后只剩殘局洗牌碰巧落入死局組合算法找不到路徑游戲就結(jié)束了。解決生成棋盤時全圖掃描調(diào)用findPath遍歷所有非空圖塊對。只要有一對能連通就通過否則重新洗牌。這里有個關(guān)鍵細節(jié)掃描要用“剩余圖塊”而不是“完整棋盤”因為游戲過程中隨機消除會讓棋盤狀態(tài)完全不同于開局。我在GameEngine里維護了一個“剩余圖塊列表”每次消除后更新。全圖掃描時只遍歷這個列表中的坐標對復雜度可控。另外給掃描次數(shù)加上限比如50次重排都不通過就判定為“本局無解”給玩家彈窗提示并重新開局。死局在數(shù)學上很難徹底避免但有了這個兜底玩家不會再撞上“卡死”體驗。5.3 能連接卻點不掉數(shù)組下標越界與1基0基混用現(xiàn)象兩個圖塊看起來明明能連點擊后卻沒有反應偶爾控制臺報ArrayIndexOutOfBoundsException。原因棋盤坐標在幾個類之間傳遞時有的地方從0開始計數(shù)有的地方從1開始計數(shù)。比如MapGenerator生成的是0基數(shù)組GamePanel坐標換算時又減了1PathFinder訪問時又加了1最終下標錯亂。越界讀到的可能是0碰巧等于空格就把空格當圖塊處理了。解決全項目統(tǒng)一用1基坐標棋盤數(shù)組內(nèi)部用0基存儲唯一允許轉(zhuǎn)換的地方是GamePanel的坐標換算入口。也就是數(shù)據(jù)層用0基業(yè)務層和界面層全用1基中間封裝兩層轉(zhuǎn)換方法不允許在業(yè)務代碼里到處減一加一。更穩(wěn)妥的做法是給PathFinder和GameData的接口都定義成“傳入1基坐標”內(nèi)部再統(tǒng)一減1。這樣就算哪天手滑傳錯錯誤也會集中在一兩個方法里暴露而不是分散在整個項目里變成玄學bug。5.4 消除動畫閃屏、殘影重繪順序與Timer的配合問題現(xiàn)象消除圖塊時畫面閃爍窗口最小化再恢復后出現(xiàn)上一幀的殘影動畫播放期間棋盤會“花”一下。原因Swing默認開了雙緩沖但如果你在paintComponent里沒有先調(diào)用super.paintComponent舊的繪制內(nèi)容不會被清掉殘影就留下了。另一個原因是動畫用Thread.sleep加repaint在EDT上睡線程會阻塞整個界面刷新效果就是卡頓加閃爍。解決paintComponent第一行必須是super.paintComponent(g)把背景色、棋盤底圖都交給父類清理。動畫循環(huán)用javax.swing.Timer驅(qū)動每幀之間讓出EDT控制權(quán)不要用Thread.sleep。這兩點做到后閃爍問題基本消失。還有一個小坑如果棋盤背景色是null窗口透明區(qū)域的默認行為會跟你的預期不一致。給GamePanel一個明確的setBackground顏色等于告訴重繪機制“這塊區(qū)域是我的畫布”殘影會少很多。5.5 存檔打了補丁后讀不出來直接序列化對象圖的代價現(xiàn)象玩家玩到第3關(guān)你更新版本時給GameData加了一個字段結(jié)果他加載舊存檔直接拋EOFException進度全丟。原因ObjectOutputStream寫的是整個對象圖類結(jié)構(gòu)一變反序列化就失敗。字段順序、類型、繼承關(guān)系任何一處變化都會破壞兼容性。這就是Java序列化看著方便卻讓人又愛又恨的地方版本升級后的后悔藥特別難吃。解決存檔改用XMLEncoder方案。XMLEncoder對字段順序不敏感缺失字段會保留默認值多出來的字段會被忽略。我實際測試過在一個存了Progress對象的XML文件里手工刪掉score字段加載后score就是0程序照常跑。這個容錯能力在課程設(shè)計、小版本迭代場景里足夠用。如果項目已經(jīng)用ObjectOutputStream寫了存檔又不想推倒重來可以在SaveData里額外保存一個version字段加載時檢查版本號舊檔走一次字段遷移邏輯新檔直接讀。但這是臨時方案長遠看XML或JSON才是正路。6. 向交付物靠近性能優(yōu)化、打包發(fā)布與自測清單6.1 兩個值得做的性能優(yōu)化第一先做“自動提示”的緩存。玩家的第一反應往往是全圖掃描找可消除對如果每次點擊都把整張棋盤跑一遍findPath地圖增大后會明顯卡頓。我一般維護一個可消除對列表每次消除后只增量更新受影響的行列把掃描從全圖降到局部。第二重排時控制嘗試次數(shù)。MapGenerator里重試50次還無解就直接開啟“清空重開”流程不讓玩家在死局里干等。游戲過程中重排也一樣重試幾次后給按鈕置灰避免連續(xù)點擊造成卡死。6.2 打包成可雙擊運行的jarmvn clean package java -jar target/lianliankan-1.0.jar我用maven-shade-plugin打包把資源目錄一并打進jarmanifest里指定Main-Class。注意pom.xml里resources要顯式聲明包含src/main/resources下的圖片和音頻否則IDEA里正常但打包后資源丟失。java -jar啟動后用Process Explorer觀察是否殘留進程確認窗口能正常關(guān)閉。自測清單是打包前最后一道閘我列在下面供你直接抄。檢查項驗證方法通過標準連通規(guī)則手動構(gòu)造0拐、1拐、2拐路徑各一組三種都能消除2拐以上不能消除繞邊路徑搭一條棋盤外繞行的路徑能正常消除死局兜底故意構(gòu)造死局棋盤觸發(fā)重排或提示不卡死圖片資源從jar包外雙擊運行圖塊全部顯示無空指針存檔兼容刪除score字段后加載進度保留分數(shù)歸零不崩潰動畫鎖輸入快速連點多個圖塊不重復消除、不產(chǎn)生錯亂音效疊加連續(xù)快速消除10對無異常聲音不卡死6.3 我的打包前習慣自己的一個血淚教訓是永遠在打包前手動跑一遍“快速消除10對再存檔、關(guān)窗口、重新打開、繼續(xù)玩”的流程不要只盯著算法測。Swing項目的坑大多出現(xiàn)在事件調(diào)度和資源路徑上而這兩類問題在純邏輯測試里根本暴露不出來。java學習路線里你可能會遇到無數(shù)個項目但能把一個玩具做到可交付、可存檔、可重開比泛泛刷十個小demo有用得多。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99热欧美偷拍| 丁香六月天婷婷色| 五月丁香婷婷婷婷综合网| 免费在线观看AV网站| 99综合网| 五月婷婷五月天激情网| 亚洲狠狠狠色婷婷综合激情久久久| 97久久精品视频| 五月婷婷啪啪| 激情五月天色色| 亚洲综合婷婷六月丁香五月| 多精窝99在线视频| 99亚洲精品视频在线观看| 中文字幕高清av| 五月婷在线观看| 六月婷婷开心| 激情五月丁香亭亭| 丁香六月欧美| 亚洲色视频| 五月天亚洲最大成人| 成人AV免费观看| 日本97人人| 亚洲操逼网| 精品网站:999WWW| 六月丁AV| 噜噜狠狠色综无码久久合欧美| 色高清无码视频| 亚洲色色色色色色色色色| 综合精品99| 久久久久久久久久久-久五月天婷婷| 色综合丁香| 79色色色色| 99激| 国产精品久久久60086| 快乐激情五月色婷婷| 久久码久久无清| 伊人综合网站| 玖玖爱伊人网| 婷婷五月激情视频网| 超碰在线免费观看日韩| 色色综合网。| 丁香五月婷婷99| 五月丁香久久久| 人人爱操| 六月婷综合| 日本不卡高字幕在线2019| 六月丁香五月婷婷| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | 色婷婷视频| 91久久| 99久久玖玖| 五月婷婷日| 精品久久人妻| 色五月综合激情| 人人97碰| 天天插天天射| 亚洲永远av在线播放| 久久久久久久久久久久久久久久一道本| 欧美性做爰大片免费看办公室| 91久久久久久| 99久久婷婷国产综合亚洲| 99热人人艹| 丁香五月天成人| 国内9l视频自拍老熟女九色| 丁香六月婷婷综合激情欧美| 欧美熟女乱又伦| 五月天色综合服务平台| 久草狼人| 超pen个人视频97| 国产高清av黄色看片| 久久久久久久久久久-久五月天婷婷| 日韩在线观看网址| 亚洲色色五月天| 九九99九九99偷拍视频免费看| 丁香九月久久| 开心五月婷| 伊人久久五月天综合| 天天色天天操天天射| 99.N在线视频| 无码91中文字幕| 久久182| 狼友视频在线观看18| 天天人人综合| 婷婷色综合| 香蕉综合网| 日本精品久久久久中文字幕| 丁香婷婷色九月| 91日本在线观看| 五月丁香综合久久| 亚洲啪视频| 久久只这里有精品| 99热伊人| 伊人五月天97| 婷婷五月六月激情| 26uuu国产| 综合九九日本| 91dy.av| 直接看的AV| 婷婷亚洲天堂| 99九九视屏| 97色欧美| 婷婷五月天堂| 色99视| 大香蕉五月丁香| 五月丁香欧美综合免费视频| 开心五月激情网| 777精品久无码人妻蜜桃| 五月亭亭色| 婷婷六月丁香1| 超碰不卡在线| 99热一本久道| 综合伊人狠狠| 亚洲精品无码99热| site:pzdcoin.com| 日日撸夜夜操| 婷婷午夜激情| 综合激情在线| 午夜丁香综合婷婷| 思思久久99| 欧美经典片免费观看大全| 中文字幕亚洲-区久久99婷婷| 成人天天爽| 天天日天天草| 1024你懂的欧美曰韩| 五月色婷婷亚洲 | 猫咪伊人久久| 日亚二欧美| 黄网在线免费观| 日木狠狠干| 久久六月天| 99caobi| 思思热性操| 日本99视频| 91九色丨国产丨爆乳| 天天干天天射综合网| 看片视频在线免费日产在线看| 91久久九色| 人妻肉射免费观看| 嫩草免费视频| 天天干天干| 97色精品视频 | 婷婷色婷婷| 久久免费9| 天堂草在线看www| 国产69精品久久久久999小说| 99精品久久| 久热99| 成人小说 五月天 婷婷| 欧美三级巜人妻互换| 婷婷五月天天爽| 日韩av变天就操逼不卡区| 六月丁香基地| 91九色白丝| 色色网站免费观看| 青青草Avb在线| 六月丁AV| 久婷婷婷| 婷婷五月花| 六月亚洲| 色色综合院| 激情六月色| 丁香婷婷午夜| 成人电影一区| 五月丁香婷婷六月天| 激情小说五月天| 激情综合五月.....| 中国丰满熟女A片免费观| 五月天婷婷色小说| 4438国产免费看| 在线观看免费狠狠色丁香香综合| 久久综合婷婷| 大香蕉丁香五月| 亚洲欧洲中文日韩久久AV乱码| 18久久| 97久久精品| 天天日天天舔天天摸| 日本一级黄色电影| 人妻内射视频| 婷婷六月丁香激情综合| 婷婷五月a| 99综合自拍| 九九伊人网| 第九色区av天堂| 日本va视频| 五月婷免费视频| 武则天精品久久| 这里只有精品偷拍| 国产婷婷五月| 国产欧美精品AAAAAA片| 91超级碰在线| 婷婷香五月综合激情| 五月天基地| 亚洲超碰在线| 色99色| 九九熱最新視頻| 大色鬼综合| 狠狠干在线| 美女100%露全身无挡网站| 噜噜五月天综合| 国产 亚洲 在线| 天天干狠狠操| 99自拍视频| 婷婷视频在线碰| 五月婷婷丁香啪啪| 激情五月天小说| 91chinese在线| 亚洲AV成人精品网站在线播放| 玖玖五月| 亚洲色99| 17.c黄色| 欧美va| 激情九月婷婷| 日本久久婷婷| 色色色色色色色色色色色色色97| 亚洲AV日韩在线观看| 操操啪| 五月天婷婷人妻| site:hcxsz888.com| 日韩天堂久久| 99国产97在线,| 五月天激情久久| 色婷婷久久| 狠狠操狠狠狠| 色情播放| yazhouzonghesese| 色婷婷五月基地在线| 97操碰视频| 99色在线视频观看| 九九久久污| 狠狠爱深色婷婷综合| 思思热精品在线| 狠狠操天天干| 丁香 久久| 色激情五月| 伊人婷婷福利网| 九九热只有精品| 五月丁香六月婷婷欧美综合| 色婷婷亚洲六月婷婷中文字幕| 六月米奇色综合| 久热这里只精品| 欧美日韩国产伦精品日韩人妻一| 色一情一乱一乱一区9| 91大屁股在线| 97成人丁香| 99ER热精品视频| 狠狠色婷婷| 亚洲综合另类| 在线观看av网站| 五月激情六月综合| 婷婷久久五月天丁香| av五月天婷婷丁香| 久久99草五月婷婷| 婷婷综合九月| 狼人婷婷久久| 成人看片网站| 天天 青草 制服丝袜 在线 | 蜜桃婷婷狠狠久久| 亚洲欧美综合7777色婷婷| 婷婷综合色| 伊人婷婷色| 99免费在线视频| 偷偷操九九| 成人 九九九九| 九月性爱网| 婷婷丁香成人色综合| 色天堂婷婷| 欧美性生交XXXXX无码小说| 中字幕视频在线永久在线观看免费| 国产成人99久久亚洲综合精品| 久久久大香蕉| 国产一区二区三区影院| 婷婷伊人综合| 五月婷婷丁香五月亚洲色| 婷五月天| 99热这里只有精品国产免费| 夜夜爽天天爽| 天天天天天色| 永久免费一区二区三区| 五月婷婷啪啪啪| www.91操| 婷婷五月久久| 五月婷婷黄色| 丁香五月欧美婷婷综合| 91肏| 天天艹夜夜爽| 99啪啪网| 99精在线| 任你搞在线观看视频| 久久精品63| 99热99在线| 九九热视频免费的| 婷婷 色 丁香 夜| 四虎成人精品永久免费AV九九| 中文AV在线播放| 99网| 狠狠香蕉| 婷婷伊人五月天| 69精品人人人人| 色婷婷内射| 人妻五月天激情开心网| 色综合久久中文| 欧美大片免费播放器| 99精品久久久久久久久| 中文网AV| 亚洲色夜| 日噜噜色| 久久99热 这里有精品| 色婷婷丁香五月天在线观看| 五月激情综合网| HD久久精品视频| 久操大香蕉| 日本激情五月| 婷婷在线视频| 色婷婷小说| 亚洲色 视频| 九久9精品| 91高潮喷水久久久久久久久 | 欧美99视频| 五月色情婷婷开心五月天| 五月天激情图片| 欧美激情性做爰免费视频| 国内久久久精品99| 99av视频| 97涩婷婷婷婷基地| 丁香八月综合激情| 久久怡红院| 久久婷婷内射| 五月婷婷丁香五月| www.激情五月天.con| 婷婷六月丁香色| 中文字幕在线免费观看视频| 一区二区乱码视频| 成人免费在线电影| 色色色色色色色色色色色色色97| 99精品久久久久久久久| 久久AV电影| 五月丁香久久| 性 色 婷婷| 五月婷丁香| 99狠狠操一| 成人免费va| Blackedraw视频一区二区| 二色av| 婷婷五月丁香综合激情| 91 久热| 九九久久综合网站| 成人国产网| 婷婷六月天精品| 五月丁香六月天| 亚洲永久四色| 99色天堂| 狠狠色激情综合| 熟女少妇内射日韩亚洲| 九九操综合网| 久草五月丁香婷婷综合| 九九精品在线观看视频6| 99热爆在线| 蒲京久久无码视频| 五月丁香中文字幕| 色婷婷偷拍| 丁香婷婷激情| 五月婷婷综合激情网| 五月停亭六月,六月停亭的英语| 免费成人中文字幕| 玖玖色综合网| 色五月xxx| 综合五月天| 综合五月天亚洲婷婷| 五月婷婷综合视频| 五月丁香成人版| 97夫妻超碰| 淫荡综合网| 9精品国产在热久久| 丁香五月婷婷色情综合| 久久色天堂| 99re这里只有| 丁香六月天婷婷开心综合| 香港九九六区八区99| 九九热只有精品| 亚洲久久日| 色五月激情五月天| 涩五月丁香| 亚洲啪| www.五月丁香| 激情综合网婷婷久久| 激情五月四色| 91碰| 天天草天天日| 婷婷99热| 婷婷五月天综合亚洲| 婷婷六月久久综合导航| 五月婷婷av| 98国产精品综合一区二区三区| 五月天中文网| 99久在线| 九月婷婷综合色干| 五月丁香婷婷欧美| 九九99久久| 超碰在线91| 亚洲AV影片在线观看| 色噜噜狠噜噜视频| 婷婷六月色丁香视频在线观看| 久草 tingting| 免费亚洲婷婷中文字幕| 艾小青av| 只有精品在线观看| 欧美日韩成人在线免费| 中文字幕日产A片在线看| 噜噜视频| 九六五月天婷婷| 国产精品成人AV在线| 无码激情AAAAA片-区区| 色人久久| 婷婷无码五月天| 婷婷五月 丁香六月| 伊人玖玖综合| 琪琪色网在线| 综合五月天| 天天舔天天摸| 欧美色色色色色色色| 99热99在线| 亚洲韩国日产综合AV| 久久久久这里只有精品| 婷婷午夜精品久久久| 国产性色蜜乳| 精品人妻伦| 综合色网站| 操97在线观看| av免费在线看不卡无毒| 噼里啪啦在线观看免费完整版视频 | 无码区婷婷五月花开| 99高级会所久久| 五月婷婷|欧美| 久久se 综合网 | 91精品久久久久久综合五月天| 深爱激情网五月天| 婷婷五月天亚洲精品| 激情综合自拍五月婷婷色五月| 欧美啪啪五月天| 2025神马午夜福利| 99年操人人爽| 乱乱av| 人妻22p| 99热国产精品| 79精品视频在线观看,| 国产激情在线| 五月丁香欧美综合| 欧美97色| 超碰在线人人| 日韩啊啊啊| 96精品久久久久久久久| 9久久婷婷国产综合精品性色| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | av一级棒av| 九九热精品| 99热成人| 色狠狠色噜噜AV天堂五区| 激情小说五月天| 99精品性爱| 天天色播| 五月天丁香| 色婷婷综合视频| 色综合激情| 超碰操网| 九九人人操| 亚洲色综合| 99 热国产在| 婷婷五月天天天日日夜夜| 91尤物九色在线| 日韩操逼大片| 第四色色六月色综合| 久久婷婷五月| 五月婷婷久久爱| 丁香六月天色婷婷| 丁香六月久| 舔色婷婷| 九九热视频精品| 精品久久人妻| 国产av天天插天天操天天爽| CAOBIBI| 五月天激情日色在线| 热996精品在线观看| 国产97色在线 | 日韩| 日本一级特黄大片AAAAA级| 黄色片精品| 久热9| 欧洲精品欧洲情| 亚洲射激情| 亚洲综合激情五月| 碰碰91| 五月天激情小说| 丁香五月成人婷婷| 婷婷五月丁香欧洲| 激情综合啪啪啪| 亚洲五月天伊人| 婷婷五月天激情诱惑| 91色色色18| 99精品久久| www.99.色| 久热超碰91| 婷婷五月丁香五月丁香| 五月天综合在线观看| 成人精品在线| www.9色色色| 热久久91| 中文乱子伦视频| 婷婷精品免费久久| 激情五月成年| 久久香蕉影院| 色色亚洲五月天| 婷婷爱五月天| 色婷婷91| 婷婷色五月久久| 色婷婷五月综合在线| 99re在线播放| 特黄三级片| 五月色俺婷婷| 99精品热| 特黄三级片| 天天日夜夜帕| 96精品成人无码A片观看金桔| 亚洲免费视频网站| 日逼免费视频| 国产99热| 五月婷婷影院| 99热在线观看| 激情性爱婷婷| 99久久思思| 亚洲九九夜夜| 玖玖午夜视频| 日韩色色视频www| 久久五月视频| 大香蕉网站,大香蕉综合| 色久激情在线| 亚洲乱码日产精品BD| 久热91精品| 色婷婷丁香| 亚洲国产精品SUV| 97视频久久| 久久99热在线观看| 五月丁香A∨在线| 五月停停直播| 色五月综合网| 性爱动图国产麻豆一区二区三区| 91综合国免费久入| 九九这里是免费的视频5| 影音先锋777xfplay色资源网站| 色99在线| 国内裸舞二区| 人妻体体内射精一区二区| 在线中文av| 婷婷情色五月天| 色色五月丁香婷婷综合| 久草热视频在线观看| 婷婷的五月天另类视频| 五月噜噜| 五月天丁香婷婷网| 丁香五月av在线| 久久A极片| 丁香伊人激情| 亚洲成人在线观看av| 激情五月综合免费| 青青草伊人婷婷| 天天插天天干天天舔| 九九热免费视频| 79亚洲精品少妇| 亚洲激情在线| 激情合网婷婷| 五月天小说激情| 成人午夜在线视频| 波多野结衣AV无码Porn| 最新无毒无码AV| 欧美激情综合五月色丁香| 99热在线极品极品| 欧美色色色色色| 久热婷婷在线视频| 亚洲AV中文在线| 五月丁香婷婷色色| 激情五月婷婷| 六月天六月婷| 99久高清视频| 9 1超碰九色| 开心五月激情网| 深爱开心激情| 岛国av网| 久婷自拍视频| 色五月天婷婷| 综合网五月天123| 亚洲色图啪啪| 91欧美| 成人欧美一区二区三区在线观看| 人人肏逼视频在线一区二区| 狠狠色大香蕉| 丁香五月婷婷性爱| 中文字幕操比影片| 原琪琪色影院| 五月丁香色五月| 色综合色综合色综合| 日韩在线视频中文字幕| 色青青五月| 亚洲视频在线网| 久久99操| 日本在线噜噜| 日日干天天射| 91呦呦呦| 亚洲天天操| 我要射综合| 久久精品五月天| 熟妇人妻中文字幕无码老熟妇| 开心五月天激情网站| 久久视频婷婷视频| 九九热内射| 噜噜噜狠狠色综合| 开心激情播播五月天| 久草大| 九九九九九九九九九九九九九九九九九九九在线视频 | 免费看欧美成人A片无码| j久久性爱视频| 色婷大香蕉| 五月天婷婷久久视频| 久热这里只有精品在线| 99热只有精品在线播放| 在线伦子99热| 狠狠一日| 成功精品影院| 久久婷婷网| 丁香五月天成人| 天天插天天插天天操| 五月婷婷色色网址| 99欧美热| 香蕉综合网| 狠狠色噜噜狠狠| 丁香五月亚洲综合| 涩涩五月天综合| 激情綜合網址| 亚洲婷婷综合视频| 日本黄色三级片内射| 亚洲色啪| 久久综合影院| 几激情五月婷婷色五月色天堂| 99热在线中文字幕| 99热香港| 永久无码色| 亚洲无码11| 97ai婷婷| 在线亚洲综合网| 婷婷99狠狠躁天天久久久九九九| 激情小说婷婷| 五月天精品视频| 婷婷久久色| 好激情在线综合网| 婷婷六月激情丁香| sewuyue第四色| 青青热久久综合| 玖玖在线视频福利| 91超级碰| 久久久久妻| 婷婷五月丁香激情| 伊人网啪啪| 九九家庭影院| www.99视频| 在线观看的av| 久久婷婷综| 久9久9久9久9久9久9| 丁香五月大香蕉AV| 国产亚洲av片| 亚州综合色| 1024亚洲| 亚洲另类av| 丁香五月婷婷亚洲另类| 亚洲黄3级片网站欧美| 狠狠色噜噜狠狠亚洲A∨| 久久44| 色九月丁香婷婷蜜桃在线观看| se色婷婷视频| 天天综合区| 成人va在线| 色99无码| 九九九九综合| 激情五月图| 天天综合干| 婷婷五月天第四色| 婷婷五月天免费视频| 五月丁香六月激情欧美综合| 亚洲成人中心| 九九热在线观看视频| 桃色五月天| 色五月丁香A欧美com| 天堂网亚洲色图| 天色综合网| 中文字幕av久久爽一区| 五月婷婷六月丁香综合视频在线| 五月婷婷色情| 久色视频| 日本狠狠干| 牛牛热这里只有jingpin| 婷婷99综合| 丁香五月婷婷综合91| 激情久久久久久久久| 五月婷久久| 色婷婷丁香五月高清在线| 欧美va亚洲va在线播放| 婷婷五月天综合网| 色综合久久888| 99九九精品视频推荐| 国产精品人妻在线网址| 色五月婷婷激情综合网| 噜噜色com| 色啪网| 9色婷婷| 激情av在线| 操笔无码| 六月丁香网| 色五月婷婷久久| 日本9区视频| 五月天日日操夜夜操 | 免费国产VA国产免费| 亚洲人妻一区二区 | 日韩成人电影在线播放| 嫩草AV久久伊人妇女超级A| 超碰在线播放免费观看| 久久婷婷成人视频| 婷婷丁香五月亚洲| 91精品91久久久中77777| 影院久久久| wuyuedingxiang99| 思思热这里只有精品| 婷婷午夜| 色婷婷五月天成人网| 五月婷婷综合色啪首页| 中文字幕在线日亚洲9| 大香蕉AV电影在线| 成人va在线观看视频| 99热在线只有精品| 国产毛片精品一区二区色欲黄A片| 色人久夂| 97色色色色色| 日本色色色色色色色色一色二色| 婷婷五月香蕉| 丁香婷婷影院| 五月天丁香婷婷久久九| 五月情丁香色| 午夜丁香| 久9免费视频| 天天干天天叉| 亚洲精品无AMM毛片| 色五月色五天色情网| 思思re99视频在线观看| 国产69久久久欧美黑人A片| 欧美久久婷婷| 亚洲激情另类| 免费99色| Www.激情| 国产精品黑丝| 日韩色情亚洲五月天婷婷| 99久久久久| 综合色情网| 婷婷五月综合色拍| 婷婷丁香成人五月天| 欧美日本va| 色五月天 丁香| 艹| 中文字幕丰满孑伦无码专区| 五月婷婷在线视频免费观看| 丁香五月电影| www.zbzhongsen.com| 久草五月婷婷| www.五月婷婷久久.com| 97人妻碰碰碰久久香蕉| 在线中文亚洲| 色久女| 香蕉久久六月| 色9999日韩国产| 亚洲无码成人| 色色吧综合| 婷婷六月色开| 色综合色色色| 免费精品66| 五月丁香大香蕉| 女人天堂av| 亚洲乱码日产精品BD| 另类婷婷丁香| 91操黄| 精品成人a v无码内射| 香蕉色色网| 五月丁香六月激情综合| 大香蕉九九热| 99热精品在这里| 99精品视频免费在线播放| 午夜丁香婷婷| 日韩五月天婷婷| 日日夜夜九九| 激情网五月天| 久操人妻| 国自产拍偷拍精品啪啪一区二区| 男人综合网| 日日夜夜九九| 亚洲无码yw| 婷婷五月天最新综合你懂的| 亚洲欧洲中文日韩久久AV乱码| 婷婷五月精品中文字幕| 婷婷九月丁香天堂丁香天堂| 综合色色婷婷| 婷婷丁香成人在线视频| 日韩AC在线免费观看| 99热这里只有精品在线| 久99| 桃色成人网| 国产欧美va| 99re热精品在线视频| 欧美日韩精品人妻狠狠躁免费视频| 99热精品一| 538任你爽视频不一样的| 欧美成人A片AAA片在线播放| 91视屏在线观看com.wwwvv| 青青草99re| 五月丁香免费视频| 狠狠五月天婷婷| 亚洲第一影院高清无码网站| 激情久久久| 伊人婷婷色激情丁香| 中文字幕av亚洲| 久久婷婷视频| 色婷婷小说网| 日本色婷婷综合| 91日精品| 中字幕视频在线永久在线观看免费| 天天舔天天摸视频| 色婷婷基地| #NAME?| 久久色情| 成人丁香五月天Av| 五月婷婷 六月丁香| 狠狠色大香蕉| 国产精品第一国产精品| 91九色无码日韩| 激情WWW| 91viP在线看| 丝袜熟女一区二区三区| 五月激情综合网| 丁香六月婷婷综合缴| 性 色 婷婷| 91视频精品99| 国产亚洲成人综合| 五月丁香综合激情| 五月婷婷亚洲| 久久人妻视步| 婷婷深爱色五月| 久久伊人婷婷| aV欲望人妻中文字幕| 少妇性BBB搡BBB爽爽爽视頻| 香蕉婷婷| 神马欧美精| 天天天天天久久久久久| 久久久er热| 成人婷99最新| 丁香五月婷婷99| 91人人爱| 免费看欧美成人A片无码| 97色碰| 热99在线精品| 五月丁香五月婷婷在线观看| 五月丁香婷婷激情久久| 六月婷婷天天操夜夜爽视频| 日韩人妻无码精品| 无码动漫AV| 亚洲无码性爱| AV大片在线播放| 激情综合五月天| 人妻久久久| 超碰碰碰碰| 九九亚洲综合| 91se在线观看| 五月天播播中文字幕| 色永久| 色五月婷婷婷婷| 天色综合网站| 综合在线丁香五月| 亚洲性图一区二区| 97超碰在线观看免费| 丁香激情久久| 超碰在线超碰| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 婷婷激情五月天天天开心| 98永久精品| 人妻在线网站| 激情九九九九| 97人人干| 五月天社区| 无码日本精品XXXXXXXXX| 婷婷五月av| 久久性爱视频| 欧洲色色| 免费黄网不卡AV| 亚洲国产精品VA在线看黑人| 成人精品视频99在线观看免费| 日本99视频| 风流少妇A片一区二区蜜桃| 亚洲天天| 啊v视频在线观看| 欧美大肥婆大肥BBBBB| 五月综合激情| 97超碰免费超级在线观看| 色色色激情网| 操比激情五月| 91综合在线视频| 91操片| 99热大全在线观看| 五月天成人网婷婷| 五月婷婷丁香综合网| 高清无码视频网址| 婷婷五月综合社区| 久久久久9| 中文幕无线码中文字蜜桃| 婷婷五月色播天| 久久大香蕉伊人| 超碰色综合| 丁香五月综合激情久久潮喷| 99 这里只有精品| 99久久性爱| 99re免费精品视频| 亚洲人人操| 伊人激情综合| 91精品国产99久久久久久天美| 久久黄A片| 婷婷五月天色综合翘| 久久九九在线视频| 99热日| 日本99久久| 五月婷婷 婷婷五月 一区二区 久久久 | 婷婷五月天熟妇| 色五月婷婷一二| 思思热精品在线视频| 精品人妻午夜一区二区三区四区 | 中文字幕在线播放视频| 夜精品无码A片一区二区蜜桃| 中文字幕不卡网站| 久久激情五月婷婷| 五月婷丁香久久久| 九色无码| 99噜噜噜在线播放| 99热99天堂| 2050人人操免费工开爱| 人人射人人高潮| 欧美成人A片AAA片在线播放| 99欧美热| 丁香五月激情综合| 六月丁AV| 伊人激情| 色色色区| 久久婷婷五月激情网站| 大香蕉99热| av婷婷六月丁香社区在线观看| 超碰在线免费| 五月婷婷激情四月| 亚洲综合五月天婷婷丁香| 五月天婷婷激情四射综合| 五月天合网| 五月天婷婷爱| 色六月 婷婷| 日韩婷婷五月| 久久在线大香蕉| 亚洲日韩操B| 丁香五月婷婷久久综合激情网| www.深爱激情| 国产做A爰片毛片A片美国| 色九月欧美| 日本熟女内射| 99这里有精品视频| 4399在线日本A片| 五月久久丁香| 加勒比色色| 97人妻碰碰中文无码久热丝袜| 色婷婷AV久久| 5月婷婷性视频| 99热综合| 五月丁香久久久久| 丁香婷婷五月| 91婷婷视频| 男人天堂亚洲综合| 色色五月婷| 婷婷五月丁香花综合| 五月天婷婷婷| 超碰天堂网| 婷婷激情蜜桃玖玖丁香| 久久丁香五月| 欧美婷婷日本| 婷婷五月色综合| 99在线小视频| 夜夜撸日日骑| 婷婷丁香五月天综合在线日韩| 欧美噜噜久久久XXX| 97综合在线| 久婷婷色| 思思99久久| 久9热视频| 天天在线XXX| 青青艹b| 五月丁香六月激情啪| 久草婷婷在线| 日日肏夜夜干| 欧美成人猛片AAAAAAA| 五月色情婷婷开心五月色情| 久久综合激情| 青青夜夜狠狠夜夜狠狠| 人妻人人操| 青青操绿aaa一区日v| 思思热视频| www久久99com| 久色网| 色色综合日韩| 欧美日本免费一道免费视频| 色婷丨日丨天丨综合久久| 国产日产亚洲系列最新| 噜噜噜噜在线| 在线综合啪| 另类综合色| 99在线观看精品| 超碰在线人妻| 五月丁香在线视频观看| 丁香五月大香蕉| 五月婷婷这里都是精品| 婷婷的五月天另类视频| http://www.sd-xiangsu.com/| 狠狠色噜噜色狠狠狠综合色| 色婷婷五月天偷拍| 久久人人九九| 综合激情婷婷| 婷婷五月丁香色情| 91操女| 日韩精品一品二区三区的使用体验| 一级精品999WWW| 深爱五月婷婷| 久久66精品| 婷婷激情四射五月天| 99福利导航| 这里只有精品在线视频精品| 欧美性生交XXXXX无码小说| 亚洲色婷婷视频| 996精品热视频| 成人在线99| 天天射影视综合网| 丁香视频| 五月丁香在线| 丁香五月开心五月激情| 亚洲成人另类| 亚洲精品久久久久久久久久吃药| 五月天婷婷视频30| 天堂中文国产| 疯狂做受XXXX高潮A片动画| 国产裸舞表演WWWW| 久久久性爱网| 亚洲V国产V欧美V久久久久久| www.五月天激情| 婷婷久久网| 六月婷婷色色网| 激情五月天啪啪| 女人天堂av| 婷婷五月激情五月丁香五月| 99热地址| 婷婷开心久久| 永久的网站AAAA | 亚洲精品又粗又大又爽A片| 五月天激情无码| 丁香婷婷六月激情文学| 九月婷婷人人操人人舔人人爱| 五月丁香成人| 五月色精品| 狼友视频在线观看18| 色青青电影色五月| 91婷婷| 成人视频婷婷| 夜夜骑操AV| 日本乱论99| 亚洲亚洲人成综合网络| 色色狼人综合| 五月丁香婷婷三级| 欧美群妇大交乱婬网| 99色视| 少妇性按摩无码中文A片| 婷婷丁香九月| 激情五月婷婷综合色播小说| 99热思思久| 99热插| 久99久视频精品| 亚洲五月婷| 激情久久久久久久久| 思思热久久婷婷五月天| 丁香五月天AV在线| 五月天丁香成人社| 波多野结衣成人作品在线| 天天日天天色| 乱码操操| 色婷婷的五月天| 色情五月天A片| 五月天婷婷色紫薇阁| 超碰在线9| 久艹久| 久cao香蕉影院| 中文字幕无码人妻少妇免费视频| 碰超99| 丁香五月婷婷五月| 久久精品亚洲热| 色五月天综合| 激情五月开心五月在线视频| 综合99综合久久久久久久| 成人片在线免费看| 婷婷五月天av小说| 色呦精品| 嫩草AV久久伊人妇女超级A| 久色视频| 丁香五月天啪啪| 91丁香五月| 色婷婷亚洲婷婷| 在线1青婷| 五月开行婷婷色五月| 国产美女最新VA在线免费观看| 人人玩人人橾| 免费AAAAA网| 思思热这里只有精品视频666| 丁香五月六月综合激情| 99玖玖人人| 亚洲激情五月| 最新AV在线观看| 综合精品99| 婷香狠狠爱五月| 欧美性交一区二区三区| 亚洲乱啪| 婷五月天| 日都一级A片| 少妇婷婷五月天| 日本三级毛片| 国产激情在线| 色私五月婷婷| 婷婷伊人网| 天天日天天添| 丁香五月天激情婷婷丁香六月| 99国产er热视频| 草操AV在线| 五月丁香六月婷婷免费| 五月婷六月天| 婷婷五月深爱五月| 天天日夜夜曹| 98永久精品| 欧美一级色| 97久久超碰| ..真实国产乱子伦对白在线_欧| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 色五月首页| 天天精品视频免费观看| 少妇人妻人伦A片| 亚洲欧洲国产精品| 夜夜操夜夜操| 国产片XXXXA片国语对白| 五月天激情美女久久| 97婷婷丁香五月综合| 五月久久网| 五月婷五月婷伊人伊人五月婷| 五月丁香啪啪啪| WWW.五月天9999| 色色五月天 亚洲| www热久久yy9| 操逼福利视频| 26UUU欧美| 婷婷成人丁香色情基地30| 欧洲第一久色| 色老久久| 激情四射五月天| 色色网站日本91| 99热天堂| tingtingjiqingwuyue| site:publishdd.com| 婷婷五月激情中文字幕| 任你艹| 亚洲国产精品二二三三区| 中文字幕高清av| 97超碰人人操| 五月花成人网| 色五月婷婷九月| 99∨VTV| 日韩AV成人电影| 丁香五月激情婷婷| 人妻VideOssS人妻| 99狠狠色| 三级毛片视频| 婷婷射图| 五月婷婷精品视频| 午夜成人网站在线观看| 综合激情五月天| 久热最新视频| 五月天激情网图片| 欧美激情综合| 97婷婷在线视频| 色五月婷婷天天干| 天天天干夜夜夜操| 99久久婷婷| 亚洲一级AV在线免费播放| 婷婷久久午夜网| 99在线小视频| 大香蕉婷婷| 中文字幕成人影视| 欧美成人网婷婷综合在线| 99噜噜| 五月综合人妻| 婷婷激情中文综合| 无码操B| 性按摩玩人妻HD中文字幕| 97碰久久| 激情文学五月丁香六月婷婷| 天天天天操| 日本不卡中文字幕| 综合久久人妻| 99网| 五月婷婷综合网| 播五月丁香三月婷婷| 免费看欧美成人A片无码| 成人在线视频网| 九九这里有精品| 色婷婷丁香花五月天| 色八月婷婷| 日本三级中国三级99| 亚洲无码猫咪| www·五月天| 精品人妻久久久久久| 人人性久久| 婷婷婷婷婷开心无码播放| 成人αV视频免费观看| 激情综合网丁香| 欧美 日韩 成人 在线| 久久六月综合| 热久久视频99| 专区无日本视频高清8| 99热啪啪| 欧美精产国品一二三区| 成人免费视频一区| 久8色色| 国产在线激情视频| 丁香五月婷婷六月婷| www.激情五月| www.zbzhongsen.com| 日韩高清成人| 欧美日本VA| 性生活久久朋友人妻| 激情网五月天| WWW.99热| 操B视频在线播放| 伊人丁香六月婷婷| 国产成人亚洲综合A∨婷婷| 婷婷免费无马| 六月丁香色色| 九九人人精品| 中文色婷婷| 91精品又长又大又粗又爽又猛| 日日撸夜夜操| 97婷婷丁香五月天激情图片| 丁香五月另类小说| 热婷婷av| 人。妻久久| 欧美日韩中国| 日本色爽| 国产超碰人人| 99超级碰碰| 国产操碰| 亚洲午夜av| 综合激情综合啪啪| 999热在线观看视频|