国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用J2ME為手機DIY一個頂牛牛游戲

2019-11-18 15:54:02
字體:
來源:轉載
供稿:網友

  不知道大家小的時候有沒有玩過一種叫頂牛的游戲,我在上小學的時候經常在課間和同學玩,現在正在學J2ME,所以就用這個小游戲來練習一下。由于是第一次寫這樣的技術文章,寫的不好的地方還請大家多多指正。
  
  首先向大家介紹一下游戲的基本玩法,在一個5×5的棋盤上,兩方分別有5個棋子,每人每次只能移動一個棋子,且只能走一步,判定對方的棋子是否可以被“吃掉”的情況就是,橫線或是豎線上,一方的棋子數只有兩個,而另一方的棋子只有一個,且這三個棋子是相連的,而兩個相同顏色的棋子是相鄰的,而且必須是兩個同色的棋子“主動”吃掉那個單色的棋子,而不是單色的棋子“主動”的被吃掉。規則就是這樣,希望我說的沒把大家弄糊涂。
  
  下面是具體的實現細節;
  
  首先我想用一個“棋子”類Qi來實現每個棋子,這個棋子類里定義了棋子所具有的一些屬性和方法。
  
  然后,一個游返鬧骰媯彩強刂潑扛銎遄傭韉膃xtends Canvas類,這個類里用一個Qi類型的數組分別保存10個棋子對象,在類的構造函數中給這些棋子進行初始化。
  
  
  下面就是要繪制游戲的畫面了,游戲的畫面包括棋盤和棋子,其中棋盤的位置和形態是固定不便的,因此棋盤的繪制很輕易,只需用一個循環來控制每條直線的位置即可,我是用的是:
  
  int q_y=20;
  for(int i=0;i<5;i++)
  {
  g.drawLine(20,q_y,100,q_y);
  q_y=q_y+20;
  }
  int q_x=20;
  for(int i=0;i<5;i++)
  {
  g.drawLine(q_x,20,q_x,100);
  q_x=q_x+20;
  }
  
  而對于棋子來說,他的位置是不斷變化的,因此我們就要通過repaint()來動態的改變他的位置。而這個位置就是根據每個棋子對象的XPosition,yPosition來確定的:
  
  g.fillArc(q_array[i].xPosition,q_array[i].yPosition,10,10,0,360);
  
  另外,每個棋子有兩種狀態:被選定isSelected,正常isNormal
  
  游戲的畫面基本就可以搞定了,下一步就是移動棋子并進行進攻和防守了,這里就需要運用游戲規則來進行分析了。首先我們要使用一個用來移動棋子的光標,在這里我是用了一個小方框,他正好可以將每個圓形的棋子包圍住,這個方框的位置是通過x,y來確定了,有了這個小方框,我們就可以移動每個棋子了。
  
  下面我們來看一下棋子是怎么移動的,當我們點fire是,我們得先判定當前的位置是什么狀態,請看這個流程:取得當前得x,y坐標->在所有得棋子對象中查找是否在該位置存在棋子->有->isSelected->setNormal()->isNormal->setSelected()沒有棋子->試著移動該棋子。
  
  在這個移動棋子得過程中用到了棋子類中得isSelected,isNomal屬性和setNormal(),setSelected()方法。具體實現請看源代碼
  
  實現了棋子得移動后,下一步就可以開始實施棋子得進攻和防守了在這里我新建了一個Line類用于存儲每行得棋子信息,包括該行得棋子數量,并用一個對象數組將該行上得每個棋子對象保存起來以便于以后得使用。
  
  有了這個類以后,我們就以在運行中講一些數據儲存到各個對象中。
  
  當每次點擊Fire時,執行以下得操作步驟以判定是否可以刪除對方得棋子
  
  1 首先要取得該條橫線上得各個棋子信息并保存到對應的Line對象里,這個功能用check2()來實現
  
  2 接著
  
  public void gameControl()
  {
  水平線掃描
  假如該線上有三個棋子
  假如這三個棋子并列(max-min==40,max-middle=20),假如這三個棋子中相同顏色得兩個并列(也就是兩邊得兩個位置初始顏色不想同),且當前位置不是單顏棋子(不是主動自殺)
  刪掉那個異色棋子,進行下一行
  水平完畢進行垂直掃描
  }
  
  3 這里要對這三個棋子得x,y位置進行大小確認,以便進行位置分析,因此對應得有max(),min()函數,但他們得參數和返回值都是Qi類型的。
  
  4 在isthreeEach()函數中判定是否可以進行刪除操作
  
  5 最后,還要判定輸贏情況。如何判定輸贏:某一方得棋子數量小于1,另一方數量>=2 數量多得一方獲勝
  
  同時,在游戲畫面的右邊有一快用于顯示游戲信息額區域,用來顯示每一局的時間和當前玩家的輪次信息。每移動一步棋子,標注自動移到對方位置,這樣就能確保每位玩家每次只能有一個移動的機會。同時,啟動另一個線程來記錄游戲的進行時間,每秒刷新一次屏幕顯示。在該輪游戲結束后,將本局的信息保存到History中,這樣玩家可以方便查看這幾局的勝敗情況。
  
  由于是第一次做游戲,里面肯定會有一些不完善的地方,同時游戲的界面設計的也不是很美觀,希望大家能多提意見和建議,即把這個游戲加以完善,同時也提高自己的水平。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开阳县| 安远县| 筠连县| 佛坪县| 彭山县| 张家界市| 长沙县| 泸溪县| 江达县| 图木舒克市| 庆安县| 托克托县| 平泉县| 瑞昌市| 新乐市| 永安市| 腾冲县| 乐东| 聊城市| 定边县| 商洛市| 修文县| 永德县| 冷水江市| 双峰县| 长海县| 临猗县| 昌平区| 雅江县| 商河县| 漠河县| 印江| 大石桥市| 靖边县| 陕西省| 同心县| 阳江市| 云浮市| 临漳县| 湄潭县| 濉溪县|