水墨五子棋

[文件] GamePanel.java ~ 5KB    下载(36) /**
 * 
 */
package ghost.fivechess.gui;

import ghost.fivechess.bean.Common;
import ghost.fivechess.bean.GameData;
import ghost.fivechess.bean.ImageFactory; http://www.fpshijiazhuang.com/linked/20130207.do; 
import ghost.fivechess.bean.PanelFactory;
import ghost.fivechess.gui.panel.PanelObject;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;

/**
 * 游戏烘托类
 * @author 玄雨
 * @qq 821580467
 * @date 2013-1-19
 */
public class GamePanel extends SurfaceView implements Callback, Common {
	private SurfaceHolder sfh;
	private Paint paint;

	/**
	 * 界面刷星线程
	 */
	private Thread update_thread;

	/**
	 * 游戏目标
	 */
	private PanelObject game;

	/**
	 * 触屏能否可用
	 */
	private boolean clickaviliable;

	public GamePanel(Context context) {
		super(context);
		GameData.status = MENU;
		GameData.context = context;
		sfh = this.getHolder();
		sfh.addCallback(this);
		paint = new Paint();
		paint.setColor(Color.GREEN);
		paint.setAntiAlias(true);
	}

	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		Canvas canvas = sfh.lockCanvas();
		GameData.scaleWidth = (float) canvas.getWidth() / (float) GameData.width;
		GameData.scaleHeight = (float) canvas.getHeight() / (float) GameData.height;
		sfh.unlockCanvasAndPost(canvas);

	}

	public void surfaceCreated(SurfaceHolder holder) {
		Canvas canvas = sfh.lockCanvas();
		GameData.scaleWidth = (float) canvas.getWidth() / (float) GameData.width;
		GameData.scaleHeight = (float) canvas.getHeight() / (float) GameData.height;
		sfh.unlockCanvasAndPost(canvas);
		update_thread = new Thread(new UpdateSurface());
		inilization();
		update_thread.start();
	}

	public void surfaceDestroyed(SurfaceHolder holder) {
		GameData.flag = false;
		update_thread = null;

	}

	public boolean onTouchEvent(MotionEvent event) {
		if (clickaviliable) {
			int x = (int) ((int) event.getX() / GameData.scaleWidth);
			int y = (int) ((int) event.getY() / GameData.scaleHeight);
			game = PanelFactory.getInstance(GameData.status);
			game.clickAction(x, y);
			disableTouch();
		}
		return true;
	}

	/**
	 * 游戏初始化,包含各种图像资源的加载,状态值的初始化
	 */
	private void inilization() {
		ImageFactory.loadImageFromAssets("image/background/background.png",
				"background");
		ImageFactory.loadImageFromAssets("image/logo/logo.png", "logo");
		ImageFactory.loadImageFromAssets("image/button/start.png", "start");
		ImageFactory.loadImageFromAssets("image/button/help.png", "help");
		ImageFactory.loadImageFromAssets("image/button/exit.png", "exit");
		ImageFactory.loadImageFromAssets("image/button/return.png", "return");
		ImageFactory.loadImageFromAssets("image/button/gamestart.png",
				"game_start");
		ImageFactory.loadImageFromAssets("image/button/gamerestart.png",
				"game_restart");
		ImageFactory.loadImageFromAssets("image/button/gamehelp.png",
				"game_help");
		ImageFactory.loadImageFromAssets("image/button/gameback.png",
				"game_back");
		ImageFactory.loadImageFromAssets("image/func/help.png", "help_text");
		ImageFactory.loadImageFromAssets("image/func/win.png", "win_text");
		ImageFactory.loadImageFromAssets("image/func/loss.png", "loss_text");
		ImageFactory.loadImageFromAssets("image/func/chessboard.jpg",
				"chessboard");
		ImageFactory.loadImageFromAssets("image/func/white.png",
				"white");
		ImageFactory.loadImageFromAssets("image/func/black.png",
				"black");
		ImageFactory.loadImageFromAssets("image/func/choose.png",
				"choose");
		GameData.flag = true;
		GameData.debugModel = true;
		GameData.fps = 15;
		GameData.moveSpeedIn=10;
		GameData.moveSpeedOut=20;
		clickaviliable = true;
	}

	private void myDraw() {
		Canvas canvas = sfh.lockCanvas();
		GameData.canvas=canvas;
		GameData.paint=paint;
		canvas.drawColor(Color.BLACK);
		game = PanelFactory.getInstance(GameData.status);
		game.drawSelf();
		sfh.unlockCanvasAndPost(canvas);
	}

	private void myLogic() {
	}

	/**
	 * 暂时禁用触屏点击
	 */
	private void disableTouch() {
		if (clickaviliable) {
			new Thread(new DisableTouch()).start();
		}
	}

	/**
	 * 暂时禁用触屏点击
	 * 
	 * @param time
	 */
	@SuppressWarnings("unused")
	private void disableTouch(long time) {
		if (clickaviliable) {
			new Thread(new DisableTouch(time)).start();
		}
	}

	private class DisableTouch implements Runnable {

		private long time;

		public DisableTouch() {
			this.time = 200;
		}

		public DisableTouch(long time) {
			this.time = time;
		}

		public void run() {
			// TODO Auto-generated method stub
			clickaviliable = false;
			try {
				Thread.sleep(time);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			clickaviliable = true;
			;
		}

	}

	private class UpdateSurface implements Runnable {

		public void run() {
			while (GameData.flag) {
				long start = System.currentTimeMillis();
				myDraw();
				myLogic();
				long end = System.currentTimeMillis();
				if (end - start < GameData.fps) {
					try {
						Thread.sleep(GameData.fps - (end - start));
					} catch (InterruptedException e) {
					}
				}
			}
		}

	}
} http://www.haofapiao.com/linked/20130207.do; 
posted @ 2013-02-08 05:30  chinadiy197601  阅读(326)  评论(0编辑  收藏  举报