现在的位置: 首页 > 综合 > 正文

Android 水果机游戏实例解析

2013年10月06日 ⁄ 综合 ⁄ 共 43159字 ⁄ 字号 评论关闭

 [Cocos2d-x相关教程来源于红孩儿的游戏编程之路 CSDN博客地址:http://blog.csdn.net/honghaier]  

       Android 水果机游戏实例解析

         近段时间在手游方面的学习主要集中在Cocos2d-x上。有引擎的确是好哇!不用再像过去费劲的使用Android上底效的SurfaceView或者用OpenGL ES一点一点去建立底层框架。今天以我在此前学Android时自已所策划编写的一个小工程来记念一下,告别那段时光。

      这个游戏名叫“水果机”,80后不少同好都在街厅中玩过吧。还是喜欢下注“苹果”。在移植到Android上后,我增加了一些内容并提供了双人对战以丰富它的玩法。下面我来介绍一下:

      玩家运行程序后。首先是主界面:

为了吸引人气,用了一张美眉(网上找的图自已PS的),宅男福利,我运行调试时也总要多看两眼。QQ群已经不在了。不必再加入。

主界面上有菜单四项:

“开始游戏”点击后进入游戏。一会儿讲。

“游戏设置”点击后进入设置界面。这里可以选择单人还是双人玩,在单人玩法中是否弹出打气球的随机奖励以及音效和音乐的设置。“打气球”是我在此基础上的一种创新吧,就是单人玩时每次轮盘经过最下面中间位置时会随机飞出来一些气球,可以选择相应水果位置飞出一些飞镖来击中它爆出彩蛋奖励!

“游戏帮助”: 点击后进入帮助界面。

“退出游戏”点击后关闭程序退出。

咱们直接选“开始游戏”,即进入游戏界面:

单人玩法:


这是一个单人游戏的游戏界面,最上方是筹码显示,初时都是10个。中间是轮盘,下方是下注区。现在玩家可以下注了,在下方水果下注区域(黄或绿区)中触屏,可以在相应水果档里下想要的注数。点击中间的手形按钮可以开始转动轮盘。

在轮盘每次经过最下方中间位置,会飞出一个气球,玩家可以点击下注区的水果以控制轮盘的相应水果位置向中间射出飞镖,击中有随机奖励:

双人对战玩法:

这是一个双人对战的游戏界面,最上方是两个人的筹码,初时都是10个。中间是轮盘,下方是下注区。现在1号玩家可以下注了,在下方水果下注区域(黄或绿区)中触屏,可以在相应水果档里下想要的注数。点击中间的手形按钮可以让二号玩家开始下注,都下完注后点击中间的手会开始转动轮盘。

中奖后会有提示继续。

      好的,游戏介绍完了,咱们现在来学习一下如何进行开发:

工程共有11个源文件组成:


介绍一下:

WinnerActivity.java:主程序框架。

WinnerRecord.java:筹码计数器。

Apple.java:主游戏逻辑框架

AppThread.java:多线程更新逻辑。

AppleView.java:游戏视图。

DrawThread.java:多线程更新

FeiBiao.java:飞镖类

FeiBiaoThread.java:多线程更新飞镖逻辑。

QiQiu.java:气球类

QiQiuThread.java: 多线程更新气球逻辑。

Tile.java:轮盘的格子类。

咱们就按这个清单来讲解代码:

一. WinnerActivity.java:主程序框架。

package win.gam;

import win.gam.AppleView;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class WinnerActivity extends Activity {
    /** Called when the activity is first created. */
	AppleView appleview;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        requestWindowFeature(Window.FEATURE_NO_TITLE);		//设置不显示标题
        getWindow().setFlags(									//设置为全屏模式
        		WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        		WindowManager.LayoutParams.FLAG_FULLSCREEN);
        appleview = new AppleView(this);	//创建BallView对象
        setContentView(appleview);			//将屏幕设置为BallView对象
    }
  }

二.WinnerRecord.java:筹码计数器。

package win.gam;

import android.graphics.Color;

public class WinnerRecord {
	
	int		m_WinnerID;				//ID
	int		m_IconSize;				//我的金币数量
	int		m_AppleRecord[];		//对应的水果下注数量
	int		m_Color;				//色彩
	//构造函数
	public	WinnerRecord(int vWinnerID)
	{
		m_WinnerID = vWinnerID ;
		switch(m_WinnerID)
		{
		case 0:
			m_Color = Color.YELLOW ;
			break;
		case 1:
			m_Color = Color.GREEN;
			break;
		case 2:
			m_Color = Color.BLUE;
			break;
		case 3:
			m_Color = Color.WHITE;
			break;
		}
		m_AppleRecord = new int[8];
		for(int i = 0 ; i < 8 ; i++)
		{
			m_AppleRecord[i] = 0;
		}
		m_IconSize = 0;
	}
	//取得色彩
	public	int		GetColor()
	{
		return m_Color;
	}
	//设置金币数量
	public	void	SetIconSize(int vIconSize)
	{
		m_IconSize = vIconSize;
	}
	//取得金币数量
	public	int		GetIconSize()
	{
		return	m_IconSize;
	}
	//增加金币数量
	public	void	AddIcon(int vAddIconSize)
	{
		m_IconSize += vAddIconSize;
	}
	//减少金币数量
	public	void	DecIcon()
	{
		if(m_IconSize>0)
		{
			m_IconSize--;
		}
	}
	//清空金币
	public	void	CleanIcon()
	{
		m_IconSize = 0;
	}
	//设置对应的水果的数量
	public	void	SetRecord(int vAppleIndex,int vRecord)
	{
		m_AppleRecord[vAppleIndex] = vRecord;
	}
	public	int		GetRecord(int vAppleIndex)
	{
		return m_AppleRecord[vAppleIndex];
	}
	//增加对应的水果的数量
	public	void	AddRecord(int vAppleIndex)
	{
		if(m_IconSize > 0)
		{
			m_AppleRecord[vAppleIndex]++;
			m_IconSize--;
		}
	}
	
	//清空对应的水果数量
	public	void	CleanRecord(int vAppleIndex )
	{
		if(vAppleIndex >= 0)
		{
			m_AppleRecord[vAppleIndex] = 0;
		}
		else
		{
			for(int i = 0 ; i < 8 ; i++)
			{
				m_AppleRecord[i] = 0;
			}
		}
	}
}

三.Apple.java:主游戏逻辑框架

package win.gam;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import win.gam.WinnerActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.os.Handler;
import android.os.Message;

public class Apple
{
private static final Bitmap Bitmap = null;

final int INITSTATE = 0; //初始状态
final int SETTINGSTATE = 1; //游戏设置
final int HELPSTATE = 2; //游戏帮助
final int GAMESTATE = 3; //游戏中
final int GAMEEXIT = 4; //游戏退出

Bitmap m_WelcomeUI = null; //欢迎界面
Bitmap m_BitMapArray[] = null; //位置
final int m_AppleBitMapSize = 17; //数量
int m_GameState = INITSTATE; //初始状态

float m_HelpTextMinTop = 70; //帮助状态时的最小文字位置
float m_HelpTextTop = m_HelpTextMinTop; //帮助状态时的文字Y位置

int m_Winsize[]; //大
WinnerActivity winnerActivity; //视窗
Tile appleTileArray[]; //水果格子
float m_ScreenWidth; //屏幕宽度
float m_ScreenHeight; //屏幕高度
int m_TileCows = 8; //列数
int m_TileRows = 7; //行数,不算头尾
int m_TileW = 30; //格子宽
int m_TileH = 30; //格子高

int m_Left = 0; //左上角X
int m_Top = 30; //左上角Y

int m_TileCount = 0; //格子总数
int m_AppleImageArray[]; //水果图ID数组
WinnerRecord m_WinnerRecord[]; //玩家
Paint m_WinnerPaint[]; //创建画笔对象
int m_WinnerSize = 1; //玩家数量
final int m_MaxWinnerSize = 2; //最大玩家数量
int m_CurrWinnerID = 0; //当前玩家ID
int m_InitIconSize = 10; //初始金币数量
int m_ShowIconHeight= 60; //显示玩家下注的高度
int m_ShowIconTop = 0; //显示玩家下注时的位置
int m_ShowStartBtnX = 0; //显示GO按钮的位置X
int m_ShowStartBtnY = 0; //显示GO按钮的位置Y

double m_GameExitTime = 0; //获取当前时间,单位为纳秒
double m_currenttime = 0; //记录当前时间
double m_starttime = 0; //开始的时间
double m_TimeLength = 0; //间隔时间
int m_currentpathid = 0; //路径ID

double m_Timer = 1000; //每隔多久前进一次
double m_DecTimer = 10; //加速度
double m_MinTimer = 20; //最小时间间隔

boolean m_bStartRun = false; //开始运动
Matrix m_BackGroundMatrix = new Matrix();
Matrix m_CenterMatrix = new Matrix();
float m_ScaleW = 1.0f;
float m_ScaleH = 1.0f;

int m_HandIndex_apple = -1; //手的显示索引_对应水果
int m_HandIndex_winner = -1; //手的显示索引_对应玩家
AppleThread m_appleThread = null; //水果线程
MediaPlayer m_BackMusic; //背景音乐
SoundPool m_SoundPool; //音效控制器
HashMap<Integer,Integer> m_SoundPoolMap; //音效容器

boolean m_SoundOpen = true; //音效开关
boolean m_MusicOpen = true; //声音天并
boolean m_QiQiuOpen = true; //是否弹出气球

int m_RunNum = 0; //运行次数
public QiQiu m_QiQiu = null; //气球
QiQiuThread m_QiQiuThread = null; //气球线程
public boolean m_QiQiuIsLive = false; //气球是否可用
public ArrayList<FeiBiao> m_FeiBiaoArray = new ArrayList<FeiBiao>(); //飞镖对象数组
FeiBiaoThread m_FeiBiaoThread = null; //飞镖线程

int m_ShowBaoWu = -1; //宝物
int m_WinnerAppleID = -1; //胜利者

boolean m_ShowWinner = true; //显示胜利者
Random random = new Random(); //随机数

int m_WinAllApple = 0; //0没意义,1所有水果都中奖,2中奖水果X2倍
final int m_WinAllAppleID = 777; //都中奖

Paint m_UITitle = new Paint(); //创建UI的标题画笔对象
int m_UITitleHeight = 0; //创建UI时的标题字体大小
Paint m_UIText = new Paint(); //创建UI的文字画笔对象t
int m_UITextHeight = 0; //创建UI的文字画笔字体大小
//Paint m_UIText2 = new Paint();
//用来更新多线程的消息
Handler myHandler = new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what == 1)
{ //收到放气球的消息
PutOutQiQiu();
}
if(msg.what == 2)
{ //返回主界面
m_GameState = INITSTATE ;
}
}
};
//构造函数
Apple(WinnerActivity Activity,int vScreenWidth,int vScreenHeight)
{
winnerActivity = Activity;
m_ScreenWidth = vScreenWidth; //屏幕宽度
m_ScreenHeight = vScreenHeight;
//屏幕高度
m_ScaleW = m_ScreenWidth/240.0f ;
m_ScaleH = m_ScreenHeight/400.0f ;
m_TileW = (int) (m_ScaleW * 30); //格子宽
m_TileH = (int) (m_ScaleH * 32); //格子高
m_Left = (int) (0 * m_ScaleW); //左上角X
m_Top = (int) (30* m_ScaleH); //左上角Y
m_HelpTextMinTop = 70* m_ScaleH; //帮助状态时的最小文字位置
m_HelpTextTop = m_HelpTextMinTop; //帮助状态时的文字Y位置
InitApple(m_InitIconSize);
}

//初始化
public void InitApple(int vIconSize)
{
m_BackMusic = MediaPlayer.create(winnerActivity, R.raw.back);//背景音乐
//m_IconSound = MediaPlayer.create(winnerActivity, R.raw.icon);//放金币的音乐
m_SoundPool = new SoundPool(4,AudioManager.STREAM_MUSIC,100);
m_SoundPoolMap = new HashMap<Integer,Integer>();
m_SoundPoolMap.put(1, m_SoundPool.load(winnerActivity, R.raw.icon,1)); //加金币
m_SoundPoolMap.put(2, m_SoundPool.load(winnerActivity, R.raw.path,1)); //路径
m_SoundPoolMap.put(3, m_SoundPool.load(winnerActivity, R.raw.fly,1)); //飞镖
m_SoundPoolMap.put(4, m_SoundPool.load(winnerActivity, R.raw.bomb,1)); //打破气球
m_SoundOpen = true;
m_MusicOpen = true;
m_QiQiuOpen = true;
//开始播放背景音乐
if(true == m_MusicOpen)
{
m_BackMusic.start();
}
//玩家管理器
m_WinnerRecord = new WinnerRecord[m_MaxWinnerSize];
m_WinnerPaint = new Paint[m_MaxWinnerSize];
for(int i = 0 ; i < m_MaxWinnerSize ; i++)
{
//玩家
m_WinnerRecord[i] = new WinnerRecord(i);
m_WinnerRecord[i].SetIconSize(vIconSize);

//字体
m_WinnerPaint[i] = new Paint();
String familyName_Player = "宋体";
Typeface font_Player = Typeface.create(familyName_Player, Typeface.BOLD);
m_WinnerPaint[i].setTypeface(font_Player);
m_WinnerPaint[i].setColor(m_WinnerRecord[i].GetColor()); //为画笔设置颜色
m_WinnerPaint[i].setTextSize(16* m_ScaleH); //为画笔设置字体大小
m_WinnerPaint[i].setAntiAlias(true); //设置抗锯齿
}

m_WelcomeUI = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.ui);//欢迎界面

int tBitMapSize = 50;
m_BitMapArray = new Bitmap[tBitMapSize];

m_BitMapArray[0] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.a1);//苹果0
m_BitMapArray[1] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.a2);//桔子1
m_BitMapArray[2] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.a3);//橄榄2
m_BitMapArray[3] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.a4);//铃铛3
m_BitMapArray[4] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.a5);//西瓜4
m_BitMapArray[5] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.a6);//双星5
m_BitMapArray[6] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.a7);//双7 6
m_BitMapArray[7] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.a8);//黑板 7

m_BitMapArray[8] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.b1);//苹果 8
m_BitMapArray[9] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.b2);//桔子 9
m_BitMapArray[10] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.b3);//橄榄 10
m_BitMapArray[11] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.b4);//铃铛 11
m_BitMapArray[12] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.b5);//西瓜 12
m_BitMapArray[13] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.b6);//双星 13
m_BitMapArray[14] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.b7);//双7 14
m_BitMapArray[15] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.b8);//黑板 15

m_BitMapArray[16] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.a0);//招财进宝 16

m_BitMapArray[17] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.gp);//绿点 17
m_BitMapArray[18] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.rp);//红点 18

m_BitMapArray[19] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.c1);//苹果 19
m_BitMapArray[20] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.c2);//桔子 20
m_BitMapArray[21] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.c3);//橄榄 21
m_BitMapArray[22] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.c4);//铃铛22
m_BitMapArray[23] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.c5);//西瓜 23
m_BitMapArray[24] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.c6);//双星 24
m_BitMapArray[25] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.c7);//双7 25
m_BitMapArray[26] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.c8);//黑板26

//手的类型
m_BitMapArray[27] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.hand1);//黄手
m_BitMapArray[28] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.hand2);//绿手
m_BitMapArray[29] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.hand3);//蓝手
m_BitMapArray[30] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.hand4);//白手

//背景图
m_BitMapArray[31] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.background1);//背景
//GO按钮
m_BitMapArray[32] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.go);//开始
//金币
m_BitMapArray[33] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.icon);//金币

//气球
m_BitMapArray[34] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.qq1);//气球1
m_BitMapArray[35] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.qq2);//气球2
m_BitMapArray[36] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.qq3);//气球3
m_BitMapArray[37] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.qq4);//气球4
m_BitMapArray[38] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.qq5);//气球5
m_BitMapArray[39] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.qq6);//气球6

//箭头
m_BitMapArray[40] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.jt1);//箭头1右
m_BitMapArray[41] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.jt1_2);//箭头1左
m_BitMapArray[42] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.jt2);//箭头2右
m_BitMapArray[43] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.jt2_2);//箭头2左

//开始按钮
m_BitMapArray[44] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.start);//开始按钮
//设置按钮
m_BitMapArray[45] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.setting);//设置按钮
//帮助按钮
m_BitMapArray[46] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.help);//帮助按钮
//退出按钮
m_BitMapArray[47] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.exit);//退出按钮
//菜单按钮
m_BitMapArray[48] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.menu);//菜单按钮
//中奖钱袋
m_BitMapArray[49] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.money);//中奖钱袋
//胜数
m_Winsize = new int[m_AppleBitMapSize];
m_Winsize[0] = 5;
m_Winsize[1] = 10;
m_Winsize[2] = 15;
m_Winsize[3] = 20;
m_Winsize[4] = 20;
m_Winsize[5] = 30;
m_Winsize[6] = 40;
m_Winsize[7] = 100;

m_Winsize[8] = 2;
m_Winsize[9] = 2;
m_Winsize[10] = 2;
m_Winsize[11] = 2;
m_Winsize[12] = 2;
m_Winsize[13] = 2;
m_Winsize[14] = 2;
m_Winsize[15] = 50;

m_Winsize[16] = 0;

m_bStartRun = false;

//设置缩放
m_BackGroundMatrix.reset();
float bW1 = m_WelcomeUI.getWidth() ;
float bH1 = m_WelcomeUI.getHeight() ;
float bW2 = m_ScreenWidth ;
float bH2 = m_ScreenHeight;
float tScaleW = bW2/bW1;
float tScaleH = bH2/bH1;
m_BackGroundMatrix.postScale(tScaleW, tScaleH);

String familyName = "宋体";
Typeface font = Typeface.create(familyName, Typeface.BOLD);
m_UITitle.setTypeface(font);
m_UITitle.setColor(Color.BLACK); //为画笔设置颜色
m_UITitleHeight = (int) (20 * m_ScaleH);
m_UITitle.setTextSize(m_UITitleHeight); //为画笔设置字体大小
m_UITitle.setAntiAlias(true); //设置抗锯齿

String familyName2 = "宋体";
Typeface font2 = Typeface.create(familyName2, Typeface.BOLD);
m_UIText.setTypeface(font2);
m_UIText.setColor(Color.BLACK); //为画笔设置颜色
m_UITextHeight = (int) (16 * m_ScaleH);
m_UIText.setTextSize(m_UITextHeight); //为画笔设置字体大小
m_UIText.setAntiAlias(true); //设置抗锯齿

//创建一个气球
m_QiQiu = new QiQiu();
//创建气球线程
m_QiQiuThread = new QiQiuThread(this);
//创建飞标线程
m_FeiBiaoThread = new FeiBiaoThread(this);
//创建线程
m_appleThread = new AppleThread(this);
//启动线程
StartThread();
}
//初始化游戏界面
public void InitGameUI()
{
if( 1 == m_WinnerSize )
{
m_ShowIconHeight = (int) (60 * m_ScaleH) ;
}
else
{
m_ShowIconHeight = (int) (80 * m_ScaleH) ;
}
m_ShowIconTop = (int) (m_ScreenHeight - m_ShowIconHeight); //显示玩家下注的位置高度

m_CurrWinnerID = 0;
m_InitIconSize = 10; //初始时10个金币
m_RunNum = 0;

m_CenterMatrix.reset();
float bW1 = m_BitMapArray[31].getWidth() ;
float bH1 = m_BitMapArray[31].getHeight() ;
float bW2 = m_ScreenWidth ;
float bH2 = m_ScreenHeight - m_ShowIconHeight;
float tScaleW = bW2/bW1;
float tScaleH = bH2/bH1;
m_CenterMatrix.postScale(tScaleW, tScaleH);

//计算格子行数与列数
m_TileCows = (int) (m_ScreenWidth / m_TileW);
m_TileRows = (int) ((m_ScreenHeight - m_Top - m_ShowIconHeight) / m_TileH - 2); //上下两行的要去掉

//格子数量
m_TileCount = m_TileCows * 2 + m_TileRows * 2;
m_AppleImageArray = new int[m_TileCount];

//先随机生成格子盘面
for(int i = 0 ; i < m_TileCount ; i++)
{
m_AppleImageArray[i] = random.nextInt(m_AppleBitMapSize); //起始位置

if(m_AppleImageArray[i] == 7 || m_AppleImageArray[i] == 15)
{
m_AppleImageArray[i] = 0;
continue;
}
else if(m_AppleImageArray[i] == 6||m_AppleImageArray[i] == 14)
{
m_AppleImageArray[i] = 0;
continue;
}
else if(m_AppleImageArray[i] == 5||m_AppleImageArray[i] == 13)
{
m_AppleImageArray[i] = 0;
continue;
}
else if(m_AppleImageArray[i] == 4||m_AppleImageArray[i] == 12)
{
m_AppleImageArray[i] = 0;
continue;
}
}

//两边中央必须是招财进宝
int tTheTileIndex = m_TileCows + m_TileRows / 2;
m_AppleImageArray[tTheTileIndex] = 16 ;

tTheTileIndex = 2 * (m_TileCows + m_TileRows) - m_TileRows / 2;
m_AppleImageArray[tTheTileIndex] = 16 ;

//上边中央必须是大小黑板
tTheTileIndex = m_TileCows / 2;
m_AppleImageArray[tTheTileIndex-1] = 15 ;
m_AppleImageArray[tTheTileIndex] = 7 ;

//下边中央必须是大小七
tTheTileIndex = 2 * m_TileCows + m_TileRows - m_TileCows / 2;
m_AppleImageArray[tTheTileIndex+1] = 14 ;
m_AppleImageArray[tTheTileIndex] = 6 ;

//右上角下边必须是大小西瓜
tTheTileIndex = m_TileCows ;
m_AppleImageArray[tTheTileIndex] = 4;
m_AppleImageArray[tTheTileIndex+1] = 12 ;

//左下角上边必须是大小星
tTheTileIndex = 2 * m_TileCows + m_TileRows ;
m_AppleImageArray[tTheTileIndex] = 5;
m_AppleImageArray[tTheTileIndex+1] = 13 ;

//左上角是苹果
m_AppleImageArray[0] = 0 ;
//左1是小苹果
m_AppleImageArray[1] = 8 ;

//右上角是桔子
m_AppleImageArray[m_TileCows-1] = 1 ;
m_AppleImageArray[m_TileCows-2] = 9 ;

//左下角是橄榄
m_AppleImageArray[2 * m_TileCows + m_TileRows-1] = 2 ;
m_AppleImageArray[2 * m_TileCows + m_TileRows-2] = 10 ;

//右下角是铃铛
m_AppleImageArray[m_TileCows + m_TileRows] = 3 ;
m_AppleImageArray[m_TileCows + m_TileRows+1] = 11 ;

//生成格子
appleTileArray = new Tile[m_TileCount];
for(int i = 0 ; i < m_TileCount ; i++)
{
appleTileArray[i] = new Tile();
int tImageIndex = m_AppleImageArray[i];
appleTileArray[i].SetImage(tImageIndex,m_BitMapArray[tImageIndex]);
}

//上行
int tCount = 0;
for(int i = 0 ; i < m_TileCows ; i++)
{
appleTileArray[tCount].SetTile(i*m_TileW+m_Left,m_Top);
tCount++;
}
//右列
for(int i = 0 ; i < m_TileRows ; i++)
{
appleTileArray[tCount].SetTile((m_TileCows-1)*m_TileW+m_Left,(i+1)*m_TileH+m_Top);
tCount++;
}
//下行
for(int i = m_TileCows-1 ; i >= 0 ; i--)
{
appleTileArray[tCount].SetTile(i*m_TileW+m_Left,(m_TileRows+1)*m_TileH+m_Top);
tCount++;
}
//左列
for(int i = m_TileRows-1 ; i >= 0 ; i--)
{
appleTileArray[tCount].SetTile(m_Left,(i+1)*m_TileH+m_Top);
tCount++;
}

m_starttime = System.nanoTime();//获取当前时间,单位为纳秒
m_Timer = 500; //每隔多久前进一次
m_DecTimer = 40; //加速度
m_MinTimer = 0; //最小时间间隔
m_currentpathid = random.nextInt(m_TileCount); //起始位置

}
//退出释放
public void Release()
{
m_BackMusic.stop();
m_BackMusic = null;
m_SoundPool.stop(m_SoundPoolMap.get(1));
m_SoundPool.stop(m_SoundPoolMap.get(2));
m_SoundPool.stop(m_SoundPoolMap.get(3));
m_SoundPool.stop(m_SoundPoolMap.get(4));
m_SoundPool = null;
m_SoundOpen = false;
m_MusicOpen = false;
}
//取得屏幕宽度
public float GetScreenWidth()
{
return m_ScreenWidth ;
}
//取得屏幕高度
public float GetScreenHeight()
{
return m_ScreenHeight;
}

//播放音效
public void PlaySound(int sound,int loop)
{
if(true == m_SoundOpen)
{
AudioManager mgr = (AudioManager)winnerActivity.getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;
//播放音效
m_SoundPool.play(m_SoundPoolMap.get(sound), volume, volume, 1, loop, 1f);
}
}
//设置玩家人数
public void SetWinnerSize(int vWinnerSize)
{
m_WinnerSize = vWinnerSize;
}
//打开气球
public void EnableQiQiu(boolean vQiQiuOpen)
{
m_QiQiuOpen = vQiQiuOpen ;
}
//打开音效
public void EnableSound(boolean vSoundOpen)
{
m_SoundOpen = vSoundOpen;
}
//打开音乐
public void EnableMusic(boolean vMusicOpen)
{
m_MusicOpen = vMusicOpen;
if(true == m_MusicOpen)
{
m_BackMusic.start();
}
else
{
m_BackMusic.pause();
}
}
//播放金币声音
public void PlayIconSound()
{
PlaySound(1,0);
}
//播放路径声音
public void PlayPathSound()
{
PlaySound(2,0);
}
//播放飞镖声音
public void PlayFeiBiaoSound()
{
PlaySound(3,0);
}
//播放打破气球声音
public void PlayBombSound()
{
PlaySound(4,0);
}
//改变窗口大小
public void ChangeWindowSize(int vScreenWidth,int vScreenHeight)
{
m_ScreenWidth = vScreenWidth; //屏幕宽度
m_ScreenHeight = vScreenHeight; //屏幕高度
//屏幕高度
m_ScaleW = m_ScreenWidth/240.0f ;
m_ScaleH = m_ScreenHeight/400.0f ;
m_TileW = (int) (m_ScaleW * 30); //格子宽
m_TileH = (int) (m_ScaleH * 32); //格子高

m_HelpTextMinTop = (int) (70* m_ScaleH); //帮助状态时的最小文字位置
m_HelpTextTop = m_HelpTextMinTop; //帮助状态时的文字Y位置
m_BackGroundMatrix.reset();
float bW1 = m_WelcomeUI.getWidth() ;
float bH1 = m_WelcomeUI.getHeight() ;
float bW2 = m_ScreenWidth ;
float bH2 = m_ScreenHeight;
float tScaleW = bW2/bW1;
float tScaleH = bH2/bH1;
m_BackGroundMatrix.postScale(tScaleW, tScaleH);

m_CenterMatrix.reset();
bW1 = m_BitMapArray[31].getWidth() ;
bH1 = m_BitMapArray[31].getHeight() ;
bW2 = m_ScreenWidth ;
bH2 = m_ScreenHeight - m_ShowIconHeight;
tScaleW = bW2/bW1;
tScaleH = bH2/bH1;
m_CenterMatrix.postScale(tScaleW, tScaleH);
}
//开始线程
public void StartThread()
{
if(!m_appleThread.isAlive())
{
m_appleThread.start();
}
}
//退出线程
public void ExitThread()
{
m_appleThread.Exit();
m_appleThread = null;
//释放
Release();
}
//更新
public void Update()
{

if(GAMEEXIT == m_GameState)
{
m_currenttime = System.nanoTime();//获取当前时间,单位为纳秒
m_TimeLength = (double)((m_currenttime - m_GameExitTime)/1000/1000);//毫秒
if(m_TimeLength > 3000)
{
winnerActivity.finish();
}
}
//游戏帮助
else if(HELPSTATE == m_GameState)
{
m_HelpTextTop -= 0.5f;
}
else if(GAMESTATE == m_GameState)
{
//游戏开始状态
if(true == m_bStartRun)
{
m_currenttime = System.nanoTime();//获取当前时间,单位为纳秒
m_TimeLength = (double)((m_currenttime - m_starttime)/1000/1000);//毫秒

//加速变化
if( m_TimeLength > m_Timer )
{
m_Timer -= m_DecTimer ;
//加速到终点
if(m_Timer < m_MinTimer)
{
m_DecTimer = -m_DecTimer;
}
else if(m_Timer >= 1000)
{
//减到到终点
m_DecTimer = -m_DecTimer;
m_Timer = 1000;
m_starttime = m_currenttime ;
m_currentpathid++;
m_currentpathid = (m_currentpathid)%m_TileCount;
//播放放金币声音
PlayPathSound();
//计算胜利结果
CalculateWinner();
m_bStartRun = false;
m_ShowBaoWu = -1;
return ;

}

m_starttime = m_currenttime ;
m_currentpathid++;
m_currentpathid = (m_currentpathid)%m_TileCount;

//如果是招财进宝,则放气球
int tCurrentImageId = appleTileArray[m_currentpathid].GetImageID() ;
if( tCurrentImageId == 16)
{
myHandler.sendEmptyMessage(1);//发送放气球的消息
}
}
}
else
{
if(m_WinnerAppleID >= 0)
{
m_currenttime = System.nanoTime();//获取当前时间,单位为纳秒
m_TimeLength = (double)((m_currenttime - m_starttime)/1000/1000);//毫秒

if( m_TimeLength > 500 )
{
m_ShowWinner = !m_ShowWinner;
m_starttime = m_currenttime ;
}
}
}
}

}
//渲染
public void Draw(Canvas canvas,Paint paint)
{
//退出状态
if(GAMEEXIT == m_GameState)
{
int centerBitmapW = m_BitMapArray[31].getWidth();
int centerBitmapH = m_BitMapArray[31].getHeight();
Bitmap centerBitmap = Bitmap.createBitmap(m_BitMapArray[31],0,0,centerBitmapW,centerBitmapH,m_BackGroundMatrix,true);
canvas.save();
canvas.drawBitmap(centerBitmap, 0 , 0 , paint );
canvas.restore();

//=================="游戏人数设置====================================
String text = "正退出游戏。。。";
canvas.drawText(text, m_ScreenWidth /2 - 50*m_ScaleW, 40 * m_ScaleH, m_UITitle) ;

return ;
}
//初始状态
if(INITSTATE == m_GameState)
{
int centerBitmapW = m_WelcomeUI.getWidth();
int centerBitmapH = m_WelcomeUI.getHeight();
Bitmap centerBitmap = Bitmap.createBitmap(m_WelcomeUI,0,0,centerBitmapW,centerBitmapH,m_BackGroundMatrix,true);
canvas.save();
canvas.drawBitmap(centerBitmap, 0 , 0 , paint );
canvas.restore();

//按钮
int tBtnLeft = 20;
int tBtnHeight = (int) (m_BitMapArray[ 44 ].getHeight()+3 * m_ScaleH);
int tBtnTop = (int) (m_ScreenHeight - 4*(tBtnHeight+2)) ;

for(int i = 0 ; i < 4 ; i++)
{
canvas.drawBitmap(m_BitMapArray[ 44 + i ], tBtnLeft + i * 40 * m_ScaleW , tBtnTop + i * tBtnHeight , paint );
}

return ;
}
//SETTINGSTATE = 1; //游戏设置
if(SETTINGSTATE == m_GameState)
{
int centerBitmapW = m_BitMapArray[31].getWidth();
int centerBitmapH = m_BitMapArray[31].getHeight();
Bitmap centerBitmap = Bitmap.createBitmap(m_BitMapArray[31],0,0,centerBitmapW,centerBitmapH,m_BackGroundMatrix,true);
canvas.save();
canvas.drawBitmap(centerBitmap, 0 , 0 , paint );
canvas.restore();

//=================="游戏人数设置====================================
String text = "游 戏 设 置";
canvas.drawText(text, m_ScreenWidth /2 - 50*m_ScaleW, 40 * m_ScaleH, m_UITitle) ;

m_UIText.setColor(Color.BLACK);
text = "游戏人数设置:";
canvas.drawText(text, 20*m_ScaleW, 70 * m_ScaleH, m_UITitle) ;
int tShowConfig1 = (int) (100 * m_ScaleH);
int tHalfUITextHeight = m_UITextHeight / 2 ;
if( 1 == m_WinnerSize)
{
canvas.drawBitmap(m_BitMapArray[18], 40*m_ScaleW , tShowConfig1 , paint );
text = "单人";
canvas.drawText(text, 70*m_ScaleW, tShowConfig1 + tHalfUITextHeight , m_UIText) ;
canvas.drawBitmap(m_BitMapArray[17], 120*m_ScaleW , tShowConfig1 , paint );
text = "双人";
canvas.drawText(text, 150*m_ScaleW, tShowConfig1 + tHalfUITextHeight, m_UIText) ;
}
else
{
canvas.drawBitmap(m_BitMapArray[17], 40*m_ScaleW , tShowConfig1 , paint );
text = "单人";
canvas.drawText(text, 70*m_ScaleW, tShowConfig1 + tHalfUITextHeight, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[18], 120*m_ScaleW , tShowConfig1 , paint );
text = "双人";
canvas.drawText(text, 150*m_ScaleW, tShowConfig1 + tHalfUITextHeight, m_UIText) ;
}
//================气球飞镖设置======================================
text = "弹出气球设置:";
canvas.drawText(text, 20*m_ScaleW, 140 * m_ScaleH, m_UITitle) ;
int tShowConfig2 = (int) (170 * m_ScaleH);
if( true == m_QiQiuOpen)
{
canvas.drawBitmap(m_BitMapArray[18], 40*m_ScaleW , tShowConfig2 , paint );
text = "开";
canvas.drawText(text, 70*m_ScaleW, tShowConfig2 + tHalfUITextHeight, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[17], 120*m_ScaleW , tShowConfig2 , paint );
text = "关";
canvas.drawText(text, 150*m_ScaleW, tShowConfig2 + tHalfUITextHeight, m_UIText) ;
}
else
{
canvas.drawBitmap(m_BitMapArray[17], 40*m_ScaleW , tShowConfig2 , paint );
text = "开";
canvas.drawText(text, 70*m_ScaleW, tShowConfig2 + tHalfUITextHeight, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[18], 120*m_ScaleW , tShowConfig2 , paint );
text = "关";
canvas.drawText(text, 150*m_ScaleW, tShowConfig2 + tHalfUITextHeight, m_UIText) ;
}
//=================游戏音效设置=====================================
text = "游戏音效设置:";
canvas.drawText(text, 20*m_ScaleW, 210 * m_ScaleH, m_UITitle) ;
int tShowConfig3 = (int) (240 * m_ScaleH);
if( true == m_SoundOpen)
{
canvas.drawBitmap(m_BitMapArray[18], 40*m_ScaleW , tShowConfig3 , paint );
text = "开";
canvas.drawText(text, 70*m_ScaleW, tShowConfig3 + tHalfUITextHeight, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[17], 120*m_ScaleW , tShowConfig3 , paint );
text = "关";
canvas.drawText(text, 150*m_ScaleW, tShowConfig3 + tHalfUITextHeight, m_UIText) ;
}
else
{
canvas.drawBitmap(m_BitMapArray[17], 40*m_ScaleW , tShowConfig3 , paint );
text = "开";
canvas.drawText(text, 70*m_ScaleW, tShowConfig3 + tHalfUITextHeight, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[18], 120*m_ScaleW , tShowConfig3 , paint );
text = "关";
canvas.drawText(text, 150*m_ScaleW, tShowConfig3 + tHalfUITextHeight, m_UIText) ;
}

//================背景音乐设置======================================
text = "背景音乐设置:";
canvas.drawText(text, 20*m_ScaleW, 280 * m_ScaleH, m_UITitle) ;
int tShowConfig4 = (int) (310 * m_ScaleH);
if( true == m_MusicOpen)
{
canvas.drawBitmap(m_BitMapArray[18], 40*m_ScaleW , tShowConfig4 , paint );
text = "开";
canvas.drawText(text, 70*m_ScaleW, tShowConfig4 + tHalfUITextHeight, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[17], 120*m_ScaleW , tShowConfig4 , paint );
text = "关";
canvas.drawText(text, 150*m_ScaleW, tShowConfig4 + tHalfUITextHeight, m_UIText) ;
}
else
{
canvas.drawBitmap(m_BitMapArray[17], 40*m_ScaleW , tShowConfig4 , paint );
text = "开";
canvas.drawText(text, 70*m_ScaleW, tShowConfig4 + tHalfUITextHeight, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[18], 120*m_ScaleW , tShowConfig4 , paint );
text = "关";
canvas.drawText(text, 150*m_ScaleW, tShowConfig4 + tHalfUITextHeight, m_UIText) ;
}

int tShowConfig5 = (int) (m_ScreenHeight - 30);
text = "返回主界面";
canvas.drawText(text, m_ScreenWidth /2 - 54*m_ScaleW, tShowConfig5, m_UITitle) ;
return ;
}
//游戏帮助
if(HELPSTATE == m_GameState)
{
int centerBitmapW = m_BitMapArray[31].getWidth();
int centerBitmapH = m_BitMapArray[31].getHeight();
Bitmap centerBitmap = Bitmap.createBitmap(m_BitMapArray[31],0,0,centerBitmapW,centerBitmapH,m_BackGroundMatrix,true);
canvas.save();
canvas.drawBitmap(centerBitmap, 0 , 0 , paint );
canvas.restore();

String text = "游 戏 帮 助";
canvas.drawText(text, m_ScreenWidth /2 - 50*m_ScaleW, 40*m_ScaleH, m_UITitle) ;

m_UIText.setColor(Color.BLACK); //为画笔设置颜色
int tAreaHeight = (int) ( m_ScreenHeight - m_HelpTextMinTop + 80);
float tHeight = m_HelpTextTop - (tAreaHeight - 20);
tHeight += 90 * m_ScaleH ;
{
float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;

if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "进入游戏后开始下注, ";
canvas.drawText(text, 70*m_ScaleW, tRealPosY, m_UIText) ;
}
}
tHeight += 30* m_ScaleH;
{
float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;
if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "在最下方水果上点击进行下注,";
canvas.drawText(text, 5*m_ScaleW, tRealPosY, m_UIText) ;
}
}
tHeight += 30* m_ScaleH;
{

float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;
if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "点击";
canvas.drawText(text, 5*m_ScaleW, tRealPosY, m_UIText) ;
text = " 按钮可以开始游戏转动,";
canvas.drawText(text, 72*m_ScaleW, tRealPosY, m_UIText) ;

canvas.drawBitmap(m_BitMapArray[32], 42*m_ScaleW, tRealPosY - 18* m_ScaleH ,paint );
}
}
tHeight += 30* m_ScaleH;
{

float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;
if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "金币用完后,点击";
canvas.drawText(text, 5*m_ScaleW, tRealPosY, m_UIText) ;
text = " 可以投入";
canvas.drawText(text, 165*m_ScaleW, tRealPosY, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[33], 140*m_ScaleW, tRealPosY - 15* m_ScaleH ,paint );
}
}
tHeight += 30* m_ScaleH;
{

float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;
if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "一个金币继续游戏,转动时经过";
canvas.drawText(text, 5*m_ScaleW, tRealPosY, m_UIText) ;
}
}
tHeight += 30* m_ScaleH;
{

float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;
if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "图块时会从底部放出气球";
canvas.drawText(text, 40*m_ScaleW, tRealPosY, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[16], 10*m_ScaleW, tRealPosY - 15* m_ScaleH ,paint );
}
}
tHeight += 30* m_ScaleH;
{

float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;
if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = ",点击下注水果图片可以使左右两";
canvas.drawText(text, 5*m_ScaleW, tRealPosY, m_UIText) ;
}
}
tHeight += 30* m_ScaleH;
{

float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;

if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "排相应水果释放 ";
canvas.drawText(text, 5*m_ScaleW, tRealPosY, m_UIText) ;
text = " ,击中";
canvas.drawText(text, 150*m_ScaleW, tRealPosY, m_UIText) ;
canvas.drawBitmap(m_BitMapArray[40], 120*m_ScaleW, tRealPosY - 15* m_ScaleH ,paint );
canvas.drawBitmap(m_BitMapArray[34], 205*m_ScaleW, tRealPosY - 15* m_ScaleH ,paint );
}
}
tHeight += 30* m_ScaleH;
//if(tHeight > m_HelpTextMinTop)
{

float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;
if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "会有意想不到的奖励哦。";
canvas.drawText(text, 5*m_ScaleW, tRealPosY, m_UIText) ;
}
}

tHeight += 30* m_ScaleH;
m_UIText.setColor(Color.BLUE); //为画笔设置颜色
//if(tHeight > m_HelpTextMinTop)
{

float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;
if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "开发者:红孩儿安卓游戏乐园";
canvas.drawText(text, 30*m_ScaleW, tRealPosY, m_UIText) ;
}
}
tHeight += 30* m_ScaleH;
//if(tHeight > m_HelpTextMinTop)
{
/*
float tRealPosY = (m_ScreenHeight-90* m_ScaleH)+(int)(tHeight)%tAreaHeight;
if(tRealPosY > m_HelpTextMinTop && tRealPosY < (m_ScreenHeight - 90* m_ScaleH))
{
text = "QQ群:205100149";
canvas.drawText(text, 30*m_ScaleW, tRealPosY, m_UIText) ;
}
*/
}

int tShowConfig4 = (int) (m_ScreenHeight - 30*m_ScaleH);
text = "返回主界面";
canvas.drawText(text, m_ScreenWidth /2 - 54*m_ScaleW, tShowConfig4, m_UITitle) ;

m_UIText.setColor(Color.BLACK);
return ;
}

//=========================游戏主界面显示===========================================
//背景图
//===========================================================
int centerBitmapW = m_BitMapArray[31].getWidth();
int centerBitmapH = m_BitMapArray[31].getHeight();
Bitmap centerBitmap = Bitmap.createBitmap(m_BitMapArray[ 31 ],0,0,centerBitmapW,centerBitmapH,m_CenterMatrix,true);
canvas.save();
canvas.drawBitmap(centerBitmap, 0 , 0 , paint );
canvas.restore();
//===========================================================
//canvas.drawBitmap(m_BitMapArray[31], 0, 0 ,paint );

//显示玩家金币情况
for(int i = 0 ; i < m_WinnerSize ; i++)
{
canvas.drawBitmap(m_BitMapArray[33], 8 + i * 100, 5 ,paint );
int tIconSize = m_WinnerRecord[i].GetIconSize();
String text = ""+tIconSize;
canvas.drawText(text,( 8 + i * 100 + 30) * m_ScaleW , 20 * m_ScaleH, m_WinnerPaint[i]) ;
}
//显示返回菜单
int menuBitMapW = m_BitMapArray[48].getWidth();
canvas.drawBitmap(m_BitMapArray[48],m_ScreenWidth - menuBitMapW - 5 , 2 * m_ScaleH ,paint );

//显示水果种类与胜利数量
Paint TextPaint = new Paint(); //创建画笔对象

String familyName = "宋体";
Typeface font = Typeface.create(familyName, Typeface.BOLD);
TextPaint.setTypeface(font);
TextPaint.setColor(Color.RED); //为画笔设置颜色
TextPaint.setTextSize(16* m_ScaleH); //为画笔设置字体大小
TextPaint.setAntiAlias(true); //设置抗锯齿

for(int i = 0 ; i < m_TileCows ; i++)
{
int index = m_TileCows - 1 - i;
String text = ""+ m_Winsize[index];
if(i == m_TileCows - 1 )
{
canvas.drawText(text, i * m_TileW + 5 * m_ScaleW + m_Left, m_ScreenHeight - m_ShowIconHeight + 10* m_ScaleH, TextPaint) ;
}
else
{
canvas.drawText(text, i * m_TileW + m_Left, m_ScreenHeight - m_ShowIconHeight + 10* m_ScaleH, TextPaint) ;
}
canvas.drawBitmap(m_BitMapArray[index], i * m_TileW +m_Left, m_ScreenHeight - m_ShowIconHeight + 10* m_ScaleH ,paint );
}

//开始按钮
if(false == m_bStartRun)
{
int tBtnW = m_BitMapArray[32].getWidth();
int tBtnH = m_BitMapArray[32].getHeight();

m_ShowStartBtnX = (int) ((m_ScreenWidth - tBtnW)/2); //显示GO按钮的位置X
m_ShowStartBtnY = (int) ((m_ScreenHeight - tBtnH)/2 + 20 * m_ScaleH); //显示GO按钮的位置Y

canvas.drawBitmap(m_BitMapArray[32], m_ShowStartBtnX, m_ShowStartBtnY ,paint );

String familyName2 = "黑体";
Typeface font2 = Typeface.create(familyName2, Typeface.BOLD);
Paint TextPaint2 = new Paint(); //创建画笔对象
TextPaint2.setTypeface(font2);
TextPaint2.setColor(Color.BLACK); //为画笔设置颜色
TextPaint2.setTextSize(16* m_ScaleH); //为画笔设置字体大小
TextPaint2.setAntiAlias(true); //设置抗锯齿

if(m_WinnerSize == 1)
{
String text = "开始下注";
canvas.drawText(text, m_ShowStartBtnX - 26* m_ScaleW , m_ShowStartBtnY + 50* m_ScaleH, TextPaint2) ;
}
else
{
if( m_CurrWinnerID >= 0 )
{
String text = "" + (m_CurrWinnerID + 1) + "号玩家下注";
canvas.drawText(text, m_ShowStartBtnX - 36* m_ScaleW , m_ShowStartBtnY + 60* m_ScaleH, TextPaint2) ;
}
}

}
//中间显示
//当前的图像ID
int tCurrentImageId = appleTileArray[m_currentpathid].GetImageID() ;
if( tCurrentImageId == 16)
{
int tShowCurrentImageW = m_BitMapArray[tCurrentImageId].getWidth();
int tShowCurrentImageH = m_BitMapArray[tCurrentImageId].getHeight();
int tShowCurrentImageX = (int) (m_ShowStartBtnX - tShowCurrentImageW);
int tShowCurrentImageY = (int) (m_ShowStartBtnY - tShowCurrentImageH - 10 * m_ScaleH);
canvas.drawBitmap(m_BitMapArray[tCurrentImageId], tShowCurrentImageX , tShowCurrentImageY, paint );

if( false == m_bStartRun )
{
Paint TextPaint2 = new Paint(); //创建画笔对象
String familyName2 = "黑体";
Typeface font2 = Typeface.create(familyName2, Typeface.BOLD);
TextPaint2.setTypeface(font2);
TextPaint2.setColor(Color.RED); //为画笔设置颜色
TextPaint2.setTextSize(32* m_ScaleH); //为画笔设置字体大小
TextPaint2.setAntiAlias(true); //设置抗锯齿

String text = "X"+ m_Winsize[tCurrentImageId];
canvas.drawText(text, tShowCurrentImageX + tShowCurrentImageW + 10 * m_ScaleW , tShowCurrentImageY + tShowCurrentImageH, TextPaint2) ;
}
}
else
{
int tShowCurrentImageW = m_BitMapArray[tCurrentImageId].getWidth();
int tShowCurrentImageH = m_BitMapArray[tCurrentImageId].getHeight();
int tShowCurrentImageX = (int) (m_ShowStartBtnX - tShowCurrentImageW);
int tShowCurrentImageY = (int) (m_ShowStartBtnY - tShowCurrentImageH - 10 * m_ScaleH);
int tGetIconSize = m_Winsize[tCurrentImageId] ;
tCurrentImageId = tCurrentImageId % 8 ;
canvas.drawBitmap(m_BitMapArray[tCurrentImageId], tShowCurrentImageX , tShowCurrentImageY , paint );

//普通图像
if( false == m_bStartRun )
{
Paint TextPaint2 = new Paint(); //创建画笔对象
String familyName2 = "黑体";
Typeface font2 = Typeface.create(familyName2, Typeface.BOLD);
TextPaint2.setTypeface(font2);
TextPaint2.setColor(Color.RED); //为画笔设置颜色
TextPaint2.setTextSize(32* m_ScaleH); //为画笔设置字体大小
TextPaint2.setAntiAlias(true); //设置抗锯齿

String text = "X"+ tGetIconSize;
canvas.drawText(text, tShowCurrentImageX + tShowCurrentImageW + 10 * m_ScaleW , tShowCurrentImageY + tShowCurrentImageH, TextPaint2) ;
}
}

//显示奖励
if(m_ShowBaoWu >= 0)
{
Paint TextPaint2 = new Paint(); //创建画笔对象
String familyName2 = "黑体";
Typeface font2 = Typeface.create(familyName2, Typeface.BOLD);
TextPaint2.setTypeface(font2);
TextPaint2.setColor(Color.RED); //为画笔设置颜色
TextPaint2.setTextSize(20* m_ScaleH); //为画笔设置字体大小
TextPaint2.setAntiAlias(true); //设置抗锯齿

int tShowText_X = (int) (m_ScreenWidth / 2 );
int tShowText_Y = (int) (m_ScreenHeight/ 2 + 30 * m_ScaleH);

switch(m_ShowBaoWu)
{
case 0://增加一个金币
{
String text = "增加一个金币";
tShowText_X -= 70;
canvas.drawText(text, tShowText_X , tShowText_Y, TextPaint2) ;
}
break;
case 1://扣除一个金币
{
String text = "扣除一个金币";
tShowText_X -= 70;
canvas.drawText(text, tShowText_X , tShowText_Y, TextPaint2) ;
}
break;
case 2://增加二个金币
{
String text = "增加二个金币";
tShowText_X -= 70;
canvas.drawText(text, tShowText_X , tShowText_Y, TextPaint2) ;
}
break;
case 3://扣除二个金币
{
String text = "扣除二个金币";
tShowText_X -= 70;
canvas.drawText(text, tShowText_X , tShowText_Y, TextPaint2) ;
}
break;
case 4://再持续一圈
{
String text = "再发力转动";
tShowText_X -= 60;

canvas.drawText(text, tShowText_X , tShowText_Y, TextPaint2) ;
}
break;
case 5://停下来
{
String text = "停下来";
tShowText_X -= 40;
canvas.drawText(text, tShowText_X , tShowText_Y, TextPaint2) ;
}
break;
case 6://所有水果都中奖
{
String text = "所有水果都中奖";
tShowText_X -= 75;
canvas.drawText(text, tShowText_X , tShowText_Y, TextPaint2) ;
}
break;
case 7://中奖水果X2倍奖金
{
String text = "中奖水果X2倍奖金";
tShowText_X -= 100;
canvas.drawText(text, tShowText_X , tShowText_Y, TextPaint2) ;
}
break;
}

}

//显示当前位置格子背景
appleTileArray[m_currentpathid].DrawBack(canvas,m_RunNum%4);

//格子元素显示
for(int i = 0 ; i < m_TileCount ; i++)
{
appleTileArray[i].OnDraw(canvas,paint);
}

/*
// ===============================小珠显示============================================
//左上角
canvas.drawBitmap(m_BitMapArray[17], 25+m_Left,25+m_Top, paint);
//右上角
canvas.drawBitmap(m_BitMapArray[17], (m_TileCows-1)*m_TileW-10+m_Left,25+m_Top, paint);
//左下角
canvas.drawBitmap(m_BitMapArray[17], 25+m_Left,(m_TileRows+1)*m_TileH - 12+m_Top, paint);
//右下角
canvas.drawBitmap(m_BitMapArray[17], (m_TileCows-1)*m_TileW-10+m_Left,(m_TileRows+1)*m_TileH - 12+m_Top, paint);
//其它
for(int i = 1 ; i < m_TileCows-1 ; i++)
{
//上行
canvas.drawBitmap(m_BitMapArray[17], i*m_TileW+5+m_Left,25+m_Top, paint);
//下行
canvas.drawBitmap(m_BitMapArray[17], i*m_TileW+5+m_Left,(m_TileRows+1)*m_TileH - 12+m_Top , paint);
}
for(int i = 0 ; i < m_TileRows ; i++)
{
//右列
canvas.drawBitmap(m_BitMapArray[17],(m_TileCows-1) * m_TileW-5+m_Left,(i + 1)* m_TileH + 5+m_Top, paint);
//左行
canvas.drawBitmap(m_BitMapArray[17], 20+m_Left,(i + 1) * m_TileH + 5+m_Top, paint);
}

//红珠
int tPathIndex = m_currentpathid;

if(0 == tPathIndex)
{
//左上角
canvas.drawBitmap(m_BitMapArray[18], 25+m_Left,25+m_Top, paint);
}
else if(7 == tPathIndex)
{
//左上角
canvas.drawBitmap(m_BitMapArray[18], (m_TileCows-1)*m_TileW-10+m_Left,25+m_Top, paint);
}
else if(15 == tPathIndex)
{
//右下角
canvas.drawBitmap(m_BitMapArray[18], (m_TileCows-1)*m_TileW-10+m_Left,(m_TileRows+1)*m_TileH - 12+m_Top, paint);
}
else if(22 == tPathIndex)
{
//左下角
canvas.drawBitmap(m_BitMapArray[18], 25+m_Left,(m_TileRows+1)*m_TileH - 12+m_Top, paint);
}
else
{
if(0 < tPathIndex && tPathIndex < 7)
{
//上行
canvas.drawBitmap(m_BitMapArray[18], tPathIndex*m_TileW+5+m_Left,25+m_Top, paint);
}
else if(7 < tPathIndex && tPathIndex < 15)
{
//右列
int tIndex = tPathIndex - 8 ;
canvas.drawBitmap(m_BitMapArray[18],(m_TileCows-1) * m_TileW-5+m_Left,(tIndex + 1)* m_TileH + 5+m_Top, paint);
}
else if(15 < tPathIndex && tPathIndex < 22)
{
//下行
int tIndex = (22 - tPathIndex);
canvas.drawBitmap(m_BitMapArray[18], tIndex*m_TileW+5+m_Left,(m_TileRows+1)*m_TileH - 12+m_Top , paint);
}
else
{
//左行
int tIndex = (29 - tPathIndex) ;
canvas.drawBitmap(m_BitMapArray[18], 20+m_Left,(tIndex + 1) * m_TileH + 5+m_Top, paint);
}
}
// ===========================================================================
*/

if(true == m_QiQiuOpen)
{
//显示气球
if(true == m_QiQiuIsLive)
{
//气球显示
m_QiQiu.OnDraw(canvas,TextPaint);
}

//遍历飞镖列表,绘制每个飞镖对象
for( FeiBiao fb:m_FeiBiaoArray)
{
fb.OnDraw(canvas,TextPaint);
}
}
//显示玩家下注情况
for(int i = 0 ; i < m_TileCows ; i++)
{
for(int j = 0 ; j < m_WinnerSize ; j++)
{
int tLeft = (int) (i * m_TileW + 1* m_ScaleW);
int tTop = (int) (m_ShowIconTop + 40* m_ScaleH + j * 20* m_ScaleH) ;
int tRight = (int) (tLeft + m_TileW - 1* m_ScaleW);
int tBottom = (int) (tTop + 20* m_ScaleH - 1);
//背景
canvas.drawRect(tLeft,tTop,tRight,tBottom, m_WinnerPaint[j]);

int tappleIndex = m_TileCows-1-i;

//取得是否有下注
int tRecordSize = m_WinnerRecord[j].GetRecord(tappleIndex);

if( tRecordSize > 0 )
{
if( (m_WinnerAppleID == tappleIndex || m_WinnerAppleID == m_WinAllAppleID )&& false == m_ShowWinner)
{

}
else
{
//数字
String text = " " + tRecordSize;
canvas.drawText(text, tLeft+4* m_ScaleW, tBottom-3* m_ScaleH, TextPaint) ;
}
}
else
{
//数字
String text = " " + tRecordSize;
canvas.drawText(text, tLeft+4* m_ScaleW , tBottom-3* m_ScaleH, TextPaint) ;
}
}
}

//显示钱袋
if( m_WinnerAppleID >= 0)
{
if(true == m_ShowWinner)
{
int tShowMoneW = m_BitMapArray[49].getWidth();
int tShowMoneH = m_BitMapArray[49].getHeight();

int tShowMoneyX = (int) ((m_ScreenWidth - tShowMoneW)/2); //显示钱袋的位置X
int tShowMoneyY = (int) ((m_ScreenHeight - tShowMoneH)/2); //显示钱袋的位置Y

canvas.drawBitmap(m_BitMapArray[49], tShowMoneyX, tShowMoneyY - 35* m_ScaleH ,paint );
}
}
/*
//显示手
if(m_HandIndex_apple >= 0)
{
int tLeft = m_HandIndex_apple * m_TileW ;
int tTop = m_ShowIconTop + m_HandIndex_winner * 20 + 40;
canvas.drawBitmap(m_BitMapArray[27+m_HandIndex_winner], tLeft,tTop, paint);
}
*/

}
//设置游戏
public boolean GameConfig(float mouseX,float mouseY)
{
//如果是游戏设置状态
if(SETTINGSTATE == m_GameState)
{
if(mouseY < 120*m_ScaleH)
{
//单双人
if(mouseX < 120*m_ScaleW)
{
SetWinnerSize(1);
}
else
{
SetWinnerSize(2);
}
}
else if(mouseY < 190*m_ScaleH)
{
//气球
if(mouseX < 120*m_ScaleW)
{
EnableQiQiu(true);
}
else
{
EnableQiQiu(false);
}
}
else if(mouseY < 260*m_ScaleH)
{
//音效
if(mouseX < 120*m_ScaleW)
{
EnableSound(true);
}
else
{
EnableSound(false);
}
}
else if(mouseY < 330*m_ScaleH)
{
//音乐
if(mouseX < 120*m_ScaleW)
{
EnableMusic(true);
}
else
{
EnableMusic(false);
}
}
else
{
//返回游戏状态
myHandler.sendEmptyMessage(2);//发送返回主界面的消息
}
return true;
}
else if(HELPSTATE == m_GameState)
{
//如果是帮助界面,返回游戏状态

if( mouseY > (m_ScreenHeight - 70*m_ScaleH))
{
myHandler.sendEmptyMessage(2);//发送返回主界面的消息
}
return true;
}
return false;
}
//重新开始
public void Restart(float mouseX,float mouseY)
{
//判断是否点击在"开始按钮"中
int tBtnW = m_BitMapArray[32].getWidth();
int tBtnH = m_BitMapArray[32].getHeight();

int tLeft = m_ShowStartBtnX - 4;
int tTop = m_ShowStartBtnY - 4;

int tRight = tLeft + tBtnW + 4;
int tBottom = tTop + tBtnH + 4;

if(mouseX < tLeft)return;
if(mouseX > tRight)return;
if(mouseY < tTop)return;
if(mouseY > tBottom)return;

if(true == IsReady())
{
m_starttime = System.nanoTime(); //获取当前时间,单位为纳秒
m_Timer = 500 + random.nextInt(500); //每隔多久前进一次
m_DecTimer = 40 + random.nextInt(40); //加速度
m_MinTimer = 0; //最小时间间隔

//运行次数换图
int tBackImageIndex = m_RunNum % 4 ;
switch(tBackImageIndex)
{
case 0:
m_BitMapArray[31] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.background1);//背景
break;
case 1:
m_BitMapArray[31] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.background2);//背景
break;
case 2:
m_BitMapArray[31] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.background3);//背景
break;
default:
m_BitMapArray[31] = BitmapFactory.decodeResource(winnerActivity.getResources(), R.drawable.background4);//背景
break;
}

m_RunNum++;
m_bStartRun = true; //开始
m_CurrWinnerID = 0; //当前玩家
}

}
//是否可以开始[检查是否有下注]
public boolean IsReady()
{
boolean tPutIcon = false;
if(false == m_bStartRun)
{
//如果是双人对战
if(m_WinnerSize == 2)
{
//查找是否有下注
for(int i = 0 ; i < m_TileCows ; i++)
{
for(int j = 0 ; j < m_WinnerSize ; j++)
{
if( m_WinnerRecord[m_CurrWinnerID].GetRecord(i) > 0 )
{
tPutIcon = true;
break;
}
}
}

if( true == tPutIcon )
{
if(m_CurrWinnerID < 2)
{
m_CurrWinnerID++;
}
}

if( m_CurrWinnerID == 2)
{
tPutIcon = true;
m_CurrWinnerID = -1;
}
else
{
tPutIcon = false;
}
}
else
{
for(int i = 0 ; i < m_TileCows ; i++)
{
for(int j = 0 ; j < m_WinnerSize ; j++)
{
if( m_WinnerRecord[j].GetRecord(i) > 0 )
{
tPutIcon = true;
break;
}
}
}
}
}
return tPutIcon;
}
//加币
public boolean AddIcon(float mouseX,float mouseY)
{
if(false == m_bStartRun)
{
//显示返回菜单
int tMaxRight = (int) (m_ScreenWidth - m_BitMapArray[48].getWidth()- 5);
//显示玩家金币情况
for(int i = 0 ; i < m_WinnerSize ; i++)
{
int tIconSize = m_WinnerRecord[i].GetIconSize();
if( 0 == tIconSize)
{
int tLeft = i * 100 ;
int tTop = 0 ;
int tRight = tLeft + 100 ;
if(tRight >= tMaxRight )
{
tRight = tMaxRight - 1;
}
int tBottom = m_Top;

if(mouseX < tLeft)continue;
if(mouseX > tRight)continue;
if(mouseY < tTop)continue;
if(mouseY > tBottom)continue;

m_WinnerRecord[i].AddIcon(1);

//播放放金币声音
PlayIconSound();
return true;
}
}
}
return false;
}
//投注
public boolean DecIcon(float mouseX,float mouseY)
{
if(false == m_bStartRun)
{
if(m_WinnerAppleID >= 0)
{
//清空
for(int j = 0 ; j < m_WinnerSize ; j++)
{
m_WinnerRecord[j].CleanRecord(-1);
}
m_WinnerAppleID = -1;
}

for(int i = 0 ; i < m_TileCows ; i++)
{
//for(int j = 0 ; j < m_WinnerSize ; j++)
//{
int tLeft = i * m_TileW ;
int tTop = m_ShowIconTop ;//+ j * 20 ;
int tRight = tLeft + m_TileW;
int tBottom = (int) m_ScreenHeight;

if(mouseX < tLeft)continue;
if(mouseX > tRight)continue;
if(mouseY < tTop)continue;
if(mouseY > tBottom)continue;

m_WinnerRecord[m_CurrWinnerID].AddRecord(m_TileCows-1-i);
return true;
//}
}
}
return false;
}
//开始游戏
public boolean StartGame(float mouseX,float mouseY)
{

//如果是开始界面
if(INITSTATE == m_GameState)
{
//按钮
int tBtnLeft = (int) (20 * m_ScaleW);
int tBtnWidth = m_BitMapArray[ 44 ].getWidth();
int tBtnHeight = (int) (m_BitMapArray[ 44 ].getHeight()+3 * m_ScaleH);
int tBtnTop = (int) (m_ScreenHeight - 4*(tBtnHeight+2)) ;
for(int i = 0 ; i < 4 ; i++)
{
int tLeft = (int) (tBtnLeft + i * 40 * m_ScaleW) ;
int tTop = (int) (tBtnTop + i * tBtnHeight ) ;
int tRight = tLeft + tBtnWidth;
int tBottom = tTop + tBtnHeight;

if(mouseX < tLeft)continue;
if(mouseX > tRight)continue;
if(mouseY < tTop)continue;
if(mouseY > tBottom)continue;

if( 0 == i )
{
//进入游戏
InitGameUI();
m_GameState = GAMESTATE;
}
else if( 1 == i )
{
//游戏设置
m_GameState = SETTINGSTATE ;
}
else if( 2 == i )
{
//游戏帮助
m_GameState = HELPSTATE ;
m_HelpTextTop = m_HelpTextMinTop;
}
else if( 3 == i )
{
//退出游戏
m_GameState = GAMEEXIT ;
m_GameExitTime = System.nanoTime();//获取当前时间,单位为纳秒
m_currenttime = System.nanoTime();//获

抱歉!评论已关闭.