




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实 验 报 告( 2015 / 2016学年 第2学期)课程名称实验名称安卓五子棋人机大战实验时间2016年 4月 13日指导单位指导教师 学生姓名学号学院(系)专 业 一、实验目的1. 在棋盘上任意落下一颗子,计算机调用AI算法,能判断出最佳的落子位置并落子。2. 程序能判断出输赢,结束游戏,停止落子。二、实验环境(实验设备)Eclipse ADT3、 AI难点解析1. 赢法数组:记录五子棋所有的赢法,三维数组2. 每一种赢法的统计数组,一维数组3. 如何判断胜负4. 计算机落子规则四、实验结果开局前:比赛一 游戏结束:比赛二 游戏结束:五、实验内容 1.创建安卓项目工程:B002_五子棋人机对战 2.创建一个类WuziqiPanel 继承系统的View类 public class WuziqiPanel extends View 3.在activity_main.xml文件中添加WuziqiPanel控件,并设置游戏背景界面设置背景图片 android:background=drawable/bg 添加WuziqiPanel控件 4.定义相关数据 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; /白棋先下,当前轮到白棋private boolean mIsWhite = true;private List mWhiteArray = new ArrayList();private List mBlackArray = new ArrayList(); /赢法数组int wins= new int1010200;/赢法统计数组int myWin = new int200;int computerWin = new int200;private int count;/游戏是否结束overprivate boolean over = false;/棋盘上两方棋子的标志 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;/设置棋盘大小,包括边界setMeasuredDimension(width, width);/当宽高尺寸确定发生改变以后回调此函数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.初始化相关数据 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;/横向赢法统计 for(int i=0;i10;i+)for(int j=0;j6;j+)for(int k=0;k5;k+)winsij+kcount=1;count+;/纵向赢法统计for(int i=0;i10;i+)for(int j=0;j6;j+)for(int k=0;k5;k+)winsj+kicount=1;count+;/左上到右下斜线赢法统计for(int i=0;i6;i+)for(int j=0;j6;j+)for(int k=0;k5;k+)winsi+kj+kcount=1;count+;/右上到左下斜线赢法统计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.添加点击事件,重写该函数,落子并判断胜负 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.由点击坐标确定落子下标 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;/初始化分数值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;/判断电脑方最高得分,将最高分数的点获取出来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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度海绵城市建设施工履约保证金合同
- 高三试卷:江苏省常州市2024-2025学年高三上学期期中质量调研数学试题答案
- 二零二五年度水力发电机工程设计与心得总结合同
- 二零二五版地毯产品绿色家居定制化采购合同
- 2025版楼板浇注材料环保认证与检测合同
- 早期阅读课件
- 二零二五版船舶行业外包工安全培训及管理服务协议
- 二零二五年度钢结构预制构件生产与施工承包合同样本
- 二零二五年度会所装修工程合同范本指南
- 二零二五年度车辆维修配件供应合同
- GB/Z 42625-2023真空技术真空计用于分压力测量的四极质谱仪特性
- 人民医院心血管外科临床技术操作规范2023版
- 主要组织相容性复合体及其编码分子
- 助理工程师考试试题以及答案
- 送东阳马生序
- 2017年全国大学生数学建模A题
- 2023年专升本计算机题库含答案专升本计算机真题
- GB/T 1685-2008硫化橡胶或热塑性橡胶在常温和高温下压缩应力松弛的测定
- GB/T 16674.1-2016六角法兰面螺栓小系列
- 固定资产清查工作报告
- 住宅项目景观工程施工策划(图文并茂)
评论
0/150
提交评论