最近看瞭一個手機遊戲的例子,我就用課餘時間把簡單的遊戲開發思想介紹一下,首先,遊戲一般都隻有一個activity類,其餘的都是集成的是view類的子類!然後我寫的遊戲算坐標的地方比較多!然後就是刷新界面的方法來更新遊戲界面的變化!我寫的這個例子有四個主菜單,開始菜單,音效設置菜單,遊戲幫助菜單,退出菜單。開始遊戲的界面可以進行復選,而且保證球的個數都不重復,用隨機數的思想,在ArrayList中去掉一個數,然後再在裡面出一個隨機數,然後再選出來。如此循環就可以達到目的。這個遊戲的界面我是用word畫的圖!先看下程序結果圖:
遊戲主菜單界面: 點擊開始遊戲進入的界面:
遊戲音效界面,設置界面: 遊戲幫助文檔界面:
在遊戲界面點擊復選文本時,
可以改變球的值: 點擊開獎後的界面:
不同的中獎結果 選擇復選得另一種效果圖
二、下面我把我的源碼貼出來:
1、MainActiivty類中的代碼:
view plainprint?
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 開始遊戲界面
view plainprint?
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的代碼:彩票顯示結果
view plainprint?
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代碼
view plainprint?
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類的代碼
view plainprint?
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中的代碼:
view plainprint?
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
有問題和想要源碼的可以留郵箱啊!我看到瞭就發郵件!累瞭,洗洗睡覺瞭哦!