瘋狂連連看之開發遊戲介面元件
GameView主要就是根據遊戲的狀態資料來繪製介面上的方塊,GameView繼承了View元件,重寫了View元件上onDraw(Canvas canvas)方法,重寫該方法主要就是繪製遊戲裡剩餘的方塊;除此之外,它還會負責繪製連線方塊的連線線。
GamaView的程式碼如下。
程式清單:codes\18\Link\src\org\crazyit\link\view\GameView.java
public class GameView extends View
{
// 遊戲邏輯的實現類
private GameService gameService; //①
// 儲存當前已經被選中的方塊
private Piece selectedPiece;
// 連線資訊物件
private LinkInfo linkInfo;
private Paint paint;
// 選中標識的圖片物件
private Bitmap selectImage;
public GameView(Context context, AttributeSet attrs)
{
super(context, attrs);
this.paint = new Paint();
// 設定連線線的顏色
this.paint.setColor(Color.RED);
// 設定連線線的粗細
this.paint.setStrokeWidth(3);
this.selectImage = ImageUtil.getSelectImage(context);
}
public void setLinkInfo(LinkInfo linkInfo)
{
this.linkInfo = linkInfo;
}
public void setGameService(GameService gameService)
{
this.gameService = gameService;
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
if (this.gameService == null)
return;
Piece[][] pieces = gameService.getPieces(); //②
if (pieces != null)
{
// 遍歷pieces二維陣列
for (int i = 0; i < pieces.length; i++)
{
for (int j = 0; j < pieces[i].length; j++)
{
// 如果二維陣列中該元素不為空(即有方塊),將這個方塊的圖片畫出來
if (pieces[i][j] != null)
{
// 得到這個Piece物件
Piece piece = pieces[i][j];
// 根據方塊左上角X、Y座標繪製方塊
canvas.drawBitmap(piece.getImage().getImage(),
piece.getBeginX(), piece.getBeginY(), null);
}
}
}
}
// 如果當前物件中有linkInfo物件, 即連線資訊
if (this.linkInfo != null)
{
// 繪製連線線
drawLine(this.linkInfo, canvas);
// 處理完後清空linkInfo物件
this.linkInfo = null;
}
// 畫選中標識的圖片
if (this.selectedPiece != null)
{
canvas.drawBitmap(this.selectImage,
this.selectedPiece.
getBeginX(),
this.selectedPiece.getBeginY(), null);
}
}
// 根據LinkInfo繪製連線線的方法
private void drawLine(LinkInfo linkInfo, Canvas canvas)
{
// 獲取LinkInfo中封裝的所有連線點
List
// 依次遍歷linkInfo中的每個連線點
for (int i = 0; i < points.size() - 1; i++)
{
// 獲取當前連線點與下一個連線點
Point currentPoint = points.get(i);
Point nextPoint = points.get(i + 1);
// 繪製連線
canvas.drawLine(currentPoint.x, currentPoint.y,
nextPoint.x, nextPoint.y, this.paint);
}
}
// 設定當前選中方塊的方法
public void setSelectedPiece(Piece piece)
{
this.selectedPiece = piece;
}
// 開始遊戲方法
public void startGame()
{
this.gameService.start();
this.postInvalidate();
}
}
上面的GameView中第一段粗體字程式碼用於根據遊戲的狀態資料來繪製介面中的所有方塊,第二段粗體字程式碼則用於根據LinkInfo來繪製兩個方塊之間的連線線。
上面的程式中①號程式碼處定義了GameService物件,②號程式碼則呼叫了GameService的getPieces()方法來獲取遊戲中剩餘的方塊,GameService是遊戲的業務邏輯實現類。後面會詳細介紹該類的實現,此處暫不講解。
本文節選自《瘋狂Android講義(含CD光碟1張)》一書。
圖書詳細資訊:http://space.itpub.net/?uid-13164110-action-viewspace-itemid-702318
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-702320/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 瘋狂連連看之載入介面的圖片
- Java遊戲開發——連連看Java遊戲開發
- 瘋狂Spring Cloud連載(1)Spring Cloud概述SpringCloud
- 騰訊“瘋狂”開源!
- 為什麼JavaScript開發如此瘋狂JavaScript
- 瘋狂的遊戲代言人!遊戲
- 連鎖開發定製NFT連鎖遊戲開發主鏈連鎖開發遊戲開發
- 瘋狂的 Vue3 之 SetupVue
- 學習連連看 連線線之謎+道具的使用
- 豆瓣:2013年瘋狂電影大資料之看電影大資料
- 【180620】VC++連連看遊戲原始碼C++遊戲原始碼
- 連連看演算法演算法
- 面向切面程式設計之瘋狂的 Aspects程式設計
- 連連看演算法--cocos2d-x 環境下開發演算法
- 網易瘋狂佇列佇列
- 瘋狂學習——DP!
- 京東正在瘋狂招人。。。
- 結對專案-連連看
- 《天天連連看》隱私策略
- 瘋狂的Web應用開源專案Web
- 瘋狂了!當遊戲愛上MongoDB會怎麼樣???遊戲MongoDB
- c#(WPF)實現連連看C#
- IOS開發之SOCKET長連線的使用iOS
- Facebook開發小遊戲引擎列表(下載連結)遊戲引擎
- 野路子廠商,正在瘋狂薅著正版遊戲的羊毛遊戲
- 數字貨幣正在上演瘋狂的資本遊戲遊戲
- 瘋狂的程式設計世界程式設計
- 瘋狂的程式設計師程式設計師
- 中級例項教程―之瘋狂單詞v1.70
- 《使命召喚:戰區》爆炸性增長 開發商Raven瘋狂招人
- 瘋狂遊戲CPO孫勁超:用社交做長線運營遊戲
- 因為那些無限咕咕咕的遊戲,玩家能有多瘋狂?遊戲
- llk -linux (連連看-linux版)(轉)Linux
- 《海盜來了》瘋狂遊戲,如何用資料搶佔小遊戲市場遊戲
- JDBCDriver介面連線資料庫,實際開發基本不用JDBC資料庫
- 元件化架構Dagger2無縫連線開發元件化架構
- 瘋狂的比特幣–資訊圖比特幣
- 瘋狂android講義目錄Android