2 游戏组件 GameView

创建PieceImage类:将一个图片和他的ID封装起来。

package com.jan.link.view;

import android.graphics.Bitmap;

public class PieceImage {
	private Bitmap image;
	private int imageId;
	
	public PieceImage(Bitmap image,int imageId) {
		this.image=image;
		this.imageId=imageId;
	}
	
	public void setImage(Bitmap image) {
		this.image = image;
	}
	public void setImageId(int imageId) {
		this.imageId = imageId;
	}
	public Bitmap getImage() {
		return image;
	}
	public int getImageId() {
		return imageId;
	}
	

}
然后创建Piece类。
package com.jan.link.view;

public class Piece {
	private PieceImage image; //方块对应的图片
	private int beginx,beginy;	 //左上角的X,y坐标
	private int indexx,indexy;  //棋盘中的索引
	
	public Piece(int indexX,int indexY) {
		this.indexx=indexX;
		this.indexy=indexY;
	}
	public boolean isSameImage(Piece other){
		if (image==null) {
			if (other.image!=null) {
				return false;
			}
		}
		//只有2个图片的ID一直,则认为2个Piece相等
		return image.getImageId()==other.image.getImageId();
	}
	
	public void setBeginx(int beginx) {
		this.beginx = beginx;
	}
	public int getBeginx() {
		return beginx;
	}
	public void setBeginy(int beginy) {
		this.beginy = beginy;
	}
	public int getBeginy() {
		return beginy;
	}
	public void setImage(PieceImage image) {
		this.image = image;
	}
	public PieceImage getImage() {
		return image;
	}
	public void setIndexx(int indexx) {
		this.indexx = indexx;
	}
	public int getIndexx() {
		return indexx;
	}
	public void setIndexy(int indexy) {
		this.indexy = indexy;
	}
	public int getIndexy() {
		return indexy;
	}
}

最后是继承自View的GameView

package com.jan.link.view;

import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.View;
import com.jan.link.object.LinkInfo;

public class GameView extends View{
	private GameService gameService;  //游戏逻辑的实现类
	private Piece selectedPieces; //保存当前已经被选中的方块
	private LinkInfo  linkInfo;//连接信息的对象。
	private Paint paint; //画笔对象
	private Bitmap selectImage;//选中标示的图片对象。

	public GameView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}
	//构造函数
	public GameView(Context context){
		super(context);
		//设置连接线的信息
		this.paint=new Paint();
		this.paint.setColor(Color.RED);
		this.paint.setStrokeWidth(3);
		
		this.selectImage=ImageUtil.getSelectImage(context);
	}
	//覆盖父类中的onDraw
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		if (this.gameService==null) {
			return;
		}
		Piece[][] pieces=gameService.getPieces();
		if(pieces!=null){
			//遍历数组,绘制方块
			for (int i = 0; i < pieces.length; i++) {
				for (int j = 0; j < pieces[i].length; j++) {
				if (pieces[i][j]!=null) {
					Piece p=pieces[i][j];
					canvas.drawBitmap(p.getImage().getImage(), p.getBeginx(), p.getBeginy(), null);
					}
				}
			}
		}
		//如果连接对象不为空,绘制连接对象
		if (this.linkInfo!=null) {
			drawLine(this.linkInfo,canvas);  //绘制连接线
			this.linkInfo=null;//绘制完成后,清空LinkInfo。
		}
		//如果有选中的图片,选中标示的图片。
		if (this.selectedPieces!=null) {
			canvas.drawBitmap(this.selectImage, this.selectedPieces.getBeginx(), this.selectedPieces.getBeginy(),null);
		}
	}
	
	//根据LinkInfo绘制连接线的方法:
	private void drawLine(LinkInfo linkInfo,Canvas canvas){
		//首先获取linkInfo中封装的所有连接点
		List<Point> points=linkInfo.getLinkPoints();
		//依次遍历Linkinfo中的每个连接点
		for (int i = 0; i < points.size()-1; i++) {
			//获取当前点与下一个点
			Point currentPoint=points.get(i);
			Point nextPoint=points.get(i+1);
			canvas.drawLine(currentPoint.x, currentPoint.y, nextPoint.x, nextPoint.y, this.paint);
		}
		
		//设置当前选中块的方法
		public void setSelectedPiece(Piece piece){
			this.selectedPieces=piece;
		}
		//开始游戏的方法
		public void startGame(){
			this.gameService.start();
			this.postInvalidate();//子线程中更新UI,就用这个。
		}
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值