最近看了一个手机游戏的例子,我就用课余时间把简单的游戏开发思想介绍一下,首先,游戏一般都只有一个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
有问题和想要源码的可以留邮箱啊!我看到了就发邮件!累了,洗洗睡觉了哦!