以说程序虽小但五味俱全,作为入门学习是再合适不过的了。网络上流传的五子棋游戏界面精美,风格各异,实在是已经达到巅峰之作,作者在此并不想去做那锦上添花之举,所以对于本次设计论文有一个明确的定位,在完成五子棋游戏的基本对战功能的设计同时不再做各种附加功能的加强而是对其中所涉及的算法进行更加深入的学习。 3 Android开发环境
本章将主要介绍如何构建Android开发环境,包括获取Android SDK、Eclipse以及进行Android Eclipse插件设置等。 3.1 Android开发环境变量配置 3.1.1 JDK的配置
JDK的配置并没有什么值得特别叙述的东西,在此主要阐述下JDK环境变量的配置问题。首先右键点击我的电脑 -> 属性 -> 高级系统设置,点击下面的环境变量,在下面的“系统变量”处选择新建,在变量名处输入 JAVA_HOME在变量值输入JDK路径,确定后再新建一个变量名为Classpath,变量值为%JAVA_HOME%librt.jar;%JAV--A_HOME%libtools.jar的变量 , 确定后找到PATH的变量,双击或点击编辑,在变量值最前面加上%JAVA_HOME%bin; 最后点击确定按钮即可。如图3-1所示。
图3-1 JDK环境变量设置
3.1.2 Android开发插件的安装 打开Eclipse, 在菜单栏上选择 _point)
2 将图片画到Bitmap(内存缓冲区)的过程
为指定颜色对应的图片创建bitmap对象并放入到数组中
public void fillPointArrays(int color,Drawable drawable) {
创建Bitmap内存缓冲区(申请内存空间)
Bitmap bitmap = Bitmap.createBitmap(POINT_SIZE, POINT_SIZE,
Bitmap.Config.ARGB_8888);
创建画布、并设置将内容画到上面创建的Bitmap上 Canvas canvas = new Canvas(bitmap); 设置资源画的范围大小
drawable.setBounds(0, 0, POINT_SIZE, POINT_SIZE); 将图像资源画到缓冲区中 drawable.draw(canvas);
}
把缓存区引用存进数组中(注意将下标定义以颜色命名的常量) bitmaps[color] = bitmap;
在onDraw方法将其在随意位置画出
canvas.drawBitmap(bitmaps[color_index],0,0,paint);
4.1.3 在触摸处画棋子
通过onTouchEvent方法获得触摸位置座标,以此座标创建一个棋子,触发onDraw方法,把刚才的棋子画出来
public boolean onTouchEvent(MotionEvent event) {
Point point = newPoint(event.getX(), event.getY());
刷新一下棋盘,触发onDraw函数
refressCanvas();
}
4.1.4 newPoint方法将此座标调整到对应的棋位上(以手工画图的方式确定棋子四周的范围的计算方)
private Point newPoint(Float x, Float y){
是否在棋盘线以外
boolean isOutsideChessboard = true; Point p = new Point(0, 0); for (int i = 0; i <= maxX; i++) {
if (((i-1) * POINT_SIZE + xOffset + POINT_SIZE2) <= x
&& x < (i * POINT_SIZE + xOffset + POINT_SIZE2)) {
p.setX(i);
找到横座标,证明不在棋盘线以外 isOutsideChessboard = false; break;
}
}
如果横坐标在棋盘线外,返回空,不下棋子 if(isOutsideChessboard){
return null;
} 重置标志
isOutsideChessboard = true; for (int i = 0; i <= maxY; i++) { if (((i-1) * POINT_SIZE + yOffset + POINT_SIZE2) <= y
&& y < (i * POINT_SIZE + yOffset + POINT_SIZE2)) {
p.setY(i);
找到纵座标,也不在棋盘线外 isOutsideChessboard = false;
break;
}
}
纵标在棋盘线外
if(isOutsideChessboard){
return null;
}
横座标和纵座标都不在棋盘线外
return p;
}
4.2 人人对战
4.2.1 设置标记--whoRun
表示应该轮到谁下棋,1为玩家1下,2为玩家2下,-1表示玩家正在下 默认第一个玩家先行 private int whoRun = 1; private void setPlayer1Run(){ whoRun = 1;
}
是否轮到人类玩家下子
private boolean isPlayer1Run(){
}
return whoRun==1;
是否轮到人类玩家下子
private void setPlayer2Run(){ }
whoRun = 2;
private boolean isPlayer2Run(){ }
return whoRun==2;
正在下的过程中,主是因为电脑有较长的计算时间,这期间一定不可以再响应触摸事件
private void setOnProcessing(){ }
whoRun = -1;
是否正在下某一步棋过程中,主是电脑下棋时需要较长的计算时间,这期间一定
不可以再响应触摸事件
private boolean isProcessing() { }
return whoRun == -1;
4.2.2 改写onTouchEvent方法,监听触摸事件,在触摸处下棋子 处理触摸事件
public boolean onTouchEvent(MotionEvent event) {
只处理开局后的触摸弹起事件
if(event.getAction()!=MotionEvent.ACTION_UP){ }
是否正在处理一步棋的过程中 if(isProcessing()){
return true; return true;
相关推荐: