中午休息的时候,坐我旁边的同事喜欢玩五子棋,玩的很入迷。作为吃瓜群众的我,偶尔看他玩一两局。于是乎这两天想着实现一个简易的五子棋小游戏。本文重点是图形绘制。
首先看效果图:
下面讲解下思路:
1.绘制棋盘区域
针对手机这种宽度比长度小的,默认取宽度的1/11为棋盘的单位长度,然后根据在onSizeChanged()中获取到测量宽高尺寸getMeasuredWidth()和getMeasuredHeight(),然后在onDraw()中进行画线。
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
width = getMeasuredWidth();
height = getMeasuredHeight();
itemW = width / 11;
row = height / itemW;
column = width / itemW;
coos = new Point[row][column];
//確定坐标点
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
coos[i][j] = new Point(j * itemW, i * itemW);
}
}
//新建 Bitmap 对象,用来双缓冲
if (bitmapBuffer == null)
bitmapBuffer = Bitmap.createBitmap(width, height,
Bitmap.Config.ARGB_8888);
bitmapCanvas = new Canvas(bitmapBuffer);
}
@Override
protected void onDraw(Canvas canvas) {
//先画线
for (int i = 0; i < row; i++) {
//水平线
canvas.drawLine(0, itemW * i, width, itemW * i, paintLine);
//确定每个点的坐标
}
for (int j = 0; j < column; j++) {
//竖直线
canvas.drawLine(itemW * j, 0, itemW * j, height, paintLine);
}
}
2.绘制棋子
棋子有两种,即红黑(别人家的都是黑白,嘿嘿),可以找美工要俩棋子的图片,然后往canvas上绘制图片,也可以自己绘制,这样减少apk的资源包占用。绘制过程中,需要做渐变的处理,系统提供了很多种渐变的支持,我们用RadialGradient渐变。
绘制黑棋过程:
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setShader(new RadialGradient(currPoint.x, currPoint.y, itemW / 3, Color