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

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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页