安卓歡樂五子棋人機大戰(zhàn)報告.doc_第1頁
安卓歡樂五子棋人機大戰(zhàn)報告.doc_第2頁
安卓歡樂五子棋人機大戰(zhàn)報告.doc_第3頁
安卓歡樂五子棋人機大戰(zhàn)報告.doc_第4頁
安卓歡樂五子棋人機大戰(zhàn)報告.doc_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實 驗 報 告( 2015 / 2016學(xué)年 第2學(xué)期)課程名稱實驗名稱安卓五子棋人機大戰(zhàn)實驗時間2016年 4月 13日指導(dǎo)單位指導(dǎo)教師 學(xué)生姓名學(xué)號學(xué)院(系)專 業(yè) 一、實驗?zāi)康?. 在棋盤上任意落下一顆子,計算機調(diào)用AI算法,能判斷出最佳的落子位置并落子。2. 程序能判斷出輸贏,結(jié)束游戲,停止落子。二、實驗環(huán)境(實驗設(shè)備)Eclipse ADT3、 AI難點解析1. 贏法數(shù)組:記錄五子棋所有的贏法,三維數(shù)組2. 每一種贏法的統(tǒng)計數(shù)組,一維數(shù)組3. 如何判斷勝負4. 計算機落子規(guī)則四、實驗結(jié)果開局前:比賽一 游戲結(jié)束:比賽二 游戲結(jié)束:五、實驗內(nèi)容 1.創(chuàng)建安卓項目工程:B002_五子棋人機對戰(zhàn) 2.創(chuàng)建一個類WuziqiPanel 繼承系統(tǒng)的View類 public class WuziqiPanel extends View 3.在activity_main.xml文件中添加WuziqiPanel控件,并設(shè)置游戲背景界面設(shè)置背景圖片 android:background=drawable/bg 添加WuziqiPanel控件 4.定義相關(guān)數(shù)據(jù) private int mPanelWidth;private float mLineHeight;private int MAX_LINE = 10;private Paint mPaint = new Paint();private Bitmap mWhitePiece;private Bitmap mBlackPiece;private float radioPieceOfLineHeight = 3 * 1.0f/4; /白棋先下,當(dāng)前輪到白棋private boolean mIsWhite = true;private List mWhiteArray = new ArrayList();private List mBlackArray = new ArrayList(); /贏法數(shù)組int wins= new int1010200;/贏法統(tǒng)計數(shù)組int myWin = new int200;int computerWin = new int200;private int count;/游戲是否結(jié)束overprivate boolean over = false;/棋盤上兩方棋子的標(biāo)志 0 無子 ; 1 我方 ; 2 電腦private int chessBoard = new int1010;/保存最高得分的i,j值int u=0;int v=0; 5.測量棋盤大小 /截取屏幕大小為正方形Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) / TODO Auto-generated method stubint widthSize = MeasureSpec.getSize(widthMeasureSpec);int widthMode = MeasureSpec.getMode(widthMeasureSpec);int heightSize = MeasureSpec.getSize(heightMeasureSpec);int heightMode = MeasureSpec.getMode(heightMeasureSpec);int width = Math.min(widthSize, heightSize);if(widthMode = MeasureSpec.UNSPECIFIED )width = heightSize;else if(heightMode = MeasureSpec.UNSPECIFIED)width = widthSize;/設(shè)置棋盤大小,包括邊界setMeasuredDimension(width, width);/當(dāng)寬高尺寸確定發(fā)生改變以后回調(diào)此函數(shù)Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) / TODO Auto-generated method stubsuper.onSizeChanged(w, h, oldw, oldh);mPanelWidth = w;mLineHeight = mPanelWidth*1.0f/MAX_LINE;int pieceWidth = (int)(mLineHeight*radioPieceOfLineHeight);mWhitePiece = Bitmap.createScaledBitmap(mWhitePiece, pieceWidth, pieceWidth, false);mBlackPiece = Bitmap.createScaledBitmap(mBlackPiece, pieceWidth, pieceWidth, false); 6.繪制棋盤Overrideprotected void onDraw(Canvas canvas) / TODO Auto-generated method stubsuper.onDraw(canvas);/繪制棋盤drawBoard(canvas);/繪制棋子drawpieces(canvas);private void drawBoard(Canvas canvas) / TODO Auto-generated method stubint w = mPanelWidth;float lineHeight = mLineHeight;for(int i= 0;iMAX_LINE;i+)int start = (int) (lineHeight/2);int end = (int) (w-lineHeight/2);int y = (int) (0.5+i)*lineHeight);canvas.drawLine(start, y, end, y, mPaint);canvas.drawLine( y,start,y, end, mPaint); 7.繪制棋子 private void drawpieces(Canvas canvas) / TODO Auto-generated method stubfor(int i=0,n=mWhiteArray.size(); in;i+)Point whitePoint = mWhiteArray.get(i);canvas.drawBitmap(mWhitePiece, (whitePoint.x+(1-radioPieceOfLineHeight)/2)*mLineHeight,(whitePoint.y+(1-radioPieceOfLineHeight)/2)*mLineHeight,null);for(int i=0,n=mBlackArray.size(); in;i+)Point BlackPoint = mBlackArray.get(i);canvas.drawBitmap(mBlackPiece, (BlackPoint.x+(1-radioPieceOfLineHeight)/2)*mLineHeight,(BlackPoint.y+(1-radioPieceOfLineHeight)/2)*mLineHeight,null);8.初始化相關(guān)數(shù)據(jù) public WuziqiPanel(Context context, AttributeSet attrs) super(context, attrs);/ TODO Auto-generated constructor stub/setBackgroundColor(0x44ff0000);init();Wininit();/初始化private void init() / TODO Auto-generated method stubmPaint.setColor(0x88000000);mPaint.setAntiAlias(true);mPaint.setDither(true);mPaint.setStyle(Paint.Style.STROKE);mWhitePiece = BitmapFactory.decodeResource(getResources(), R.drawable.stone_w2);mBlackPiece = BitmapFactory.decodeResource(getResources(), R.drawable.stone_b1);public void Wininit()count = 0;/橫向贏法統(tǒng)計 for(int i=0;i10;i+)for(int j=0;j6;j+)for(int k=0;k5;k+)winsij+kcount=1;count+;/縱向贏法統(tǒng)計for(int i=0;i10;i+)for(int j=0;j6;j+)for(int k=0;k5;k+)winsj+kicount=1;count+;/左上到右下斜線贏法統(tǒng)計for(int i=0;i6;i+)for(int j=0;j6;j+)for(int k=0;k5;k+)winsi+kj+kcount=1;count+;/右上到左下斜線贏法統(tǒng)計for(int i=0;i3;j-)for(int k=0;k5;k+)winsi+kj-kcount=1;count+;for(int i = 0 ;icount;i+)myWini = 0;computerWini = 0; 9.添加點擊事件,重寫該函數(shù),落子并判斷勝負 Overridepublic boolean onTouchEvent(MotionEvent event) / TODO Auto-generated method stubif(over)return false;if(!mIsWhite)return false;int action = event.getAction();if(action = MotionEvent.ACTION_UP)int x= (int) event.getX();int y = (int) event.getY();Point p = getValidPoint(x,y);int m = p.x;int n = p.y;if(mWhiteArray.contains(p)|mBlackArray.contains(p)return false;if(mIsWhite)mWhiteArray.add(p);chessBoardmn=1;for(int k = 0; kcount;k+)if(winsmnk = 1)myWink+;computerWink = 6;if(myWink=5)Toast.makeText(this.getContext(), 你贏了, 0).show();over = true;if(!over)mIsWhite = !mIsWhite;computerAI();invalidate();return true;return true; 10.由點擊坐標(biāo)確定落子下標(biāo) private Point getValidPoint(int x, int y) / TODO Auto-generated method stubreturn new Point(int)(x/mLineHeight),(int)(y/mLineHeight); 11.寫出計算機落子得分算法 private void computerAI() /保存最高得分int max = 0;int myScore = new int1010;int computerScore = new int1010;/初始化分數(shù)值for(int i=0;i10;i+)for(int j=0;j10;j+)myScoreij = 0;computerScoreij=0;for(int i=0;i10;i+)for(int j=0;j10;j+)if(chessBoardij = 0)for(int k=0;kmax)max = myScoreij;u = i;v = j;else if(myScoreij = max )if(computerScoreijcomputerScoreuv)/認為i,j點比u,v點好u = i;v = j;/判斷電腦方最高得分,將最高分數(shù)的點獲取出來if(computerScoreijmax)max = computerScoreij;u = i;v = j;else if(computerScoreij = max )if(myScoreijmyScoreuv)/認為i,j點比u,v點好u = i;v = j;chessBoarduv = 2;mBlackArray.add(new Point(u,v);invalidate();f

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論