版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 標(biāo)題:智能終端課程設(shè)計(jì)</p><p> 2014年1月13日</p><p><b> 摘 要</b></p><p> 本次課程設(shè)計(jì)主要內(nèi)容是雙人五子棋游戲的開(kāi)發(fā)。主要內(nèi)容是界面布局、判斷輸贏,記錄輸贏次數(shù)。開(kāi)發(fā)想法來(lái)源,純屬娛樂(lè)。</p><p> 關(guān)鍵詞:益智游戲 Androi
2、d</p><p><b> 第一部分 分析游戲</b></p><p><b> 游戲功能簡(jiǎn)述</b></p><p><b> 界面布局</b></p><p> 按照象棋的表格圖案繪制布局,在畫(huà)布上設(shè)計(jì)表格,并標(biāo)記紅黑方位置。</p><p&g
3、t;<b> 棋子連線分析</b></p><p> 標(biāo)明五子棋的顏色,記錄分析棋子的位置,判斷是否取勝。</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ù)難點(diǎn)分析</p><p><b> 1、技術(shù)難點(diǎn)</b></p><p> 分析棋子連線是否可以取勝。</p><p><b&g
5、t; 2、作為難點(diǎn)的原因</b></p><p> 棋子之間有三種連線情況,橫向連續(xù)連接、縱向連續(xù)連接、對(duì)角線連續(xù)連接。</p><p><b> 3、準(zhǔn)備突破方法</b></p><p> 將同類(lèi)棋子之間,有位置關(guān)系的棋子進(jìn)行進(jìn)棧處理,如果在棋盤(pán)范圍內(nèi),有連續(xù)的五個(gè)棋子則為取勝。</p><p>
6、 第二部分 設(shè)計(jì)與開(kāi)發(fā)</p><p><b> 前期準(zhǔn)備工作</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> 導(dǎo)入sdk文件</b></p><p><b> 游戲預(yù)期效果</b></p><p&
9、gt;<b> UI設(shè)計(jì)</b></p><p> 背景畫(huà)布選擇恰當(dāng),布局清晰,結(jié)構(gòu)清晰,使用簡(jiǎn)單。</p><p><b> 棋盤(pán)設(shè)計(jì)</b></p><p> 方格大小,連線之間的距離適中,確保棋子在連線上,避免棋子在棋盤(pán)上混亂擺放。</p><p><b> 提示框<
10、/b></p><p> 出現(xiàn)下棋位置不在棋盤(pán)內(nèi)或者不在合法范圍內(nèi)是出現(xiàn)錯(cuò)誤提示</p><p> 當(dāng)由一方取得勝利時(shí),出現(xiàn)提示框。</p><p><b> 開(kāi)發(fā)過(guò)程</b></p><p><b> 1、布局設(shè)計(jì)</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> // 隱藏標(biāo)題欄</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)實(shí)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è)計(jì)</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對(duì)象</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) + "勝利 點(diǎn)擊繼續(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)建一個(gè)縮小或放大的新圖片</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> * 繪制一個(gè)字符串</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> * 繪制一張圖片可以選擇圖片的錨點(diǎn)位置</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)鍵問(wèn)題</p><p> 棋盤(pán)上棋子和交線的相對(duì)位置</p
131、><p> 交線,方格大小,和棋子大小,棋子間的相對(duì)位置之間的距離,棋子和棋盤(pán)交點(diǎn)之間的距離。</p><p><b> 快速判斷</b></p><p> 每次點(diǎn)擊棋盤(pán)都會(huì)有一個(gè)棋子出現(xiàn),之后會(huì)作出快速判斷,判斷當(dāng)前棋子和周?chē)遄邮欠裼锌赡芙M成5個(gè)連續(xù)的一串;如果可以,則判斷是黑子可以還是白子可以,然后彈出相應(yīng)的取勝提示框。之后,再自動(dòng)清屏
132、,重新開(kāi)始游戲,并記錄上次輸贏情況。</p><p> 第三部分 游戲成果分析</p><p><b> 效果截圖:</b></p><p><b> 1、游戲分析:</b></p><p> 游戲只實(shí)現(xiàn)了基本的游戲規(guī)則,具體游戲規(guī)則細(xì)節(jié)不明確,用戶(hù)體驗(yàn)一般,沒(méi)有記錄輸贏情況,不能保存游戲進(jìn)
133、度。</p><p><b> 2、改進(jìn)的地方:</b></p><p> 完善記錄功能,增加保存功能,設(shè)置推出提示,修改取勝提示,修改棋子和棋盤(pán)線的相對(duì)位置。</p><p><b> 五 總結(jié)與體會(huì)</b></p><p> 本次智能終端課程設(shè)計(jì)開(kāi)發(fā)的一款益智游戲五子棋;選擇開(kāi)發(fā)題目的原
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java ee軟件開(kāi)發(fā)課程設(shè)計(jì)報(bào)告
- android課程設(shè)計(jì)報(bào)告--android智能手機(jī)軟件開(kāi)發(fā)
- 《軟件開(kāi)發(fā)》課程設(shè)計(jì)報(bào)告-屏幕鎖定程序
- 軟件開(kāi)發(fā)工具課程設(shè)計(jì)報(bào)告---軟件開(kāi)發(fā)的現(xiàn)狀及發(fā)展
- 智能信息終端的軟件開(kāi)發(fā).pdf
- 應(yīng)用軟件開(kāi)發(fā)課程設(shè)計(jì)
- 基于PSTN的智能信息終端軟件開(kāi)發(fā).pdf
- 課程設(shè)計(jì)----畫(huà)圖軟件開(kāi)發(fā)制作文檔
- 軟件開(kāi)發(fā)課程設(shè)計(jì)--圖書(shū)管理系統(tǒng)設(shè)計(jì)
- java課程設(shè)計(jì)---畫(huà)圖板軟件開(kāi)發(fā)和設(shè)計(jì)
- 手持設(shè)備軟件開(kāi)發(fā)課程
- 微機(jī)原理課程設(shè)計(jì)---選擇多功能程序設(shè)計(jì)——軟件開(kāi)發(fā)方向
- 《嵌入式軟件開(kāi)發(fā)》課程設(shè)計(jì)報(bào)告-基于arm11開(kāi)發(fā)平臺(tái)小球碰撞設(shè)計(jì)與實(shí)現(xiàn)
- 《網(wǎng)絡(luò)信息安全》課程設(shè)計(jì)---無(wú)密鑰的置換加密軟件開(kāi)發(fā)
- 移動(dòng)平臺(tái)游戲軟件開(kāi)發(fā)課程設(shè)計(jì)說(shuō)明書(shū)
- 短波電臺(tái)數(shù)字終端軟件開(kāi)發(fā).pdf
- 移動(dòng)智能網(wǎng)智能外設(shè)軟件開(kāi)發(fā).pdf
- 軟件開(kāi)發(fā)集成環(huán)境課程設(shè)計(jì)--小qq聊天工具
- 軟件課程設(shè)計(jì)報(bào)告
- 軟件課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論