本文实例为大家分享了Java实现Flappy Bird游戏的具体代码,供大家参考,具体内容如下
1.首先在mainActivity.xml中放置一个View,ID为viewDraw
2.开始编程,程序中自定义一个View类的子类,与viewDraw关联,程序除了放置如一个view控件,没有其他控件,程序上面的所有图片都是通过控制canvas画图实现
3.游戏是依据flappybird的游戏过程重新写的算法,功能与原版游戏相似,可能有些地方不足,完全是学习练习编程而已,做的不好见谅
4.原图片大小为384*512,在展示图片时将图片进行了放大,尽可能满足800*1280的全屏展示,如果你使用三星Note10,这个程序可以直接复制粘贴运行,否则,可能会遇到图片画错位置的问题,请适当调整
5.程序游戏中使用到的图片最后,只需要按照图片上的名字命名该图片,并导入到程序的图片资源中,就能顺利运行本程序
代码:
public class MainActivity extends Activity
{
static final int IMG_WIDTH=384; //图片的长宽
static final int IMG_HEIGHT=512;
private View viewDraw;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewDraw = (View) findViewById(R.id.viewDraw);
MyView v = new MyView(viewDraw.getContext(), null);
setContentView(v);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
//定义水管障碍物类
class Obstacle
{
int x;
int h;
public Obstacle()
{
x=0;
h=0;
}
}
//自定义View子类,完成动画的刷新
class MyView extends View implements Runnable
{
static final int SPEED=2;
// 图形当前坐标
private int x = 20, y = 20,a,b,c,birdHeight,time,point,v,record;
Obstacle pillar[]= new Obstacle[3];
boolean bInit,bCourse,bGame,bGameOver;
RefreshHandler mRedrawHandler;
Bitmap birdUpBitmap,birdDownBitmap,birdMiddleBitmap,groundBitmap,otherStartBitmap;
Bitmap courseUpBitmap,courseDownBitmap,courseMiddleBitmap;
Bitmap pillarUpBitmap,pillarDownBitmap,gameOverBitmap,recordBitmap,playAgainBitmap,listBitmap,goldBitmap,silverBitmap,bronzeBitmap,whiteGoldBitmap,gameBackgroundBitmap;
// 构造方法
public MyView(Context context, AttributeSet attrs)
{
super(context, attrs);
// TODO Auto-generated constructor stub
// 获得焦点
setFocusable(true);
bInit=false;
bCourse=false;
bGame=false;
bGameOver=false;
//障碍物初始化
pillar[0]=new Obstacle();
pillar[1]=new Obstacle();
pillar[2]=new Obstacle();
//载入图片
otherStartBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.other_start);
birdUpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bird_up);
birdDownBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bird_down);
birdMiddleBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bird_middle);
groundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background_ground);
pillarDownBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pillar_downside);
pillarUpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pillar_upside);
gameOverBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.other_gameover);
recordBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.other_record);
playAgainBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.other_restart);
listBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.other_list);
bronzeBitmap = BitmapFactory.decodeResource(getResources(), R