歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java 對對碰游戲

對對碰游戲規則說明:

一. 概述

游戲在 8 × 8 格子的游戲池中進行。每個格子中有一個圖標。鼠標連續選中兩個相鄰的圖標,它們的位置會互換,互換後如果橫排或豎排有 3 個以上相同的圖標,則可以消去該圖標,並得分。

二. 基本規則

交換
玩家選中相鄰(橫、豎)的兩個圖標,則這兩個圖標的位置發生互換,如果互換成功則消去圖標,否則取消位置交換。

消去
玩家選擇兩個圖標進行位置互換,互換後如果橫排或豎排有 3 個以上相同的圖標,則消去這幾個相同的圖標,如果互換後沒有可以消去的圖標,則選中的兩個圖標換回原來的位置。消去後的空格由上面的圖標掉下來補齊。每次消去圖標玩家都能得到一定的分數。

連鎖
玩家消去圖標後,上面的圖標掉下來補充空格。如果這時游戲池中有連續擺放(橫、豎)的 3 個或 3 個以上相同的圖標,則可以消去這些圖標,這就是一次連鎖。空格被新的圖標填充,又可以進行下一次連鎖。每次連鎖會有加分。

重排
玩家已經不能消去任何圖標時,將清空游戲池,用新的圖標填充。

對對碰游戲算法分析:
分析一下,交換一般分為三種情況:
情況1:交換後,消除的頭像是豎排的。
情況2:交換後,消除的頭像是橫排的。
情況3:交換後,消除的頭像橫豎排都存在
過程就是點擊兩個圖樣,先檢查是否是同一圖樣,再檢查是否在同一直線,再檢查是否是一個折點,再是兩個折點,如果都不是則返回無解,如果是,返回TRUE,記錄折點,用直線連接折點和連接點並消除兩個圖樣,這個點的值變為0

  

交換、消除、填補算法

  1. public void setExchange() {   
  2.         if (isSelected) {   
  3.             isExchange = true;   
  4.             isSelected = false;   
  5.             doExchange();   
  6.         }   
  7.     }   
  8.   
  9.     private void moveRightDown() {   
  10.         if (currentX == BODY_W - 1 || currentY == BODY_H - 1) {   
  11.             isSelected = false;   
  12.         }   
  13.         currentX = ++currentX % BODY_W;   
  14.         currentY = ++currentY % BODY_H;   
  15.         setExchange();   
  16.     }   
  17.   
  18.     private void moveLeftDown() {   
  19.         if (currentX == 0 || currentY == BODY_H - 1) {   
  20.             isSelected = false;   
  21.         }   
  22.         currentX = (--currentX + BODY_W) % BODY_W;   
  23.         currentY = ++currentY % BODY_H;   
  24.         setExchange();   
  25.     }   
  26.   
  27.     private void moveRightUp() {   
  28.         if (currentY == 0 || currentX == BODY_W - 1) {   
  29.             isSelected = false;   
  30.         }   
  31.         currentX = ++currentX % BODY_W;   
  32.         currentY = (--currentY + BODY_H) % BODY_H;   
  33.         setExchange();   
  34.     }   
  35.   
  36.     private void moveLeftUp() {   
  37.         if (currentX == 0 || currentY == 0) {   
  38.             isSelected = false;   
  39.         }   
  40.         currentX = (--currentX + BODY_W) % BODY_W;   
  41.         currentY = (--currentY + BODY_H) % BODY_H;   
  42.         setExchange();   
  43.     }   
  44.   
  45.     private void moveUp() {   
  46.         if (currentY == 0) {   
  47.             isSelected = false;   
  48.         }   
  49.         currentY = (--currentY + BODY_H) % BODY_H;   
  50.         setExchange();   
  51.     }   
  52.   
  53.     private void moveDown() {   
  54.         if (currentY == BODY_H - 1) {   
  55.             isSelected = false;   
  56.         }   
  57.         currentY = ++currentY % BODY_H;   
  58.         setExchange();   
  59.     }   
  60.   
  61.     private void moveLeft() {   
  62.         if (currentX == 0) {   
  63.             isSelected = false;   
  64.         }   
  65.         currentX = (--currentX + BODY_W) % BODY_W;   
  66.         setExchange();   
  67.     }   
  68.   
  69.     private void moveRight() {   
  70.         if (currentX == BODY_W - 1) {   
  71.             isSelected = false;   
  72.         }   
  73.         currentX = ++currentX % BODY_W;   
  74.         setExchange();   
  75.     }   
  76.   
  77.   
  78. private void doExchange() {   
  79.         if (currentX - selectedX == -1) {   
  80.             if (currentY - selectedY == -1) {   
  81.                 tempMove[currentX][currentY] = 9;   
  82.                 tempMove[selectedX][selectedY] = 1;   
  83.             } else if (currentY - selectedY == 0) {   
  84.                 tempMove[currentX][currentY] = 6;   
  85.                 tempMove[selectedX][selectedY] = 4;   
  86.             } else if (currentY - selectedY == 1) {   
  87.                 tempMove[currentX][currentY] = 3;   
  88.                 tempMove[selectedX][selectedY] = 7;   
  89.             }   
  90.         } else if (currentX - selectedX == 0) {   
  91.             if (currentY - selectedY == -1) {   
  92.                 tempMove[currentX][currentY] = 8;   
  93.                 tempMove[selectedX][selectedY] = 2;   
  94.             } else if (currentY - selectedY == 1) {   
  95.                 tempMove[currentX][currentY] = 2;   
  96.                 tempMove[selectedX][selectedY] = 8;   
  97.             }   
  98.         } else if (currentX - selectedX == 1) {   
  99.             if (currentY - selectedY == -1) {   
  100.                 tempMove[currentX][currentY] = 7;   
  101.                 tempMove[selectedX][selectedY] = 3;   
  102.             } else if (currentY - selectedY == 0) {   
  103.                 tempMove[currentX][currentY] = 4;   
  104.                 tempMove[selectedX][selectedY] = 6;   
  105.             } else if (currentY - selectedY == 1) {   
  106.                 tempMove[currentX][currentY] = 1;   
  107.                 tempMove[selectedX][selectedY] = 9;   
  108.             }   
  109.         }   
  110.         int temp = body[selectedX][selectedY];   
  111.         body[selectedX][selectedY] = body[currentX][currentY];   
  112.         body[currentX][currentY] = temp;   
  113.     }  
Copyright © Linux教程網 All Rights Reserved