久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7913|回復: 6
打印 上一主題 下一主題
收起左側

安卓五子棋游戲開發代碼工程+圖文+設計文檔資料下載

  [復制鏈接]
跳轉到指定樓層
樓主
五子棋安卓開發文檔及開發工程見附件

[摘 要] 被業內人士稱為繼短信之后的又一座“金礦”。4G的普及,手機顯示性能的提高、手機屏幕的擴大和較高的分辨率,解決了傳統手機行業的很多弊端,手機休閑娛樂應用將成為PC休閑娛樂之后又一重要業務增長點、同時Android采用了全面觸摸屏,可以完成更多復雜的操作。Android雖然基于Java,但是其虛擬機是基于寄存器的,速度得到很大的提升,這為Android平臺上開發游戲提供了堅強的后盾。


本文主要闡述以面向對象的程序開發語言eclipse為開發工具, 基于智能手機Android之上設計一個五子棋游戲。五子棋起源于中國古代的傳統黑白棋種之一,它不僅能增強思維能力 提高智力,而且富含哲理,有助于修身養性。本系統是本系統中設定了人機對戰和人人對戰兩種模式。人機對戰實現的是一些簡單的算法,人人對戰只是進行了輸贏方的判定。它與javame的五子棋設計有許多的不一樣,Android本來就是全觸摸的形式,而且操作非常簡單。



目錄

引言              2

第一章 應用背景與功能需求              3

1.1 應用背景              3

1.2設計意義              3

1.3應用需求分析              3

1.3.1 應用的實用性              3

1.3.2 應用需求              3

第二章 設計思路              4

第三章 布局設計              4

3.1 初始界面布局              4

3.2畫盤線              6

3.3按照棋盤模式構建棋盤大小              7

3.4判斷該位置是否可下子              7

3.5交換棋手下棋              7

第四章 文件讀寫類的設計與實現              8

4.1獲勝機制              8

4.1.1 遍歷所有的五連子可能情況的權值。              8

4.1.2 初始化黑子白子上的每個權值上的連子數              9

4.1.3 檢查是否有人五連珠              10

4.1.4顯示結束信息              10

4.2人機對戰              11

4.3 輸贏判斷              11

第五章 其他相關工作              15

5.1 游戲主界面              15

5.2 游戲開始界面              15

第六章 系統測試與部署              16

6.1 硬件環境              16

6.2 軟件環境              16

6.3測試用例              16

第七章 總結              17

參考文獻              17


引言

隨著社會的發展,目前全國的手機用戶數量已經遠超過了PC機的數量,而且手機的功能正在快速更新,其中智能手機所占的比例越來越大,特別是隨著5G技術發展時代的到來,移動互聯網已是一個巨大的市場,許多國際大公司以及國內的大公司斗在搶占智能手機領域的市場份額。這期間,出現的智能手機可謂五花八門,種類繁多。

當互聯網巨頭Google宣布依靠android系統進軍手機操作系統領域之后,三年來Android一路高歌,快速的獲得眾多用戶和廠商的認同。隨著Android手機終端的熱銷,Android也引起眾多手機應用程序開發商的關注,Android的出現,帶給了智能手機領域更多的機遇和挑戰,由于Android基于Linux內核且具有開源、免費的特性,他迅速得到廣大愛好者以及許多廠商的支持,基于Android所開發的手機游戲擁有巨大潛力已成為行業共識。

中華民族是一個有著幾千年悠久歷史和璀璨文化的國家,而棋類娛樂卻早已突破了純游戲的范疇而成為中華傳統文化的一個分支。五子棋的棋文化源遠流長,具有東方的神秘和西方的直觀,是中西文化的交流點,是古今哲理的結晶。

現在人們壓力日益增大,需要勞逸結合才能獲得更高的工作效率,工作之余的娛樂對每一個人來說都是必不可少的。五子棋這種娛樂方式簡單易學又具有深奧的技巧,非常富有趣味性和消遣性。在經過不斷發展后五子棋已經成為棋盤娛樂的一個重要組成部分,他能夠增強思維能力、開發智力,是人們休閑娛樂的不錯選擇


第一章 應用背景與功能需求
1.1 應用背景

在我們的生活中有許多的游戲,但是游戲不同她也會給玩家帶來不同的感受和生活理念。游戲是我們日常生活的一個必不可少的娛樂項目,也帶動了游戲相關產業市場的發展。游戲平臺是經過從游戲機到電視游戲,然后從PC游戲,到手機游戲,中間經歷了很多的技術的更新和變革。但隨著新技術的發簪和我們生活水平質量的提高,手機開始普及,因為手機是非常小巧便捷的,而且方便的特性成為我們日常生活中必備通訊工具。而基于手機平臺的游戲也就擁有的市場空間是巨大的的,也因隨著4G的開通和應用,手機游戲必然會迎來新的一輪游戲熱潮。

1.2設計意義

本次設計是基于Android平臺開發的一個小型五子棋游戲程序。五子棋游戲的簡單易學,老少皆宜這些特性與智能手機的移動方便,大范圍普及等特點結合起來,必定會大放光芒,廣受歡迎

1.3應用需求分析
1.3.1 應用的實用性

現在人們壓力日益增大,需要勞逸結合才能獲得更高的工作效率,工作之余的娛樂對每一個人來說都是必不可少的。五子棋這種娛樂方式簡單易學又具有深奧的技巧,非常富有趣味性和消遣性。在經過不斷發展后五子棋已經成為棋盤娛樂的一個重要組成部分,他能夠增強思維能力、開發智力,是人們休閑娛樂的不錯選擇。

1.3.2 應用需求

游戲說明:游戲開始時,由黑子開局,將一枚棋子落在棋盤一坐標上,然后由白棋落子,如此輪流下子,直到某一方首先在棋盤的豎、橫或斜三方向上的五子連成線,則該方該局獲勝。功能列表如下:

(1)輸出棋盤;

(2)提示用戶下子;

(3)查看用戶是否出界;

(4)系統自動下子;

(5)判斷游戲是否輸贏;

(6)判斷是否進入下一局;

(7)退出游戲。


第二章 設計思路

在軟件設計分析的基礎上,為了方便玩家的使用,界面設計的簡潔明了,布局合理。應用設計內容主要為五子棋人機對戰,由人與計算機進行相互下子,進行合理的布局以及算法使計算機可以自動判斷勝利條件,并于玩家進行博弈。使玩家在閑暇時可以得到適當的放松。

本應用的設計目標是建立于一個基于Android手機游戲軟件,基本可以滿足人們在閑暇時間的娛樂以及放松。

打開游戲,進入初始主界面可選擇開始或退出,若點擊開始,進行判斷電腦還是玩家先下子,判斷后進行下子,一方下完進行判斷輸贏,若有一方勝利則結束游戲,若沒有人獲勝,則返回下棋階段,流程圖如圖2-1所示:

圖2-1 流程圖

第三章 布局設計
3.1 初始界面布局

采用線性布局作為初始化界面,插入背景圖片,按照上中下布局分布,插入游戲名稱,新游戲等文本框,編輯按鈕文本,實現代碼如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:background="@drawable/timg"

    android:orientation="vertical"

    android:padding="30dip" >


    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_weight="0.17"

        android:gravity="center"

        android:orientation="vertical" >


        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/main_title"

            android:textColor="@color/text_title"

            android:textSize="64sp" />

    </LinearLayout>


    <Button

        android:id="@+id/btn_newgame"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/btn_newgame" />


    <Button

        android:id="@+id/btn_exit"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_weight="0.00"

        android:text="@string/btn_exit" />


</LinearLayout>


3.2畫盤線

本模塊是整個游戲系統的平臺性模塊,之后所有的功能都將依附該模塊來體現,主要需要實現棋盤的繪制,本游戲系統選擇的是15*15的棋盤,與左邊和上邊的距離: 3推算其他線條計算方法。使用程序實現以上計算方法,創建出15根橫線與整線,存進集合中。實現代碼如下:

for (int i=0; i <= maxX; i++) {//豎線

lines. add (new Line (xoffset+i*POINT_ SIZE, yoffset,xOffset+i*POINT SIZE, yoffset tmaxY*POINT SIZE));

for (int i=0; i <= maxY; i+) {//橫線

lines. add (new Line (x0ffset, yoffset+i*POINT SIZE,(maxX+1)*P0INT SIZE, yoffset+i*POINT SIZED);

//在ondraw方法畫出所有棋盤線

for (Line line : lines){

canvas. drawLine(line. xStart, line. yStart, line. xStop, line. yStop,paint):

盤線圖如圖3-1所示:

              

圖3-1 盤線圖

3.3按照棋盤模式構建棋盤大小

通過輸入相對棋盤的X和Y設置rect的值 使之變為該X和Y代表的屏幕區域值

private void getRect(int x, int y, Rect rect) {

                            rect.set((int) (x * gridSize + getTopX()),

                                                        (int) (y * gridSize + getTopY()), (int) (x * gridSize

                                                                                    + gridSize + getTopX()),

                                                        (int) (y * gridSize + gridSize + getTopY()));

3.4判斷該位置是否可下子

              計算棋盤上某一方格上八個方向棋子的最大值,這八個方向分別是:左、右、上、下、左上、左下、右上、右下,如果可下子,則下子,如果超出棋盤范圍或該點已有棋子則不能下子。

              public boolean chessExist(int i,int j){

                 if(this.arrMapShow[ i][j]==1 || this.arrMapShow[ i][j]==2)

                  return true;

                 return false;

              }


判斷該坐標位置是否可下棋子。

              public void readyplay(int x,int y){

                 if(badxy(x,y))

                  return;

                 if (chessExist(x,y))

                  return;

                 this.arrMapShow[x][y]=3;

              }

3.5交換棋手下棋

設置交換棋手的標識符

              public void setisOdd(boolean isodd){

                 if(isodd)

                  this.isOdd=true;

                 else

                  this.isOdd=false;

              }


獲取是否交換棋手的標識符。

              public boolean getisOdd(){

                 return this.isOdd;

              }


第四章 文件讀寫類的設計與實現
4.1獲勝機制
4.1.1 遍歷所有的五連子可能情況的權值。

從橫向、豎向、右斜、左斜,四個方向判斷獲勝機制,如果四個方向其中一個方向有五子連珠的情況,則獲勝,如果沒有則繼續下子。i從0到14,循環15次,j從0到10循環11次,k從0到4循環5次,判斷橫縱坐標的位置以及連珠數量。

(1)

        for(int i=0;i<15;i++)

            for(int j=0;j<11;j++){

                for(int k=0;k<5;k++){

                    this.table[1][j+k][ i][icount] = true;

                    this.table[0][j+k][ i][icount] = true;

                }

                icount++;

            }

(2)

        for(int i=0;i<15;i++)

            for(int j=0;j<11;j++){

                for(int k=0;k<5;k++){

                    this.table[1][ i][j+k][icount] = true;

                    this.table[0][ i][j+k][icount] = true;

                }

                icount++;

            }

(3)右斜

        for(int i=0;i<11;i++)

            for(int j=0;j<11;j++){

                for(int k=0;k<5;k++){

                    this.table[1][j+k][i+k][icount] = true;

                    this.table[0][j+k][i+k][icount] = true;

                }

                icount++;

            }

(4)左斜

        for(int i=0;i<11;i++)

            for(int j=14;j>=4;j--){

                for(int k=0;k<5;k++){

                    this.table[1][j-k][i+k][icount] = true;

                    this.table[0][j-k][i+k][icount] = true;

                }

                icount++;


4.1.2 初始化黑子白子上的每個權值上的連子數

判斷有無一方勝利,若沒有則初始化棋盤,重新下棋子。

        for(int i=0;i<=1;i++)  

            for(int j=0;j<572;j++)

                this.combo[ i][j] = 0;


        if(!IndexActivity.playerFirst){

                      isUsersTurn = false;

                                          Coordinate c = ai.comTurn(null);

                                          setPieceIfValid(c.x,c.y,1);

        }

        IndexActivity.playerFirst = !IndexActivity.playerFirst;

              }


              public int[][] getGridBoard(){

                            return gridBoard;

              }

              public void setPieceIfValid(int selectX, int selectY,int id) {

                            if(gridBoard[selectX][selectY] != 0 || haveWinner()){

                                          return;

                            }

                            if(isUsersTurn && id==2){

                                          setPiece(selectX,selectY,id);

                                          nextTurn();

                            }else if(!isUsersTurn && id==1){

                                          setPiece(selectX,selectY,id);

                                          nextTurn();

                            }

              }


4.1.3 檢查是否有人五連珠

              通過語句從572種五連珠可能性中,檢查該連珠情況是否符合其中一種,如果有則獲勝,如果沒有,則交換對手下棋。

private boolean haveWinner(){

                            for(int i=0;i<2;i++){

                                          for(int j=0;j<572;j++){

                                                        if(combo[ i][j] == 5){

                                                                      showWinner(i);

                                                                      return true;


4.1.4顯示結束信息

如電腦先連成五連珠,則輸出玩家失敗,如玩家先連成五連珠,則輸出玩家獲勝。


  1. <font style="font-size: 12pt">              private void showWinner(int id){
  2.                             Builder builder = new AlertDialog.Builder(this);
  3.                             String title = "";
  4.                             String msg = "";
  5.                             switch(id){
  6.                             case 0://電腦贏了,玩家輸了
  7.                                           title = this.getResources().getString(R.string.title_lose);
  8.                                           msg = this.getResources().getString(R.string.text_lose);
  9.                                           break;
  10.                             case 1://玩家贏了
  11.                                           title = this.getResources().getString(R.string.title_victor);
  12.                                           msg = this.getResources().getString(R.string.text_victor);
  13.                                           break;
  14.                             }
  15.                             builder.setTitle(title);
  16.                             builder.setMessage(msg);
  17.                             builder.setPositiveButton("back",               new DialogInterface.OnClickListener() {

  18.                                          
  19.                                           @Override
  20.                                           public void onClick(DialogInterface dialog, int which) {
  21.                                                         BackgammonActivity.this.finish();//退出此窗口                          

  22.                                           }</font>
復制代碼


4.2人機對戰

輪到電腦下棋時,電腦先取出一個空白棋位(一個Point對象),以此棋位為起點計算四個方向能形成多少部連續的棋子,此為第一次計算。

FirstAnalysisResult{

Point point;   //棋位

int count;  //連續數

int aliceState;  //狀態

int direction;  //方向

因為第一次計算的結果對一個棋位都會形成四個結果(每個方向一個結果),這一步將這些結果匯總到一個類對象中。

SecondAnalysisResult implements Comparable<SecondAnalysisResult>{

Point point;  //棋位

int alive4 = 0;  //活4

int alive3 = 0;  //活3數量

int halfAlive4 = 0;  //半活4,一頭封

int halfAlive3 = 0;  //半活3,一頭封

Int alive2 = 0;  //活2數量

對第二次計算結果進行排序,將結果分成三個等級,每個等級有一個集合裝載,有子類在排序結果挑選想要下的棋子。為了性能在第一次計算前,必須確定一個較小的計算范圍,不能全部都算。另外,在每次找到必殺棋時,直接返回,不在計算。

4.3 輸贏判斷

從左、右、上、下、左上、右上、右下、左下,八個方向判斷是否有五子連珠的情況。i從1到5循環5次,判斷是否有連珠情況。

(1)判斷右邊是否有五子連珠的情況,如果有,則獲勝。

                 for(int i=1;i<6;i++){

                  x_temp1+=1;

                  if(x_temp1>this.width)

                   break;

                  if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)

                   num++;

                  else

                   break;

                 }

(2)判斷左邊是否有五子連珠的情況,如果有,則獲勝。

                 x_temp1=x_temp;

                 for(int i=1;i<6;i++){

                  x_temp1-=1;

                  if(x_temp1<0)

                   break;

                  if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)

                   num++;

                  else

                   break;

                 }

                 if(num==5)

                  return true;

(3)判斷上方是否有五子連珠的情況,如果有,則獲勝。

                 x_temp1=x_temp;

                 y_temp1=y_temp;

                 num=1;

                 for(int i=1;i<6;i++){

                  y_temp1-=1;

                  if(y_temp1<0)

                   break;

                  if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)

                   num++;

                  else

                   break;

                 }

(4)判斷下方是否有五子連珠的情況,如果有,則獲勝。

                 y_temp1=y_temp;

                 for(int i=1;i<6;i++){

                  y_temp1+=1;

                  if(y_temp1>this.height)

                   break;

                  if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)

                   num++;

                  else

                   break;

                 }

                 if(num==5)

                  return true;


(5)判斷左上是否有五子連珠的情況,如果有,則獲勝。

                 x_temp1=x_temp;

                 y_temp1=y_temp;

                 num=1;

                 for(int i=1;i<6;i++){

                  x_temp1-=1;

                  y_temp1-=1;

                  if(y_temp1<0 || x_temp1<0)

                   break;

                  if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)

                   num++;

                  else

                   break;


(6)判斷右下是否有五子連珠的情況,如果有,則獲勝。

                 x_temp1=x_temp;

                 y_temp1=y_temp;

                 for(int i=1;i<6;i++){

                 x_temp1+=1;

                 y_temp1+=1;

                 if(y_temp1>this.height || x_temp1>this.width)

                  break;

                  if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)

                   num++;

                  else

                   break;

                 }

                 if(num==5)

                  return true;


(7)判斷右上是否有五子連珠的情況,如果有,則獲勝。

                 x_temp1=x_temp;

                 y_temp1=y_temp;

                 num=1;

                 for(int i=1;i<6;i++){

                  x_temp1+=1;

                  y_temp1-=1;

                  if(y_temp1<0 || x_temp1>this.width)

                   break;

                  if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)

                   num++;

                  else

                   break;

                 }

(8)判斷左下是否有五子連珠的情況,如果有,則獲勝。

                 x_temp1=x_temp;

                 y_temp1=y_temp;

                 for(int i=1;i<6;i++){

                  x_temp1-=1;

                  y_temp1+=1;

                  if(y_temp1>this.height || x_temp1<0)

                   break;

                  if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)

                   num++;

                  else

                   break;

                 }

                 if(num==5)

                  return true;

                 return false;


第五章 其他相關工作
5.1 游戲主界面

游戲主界面如圖5-1所示。

                                          
圖5-1 游戲主界面圖                                                                                       5-2 開局界面
5.2 游戲開始界面

五子棋的開局界面如圖5-2所示:

第六章 系統測試與部署

6.1 硬件環境

電腦、Android手機、數據線

6.2 軟件環境

Windows操作系統、Android手機系統、Eclepse

6.3測試用例

系統測試,即對軟件進行全面統一的測試,包括對性能、娛樂性以及對運行環境的調試。

測試游戲進行界面(玩家為黑棋),如圖6-1所示:

圖6-1 游戲進行界面

測試輸贏界面,如圖6-2 勝利界面,圖6-3失敗界面:

                              

圖6-2 勝利界面                                                                                                                圖6-3 失敗界面                                         


第七章 總結

本文實現了五子棋游戲中的人機對戰模式。在這次的實驗中我遇到了很多困難,在克服這些困難的過程中學到了很多的知識,讓我對Android有了更深層次的了解。

五子棋游戲邏輯十分簡單,可以明顯的分為四個部分:白棋下、判斷白棋是否獲勝、黑棋下、判斷黑棋是否獲勝;在判斷獲勝的兩個部分可以使用相同的方法,所以總結起來我們只需完成白棋下、黑棋下、判斷獲勝三個部分。所以我在選擇實現順序的時候選擇實現人機對戰的模式來進行設計。

我個人認為人機對戰的實現相對于人人對戰模式更加復雜,人機對戰模式的實現相對于人人模式增加了游戲AI,而且僅僅是增加了游戲AI,所以在這個實現中對游戲AI的實現成為了重點。通過在網上的查找和總結,知道最通用的實現五子棋游戲AI的算法就是:根據五子棋游戲規則指定在不同情況下每個位置的權值,然后在開始下棋時在地圖上計算權值最大的位置即可。經過對五子棋游戲的簡單研究,之后又在網上查找了相關算法的實現資料,自己實現了一個簡單的五子棋算法。雖然不能有很高的AI不過已經可以達到初級玩家的水平。




完整的Word格式文檔51黑下載地址:
五子棋.docx (560.85 KB, 下載次數: 47)

源碼:
FiveChess.7z (1.14 MB, 下載次數: 67)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:562585 發表于 2019-6-14 15:33 | 只看該作者
請問能私發一份嗎?
回復

使用道具 舉報

板凳
ID:575346 發表于 2019-7-1 09:49 | 只看該作者
請問能使用 android studio來實現嗎
回復

使用道具 舉報

地板
ID:563554 發表于 2019-9-30 21:19 | 只看該作者
非常好的資料,支持一下
回復

使用道具 舉報

5#
ID:656468 發表于 2019-12-5 09:22 | 只看該作者

RE: 安卓五子棋游戲開發代碼工程+圖文+設計文檔資料下載

可以下載的嗎??
回復

使用道具 舉報

6#
ID:716484 發表于 2020-3-26 20:39 | 只看該作者
可以用嗎?
回復

使用道具 舉報

7#
ID:1046464 發表于 2022-10-2 11:06 | 只看該作者
希望能參考一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区中文字幕在线观看 | 久久精品国产一区二区三区不卡 | 国产精品久久久久久久久久久久午夜片 | 一区二区三区精品视频 | 午夜精品久久久久99蜜 | 日韩一级黄色毛片 | 日韩欧美三级电影在线观看 | 国产日韩视频 | 美国av片在线观看 | 国产三级国产精品 | 一区二区高清 | 亚洲欧美日本国产 | 午夜激情小视频 | 天天干在线播放 | 日韩精品成人在线 | 天天操天天操 | www日本高清 | 亚洲成人a v | 五月天婷婷综合 | 国产亚洲精品综合一区 | av入口 | 日本一二区视频 | 91色视频在线观看 | 91一区二区 | 久久99精品久久久久久国产越南 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 91麻豆精品国产91久久久更新资源速度超快 | 中文字幕av网站 | 婷婷色国产偷v国产偷v小说 | 亚洲精品在线免费 | 精品国产久 | 欧美精品乱码99久久影院 | 在线观看三级av | 在线91 | 成人影院av| 亚洲性人人天天夜夜摸 | 久久婷婷麻豆国产91天堂 | 91资源在线 | 国产亚洲成av人片在线观看桃 | 天天干干 | 久久国产精品免费一区二区三区 |