智能終端軟件開發(fā)課程設(shè)計報告_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  標題:智能終端課程設(shè)計</p><p>  2014年1月13日</p><p><b>  摘 要</b></p><p>  本次課程設(shè)計主要內(nèi)容是雙人五子棋游戲的開發(fā)。主要內(nèi)容是界面布局、判斷輸贏,記錄輸贏次數(shù)。開發(fā)想法來源,純屬娛樂。</p><p>  關(guān)鍵詞:益智游戲 Androi

2、d</p><p><b>  第一部分 分析游戲</b></p><p><b>  游戲功能簡述</b></p><p><b>  界面布局</b></p><p>  按照象棋的表格圖案繪制布局,在畫布上設(shè)計表格,并標記紅黑方位置。</p><p&g

3、t;<b>  棋子連線分析</b></p><p>  標明五子棋的顏色,記錄分析棋子的位置,判斷是否取勝。</p><p><b>  記錄輸贏次數(shù)</b></p><p>  記錄紅黑雙方輸贏次數(shù)。</p><p><b>  二、游戲核心技術(shù)</b></p>

4、<p><b>  1、基本技術(shù)組成</b></p><p>  判斷路徑,數(shù)據(jù)結(jié)構(gòu)算法。</p><p>  2、關(guān)鍵技術(shù)難點分析</p><p><b>  1、技術(shù)難點</b></p><p>  分析棋子連線是否可以取勝。</p><p><b&g

5、t;  2、作為難點的原因</b></p><p>  棋子之間有三種連線情況,橫向連續(xù)連接、縱向連續(xù)連接、對角線連續(xù)連接。</p><p><b>  3、準備突破方法</b></p><p>  將同類棋子之間,有位置關(guān)系的棋子進行進棧處理,如果在棋盤范圍內(nèi),有連續(xù)的五個棋子則為取勝。</p><p> 

6、 第二部分 設(shè)計與開發(fā)</p><p><b>  前期準備工作</b></p><p><b>  軟件環(huán)境:</b></p><p><b>  Windows</b></p><p>  Android SDK;</p><p>  Eclipse

7、(windows版)</p><p><b>  環(huán)境配置:</b></p><p>  Windows下Android SDK安裝。</p><p><b>  安裝步驟:</b></p><p>  1、下載SDK包,Android-SDK,下載地址:</p><p> 

8、 http://developer.android.com/tools/sdk/ndk/index.html</p><p><b>  2、 配置SDK</b></p><p><b>  導入sdk文件</b></p><p><b>  游戲預期效果</b></p><p&

9、gt;<b>  UI設(shè)計</b></p><p>  背景畫布選擇恰當,布局清晰,結(jié)構(gòu)清晰,使用簡單。</p><p><b>  棋盤設(shè)計</b></p><p>  方格大小,連線之間的距離適中,確保棋子在連線上,避免棋子在棋盤上混亂擺放。</p><p><b>  提示框<

10、/b></p><p>  出現(xiàn)下棋位置不在棋盤內(nèi)或者不在合法范圍內(nèi)是出現(xiàn)錯誤提示</p><p>  當由一方取得勝利時,出現(xiàn)提示框。</p><p><b>  開發(fā)過程</b></p><p><b>  1、布局設(shè)計</b></p><p>  package

11、cn.m.xys;</p><p>  //Download by http://www.codefans.net</p><p>  import android.app.Activity;</p><p>  import android.os.Bundle;</p><p>  import android.view.Display;&

12、lt;/p><p>  import android.view.KeyEvent;</p><p>  import android.view.Window;</p><p>  import android.view.WindowManager;</p><p>  public class FiveChessActivity extends

13、Activity </p><p><b>  {</b></p><p>  GameView gameView = null; </p><p><b>  @Override</b></p><p>  public void onCreate(Bundle savedInstanceS

14、tate) </p><p><b>  {</b></p><p>  super.onCreate(savedInstanceState);</p><p><b>  // 隱藏標題欄</b></p><p>  requestWindowFeature(Window.FEATURE_NO_T

15、ITLE);</p><p><b>  // 全屏顯示</b></p><p>  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,</p><p>  WindowManager.LayoutParams.FLAG_FULLSCREEN);</p>

16、<p><b>  // 獲取屏幕寬高</b></p><p>  Display display = getWindowManager().getDefaultDisplay();</p><p>  // 現(xiàn)實GameView</p><p>  GameView.init(this, display.getWidth(), d

17、isplay.getHeight());</p><p>  gameView = GameView.getInstance();</p><p>  setContentView(gameView);</p><p><b>  }</b></p><p><b>  @Override</b>&

18、lt;/p><p>  public boolean onKeyDown(int keyCode, KeyEvent event)</p><p><b>  {</b></p><p>  return super.onKeyDown(keyCode, event);</p><p><b>  } <

19、;/b></p><p><b>  }</b></p><p><b>  2、算法設(shè)計</b></p><p>  package cn.m.xys;</p><p>  //Download by http://www.codefans.net</p><p> 

20、 import android.app.Activity;</p><p>  import android.content.Context;</p><p>  import android.content.res.Resources;</p><p>  import android.graphics.Bitmap;</p><p>  

21、import android.graphics.BitmapFactory;</p><p>  import android.graphics.Canvas;</p><p>  import android.graphics.Color;</p><p>  import android.graphics.Matrix;</p><p>

22、  import android.graphics.Paint;</p><p>  import android.graphics.Rect;</p><p>  import android.view.MotionEvent;</p><p>  import android.view.SurfaceHolder;</p><p>  i

23、mport android.view.SurfaceView;</p><p><b>  /**</b></p><p>  * @author Administrator</p><p><b>  * </b></p><p><b>  */</b></p>

24、<p>  public class GameView extends SurfaceView implements Const, SurfaceHolder.Callback, Runnable</p><p><b>  {</b></p><p>  static GameView sInstance = null;</p><

25、p>  public static void init(Activity mActivity, int screenWidth, int screenHeight)</p><p><b>  {</b></p><p>  sInstance = new GameView(mActivity, screenWidth, screenHeight);</p

26、><p><b>  }</b></p><p>  public static GameView getInstance()</p><p><b>  {</b></p><p>  return sInstance;</p><p><b>  }</b&g

27、t;</p><p><b>  // 控制循環(huán)</b></p><p>  boolean mbLoop = false;</p><p>  // 定義SurfaceHolder對象</p><p>  SurfaceHolder mSurfaceHolder = null;</p><p>

28、  public static Paint sPaint = null;</p><p>  public static Canvas sCanvas = null;</p><p>  public static Resources sResources = null;</p><p>  private int mGameState = 0;</p>

29、<p>  private int mScreenWidth = 0;</p><p>  private int mScreenHeight = 0;</p><p>  public int[][] mGameMap = null;</p><p>  private int mMapHeightLengh = 0;</p><

30、p>  private int mMapWidthLengh = 0;</p><p>  private int mMapIndexX = 0;</p><p>  private int mMapIndexY = 0;</p><p>  public int mCampTurn = 0;</p><p>  public int

31、mCampWinner = 0;</p><p>  private float mTitleSpace = 0;</p><p>  private int mTitleHeight = 0;</p><p>  private float mTitleIndex_x = 0;</p><p>  private float mTitleI

32、ndex_y = 0;</p><p>  Bitmap bitmapBg = null;</p><p>  Bitmap mBlack = null;</p><p>  Bitmap mWhite = null;</p><p>  Context mContext = null;</p><p>  publi

33、c GameView(Activity activity, int screenWidth, int screenHeight)</p><p><b>  {</b></p><p>  super(activity);</p><p>  sPaint = new Paint();</p><p>  sPaint.

34、setAntiAlias(true);</p><p>  sResources = getResources();</p><p>  mContext = activity;</p><p>  mScreenWidth = screenWidth;</p><p>  mScreenHeight = screenHeight;</

35、p><p>  mSurfaceHolder = this.getHolder();</p><p>  mSurfaceHolder.addCallback(this);</p><p>  setFocusable(true);</p><p>  mbLoop = true;</p><p>  bitmapBg =

36、 CreatMatrixBitmap(R.drawable.status, mScreenWidth, mScreenHeight);</p><p>  mBlack = BitmapFactory.decodeResource(GameView.sResources, R.drawable.ai);</p><p>  mWhite = BitmapFactory.decodeReso

37、urce(GameView.sResources, R.drawable.human);</p><p>  mTitleSpace = (float) mScreenWidth / CHESS_WIDTH;</p><p>  mTitleHeight = mScreenHeight / 3;</p><p>  mTitleIndex_x = (float) (

38、mTitleSpace / 2);</p><p>  mTitleIndex_y = (float) (mTitleSpace / 2);</p><p>  setGameState(GS_GAME);</p><p><b>  }</b></p><p>  public void setGameState(in

39、t newState)</p><p><b>  {</b></p><p>  mGameState = newState;</p><p>  switch (mGameState)</p><p><b>  {</b></p><p>  case GS_GAME:

40、</p><p>  mGameMap = new int[CHESS_HEIGHT][CHESS_WIDTH];</p><p>  mMapHeightLengh = mGameMap.length;</p><p>  mMapWidthLengh = mGameMap[0].length;</p><p>  mCampTurn =

41、CAMP_HERO;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  protected void Draw()</p><p><b>  

42、{</b></p><p>  sCanvas = mSurfaceHolder.lockCanvas();</p><p>  if (mSurfaceHolder == null || sCanvas == null)</p><p><b>  {</b></p><p><b>  retu

43、rn;</b></p><p><b>  }</b></p><p>  RenderGame();</p><p>  mSurfaceHolder.unlockCanvasAndPost(sCanvas);</p><p><b>  }</b></p><p&

44、gt;  private void RenderGame()</p><p><b>  {</b></p><p>  switch (mGameState)</p><p><b>  {</b></p><p>  case GS_GAME:</p><p>  Dra

45、wRect(Color.WHITE, 0, 0, mScreenWidth, mScreenHeight);</p><p>  RenderMap();</p><p><b>  break;</b></p><p>  case GS_END:</p><p>  DrawRect(Color.RED, 0, 0,

46、 mScreenWidth, mScreenHeight);</p><p>  DrawString(Color.WHITE, sResources.getString(mCampWinner) + "勝利 點擊繼續(xù)游戲", 50, 50);</p><p><b>  break;</b></p><p><b&g

47、t;  }</b></p><p><b>  }</b></p><p>  private void RenderMap()</p><p><b>  {</b></p><p><b>  int i, j;</b></p><p>

48、  DrawImage(bitmapBg, 0, 0, 0);</p><p>  for (i = 0; i < mMapHeightLengh; i++)</p><p><b>  {</b></p><p>  for (j = 0; j < mMapWidthLengh; j++)</p><p>

49、<b>  {</b></p><p>  int CampID = mGameMap[i][j];</p><p>  float x = (j * mTitleSpace) + mTitleIndex_x;</p><p>  float y = (i * mTitleSpace) + mTitleHeight + mTitleIndex_

50、y;</p><p>  if (CampID == CAMP_HERO)</p><p><b>  {</b></p><p>  DrawImage(mBlack, x, y, ALIGN_VCENTER | ALIGN_HCENTER);</p><p><b>  } </b></p

51、><p>  else if (CampID == CAMP_ENEMY)</p><p><b>  {</b></p><p>  DrawImage(mWhite, x, y, ALIGN_VCENTER | ALIGN_HCENTER);</p><p><b>  }</b></p>

52、;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  private void DrawRect(int color, int x, int y, int width, int height)</p&g

53、t;<p><b>  {</b></p><p>  sPaint.setColor(color);</p><p>  sCanvas.clipRect(x, y, width, height);</p><p>  sCanvas.drawRect(x, y, width, height, sPaint);</p>

54、;<p><b>  }</b></p><p>  private void DrawString(int color, String str, int x, int y)</p><p><b>  {</b></p><p>  sPaint.setColor(color);</p>&l

55、t;p>  sCanvas.drawText(str, x, y, sPaint);</p><p><b>  }</b></p><p><b>  @Override</b></p><p>  public boolean onTouchEvent(MotionEvent event)</p>

56、<p><b>  {</b></p><p>  int x = (int) event.getX();</p><p>  int y = (int) event.getY();</p><p>  switch (event.getAction())</p><p><b>  {</b&

57、gt;</p><p>  case MotionEvent.ACTION_DOWN:</p><p>  UpdateTouchEvent(x, y);</p><p><b>  break;</b></p><p>  case MotionEvent.ACTION_MOVE:</p><p&g

58、t;<b>  break;</b></p><p>  case MotionEvent.ACTION_UP:</p><p><b>  break;</b></p><p><b>  }</b></p><p>  return super.onTouchEvent(e

59、vent);</p><p><b>  }</b></p><p>  public boolean CheckPiecesMeet(int Camp)</p><p><b>  {</b></p><p>  int MeetCount = 0;</p><p><

60、;b>  // 橫向</b></p><p>  for (int i = 0; i < CALU_ALL_COUNT; i++)</p><p><b>  {</b></p><p>  int index = mMapIndexX - CALU_SINGLE_COUNT + i;</p><p&

61、gt;  if (index < 0 || index >= mMapWidthLengh)</p><p><b>  {</b></p><p>  if (MeetCount == CALU_SINGLE_COUNT)</p><p><b>  {</b></p><p>  r

62、eturn true;</p><p><b>  }</b></p><p>  MeetCount = 0;</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  if (mGameMap

63、[mMapIndexY][index] == Camp)</p><p><b>  {</b></p><p>  MeetCount++;</p><p>  if (MeetCount == CALU_SINGLE_COUNT)</p><p><b>  {</b></p>&

64、lt;p>  return true;</p><p><b>  }</b></p><p><b>  } else</b></p><p><b>  {</b></p><p>  MeetCount = 0;</p><p><b&

65、gt;  }</b></p><p><b>  }</b></p><p><b>  // 縱向</b></p><p>  MeetCount = 0;</p><p>  for (int i = 0; i < CALU_ALL_COUNT; i++)</p>

66、<p><b>  {</b></p><p>  int index = mMapIndexY - CALU_SINGLE_COUNT + i;</p><p>  if (index < 0 || index >= mMapHeightLengh)</p><p><b>  {</b><

67、/p><p>  if (MeetCount == CALU_SINGLE_COUNT)</p><p><b>  {</b></p><p>  return true;</p><p><b>  }</b></p><p>  MeetCount = 0;</p&g

68、t;<p><b>  continue;</b></p><p><b>  }</b></p><p>  if (mGameMap[index][mMapIndexX] == Camp)</p><p><b>  {</b></p><p>  MeetC

69、ount++;</p><p>  if (MeetCount == CALU_SINGLE_COUNT)</p><p><b>  {</b></p><p>  return true;</p><p><b>  }</b></p><p><b>  }

70、else</b></p><p><b>  {</b></p><p>  MeetCount = 0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  // 右斜<

71、;/b></p><p>  MeetCount = 0;</p><p>  for (int i = 0; i < CALU_ALL_COUNT; i++)</p><p><b>  {</b></p><p>  int indexX = mMapIndexX - CALU_SINGLE_COUNT

72、+ i;</p><p>  int indexY = mMapIndexY - CALU_SINGLE_COUNT + i;</p><p>  if ((indexX < 0 || indexX >= mMapWidthLengh) || (indexY < 0 || indexY >= mMapHeightLengh))</p><p>

73、;<b>  {</b></p><p>  if (MeetCount == CALU_SINGLE_COUNT)</p><p><b>  {</b></p><p>  return true;</p><p><b>  }</b></p><p&

74、gt;  MeetCount = 0;</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  if (mGameMap[indexY][indexX] == Camp)</p><p><b>  {</b><

75、/p><p>  MeetCount++;</p><p>  if (MeetCount == CALU_SINGLE_COUNT)</p><p><b>  {</b></p><p>  return true;</p><p><b>  }</b></p>

76、<p><b>  } else</b></p><p><b>  {</b></p><p>  MeetCount = 0;</p><p><b>  }</b></p><p><b>  }</b></p><

77、p><b>  // 左斜</b></p><p>  MeetCount = 0;</p><p>  for (int i = 0; i < CALU_ALL_COUNT; i++)</p><p><b>  {</b></p><p>  int indexX = mMapInd

78、exX - CALU_SINGLE_COUNT + i;</p><p>  int indexY = mMapIndexY + CALU_SINGLE_COUNT - i;</p><p>  if ((indexX < 0 || indexX >= mMapWidthLengh) || (indexY < 0 || indexY >= mMapHeightLen

79、gh))</p><p><b>  {</b></p><p>  if (MeetCount == CALU_SINGLE_COUNT)</p><p><b>  {</b></p><p>  return true;</p><p><b>  }<

80、/b></p><p>  MeetCount = 0;</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  if (mGameMap[indexY][indexX] == Camp)</p><p>&l

81、t;b>  {</b></p><p>  MeetCount++;</p><p>  if (MeetCount == CALU_SINGLE_COUNT)</p><p><b>  {</b></p><p>  return true;</p><p><b>

82、;  }</b></p><p><b>  } else</b></p><p><b>  {</b></p><p>  MeetCount = 0;</p><p><b>  }</b></p><p><b>  }&l

83、t;/b></p><p>  return false;</p><p><b>  }</b></p><p>  private void UpdateTouchEvent(int x, int y)</p><p><b>  {</b></p><p>  s

84、witch (mGameState)</p><p><b>  {</b></p><p>  case GS_GAME:</p><p>  if (x > 0 && y > mTitleHeight)</p><p><b>  {</b></p>&

85、lt;p>  mMapIndexX = (int) (x / mTitleSpace);</p><p>  mMapIndexY = (int) ((y - mTitleHeight) / mTitleSpace);</p><p>  if (mMapIndexX > mMapWidthLengh)</p><p><b>  {</

86、b></p><p>  mMapIndexX = mMapWidthLengh;</p><p><b>  }</b></p><p>  if (mMapIndexX < 0)</p><p><b>  {</b></p><p>  mMapIndexX

87、 = 0;</p><p><b>  }</b></p><p>  if (mMapIndexY > mMapHeightLengh)</p><p><b>  {</b></p><p>  mMapIndexY = mMapHeightLengh;</p><p&

88、gt;<b>  }</b></p><p>  if (mMapIndexY < 0)</p><p><b>  {</b></p><p>  mMapIndexY = 0;</p><p><b>  }</b></p><p>  if

89、(mGameMap[mMapIndexY][mMapIndexX] == CAMP_DEFAULT)</p><p><b>  {</b></p><p>  if (mCampTurn == CAMP_HERO)</p><p><b>  {</b></p><p>  mGameMap[mM

90、apIndexY][mMapIndexX] = CAMP_HERO;</p><p>  if (CheckPiecesMeet(CAMP_HERO))</p><p><b>  {</b></p><p>  mCampWinner = R.string.Role_black;</p><p>  setGameSt

91、ate(GS_END);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  mCampTurn = CAMP_ENEMY;</p><p><b>

92、  }</b></p><p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></p><p>  mGameMap[mMapIndexY][mMapIndexX] = CAMP_ENEMY;</

93、p><p>  if (CheckPiecesMeet(CAMP_ENEMY))</p><p><b>  {</b></p><p>  mCampWinner = R.string.Role_white;</p><p>  setGameState(GS_END);</p><p><b

94、>  } else</b></p><p><b>  {</b></p><p>  mCampTurn = CAMP_HERO;</p><p><b>  }</b></p><p><b>  }</b></p><p><

95、;b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case GS_END:</p><p>  setGameState(GS_GAME);</p><p><b>

96、  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  public boolean isCheckInvite(String body)</p><p><b>  {</b></p>

97、;<p>  if (body.indexOf("invite") >= 0)</p><p><b>  {</b></p><p>  if (mGameState != GS_INVITING && mGameState != GS_COMFIRE && mGameState != GS_G

98、AME)</p><p><b>  {</b></p><p>  return true;</p><p><b>  }</b></p><p><b>  }</b></p><p>  return false;</p><

99、p><b>  }</b></p><p><b>  /**</b></p><p>  * 創(chuàng)建一個縮小或放大的新圖片</p><p><b>  * </b></p><p>  * @param resourcesID</p><p>  

100、* @param scr_width</p><p>  * @param res_height</p><p><b>  * @return</b></p><p><b>  */</b></p><p>  private Bitmap CreatMatrixBitmap(int resou

101、rcesID, float scr_width, float res_height)</p><p><b>  {</b></p><p>  Bitmap bitMap = null;</p><p>  bitMap = BitmapFactory.decodeResource(sResources, resourcesID);</

102、p><p>  int bitWidth = bitMap.getWidth();</p><p>  int bitHeight = bitMap.getHeight();</p><p>  float scaleWidth = scr_width / (float) bitWidth;</p><p>  float scaleHeight

103、 = res_height / (float) bitHeight;</p><p>  Matrix matrix = new Matrix();</p><p>  matrix.postScale(scaleWidth, scaleHeight);</p><p>  bitMap = Bitmap.createBitmap(bitMap, 0, 0, bit

104、Width, bitHeight, matrix, true);</p><p>  return bitMap;</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 繪制一個字符串</b></p>

105、<p><b>  * </b></p><p>  * @param text</p><p>  * @param x</p><p>  * @param y</p><p>  * @param anchor</p><p>  * @param Canvas</p>

106、<p>  * @param paint</p><p><b>  */</b></p><p>  private void DrawString(int color, String text, int x, int y, int anchor)</p><p><b>  {</b></p>

107、<p>  Rect rect = new Rect();</p><p>  sPaint.getTextBounds(text, 0, text.length(), rect);</p><p>  int w = rect.width();</p><p>  int h = rect.height();</p><p>

108、  int tx = 0;</p><p>  int ty = 0;</p><p>  if ((anchor & ALIGN_RIGHT) != 0)</p><p><b>  {</b></p><p>  tx = x - w;</p><p><b>  } <

109、;/b></p><p>  else if ((anchor & ALIGN_HCENTER) != 0)</p><p><b>  {</b></p><p>  tx = x - (w >> 1);</p><p><b>  }</b></p>&l

110、t;p><b>  else</b></p><p><b>  {</b></p><p><b>  tx = x;</b></p><p><b>  }</b></p><p>  if ((anchor & ALIGN_TOP) !

111、= 0)</p><p><b>  {</b></p><p>  ty = y + h;</p><p><b>  } </b></p><p>  else if ((anchor & ALIGN_VCENTER) != 0)</p><p><b>

112、;  {</b></p><p>  ty = y + (h >> 1);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b&

113、gt;  ty = y;</b></p><p><b>  }</b></p><p>  sPaint.setColor(color);</p><p>  sCanvas.drawText(text, tx, ty, sPaint);</p><p><b>  }</b><

114、/p><p><b>  /**</b></p><p>  * 繪制一張圖片可以選擇圖片的錨點位置</p><p><b>  * </b></p><p>  * @param canvas</p><p>  * @param paint</p><p&

115、gt;  * @param bitmap</p><p>  * @param x</p><p>  * @param y</p><p>  * @param angle</p><p><b>  */</b></p><p>  private void DrawImage(Bitmap

116、bitmap, float x, float y, int anchor)</p><p><b>  {</b></p><p>  int w = bitmap.getWidth();</p><p>  int h = bitmap.getHeight();</p><p>  float tx = 0;</

117、p><p>  float ty = 0;</p><p>  if ((anchor & ALIGN_RIGHT) != 0)</p><p><b>  {</b></p><p>  tx = x - w;</p><p><b>  } </b></p>

118、;<p>  else if ((anchor & ALIGN_HCENTER) != 0)</p><p><b>  {</b></p><p>  tx = x - (w >> 1);</p><p><b>  } </b></p><p><b>

119、;  else</b></p><p><b>  {</b></p><p><b>  tx = x;</b></p><p><b>  }</b></p><p>  if((anchor & ALIGN_TOP) != 0)</p>

120、<p><b>  {</b></p><p>  ty = y + h;</p><p><b>  } </b></p><p>  else if ((anchor & ALIGN_VCENTER) != 0)</p><p><b>  {</b>&l

121、t;/p><p>  ty = y - (h >> 1);</p><p><b>  } </b></p><p>  else if ((anchor & ALIGN_BOTTOM) != 0)</p><p><b>  {</b></p><p>  

122、ty = y - h;</p><p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  ty = y;</b></p><p><b&

123、gt;  }</b></p><p>  sCanvas.drawBitmap(bitmap, tx, ty, sPaint);</p><p><b>  }</b></p><p>  //@Override</p><p>  public void surfaceChanged(SurfaceHold

124、er arg0, int arg1, int arg2, int arg3)</p><p><b>  {</b></p><p>  // TODO Auto-generated method stub</p><p><b>  }</b></p><p>  //@Override</

125、p><p>  public void surfaceCreated(SurfaceHolder arg0)</p><p><b>  {</b></p><p>  new Thread(this).start();</p><p><b>  }</b></p><p> 

126、 //@Override</p><p>  public void surfaceDestroyed(SurfaceHolder arg0)</p><p><b>  {</b></p><p>  mbLoop = false;</p><p><b>  }</b></p>&

127、lt;p>  //@Override</p><p>  public void run()</p><p><b>  {</b></p><p>  while (mbLoop)</p><p><b>  {</b></p><p><b>  try&

128、lt;/b></p><p><b>  {</b></p><p>  Thread.sleep(200);</p><p><b>  } </b></p><p>  catch (Exception e)</p><p><b>  {</b&g

129、t;</p><p><b>  }</b></p><p>  synchronized (mSurfaceHolder)</p><p><b>  {</b></p><p><b>  Draw();</b></p><p><b> 

130、 }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  技術(shù)關(guān)鍵和需要解決的關(guān)鍵問題</p><p>  棋盤上棋子和交線的相對位置</p

131、><p>  交線,方格大小,和棋子大小,棋子間的相對位置之間的距離,棋子和棋盤交點之間的距離。</p><p><b>  快速判斷</b></p><p>  每次點擊棋盤都會有一個棋子出現(xiàn),之后會作出快速判斷,判斷當前棋子和周圍棋子是否有可能組成5個連續(xù)的一串;如果可以,則判斷是黑子可以還是白子可以,然后彈出相應的取勝提示框。之后,再自動清屏

132、,重新開始游戲,并記錄上次輸贏情況。</p><p>  第三部分 游戲成果分析</p><p><b>  效果截圖:</b></p><p><b>  1、游戲分析:</b></p><p>  游戲只實現(xiàn)了基本的游戲規(guī)則,具體游戲規(guī)則細節(jié)不明確,用戶體驗一般,沒有記錄輸贏情況,不能保存游戲進

133、度。</p><p><b>  2、改進的地方:</b></p><p>  完善記錄功能,增加保存功能,設(shè)置推出提示,修改取勝提示,修改棋子和棋盤線的相對位置。</p><p><b>  五 總結(jié)與體會</b></p><p>  本次智能終端課程設(shè)計開發(fā)的一款益智游戲五子棋;選擇開發(fā)題目的原

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論