用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - android代码库

Android版连连看游戏 源码

2013-03-01 作者: 小蜜锋举报

[android]代码库

package whu.iss.sric.view;
 
import java.util.ArrayList;
import java.util.List;
 
import whu.iss.sric.android.R;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
 
public class BoardView extends View {
 
    /**
     * xCount x轴方向的图标数+1
     */
    protected static final int xCount = 10;
    /**
     * yCount y轴方向的图标数+1
     */
    protected static final int yCount = 12;
    /**
     * map 连连看游戏棋盘
     */
    protected int[][] map = new int[xCount][yCount];
    /**
     * iconSize 图标大小
     */
    protected int iconSize;
    /**
     * iconCounts 图标的数目
     */
    protected int iconCounts = 19;
    /**
     * icons 所有的图片
     */
    protected Bitmap[] icons = new Bitmap[iconCounts];
 
    /**
     * path 可以连通点的路径
     */
    private Point[] path = null;
    /**
     * selected 选中的图标
     */
    protected List<Point> selected = new ArrayList<Point>();
 
    public BoardView(Context context, AttributeSet atts) {
        super(context, atts);
 
        calIconSize();
 
        Resources r = getResources();
        loadBitmaps(1, r.getDrawable(R.drawable.fruit_01));
        loadBitmaps(2, r.getDrawable(R.drawable.fruit_02));
        loadBitmaps(3, r.getDrawable(R.drawable.fruit_03));
        loadBitmaps(4, r.getDrawable(R.drawable.fruit_04));
        loadBitmaps(5, r.getDrawable(R.drawable.fruit_05));
        loadBitmaps(6, r.getDrawable(R.drawable.fruit_06));
        loadBitmaps(7, r.getDrawable(R.drawable.fruit_07));
        loadBitmaps(8, r.getDrawable(R.drawable.fruit_08));
        loadBitmaps(9, r.getDrawable(R.drawable.fruit_09));
        loadBitmaps(10, r.getDrawable(R.drawable.fruit_10));
        loadBitmaps(11, r.getDrawable(R.drawable.fruit_11));
        loadBitmaps(12, r.getDrawable(R.drawable.fruit_12));
        loadBitmaps(13, r.getDrawable(R.drawable.fruit_13));
        loadBitmaps(14, r.getDrawable(R.drawable.fruit_14));
        loadBitmaps(15, r.getDrawable(R.drawable.fruit_15));
        loadBitmaps(16, r.getDrawable(R.drawable.fruit_17));
        loadBitmaps(17, r.getDrawable(R.drawable.fruit_18));
        loadBitmaps(18, r.getDrawable(R.drawable.fruit_19));
    }
 
    /**
     *
     * 计算图标的长宽
     */
    private void calIconSize() {
        DisplayMetrics dm = new DisplayMetrics();
        ((Activity) this.getContext()).getWindowManager().getDefaultDisplay()
                .getMetrics(dm);
        iconSize = dm.widthPixels / (xCount);
    }
 
    /**
     *
     * @param key
     *            特定图标的标识
     * @param d
     *            drawable下的资源
     */
    public void loadBitmaps(int key, Drawable d) {
        Bitmap bitmap = Bitmap.createBitmap(iconSize, iconSize,
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        d.setBounds(0, 0, iconSize, iconSize);
        d.draw(canvas);
        icons[key] = bitmap;
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
 
        /**
         * 绘制连通路径,然后将路径以及两个图标清除
         */
        if (path != null && path.length >= 2) {
            for (int i = 0; i < path.length - 1; i++) {
                Paint paint = new Paint();
                paint.setColor(Color.CYAN);
                paint.setStyle(Paint.Style.STROKE);
                paint.setStrokeWidth(3);
                Point p1 = indextoScreen(path[i].x, path[i].y);
                Point p2 = indextoScreen(path[i + 1].x, path[i + 1].y);
                canvas.drawLine(p1.x + iconSize / 2, p1.y + iconSize / 2, p2.x
                        + iconSize / 2, p2.y + iconSize / 2, paint);
            }
            Point p = path[0];
            map[p.x][p.y] = 0;
            p = path[path.length - 1];
            map[p.x][p.y] = 0;
            selected.clear();
            path = null;
        }
        /**
         * 绘制棋盘的所有图标 当这个坐标内的值大于0时绘制
         */
        for (int x = 0; x < map.length; x += 1) {
            for (int y = 0; y < map[x].length; y += 1) {
                if (map[x][y] > 0) {
                    Point p = indextoScreen(x, y);
                    canvas.drawBitmap(icons[map[x][y]], p.x, p.y, null);
                }
            }
        }
 
        /**
         * 绘制选中图标,当选中时图标放大显示
         */
        for (Point position : selected) {
            Point p = indextoScreen(position.x, position.y);
            if (map[position.x][position.y] >= 1) {
                canvas.drawBitmap(icons[map[position.x][position.y]], null,
                        new Rect(p.x - 5, p.y - 5, p.x + iconSize + 5, p.y
                                + iconSize + 5), null);
            }
        }
    }
 
    /**
     *
     * @param path
     */
    public void drawLine(Point[] path) {
        this.path = path;
        this.invalidate();
    }
 
    /**
     * 工具方法
     *
     * @param x
     *            数组中的横坐标
     * @param y
     *            数组中的纵坐标
     * @return 将图标在数组中的坐标转成在屏幕上的真实坐标
     */
    public Point indextoScreen(int x, int y) {
        return new Point(x * iconSize, y * iconSize);
    }
 
    /**
     * 工具方法
     *
     * @param x
     *            屏幕中的横坐标
     * @param y
     *            屏幕中的纵坐标
     * @return 将图标在屏幕中的坐标转成在数组上的虚拟坐标
     */
    public Point screenToindex(int x, int y) {
        int ix = x / iconSize;
        int iy = y / iconSize;
        if (ix < xCount && iy < yCount) {
            return new Point(ix, iy);
        } else {
            return new Point(0, 0);
        }
    }
}

[代码运行效果截图]


Android版连连看游戏 源码

[源代码打包下载]




网友评论    (发表评论)

共45 条评论 1/2页  1  2  >

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...