设为首页 加入收藏

TOP

Android骰子游戏案例源码(一)
2014-11-24 02:01:51 来源: 作者: 【 】 浏览:3
Tags:Android 骰子 游戏 案例 源码

带我的学长布置的第一个任务是做一个骰子的小游戏~~~~好吧,貌似不太难,我把写好的源码拿上来给大家分享下~


可以通过点击按钮或者摇一摇来改变骰子的点数~游戏里有个小BUG,是因为一个参数的问题,我没改,大家自己去发现吧~


既然是骰子游戏,肯定得有骰子类,按照一贯的惯例,注释的很详细,自己看去吧~


具体下载目录在 /2013年资料/12月/3日/Android骰子游戏案例源码


package com.syxy.dice;


import java.util.Random;


import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;


public class Dice {
private Bitmap diceBitmap; //骰子的图片引用
private Bitmap tempBitmap; //骰子的临时引用
int diceWidth; //骰子的宽(6个面的骰子在一张图上画)
int diceHeight; //骰子的高
int avgWidth; //骰子图片的平均宽度
// int x, y; //骰子显示的坐标
private int nowNum; //骰子的当前值
private Random random; //获取随即对象
Paint paint; //画笔的引用

public Dice(Resources res){
paint = new Paint();
paint.setAntiAlias(true); //消除画笔的锯齿
initBitmap(res); //初始化骰子图片
diceWidth = diceBitmap.getWidth(); //初始化图片宽度
diceHeight = diceBitmap.getHeight(); //初始化图片高度
avgWidth = diceWidth / 6; //初始化平均宽度
nowNum = -1;
random = new Random();
System.out.println("diceWidth=" + diceWidth +", diceHeight" + diceHeight + ", avgWidth" + avgWidth);
// x = MySurfaceView.screen_width/2 - avgWidth/2;
// y = MySurfaceView.screen_height/3 - diceHeight/2;
}

public void initBitmap(Resources res){
diceBitmap = BitmapFactory.decodeResource(res, R.drawable.dice);
}

private Bitmap getbitmap() { //根据序号截取大图上相应骰子数图片
return Bitmap.createBitmap(diceBitmap, avgWidth*(nowNum+1), 0, avgWidth, diceHeight);
}

public void playDice(Canvas canvas, int x, int y){ //随即绘制骰子
nowNum = random.nextInt(5);
tempBitmap = getbitmap();
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(tempBitmap, x, y, paint);
}

public void DrawDice(Canvas canvas, int x, int y){ //绘制一个固定的骰子,即值为1的骰子,在投骰子的游戏开始前绘制
tempBitmap = getbitmap();
canvas.drawColor(Color.WHITE);
System.out.println("----------------1-----------------");
canvas.drawBitmap(tempBitmap,x, y, paint);
}
}


既然是游戏,那么游戏的视图类总得有的~


package com.syxy.dice;


import android.content.Context;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;


public class MySurfaceView extends SurfaceView implements Callback, Runnable {


static int screen_width; //设备屏幕的宽
static int screen_height; //设备屏幕的高
int Dice_x;
int Dice_y;
SurfaceHolder holder; //取得surfaceView的控制类的引用
Thread th; //取得线程类的引用
boolean flag; //线程执行的标志位
boolean isRun; //控制骰子的投掷
Canvas canvas = null;
Dice dice; //骰子的引用
private int sleepSpan = 150; //线程休眠时间30
int i; //用于循环的
Handler mHandler;

public MySurfaceView(Context context, AttributeSet attr) {
super(context, attr);
dice = new Dice(this.getResources());
holder = this.getHolder(); //取得控制类
holder.addCallback(this); //取得surfaceView的监视器
th = new Thread(this); //实例化线程
// TODO Auto-generated constructor stub
}


@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}


@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
screen_width = this.getWidth(); //取得屏幕宽度
screen_height = this.getHeight()

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python动态类型简介 下一篇Java中对象与引用的理解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: