




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于Android系統(tǒng)的連連看詳細(xì)設(shè)計(jì)說(shuō)明書(shū)1、 引言1.1、編寫(xiě)目的本文檔用于說(shuō)明本游戲開(kāi)發(fā)的詳細(xì)過(guò)程,使委托方了解軟件的內(nèi)部結(jié)構(gòu),從而對(duì)連連看有更深入的了解,便于后期的維護(hù)和修改工作。1.2、背景說(shuō)明:a 待開(kāi)發(fā)軟件系統(tǒng)的名稱(chēng):基于Android系統(tǒng)的連連看游戲設(shè)計(jì)b 本項(xiàng)目的任務(wù)提出者:學(xué)校開(kāi)發(fā)者:游戲開(kāi)發(fā)小組用戶:喜歡玩游戲的人項(xiàng)目開(kāi)發(fā)環(huán)境:eclipse、Android系統(tǒng)平臺(tái)1.3、定義Android 連連看 詳細(xì)設(shè)計(jì)1.4、參考資料 Android開(kāi)發(fā)指南2、程序系統(tǒng)的結(jié)構(gòu) 連連看游戲結(jié)構(gòu)如下:連連看消息響應(yīng)設(shè)計(jì)算法設(shè)計(jì)界面設(shè)計(jì)菜單設(shè)計(jì)繪圖響應(yīng)時(shí)間響應(yīng)畫(huà)線設(shè)計(jì)消除算法設(shè)計(jì)鼠標(biāo)響應(yīng)
2、進(jìn)度條設(shè)計(jì)框架設(shè)計(jì)結(jié)束游戲規(guī)則說(shuō)明游戲設(shè)置開(kāi)始游戲主要有四個(gè)大類(lèi):class GameView /游戲視類(lèi),處理游戲中的情況,包括界面生成,算法,一部分消息響應(yīng)。class GameActivity /用于處理游戲中的消息提示class StartActivity /用于菜單的設(shè)計(jì)Class SetActivity /用于菜單中游戲難度的設(shè)定3、菜單設(shè)計(jì)說(shuō)明 3.1、程序描述 主要功能:用于為玩家提供操作提示,便于玩家了解游戲的規(guī)則。 可擴(kuò)展性:能夠適應(yīng)應(yīng)用要求的變化和修改,具有靈活的可擴(kuò)充性。3.2、功能主要有開(kāi)始游戲、游戲設(shè)置、游戲規(guī)則、退出游戲等幾個(gè)選項(xiàng)游戲設(shè)置的菜單3.3、性能 當(dāng)用戶
3、選擇菜單時(shí)能夠快速反應(yīng),以滿足用戶的要求。3.4、輸人項(xiàng)用戶點(diǎn)擊按鈕3.5、輸出項(xiàng) 五個(gè)菜單選項(xiàng)3.6、算法 /定義菜單類(lèi),接口為OnClickListener,用于接收用戶的單擊消息。public class StartActivity extends Activity implements View.OnClickListener/設(shè)計(jì)5個(gè)按鈕用于接收按鈕消息: private Button btnStart; private Button btnSet; private Button btnRole; private Button btnAbout; private Button btn
4、Exit;/在OnCreate函數(shù)中將它們初始化:/獲取按鈕btnStart = (Button)findViewById(R.id.btnStart);btnSet = (Button)findViewById(R.id.btnSet);btnRole = (Button)findViewById(R.id.btnRole);btnAbout = (Button)findViewById(R.id.btnAbout);btnExit = (Button)findViewById(R.id.btnExit);/注冊(cè)點(diǎn)擊事件btnStart.setOnClickListener(this);bt
5、nSet.setOnClickListener(this);btnRole.setOnClickListener(this);btnAbout.setOnClickListener(this);btnExit.setOnClickListener(this); 在OnClick函數(shù)中對(duì)響應(yīng)進(jìn)行處理:setContentView(new GameView(this); /進(jìn)入游戲,游戲在GameView類(lèi)中進(jìn)行了封裝/說(shuō)明游戲規(guī)則new AlertDialog.Builder(this).setMessage("1. 將相同的兩張圖片用三根以內(nèi)的直線連在一起就可以消除n" +
6、 "2. 每消除一次圖片,都會(huì)使可用時(shí)間增加n" + "3. 每隔一段時(shí)間,當(dāng)前的界面中的圖片會(huì)進(jìn)行重排列n" + "4. 在規(guī)定的時(shí)間里,當(dāng)所有的圖片都消除時(shí),即為勝利n" + "5. 規(guī)定的時(shí)間內(nèi)有圖片未消去,即為失敗n") .setPositiveButton("確定", null).show();/結(jié)束游戲this.finish();/進(jìn)行游戲設(shè)置,設(shè)置游戲的難度,調(diào)用了SetActivity類(lèi)intent.setClass(this, SetActivity.class); 3.7、接
7、口API函數(shù)3.8、限制條件無(wú)明顯限制條件4、界面設(shè)計(jì)說(shuō)明4.1、程序描述 主要功能:用于為玩家提供可視化的游戲界面,增加了游戲的可玩性。 可擴(kuò)展性:能夠適應(yīng)應(yīng)用要求的變化和修改,具有靈活的可擴(kuò)充性。4.2、功能生成游戲界面,生成進(jìn)度條。如下圖:4.3、性能 能夠快速的隨機(jī)生成符合用戶需要的界面4.4、輸人項(xiàng)無(wú)輸入4.5、輸出項(xiàng) 游戲界面4.6、算法 /定義游戲視圖類(lèi)public class GameView extends View/存儲(chǔ)素材圖片public int imageType /保存所有小格子中的圖片public int grid = new introwcol;/初始化加載圖片的
8、類(lèi)型public void initType() /總共要加載的圖片int size = (row-2)*(col-2); /64/每類(lèi)圖片加載的次數(shù)(張數(shù)) 要為偶數(shù)int count=size/imageType.length; /imageType.length=16 即,16種圖片for(int i=0; i<imageType.length; i+)for(int j=0; j<count;j+)type.add(imageTypei);/初始化網(wǎng)格的設(shè)計(jì)private void initGrid() Random r = new Random();for(int i=0
9、; i<row;i+)for(int j=0; j<col;j+)if(i=0 | i=row-1 | j=0 |j=col-1)gridij=0; /四周不設(shè)置圖片elseint index=r.nextInt(type.size();gridij=type.get(index);type.remove(index);/設(shè)置位圖的大小private void ititmBitmap(Context context) int typeLength=imageType.length;image=new BitmaptypeLength;/重新繪制for(int i=0;i<ty
10、peLength;i+)/創(chuàng)建一個(gè)Bitmap的對(duì)象Bitmap bitmap=Bitmap.createBitmap(int)width, (int)height, Bitmap.Config.ARGB_8888);/對(duì)Bitmap進(jìn)行繪制Canvas canvas = new Canvas(bitmap);Drawable dwr = context.getResources().getDrawable(imageTypei);dwr.setBounds(1, 1, 30, 30);dwr.draw(canvas);imagei=bitmap;/在OnDraw函數(shù)中畫(huà)出框格,每次進(jìn)行重繪操
11、作/設(shè)置背景顏色:Paint backGround = new Paint();backGround.setColor(Color.WHITE);/畫(huà)一個(gè)矩形canvas.drawRect(0, 0, getWidth(), getHeight(), backGround);/設(shè)置網(wǎng)格線條的顏色Paint higth= new Paint();higth.setColor(Color.BLUE);/畫(huà)網(wǎng)格for(int i=0;i<10;i+)/畫(huà)橫線、縱線canvas.drawLine(0, height*i, getWidth(), height*i, higth);canvas.d
12、rawLine(width*i, 0, width*i, getHeight(), higth);/畫(huà)image圖片boolean test=true; /檢測(cè)圖片是否肖完for(int i=0;i<row;i+)for(int j=0;j<col;j+)if(gridij!=0)canvas.drawBitmap(imageArrays.binarySearch(imageType, gridij), i*width, j*height, null);test=false; /還有圖片,說(shuō)明未贏4.7、接口API函數(shù)4.8、限制條件無(wú)明顯限制條件5、主要算法設(shè)計(jì)說(shuō)明5.1、程序描
13、述 主要功能:完成圖片的消除功能,消除時(shí)畫(huà)線功能,重新排列功能。 可擴(kuò)展性:能夠適應(yīng)應(yīng)用要求的變化和修改,具有靈活的可擴(kuò)充性。5.2、功能完成連連看游戲的核心算法。5.3、性能 能夠快速判斷兩圖片是否能消除,并能在消除時(shí)進(jìn)行畫(huà)線操作。隔一段時(shí)間,能夠打亂順序進(jìn)行重新排列。5.4、輸人項(xiàng)用戶點(diǎn)擊、時(shí)間條5.5、輸出項(xiàng) 消除匹配的圖片5.6、算法 5.6.1、圖片的連接判斷對(duì)于選中的兩個(gè)方塊的銷(xiāo)毀,它們必須符合下面3個(gè)條件:1、選中的兩個(gè)方塊圖案相同。2、選中的兩個(gè)方塊之間沒(méi)有障礙物阻礙的情況下,可以用若干個(gè)垂直的直線線段連接起來(lái)。3、這些將它們連接起來(lái)的直線線段的折點(diǎn)不超過(guò)兩個(gè)(連接線由x軸和y
14、軸的平行線組成)。我們進(jìn)行分情況分析:無(wú)拐點(diǎn)、一個(gè)拐點(diǎn)、兩個(gè)拐點(diǎn),設(shè)置flag進(jìn)行標(biāo)記這三種情況。以下是相關(guān)代碼:/獲得一個(gè)點(diǎn)可向上下左右走的范圍 public int extend(Point a) int i; int aLoc = new int4; /向上 for(i=a.y-1;i>=0 && grida.xi=0;i-) aLoc0=i+1; /向下 for(i=a.y+1;i<row && grida.xi=0;i+) aLoc1=i-1; /向左 for(i=a.x-1;i>=0 && gridia.y=0;i-
15、) aLoc2=i+1; /向右 for(i=a.x+1;i<col && gridia.y=0;i+) aLoc3=i-1; return aLoc; /用于判斷水平方向是否連通private boolean horizon(Point a, Point b) if(a.x = b.x && a.y = b.y) /如果點(diǎn)擊的是同一個(gè)圖案,直接返回false return false; int x_start = a.x <= b.x ? a.x : b.x; int x_end = a.x <= b.x ? b.x : a.x; for(i
16、nt x = x_start + 1; x < x_end; x+)/只要一個(gè)不是-1,直接返回false if(gridxa.y != 0) return false; return true; /用于判斷垂直方向是否連通private boolean vertical(Point a, Point b) if(a.x = b.x && a.y = b.y) return false; int y_start = a.y <= b.y ? a.y : b.y; int y_end = a.y <= b.y ? b.y : a.y; for(int y = y
17、_start + 1; y < y_end; y+) if(grida.xy != 0) return false; return true; /只有一個(gè)拐點(diǎn)的情況private boolean oneCorner(Point a, Point b) Point c = new Point(a.x, b.y); Point d = new Point(b.x, a.y); if(gridc.xc.y = 0) boolean method1 = horizon(b, c) && vertical(a, c); if(method1) corner=new Point(c.
18、x, c.y); return method1; if(gridd.xd.y = 0) boolean method2 = horizon(a, d) && vertical(b, d); if(method2) corner=new Point(d.x, d.y); return method2; else return false; /有兩個(gè)拐點(diǎn)的情況private boolean twoCorner(Point a, Point b) ll = scan(a, b); if(ll.isEmpty() return false; for(int index = 0; ind
19、ex < ll.size(); index+) Line line = (Line)ll.get(index); if(line.direct = 1) if(horizon(a, line.a) && horizon(b, line.b) corner=new Point(line.a); corner2=new Point(line.b); return true; else if(vertical(a, line.a) && vertical(b, line.b) corner=new Point(line.a); corner2=new Point
20、(line.b); return true; return false; /上面設(shè)計(jì)了一個(gè)類(lèi)來(lái)判斷兩個(gè)拐點(diǎn)的情況/類(lèi)的定義,構(gòu)造函數(shù)如下class Line public Point a; public Point b; public int direct; public Line() a = new Point(); b = new Point(); public Line(int direct, Point a, Point b) this.direct = direct; this.a = a; this.b = b; /對(duì)兩個(gè)拐點(diǎn)的情況進(jìn)行掃描,將掃描線放入Line類(lèi)型的數(shù)組中priv
21、ate LinkedList scan(Point a, Point b) ll = new LinkedList<Line>(); /Point c = new Point(a.x, b.y); /Point d = new Point(b.x, a.y); for(int y = a.y; y >= 0; y-) if(grida.xy = 0 && gridb.xy = 0 && horizon(new Point(a.x, y), new Point(b.x, y) ll.add(new Line(0, new Point(a.x, y
22、), new Point(b.x, y); for(int y = a.y; y < row; y+) if(grida.xy = 0 && gridb.xy = 0 && horizon(new Point(a.x, y), new Point(b.x, y) ll.add(new Line(0, new Point(a.x, y), new Point(b.x, y); for(int x = a.x; x >= 0; x-) if(gridxa.y = 0 && gridxb.y = 0 && vertical(
23、new Point(x, a.y), new Point(x, b.y) ll.add(new Line(1, new Point(x, a.y), new Point(x, b.y); for(int x = a.x; x < col; x+) if(gridxa.y = 0 && gridxb.y = 0 && vertical(new Point(x, a.y), new Point(x, b.y) ll.add(new Line(1, new Point(x, a.y), new Point(x, b.y); return ll; /最后做總體判斷
24、,flag表示拐點(diǎn)的數(shù)目public boolean checkLink(Point a,Point b) if(grida.xa.y != gridb.xb.y)/如果圖案不同,直接為false return false;if(a.y = b.y && horizon(a, b)flag=0; return true;if(a.x = b.x && vertical(a, b)flag=0; return true;if(oneCorner(a, b) flag=1;return true;if(twoCorner(a, b)flag=2;return tru
25、e;elsereturn false; 5.6.2、圖片消除的畫(huà)線根據(jù)flag的值分情況分析:Flag=0時(shí),從起點(diǎn)到終點(diǎn)畫(huà)一條線即可Flag=1時(shí),從起點(diǎn)到拐點(diǎn),從拐點(diǎn)到終點(diǎn)畫(huà)兩條線Flag=2時(shí),從起點(diǎn)到拐點(diǎn),從拐點(diǎn)到拐點(diǎn),從拐點(diǎn)到終點(diǎn)畫(huà)三條線。在做連接判斷時(shí)就將路徑保存下來(lái)。/畫(huà)線操作寫(xiě)在OnDraw函數(shù)中,corner、corner2保存拐點(diǎn)坐標(biāo)/每次都sleep(50)后重繪switch(flag)case 0:canvas.drawLine(width*(former.x + 0.5f), height*(former.y+0.5f),width*(current.x+ 0.5f)
26、, height*(current.y + 0.5f), p);flag=-1;SystemClock.sleep(50);invalidate();break;case 1:canvas.drawLine(width*(former.x + 0.5f), height*(former.y+0.5f),width*(corner.x+ 0.5f), height*(corner.y + 0.5f), p);canvas.drawLine(width*(corner.x + 0.5f), height*(corner.y+0.5f),width*(current.x+ 0.5f), height*(current.y + 0.5f), p);flag=-1;SystemClock.sleep(50);invalidate();break;case 2:canvas.drawLine(width*(former.x + 0.5f), height*(former.y+0.5f),width*(corner.x + 0.5f), height*(corner.y + 0.5f), p);canvas.drawLine
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年榆林市公共交通總公司招聘(57人)筆試參考題庫(kù)附帶答案詳解
- 紡織品設(shè)計(jì)師證書(shū)考試評(píng)估體系試題及答案
- 幼兒園聘用幼兒教師臨時(shí)用工勞動(dòng)合同書(shū)
- 家電營(yíng)銷(xiāo)策劃合同協(xié)議書(shū)
- 中小學(xué)送餐合同協(xié)議書(shū)
- 合股協(xié)議書(shū)合同
- 個(gè)人保安員合同協(xié)議書(shū)
- 分錢(qián)合同協(xié)議書(shū)
- 合同協(xié)議書(shū)合同模板
- 合同協(xié)議書(shū)定金
- 計(jì)算機(jī)三級(jí)《Linux應(yīng)用與開(kāi)發(fā)技術(shù)》考試題庫(kù)大全(含真題、典型題等)
- 環(huán)境因素識(shí)別評(píng)價(jià)表
- 家長(zhǎng)會(huì)課件:中考前百日誓師家長(zhǎng)會(huì)課件
- 固腎生發(fā)丸的質(zhì)量控制和標(biāo)準(zhǔn)化
- 軍事博物館調(diào)研報(bào)告
- 山東省濟(jì)南市槐蔭區(qū)2023-2024學(xué)年小學(xué)六年級(jí)語(yǔ)文畢業(yè)檢測(cè)指導(dǎo)卷含答案
- 昆蟲(chóng)脈動(dòng)智慧樹(shù)知到期末考試答案2024年
- 農(nóng)產(chǎn)品加工工藝培訓(xùn)PPT創(chuàng)新農(nóng)產(chǎn)品加工工藝與技術(shù)
- 精神病患者藏藥的護(hù)理措施
- 敬老院食品安全培訓(xùn)
- 大數(shù)據(jù)背景下企業(yè)財(cái)務(wù)風(fēng)險(xiǎn)分析與防范-以比亞迪公司為例
評(píng)論
0/150
提交評(píng)論