Android 双色球小游戏【安卓进化十二】

最近看了一个手机游戏的例子,我就用课余时间把简单的游戏开发思想介绍一下,首先,游戏一般都只有一个activity类,其余的都是集成的是view类的子类!然后我写的游戏算坐标的地方比较多!然后就是刷新界面的方法来更新游戏界面的变化!我写的这个例子有四个主菜单,开始菜单,音效设置菜单,游戏帮助菜单,退出菜单。开始游戏的界面可以进行复选,而且保证球的个数都不重复,用随机数的思想,在ArrayList中去掉一个数,然后再在里面出一个随机数,然后再选出来。如此循环就可以达到目的。这个游戏的界面我是用word画的图!先看下程序结果图:

游戏主菜单界面: 点击开始游戏进入的界面:

游戏音效界面,设置界面: 游戏帮助文档界面:

在游戏界面点击复选文本时,

可以改变球的值: 点击开奖后的界面:

不同的中奖结果 选择复选得另一种效果图

二、下面我把我的源码贴出来:

1、MainActiivty类中的代码

package com.an.daming; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Window; import android.view.WindowManager; public class MainActivity extends Activity { public static final int Welcome=0; public static final int START=1; public static final int SETTING=2; public static final int HELP=3; public static final int EXIT=4; public static final int DOUBLERESULT = 5; public MediaPlayer gameMusic; public MediaPlayer buttonSound; Handler mHandler=new Handler(){ public void handleMessage(Message msg) { switch(msg.what){ case Welcome : InitWelcomeView(); break; case START : InitStartView(); break; case HELP : InitHelpView(); break; case SETTING : InitSetMusic(); break; case EXIT : InitGameExit(); break; case DOUBLERESULT: InitGameResultView(); break; default : break; } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN , WindowManager.LayoutParams.FLAG_FULLSCREEN); gameMusic = MediaPlayer.create(this, R.raw.gamesound); gameMusic.setLooping(true); buttonSound = MediaPlayer.create(this, R.raw.go); //初始化开始界面 this.InitWelcomeView(); } private void InitWelcomeView() { //makeup logo view this.setContentView(new WelcomeView(this,this)); } private void InitStartView() { //makeup startGame View this.setContentView(new StartGameView(this,this)); } private void InitSetMusic() { //set music View this.setContentView(new SetMusicView(this,this)); } private void InitHelpView() { //makeup help View this.setContentView(new HelpGameView(this,this)); } private void InitGameExit() { //destory the actiivty System.exit(0); } private void InitGameResultView() { //makeup gameResult View this.setContentView(new DoubleBallResultView(this,this)); } }


2、StartGameView 开始游戏界面

package com.an.daming; import java.util.ArrayList; import java.util.Random; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.view.MotionEvent; import android.view.View; public class StartGameView extends View{ private MainActivity activity; private Bitmap image_startGame = null; private Bitmap game_Ssimple = null; private Bitmap game_Ddouble = null; private boolean simpleS = true; private boolean doubleS = false; private static int rCount = 6; private String redText = "6"; private static int bCount = 1; private String blueText = "1"; String[] rbStr = {"",""}; Paint paint; Paint paint1; int redStr[] = { 1, 12, 33, 24, 15,6,17,28,19,10,2,7,14,3,25,11,27,8,29,20 ,4,22,13,31,5,16,23,18,26,30,21,9,32}; int blueStr[] = {3,15,2,7,11,4,16,1,13,6,12,9,8,10,5,14}; public StartGameView(Context context,MainActivity activity) { super(context); this.activity = activity; InitStartGameBitmap(); } private void InitStartGameBitmap() { image_startGame = BitmapFactory.decodeResource(this.getResources(), R.drawable.playgame); game_Ssimple = BitmapFactory.decodeResource(this.getResources(), R.drawable.game_point); game_Ddouble = BitmapFactory.decodeResource(this.getResources(), R.drawable.game_point); } @Override public void onDraw(Canvas canvas) { paint = new Paint(); paint1 = new Paint(); paint.setTextSize(22.0f); canvas.drawBitmap(image_startGame,0,0,null); if(simpleS){ canvas.drawBitmap(game_Ssimple,18,34,null); } if(doubleS){ canvas.drawBitmap(game_Ddouble,18,91,null); canvas.drawText(redText, 135, 104, paint); canvas.drawText(blueText, 226, 104, paint); } } @Override public boolean onTouchEvent(MotionEvent event) { int x=(int)event.getX(); int y=(int)event.getY(); if(event.getAction()!=MotionEvent.ACTION_DOWN) return super.onTouchEvent(event); Rect simpleSelected,doubleSelected,redBig,redSmall, blueBig,blueSmall,forResult; simpleSelected = new Rect(55,25,103,62); doubleSelected = new Rect(55,80,108,117); redBig = new Rect(182,74,215,96); redSmall = new Rect(180,97,210,115); blueBig = new Rect(271,74,304,96); blueSmall = new Rect(271,101,300,116); forResult = new Rect(121,401,187,451); if(simpleSelected.contains(x,y)) { simpleS = true; doubleS = false; activity.buttonSound.start(); invalidate(); } if(doubleSelected.contains(x,y)) { simpleS = false; doubleS = true; activity.buttonSound.start(); invalidate(); } if(redBig.contains(x,y)) { if(rCount<20){ rCount ++ ; activity.buttonSound.start(); redText = String.valueOf(rCount); invalidate(); } } if(redSmall.contains(x,y)) { if(rCount>6){ rCount -- ; activity.buttonSound.start(); redText = String.valueOf(rCount); invalidate(); } } if(blueBig.contains(x,y)) { if(bCount<16){ bCount ++ ; activity.buttonSound.start(); blueText = String.valueOf(bCount); invalidate(); } } if(blueSmall.contains(x,y)) { if(bCount>1){ bCount -- ; activity.buttonSound.start(); blueText = String.valueOf(bCount); invalidate(); } } if(forResult.contains(x,y)) { activity.buttonSound.start(); activity.mHandler.sendEmptyMessage(MainActivity.DOUBLERESULT); } return super.onTouchEvent(event); } //mathMethod 算法从数组中随即读取几个数 public String getStringRadom(int[] in, int num) { int[] tempInt = in; StringBuffer tempSB = new StringBuffer(); int temp = 0; ArrayList<Integer> arrayList = new ArrayList<Integer>(); Random rand = new Random(); for (int i = 1; i < tempInt.length; i++) { arrayList.add(new Integer(i)); } for (int i = 0; i < num; i++) { temp = ((Integer) arrayList.remove(rand.nextInt(arrayList.size()))) .intValue(); tempSB.append(String.valueOf(temp) + ","); } return tempSB.toString(); } public void setRDCount(int redCount,int blueCount){ rCount = redCount; bCount = blueCount; } //得到红球和蓝球的结果 public String[] getRedAndBlueBallResult(){ rbStr[0] = getStringRadom(redStr,rCount); rbStr[1] = getStringRadom(blueStr,bCount); invalidate(); return rbStr; } }


3、DoubleBallResultView的代码:彩票显示结果

package com.an.daming; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.view.MotionEvent; import android.view.View; public class DoubleBallResultView extends View{ MainActivity activity; private StartGameView mStartGameView = null; private Bitmap bgResult_image = null; private Bitmap selected_number = null; private String redResult = ""; private String blueResult = ""; Paint paint; public DoubleBallResultView(Context context,MainActivity activity) { super(context); this.activity = activity; InitBitmap(); String[] tempStr={"", ""}; mStartGameView = new StartGameView(activity,activity); tempStr = mStartGameView.getRedAndBlueBallResult(); redResult = tempStr[0]; blueResult = tempStr[1]; } @Override public void onDraw(Canvas canvas) { paint = new Paint(); canvas.drawBitmap(bgResult_image,0,0,null); canvas.drawText(redResult, 60, 80, paint); canvas.drawText(blueResult, 60, 116, paint); String[] redArrayStr = getString(redResult); String[] blueArrayStr = getString(blueResult); for(int i=0;i<redArrayStr.length;i++){ if(redArrayStr[i].equals("1")){ canvas.drawBitmap(selected_number,36,150,null); } else if(redArrayStr[i].equals("2")){ canvas.drawBitmap(selected_number,79,150,null); } else if(redArrayStr[i].equals("3")){ canvas.drawBitmap(selected_number,124,150,null); } else if(redArrayStr[i].equals("4")){ canvas.drawBitmap(selected_number,169,150,null); } else if(redArrayStr[i].equals("5")){ canvas.drawBitmap(selected_number,211,150,null); } else if(redArrayStr[i].equals("6")){ canvas.drawBitmap(selected_number,251,150,null); } else if(redArrayStr[i].equals("7")){ canvas.drawBitmap(selected_number,36,180,null); } else if(redArrayStr[i].equals("8")){ canvas.drawBitmap(selected_number,79,180,null); } else if(redArrayStr[i].equals("9")){ canvas.drawBitmap(selected_number,124,180,null); } else if(redArrayStr[i].equals("10")){ canvas.drawBitmap(selected_number,169,180,null); } else if(redArrayStr[i].equals("11")){ canvas.drawBitmap(selected_number,211,180,null); } else if(redArrayStr[i].equals("12")){ canvas.drawBitmap(selected_number,251,180,null); } else if(redArrayStr[i].equals("13")){ canvas.drawBitmap(selected_number,36,213,null); } else if(redArrayStr[i].equals("14")){ canvas.drawBitmap(selected_number,79,213,null); } else if(redArrayStr[i].equals("15")){ canvas.drawBitmap(selected_number,124,213,null); } else if(redArrayStr[i].equals("16")){ canvas.drawBitmap(selected_number,169,213,null); } else if(redArrayStr[i].equals("17")){ canvas.drawBitmap(selected_number,211,213,null); } else if(redArrayStr[i].equals("18")){ canvas.drawBitmap(selected_number,251,213,null); } else if(redArrayStr[i].equals("19")){ canvas.drawBitmap(selected_number,36,243,null); } else if(redArrayStr[i].equals("20")){ canvas.drawBitmap(selected_number,79,243,null); } else if(redArrayStr[i].equals("21")){ canvas.drawBitmap(selected_number,124,243,null); } else if(redArrayStr[i].equals("22")){ canvas.drawBitmap(selected_number,169,243,null); } else if(redArrayStr[i].equals("23")){ canvas.drawBitmap(selected_number,211,243,null); } else if(redArrayStr[i].equals("24")){ canvas.drawBitmap(selected_number,251,243,null); } else if(redArrayStr[i].equals("25")){ canvas.drawBitmap(selected_number,36,275,null); } else if(redArrayStr[i].equals("26")){ canvas.drawBitmap(selected_number,79,275,null); } else if(redArrayStr[i].equals("27")){ canvas.drawBitmap(selected_number,124,275,null); } else if(redArrayStr[i].equals("28")){ canvas.drawBitmap(selected_number,169,275,null); } else if(redArrayStr[i].equals("29")){ canvas.drawBitmap(selected_number,211,275,null); } else if(redArrayStr[i].equals("30")){ canvas.drawBitmap(selected_number,251,275,null); } else if(redArrayStr[i].equals("31")){ canvas.drawBitmap(selected_number,36,306,null); } else if(redArrayStr[i].equals("32")){ canvas.drawBitmap(selected_number,79,306,null); } else if(redArrayStr[i].equals("33")){ canvas.drawBitmap(selected_number,124,306,null); } } for(int i=0;i<blueArrayStr.length;i++){ if(blueArrayStr[i].equals("1")){ canvas.drawBitmap(selected_number,37,344,null); } else if(blueArrayStr[i].equals("2")){ canvas.drawBitmap(selected_number,82,344,null); } else if(blueArrayStr[i].equals("3")){ canvas.drawBitmap(selected_number,123,344,null); } else if(blueArrayStr[i].equals("4")){ canvas.drawBitmap(selected_number,166,344,null); } else if(blueArrayStr[i].equals("5")){ canvas.drawBitmap(selected_number,209,344,null); } else if(blueArrayStr[i].equals("6")){ canvas.drawBitmap(selected_number,251,344,null); } else if(blueArrayStr[i].equals("7")){ canvas.drawBitmap(selected_number,37,373,null); } else if(blueArrayStr[i].equals("8")){ canvas.drawBitmap(selected_number,82,373,null); } else if(blueArrayStr[i].equals("9")){ canvas.drawBitmap(selected_number,123,373,null); } else if(blueArrayStr[i].equals("10")){ canvas.drawBitmap(selected_number,166,373,null); } else if(blueArrayStr[i].equals("11")){ canvas.drawBitmap(selected_number,209,373,null); } else if(blueArrayStr[i].equals("12")){ canvas.drawBitmap(selected_number,251,373,null); } else if(blueArrayStr[i].equals("13")){ canvas.drawBitmap(selected_number,37,404,null); } else if(blueArrayStr[i].equals("14")){ canvas.drawBitmap(selected_number,82,404,null); } else if(blueArrayStr[i].equals("15")){ canvas.drawBitmap(selected_number,123,404,null); } else if(blueArrayStr[i].equals("16")){ canvas.drawBitmap(selected_number,166,404,null); } } } private void InitBitmap() { bgResult_image = BitmapFactory.decodeResource(this.getResources(), R.drawable.dbresult); selected_number = BitmapFactory.decodeResource(this.getResources(), R.drawable.selected_number); } public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); if (event.getAction() != MotionEvent.ACTION_DOWN) return super.onTouchEvent(event); Rect rcReagainGame,rcResultReturn; rcReagainGame = new Rect(156,450,202,466); rcResultReturn = new Rect(221,450,265,466); if(rcReagainGame.contains(x,y)) { mStartGameView.setRDCount(6, 1); activity.mHandler.sendEmptyMessage(MainActivity.START); } if(rcResultReturn.contains(x,y)) { mStartGameView.setRDCount(6, 1); activity.mHandler.sendEmptyMessage(MainActivity.Welcome); } return super.onTouchEvent(event); } public String[] getString(String str){ String tempStr = str; String[] arryStr = tempStr.split(","); return arryStr; } }


4、WelcomeView.java代码

package com.an.daming; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Rect; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; public class WelcomeView extends View{ private MainActivity activity; private Bitmap image_welcome; private Bitmap image_selected; private TutorialThread thread; private boolean startSelected = false; private boolean setSelected = false; private boolean optionSelected = false; private boolean exitSelected = false; public WelcomeView(Context context,MainActivity activity) { super(context); this.activity = activity; InitBitmap(); } private void InitBitmap() { image_welcome = BitmapFactory.decodeResource(this.getResources(), R.drawable.logowelcome); image_selected = BitmapFactory.decodeResource(this.getResources(), R.drawable.select); } @Override public void onDraw(Canvas canvas) { canvas.drawBitmap(image_welcome,0,0,null); if(startSelected){ canvas.drawBitmap(image_selected,40,127,null); } if(setSelected){ canvas.drawBitmap(image_selected,40,194,null); } if(optionSelected){ canvas.drawBitmap(image_selected,40,263,null); } if(exitSelected){ canvas.drawBitmap(image_selected,40,341,null); } } public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } public void surfaceCreated(SurfaceHolder arg0) { this.thread.setFlag(true); this.thread.start(); } public void surfaceDestroyed(SurfaceHolder arg0) { boolean retry = true; thread.setFlag(false); while (retry) { try { thread.join(); retry = false; } catch (InterruptedException e) { } } } @Override public boolean onTouchEvent(MotionEvent event) { int x=(int)event.getX(); int y=(int)event.getY(); if(event.getAction()!=MotionEvent.ACTION_DOWN) return super.onTouchEvent(event); Rect rcStart,rcSetting,rcHelp,rcExit; rcStart=new Rect(89,120,220,167); rcSetting=new Rect(89,188,220,237); rcHelp=new Rect(89,258,220,307); rcExit=new Rect(89,331,220,381); if(rcStart.contains(x,y)) { startSelected = true; setSelected = false; optionSelected = false; exitSelected = false; activity.buttonSound.start(); activity.mHandler.sendEmptyMessage(MainActivity.START); invalidate(); } if(rcSetting.contains(x,y)) { startSelected = false; setSelected = true; optionSelected = false; exitSelected = false; activity.buttonSound.start(); activity.mHandler.sendEmptyMessage(MainActivity.SETTING); invalidate(); } if(rcHelp.contains(x,y)) { startSelected = false; setSelected = false; optionSelected = true; exitSelected = false; activity.buttonSound.start(); activity.mHandler.sendEmptyMessage(MainActivity.HELP); invalidate(); } if(rcExit.contains(x,y)) { startSelected = false; setSelected = false; optionSelected = false; exitSelected = true; activity.buttonSound.start(); activity.mHandler.sendEmptyMessage(MainActivity.EXIT); invalidate(); } return super.onTouchEvent(event); } / //draw picture class TutorialThread extends Thread { private int span = 100; //Sleeping time private SurfaceHolder surfaceHolder; private WelcomeView welcomeView; private boolean flag = false; public TutorialThread(SurfaceHolder surfaceHolder, WelcomeView welcomeView) { this.surfaceHolder = surfaceHolder; this.welcomeView = welcomeView; } public void setFlag(boolean flag) { this.flag = flag; } @Override public void run() { Canvas c; while (this.flag) { c = null; try { c = this.surfaceHolder.lockCanvas(null); synchronized (this.surfaceHolder) { welcomeView.onDraw(c); } } finally { if (c != null) { this.surfaceHolder.unlockCanvasAndPost(c); } } try{ Thread.sleep(span); } catch(Exception e){ e.printStackTrace(); } } } } }


5、SetMusicView类的代码

package com.an.daming; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Rect; import android.view.MotionEvent; import android.view.View; public class SetMusicView extends View{ private MainActivity activity; private Bitmap image_setMusic = null; private boolean music=true; public SetMusicView(Context context,MainActivity activity) { super(context); this.activity = activity; initSetMusicBitmap(); } private void initSetMusicBitmap() { image_setMusic = BitmapFactory.decodeResource(this.getResources(), R.drawable.setmusic); } @Override public void onDraw(Canvas canvas) { canvas.drawBitmap(image_setMusic,0,0,null); } @Override public boolean onTouchEvent(MotionEvent event) { int x=(int)event.getX(); int y=(int)event.getY(); if(event.getAction()!=MotionEvent.ACTION_DOWN) return super.onTouchEvent(event); Rect rcSetMusic; rcSetMusic = new Rect(44,170,259,276); if(rcSetMusic.contains(x, y)) { activity.buttonSound.start(); if(music) { if(activity.gameMusic.isPlaying()) activity.gameMusic.pause(); music=false; } else { if(!activity.gameMusic.isPlaying()) activity.gameMusic.start(); music=true; } } return super.onTouchEvent(event); } }


6、HekpView中的代码:

package com.an.daming; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Rect; import android.view.MotionEvent; import android.view.View; public class SetMusicView extends View{ private MainActivity activity; private Bitmap image_setMusic = null; private boolean music=true; public SetMusicView(Context context,MainActivity activity) { super(context); this.activity = activity; initSetMusicBitmap(); } private void initSetMusicBitmap() { image_setMusic = BitmapFactory.decodeResource(this.getResources(), R.drawable.setmusic); } @Override public void onDraw(Canvas canvas) { canvas.drawBitmap(image_setMusic,0,0,null); } @Override public boolean onTouchEvent(MotionEvent event) { int x=(int)event.getX(); int y=(int)event.getY(); if(event.getAction()!=MotionEvent.ACTION_DOWN) return super.onTouchEvent(event); Rect rcSetMusic; rcSetMusic = new Rect(44,170,259,276); if(rcSetMusic.contains(x, y)) { activity.buttonSound.start(); if(music) { if(activity.gameMusic.isPlaying()) activity.gameMusic.pause(); music=false; } else { if(!activity.gameMusic.isPlaying()) activity.gameMusic.start(); music=true; } } return super.onTouchEvent(event); } }


三、说明,经过一晚上的努力,终于写完了,太兴奋了!我的原创啊,转载请标明出处:

http://blog.csdn.net/wdaming1986/article/details/6683479

有问题和想要源码的可以留邮箱啊!我看到了就发邮件!累了,洗洗睡觉了哦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值