版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于Android系統(tǒng)的連連看</p><p><b> 引言</b></p><p><b> 編寫目的</b></p><p> 本文檔用于說明手機(jī)連連看游戲開發(fā)的詳細(xì)過程,使了解軟件的內(nèi)部結(jié)構(gòu),從而對連連看有更深入的了解,便于后期的維護(hù)和更改工作。</p><p>
2、<b> 背景說明</b></p><p> 待開發(fā)軟件系統(tǒng)的名稱:基于Android系統(tǒng)的連連看游戲設(shè)計</p><p> 本項(xiàng)目提出者:長春大學(xué)軟件學(xué)院</p><p><b> 開發(fā)者:劉博群</b></p><p><b> 用戶:暫無</b></p&g
3、t;<p> 項(xiàng)目開發(fā)環(huán)境:eclipse、Android系統(tǒng)平臺</p><p><b> 定義</b></p><p> Android連連看詳細(xì)設(shè)計</p><p><b> 參加資料</b></p><p> 《Android開發(fā)指南》</p><
4、p><b> 程序系統(tǒng)的結(jié)構(gòu)</b></p><p> 連連看游戲結(jié)構(gòu)如下:</p><p><b> 主要有四大類:</b></p><p> Class GameView ///游戲視類,處理游戲中的情況,包括界面生成,算法,一部分消息響應(yīng)</p><p> Class
5、GameActivity ///用于處理游戲中的消息提示</p><p> Class StartActivity ///用于菜單的設(shè)計</p><p> Class SetActivity ///用于菜單中游戲難度的設(shè)定</p><p><b> 菜單設(shè)計說明</b></p><p> 3.1
6、、 程序描述</p><p> 主要功能:用于為玩家提供操作提示,便于玩家了解游戲的規(guī)則</p><p> 可擴(kuò)展性:能夠適應(yīng)應(yīng)用要求的變化和修改,遇有靈活的可擴(kuò)展性</p><p><b> 3.2、 功能</b></p><p> 主要有開始游戲,游戲設(shè)置,游戲規(guī)則,關(guān)于游戲,退出游戲等幾個選項(xiàng)</
7、p><p><b> 性能</b></p><p> 當(dāng)用戶選擇菜單時,系統(tǒng)能夠快速反應(yīng),以滿足用戶的需求</p><p><b> 輸入項(xiàng)</b></p><p><b> 用戶點(diǎn)擊按鈕</b></p><p><b> 輸出項(xiàng)<
8、/b></p><p><b> 五個菜單選項(xiàng)</b></p><p><b> 算法</b></p><p> //定義菜單類,接口為OnClickListener,用于接收用戶的單擊消息</p><p> Public class StartActivity extends Act
9、ivity implements View.OnClickListener</p><p> //設(shè)計5個按鈕用于接收按鈕消息</p><p> private Button btnStart;</p><p> private Button btnSet;</p><p> private Button btnRole;</p
10、><p> private Button btnAbout;</p><p> private Button btnExit;</p><p> //在OnCreate函數(shù)中將它們初始化:</p><p><b> //獲取按鈕</b></p><p> btnStart=(Button)f
11、indViewById(R.id. btnStart);</p><p> btnSet =(Button)findViewById(R.id. btnSet);</p><p> btnRole =(Button)findViewById(R.id. btnRole);</p><p> btnAbout =(Button)findViewById(R.id
12、. btnAbout);</p><p> btnExit =(Button)findViewById(R.id. btnExit);</p><p><b> //注冊點(diǎn)擊事件</b></p><p> btnStart.setOnClickListener(this);</p><p> btnSet.set
13、OnClickListener(this);</p><p> btnRole.setOnClickListener(this);</p><p> btnAbout.setOnClickListener(this);</p><p> btnExit.setOnClickListener(this);</p><p> 在OnCli
14、ck函數(shù)中對響應(yīng)進(jìn)行處理:</p><p> setContentView(new Game View(this));//進(jìn)入游戲,游戲在Game View 類中進(jìn)行了封裝</p><p><b> //說明游戲規(guī)則</b></p><p> New AlertDialog.Builder(this).setMessage(“1.將相同的
15、兩張圖片用三根以內(nèi)的直線連在 一起就可以消除\n" + "2. 每消除一次圖片,都會使可用時間增加\n" + "3. 每隔一段時 間,當(dāng)前的界面中的圖片會進(jìn)行重排列\(zhòng)n" + "4. 在規(guī)定的時間里, 當(dāng)所有的圖片都消除時, 即為勝利\n" + "5. 規(guī)定的時間內(nèi)有圖片未消去,即為失敗\n") .setPositiveButton("確定", null).show(); //結(jié)束游戲 結(jié)束游戲 this.finis
16、h(); //進(jìn)行游戲設(shè)置,設(shè)置游戲的難度,調(diào)用了 SetActivity 類 進(jìn)行游戲設(shè)置, 進(jìn)行游戲設(shè)置 設(shè)置游戲的難度, intent.setClass(this, SetActivity.class);</p><p><b> 接口</b></p><p><b> API函數(shù)</b></p><p><
17、;b> 限制條件</b></p><p><b> 無明顯限制條件</b></p><p><b> 界面設(shè)計說明</b></p><p><b> 4.1、程序描述</b></p><p> 主要功能:用于為玩家提供可視化的游戲界面,增加了游戲的可
18、玩性</p><p> 可擴(kuò)展性:能夠適應(yīng)應(yīng)用要求的變化和修改,具有靈活的可擴(kuò)充性</p><p><b> 4.2、功能</b></p><p> 生成游戲界面,生成進(jìn)度條。如下圖:</p><p><b> 4.3、 性能</b></p><p> 能夠快速的
19、隨機(jī)生成符合用戶需求的界面</p><p><b> 4.4、 輸入項(xiàng)</b></p><p><b> 無輸入</b></p><p><b> 4.5、 輸出項(xiàng)</b></p><p><b> 游戲界面</b></p>&l
20、t;p><b> 4.6、 算法</b></p><p><b> //定義游戲視圖類</b></p><p> public class GameView extends View </p><p><b> //存儲素材圖片</b></p><p> pu
21、blic int[] imageType</p><p> //保存所有小格子中的圖片</p><p> public int[][] grid = new int[row][col]; </p><p> //初始化加載圖片的類型</p><p> public void initType() {</p><p&
22、gt; //總共要加載的圖片</p><p> int size = (row-2)*(col-2); //64</p><p> //每類圖片加載的次數(shù)(張數(shù)) 要為偶數(shù)</p><p> int count=size/imageType.length; //imageType.length=16</p><p> for(int
23、 i=0; i<imageType.length; i++){</p><p> for(int j=0; j<count;j++){</p><p> type.add(imageType[i]); </p><p><b> }</b></p><p><b> }</b>&
24、lt;/p><p><b> }</b></p><p> //初始化網(wǎng)格的設(shè)計</p><p> private void initGrid() { </p><p> Random r = new Random();</p><p> for(int i=0; i<row;i++)
25、{</p><p> for(int j=0; j<col;j++){</p><p> if(i==0 || i==row-1 || j==0 ||j==col-1){</p><p> grid[i][j]=0; //四周不設(shè)置圖片</p><p><b> }else{ </b></p>
26、<p> Int index=r.nextInt(type.size());</p><p> grid[i][j]=type.get(index);</p><p> type.remove(index);</p><p><b> }</b></p><p><b> }</b&
27、gt;</p><p><b> }</b></p><p><b> }</b></p><p><b> //設(shè)置位圖的大小</b></p><p> private void ititmBitmap(Context context) {</p>&l
28、t;p> int typeLength=imageType.length;</p><p> image=new Bitmap[typeLength];</p><p><b> //重新繪制</b></p><p> for(int i=0;i<typeLength;i++){ //創(chuàng)建一個 Bitmap 的對象</
29、p><p> Bitmap bitmap=Bitmap.createBitmap((int)width, (int)height, Bitmap.Config.ARGB_8888);</p><p> //對 Bitmap 進(jìn)行繪制 </p><p> Canvas canvas = new Canvas(bitmap);</p><p>
30、 Drawable dwr = context.getResources().getDrawable(imageType[i]);</p><p> dwr.setBounds(1, 1, 30, 30);</p><p> dwr.draw(canvas); </p><p> image[i]=bitmap;</p><p>&l
31、t;b> }</b></p><p><b> }</b></p><p> //在 OnDraw 函數(shù)中畫出框格,每次進(jìn)行重繪操作</p><p><b> //設(shè)置背景顏色:</b></p><p> Paint backGround = new Paint(); &
32、lt;/p><p> backGround.setColor(Color.WHITE);</p><p><b> //畫一個矩形</b></p><p> canvas.drawRect(0, 0, getWidth(), getHeight(), backGround);</p><p> //設(shè)置網(wǎng)格線條的顏色
33、</p><p> Paint higth= new Paint();</p><p> higth.setColor(Color.BLUE);</p><p><b> //畫網(wǎng)格</b></p><p> for(int i=0;i<10;i++){</p><p><b&
34、gt; //畫橫線、縱線</b></p><p> canvas.drawLine(0, height*i, getWidth(), height*i, higth);</p><p> canvas.drawLine(width*i, 0, width*i, getHeight(), higth);</p><p><b> }<
35、;/b></p><p> //畫 image 圖片</p><p> boolean test=true; //檢測圖片是否消除完</p><p> for(int i=0;i<row;i++){</p><p> for(int j=0;j<col;j++){</p><p> if(g
36、rid[i][j]!=0){</p><p> canvas.drawBitmap(image[Arrays.binarySearch(imageType, grid[i][j])],</p><p> i*width, j*height, null);</p><p> test=false; ////還有圖片,說明未贏</p><p&g
37、t;<b> }</b></p><p><b> }</b></p><p><b> } </b></p><p><b> 4.7、 接口</b></p><p><b> API函數(shù)</b></p>
38、<p><b> 限制條件</b></p><p><b> 無明顯限制條件</b></p><p><b> 主要算法設(shè)計說明</b></p><p><b> 5.1、程序描述</b></p><p> 主要功能:完成圖片的消除功能
39、,消除時畫線功能,重新排列功能</p><p> 可擴(kuò)展性:能夠適應(yīng)應(yīng)用要求的變化和修改,具有靈活的可擴(kuò)充性</p><p><b> 5.2、功能</b></p><p> 完成連連看游戲的核心算法</p><p><b> 5.3、性能</b></p><p>
40、 能夠快速判斷兩個圖片是否能夠消除,并能在消除時進(jìn)行畫線操作,隔一段時間,能夠打亂順序進(jìn)行重新排列</p><p><b> 5.4、輸入項(xiàng)</b></p><p><b> 用戶點(diǎn)擊,時間條</b></p><p><b> 5.5、輸出項(xiàng)</b></p><p>&l
41、t;b> 消除匹配圖片</b></p><p><b> 5.6、算法</b></p><p> 5.6.1、圖片的連接判斷</p><p> 對于選中的兩個方塊的銷毀,它們必須符合下面 3 個條件:</p><p> 1、選中的兩個方塊圖案相同</p><p> 2
42、、選中的兩個方塊之間沒有障礙物阻礙的情況下,可以用若干個垂直的直線線段連接起來</p><p> 3、這些將它們連接起來的直線線段的折點(diǎn)不超過兩個(連接線由 x 軸和 y 軸的平 行線組成)</p><p> 我們進(jìn)行分情況分析:</p><p> 無拐點(diǎn)、一個拐點(diǎn)、兩個拐點(diǎn),設(shè)置 flag 進(jìn)行標(biāo)記這三種情況</p><p> 以下
43、是相關(guān)代碼: //獲得一個點(diǎn)可向上下左右走的范圍</p><p> public int[] extend(Point a){</p><p><b> int i;</b></p><p> int[] aLoc = new int[4]; </p><p><b> //向上</b>&l
44、t;/p><p> for(i=a.y-1;i>=0 && grid[a.x][i]==0;i--){</p><p><b> }</b></p><p> aLoc[0]=i+1; </p><p><b> //向下</b></p><p>
45、 for(i=a.y+1;i<row && grid[a.x][i]==0;i++){</p><p><b> }</b></p><p> aLoc[1]=i-1; </p><p><b> //向左</b></p><p> for(i=a.x-1;i>=
46、0 && grid[i][a.y]==0;i--){</p><p><b> }</b></p><p> aLoc[2]=i+1; </p><p><b> //向右</b></p><p> for(i=a.x+1;i<col && grid[i
47、][a.y]==0;i++){</p><p><b> }</b></p><p> aLoc[3]=i-1;</p><p> return aLoc; }</p><p> //用于判斷水平方向是否連通</p><p> private boolean horizon(Point
48、a, Point b){</p><p> if(a.x == b.x && a.y == b.y) //如果點(diǎn)擊的是同一個圖案,直接返回 false</p><p> return false;</p><p> int x_start = a.x <= b.x ? a.x : b.x;</p><p> in
49、t x_end = a.x <= b.x ? b.x : a.x;</p><p> for(int x = x_start + 1; x < x_end; x++)//只要一個不是-1,直接返回 false</p><p> if(grid[x][a.y] != 0){</p><p> return false;</p><
50、p><b> }</b></p><p> return true;</p><p><b> }</b></p><p> //用于判斷垂直方向是否連通</p><p> private boolean vertical(Point a, Point b){</p>
51、<p> if(a.x == b.x && a.y == b.y)</p><p> return false;</p><p> int y_start = a.y <= b.y ? a.y : b.y;</p><p> int y_end = a.y <= b.y ? b.y : a.y;</p>&
52、lt;p> for(int y = y_start + 1; y < y_end; y++)</p><p> if(grid[a.x][y] != 0) </p><p> return false;</p><p> return true;</p><p><b> }</b></p&g
53、t;<p> //只有一個拐點(diǎn)的情況</p><p> private boolean oneCorner(Point a, Point b){</p><p> Point c = new Point(a.x, b.y);</p><p> Point d = new Point(b.x, a.y);</p><p>
54、 if(grid[c.x][c.y] == 0){</p><p> boolean method1 = horizon(b, c) && vertical(a, c);</p><p> if(method1){ </p><p> corner=new Point(c.x, c.y);</p><p><b&
55、gt; }</b></p><p> return method1;</p><p><b> }</b></p><p> if(grid[d.x][d.y] == 0){</p><p> boolean method2 = horizon(a, d) && vertical(b
56、, d);</p><p> if(method2){</p><p> corner=new Point(d.x, d.y);</p><p><b> }</b></p><p> return method2;</p><p><b> }else{</b>&
57、lt;/p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p> //有兩個拐點(diǎn)的情況</p><p> private boolean twoCorner(Point a, Point b)
58、</p><p><b> {</b></p><p> ll = scan(a, b);</p><p> if(ll.isEmpty())</p><p> return false;</p><p> for(int index = 0; index < ll.size();
59、 index++){</p><p> Line line = (Line)ll.get(index);</p><p> if(line.direct == 1){</p><p> if(horizon(a, line.a) && horizon(b, line.b)){</p><p> corner=new P
60、oint(line.a);</p><p> corner2=new Point(line.b);</p><p> return true;</p><p><b> }</b></p><p><b> }else{</b></p><p> if(vertic
61、al(a, line.a) && vertical(b, line.b)){</p><p> corner=new Point(line.a);</p><p> corner2=new Point(line.b);</p><p> return true;</p><p><b> }</b>
62、;</p><p><b> }</b></p><p><b> }</b></p><p> return false;</p><p><b> }</b></p><p> //上面設(shè)計了一個類來判斷兩個拐點(diǎn)的情況</p>
63、<p> //類的定義,構(gòu)造函數(shù)如下</p><p> class Line{</p><p> public Point a;</p><p> public Point b;</p><p> public int direct;</p><p> public Line(){</p&
64、gt;<p> a = new Point();</p><p> b = new Point();</p><p><b> }</b></p><p> public Line(int direct, Point a, Point b){</p><p> this.direct = dire
65、ct;</p><p> this.a = a;</p><p> this.b = b;</p><p><b> }</b></p><p><b> }</b></p><p> //對兩個拐點(diǎn)的情況進(jìn)行掃描,將掃描線放入 Line 類型的數(shù)組中</p&
66、gt;<p> private LinkedList scan(Point a, Point b){</p><p> ll = new LinkedList<Line>();</p><p> //Point c = new Point(a.x, b.y);</p><p> //Point d = new Point(b.x,
67、a.y);</p><p> for(int y = a.y; y >= 0; y--)</p><p> if(grid[a.x][y] == 0 && grid[b.x][y] == 0 && horizon(new Point(a.x, y), new Point(b.x, y)))</p><p> ll.add(
68、new Line(0, new Point(a.x, y), new Point(b.x, y)));</p><p> for(int y = a.y; y < row; y++)</p><p> if(grid[a.x][y] == 0 && grid[b.x][y] == 0 && horizon(new Point(a.x, y), ne
69、w Point(b.x, y)))</p><p> ll.add(new Line(0, new Point(a.x, y), new Point(b.x, y)));</p><p> for(int x = a.x; x >= 0; x--)</p><p> if(grid[x][a.y] == 0 && grid[x][b.y]
70、 == 0 && vertical(new Point(x, a.y), new Point(x, b.y)))</p><p> ll.add(new Line(1, new Point(x, a.y), new Point(x, b.y)));</p><p> for(int x = a.x; x < col; x++)</p><p&g
71、t; if(grid[x][a.y] == 0 && grid[x][b.y] == 0 && vertical(new Point(x, a.y), new Point(x, b.y)))</p><p> ll.add(new Line(1, new Point(x, a.y), new Point(x, b.y)));</p><p> retu
72、rn ll;</p><p><b> }</b></p><p> //最后做總體判斷,flag 表示拐點(diǎn)的數(shù)目</p><p> public boolean checkLink(Point a,Point b){</p><p> if(grid[a.x][a.y] != grid[b.x][b.y])//
73、如果圖案不同,直接為 false</p><p> return false;</p><p> if(a.y == b.y && horizon(a, b)){</p><p><b> flag=0;</b></p><p> return true;</p><p>
74、<b> }</b></p><p> if(a.x == b.x && vertical(a, b)){</p><p> flag=0; return true;</p><p><b> }</b></p><p> if(oneCorner(a, b)){</
75、p><p><b> flag=1;</b></p><p> return true;</p><p><b> }</b></p><p> if(twoCorner(a, b)){</p><p><b> flag=2;</b></p
76、><p> return true;</p><p><b> }else{</b></p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p>
77、 5.6.2、圖片消除的畫線</p><p> 根據(jù) flag 的值分情況分析:</p><p> Flag=0 時,從起點(diǎn)到終點(diǎn)畫一條線即可</p><p> Flag=1 時,從起點(diǎn)到拐點(diǎn),從拐點(diǎn)到終點(diǎn)畫兩條線</p><p> Flag=2 時,從起點(diǎn)到拐點(diǎn),從拐點(diǎn)到拐點(diǎn),從拐點(diǎn)到終點(diǎn)畫三條線</p><p
78、> 在做連接判斷時就將路徑保存下來</p><p> //畫線操作寫在 OnDraw 函數(shù)中,corner、corner2 保存拐點(diǎn)坐標(biāo) 函數(shù)中</p><p> //每次都 sleep(50)后重繪</p><p> switch(flag){</p><p><b> case 0:</b></
79、p><p> canvas.drawLine(width*(former.x + 0.5f), height*(former.y+0.5f), width*(current.x+ 0.5f), height*(current.y + 0.5f), p);</p><p><b> flag=-1;</b></p><p> SystemClo
80、ck.sleep(50);</p><p> invalidate();</p><p><b> break;</b></p><p><b> case 1:</b></p><p> canvas.drawLine(width*(former.x + 0.5f), height*(fo
81、rmer.y+0.5f), width*(corner.x+ 0.5f), height*(corner.y + 0.5f), p);</p><p> canvas.drawLine(width*(corner.x + 0.5f), height*(corner.y+0.5f), width*(current.x+ 0.5f), height*(current.y + 0.5f), p);</p>
82、<p><b> flag=-1;</b></p><p> SystemClock.sleep(50);</p><p> invalidate();</p><p><b> break;</b></p><p><b> case 2:</b>&l
83、t;/p><p> canvas.drawLine(width*(former.x + 0.5f), height*(former.y+0.5f), width*(corner.x + 0.5f), height*(corner.y + 0.5f), p);</p><p> canvas.drawLine(width*(corner.x + 0.5f), height*(corner.y
84、+0.5f), width*(corner2.x+ 0.5f), height*(corner2.y + 0.5f), p);</p><p> canvas.drawLine(width*(corner2.x + 0.5f), height*(corner2.y+0.5f), width*(current.x+ 0.5f), height*(current.y + 0.5f), p);</p>
85、<p><b> flag=-1;</b></p><p> SystemClock.sleep(50);</p><p> invalidate();</p><p><b> break;</b></p><p><b> default:</b><
86、;/p><p><b> break;</b></p><p><b> }</b></p><p> 5.6.3、重新排列</p><p> 隔一段時間后,將原有的排列隨機(jī)打亂,進(jìn)行重新排列</p><p> //對當(dāng)前界面中的圖片進(jìn)行重新排列</p>
87、<p> public void reDraw(){</p><p> Random r = new Random();</p><p> type= new ArrayList<Integer>();</p><p> for(int i=0;i<row; i++){</p><p> for(int
88、j=0; j <col;j++){</p><p> if(grid[i][j]!=0){</p><p> type.add(grid[i][j]);</p><p><b> }</b></p><p><b> }</b></p><p><b>
89、; }</b></p><p> for(int i=0;i<row; i++){</p><p> for(int j=0; j <col;j++){</p><p> if(grid[i][j]!=0){</p><p> int index = r.nextInt(type.size());</p
90、><p> grid[i][j] = type.get(index);</p><p> type.remove(index);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
91、;/p><p> former_i=former_j=0;</p><p> former.x=former.y=0;</p><p> invalidate();</p><p><b> }</b></p><p> //重新排列界面中的圖片</p><p>
92、private void reStart() {</p><p> GameActivity.refresh=true;</p><p> initType();</p><p> initGrid();</p><p> invalidate();</p><p><b> }</b>
93、</p><p><b> 5.7、接口</b></p><p><b> API函數(shù)</b></p><p><b> 5.8、限制條件</b></p><p><b> 無明顯限制條件</b></p><p> 5.9
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 連連看小游戲設(shè)計
- java課程設(shè)計--連連看游戲設(shè)計
- 連連看java小游戲畢業(yè)設(shè)計論文
- java課程設(shè)計--連連看游戲的開發(fā)
- 連連看課程設(shè)計
- 連連看課程設(shè)計
- 課程設(shè)計報告----java實(shí)現(xiàn)游戲連連看
- java連連看課程設(shè)計
- java連連看課程設(shè)計
- java課程設(shè)計—連連看
- 連連看課程設(shè)計報告
- java連連看課程設(shè)計報告
- 軟件工程畢業(yè)論文-連連看小游戲設(shè)計
- labview連連看課程設(shè)計報告
- java連連看課程設(shè)計報告
- 連連看游戲設(shè)計論文
- 基于android平臺的連連看游戲設(shè)計與實(shí)現(xiàn)
- 基于android的連連看游戲的設(shè)計與實(shí)現(xiàn)
- [畢業(yè)設(shè)計資料]連連看java小游戲畢業(yè)設(shè)計資料
- 連連看c語言課程設(shè)計報告
評論
0/150
提交評論