********休闲娱乐灵活球球小游戏********
==========================================我是分割线======================================
游戏制作思路:
游戏内效果图-欢迎界面:
StartMainActivity,java 欢迎界面代码:
package com.example.feixian;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.app.Activity;
import android.content.Intent;
public class StartMainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_main);
//设置游戏全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
TimerTask task=new TimerTask() {
@Override
public void run() {
Intent intent=new Intent(StartMainActivity.this, VedioMainActivity.class);
startActivity(intent);
finish();
}
};
Timer timer=new Timer();
timer.schedule(task, 3000);
}
游戏内效果图-欢迎动画界面1:
游戏内效果图-欢迎动画界面2:
VedioMainActivity.java欢迎动画界面代码:
package com.example.feixian;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.VideoView;
public class VedioMainActivity extends Activity {
private VideoView video_log;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vedio_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
video_log = (VideoView) findViewById(R.id.video_log);
//设置路径
Uri uri=Uri.parse("android.resource://com.example.feixian/"+R.raw.video_log);
video_log.setVideoURI(uri);
video_log.requestFocus();
video_log.start();
//播完自动进入主页面
video_log.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
Intent intent=new Intent(VedioMainActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
});
}
}
游戏内效果图-游戏界面:
MainActivity.java主界面(游戏界面)代码:
package com.example.feixian;
import java.io.IOException;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
public class MainActivity extends Activity {
private int zmkuang;
int zmGao;
float qiu_size = 16;// 球得大小
float qiu_sudu = 3;// 球的速度
float qiu_shang = 90;// 球上升的帧数
float qiuX;
float qiuY;
// 柱子得变量
float zhu_gao;
float zhu_gao_2;
float zhu_kuan = 40;
float zhu_kuan_2 = 40;
float zhuX;
float zhuY;
float zhuX_2;
float zhuY_2;
float zhu_sudu;
int num ;
boolean jieshu = false;// 判断游戏是否结束
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 使游戏全屏运行
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 让游戏横屏
// 获取窗口管理器
mygameView = new MygameView(this);
setContentView(mygameView);
// 获取窗口的一个管理器
WindowManager manager = getWindowManager();
Display display = manager.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics);
// 获取一个屏幕的宽和高
zmkuang = displayMetrics.widthPixels;
zmGao = displayMetrics.heightPixels;
play();
}
// 写一个游戏开始的方法
public void play() {
jieshu = false;
// 设置两根柱子的初始位置
zhuX = zmkuang - zhu_kuan;
zhuY = 0;
zhuX_2 = zmkuang - zhu_kuan;
zhuY_2 = zmGao;
zhu_gao = zmGao / 2 - 200;
zhu_gao_2 = zmGao - zhu_gao - 200;
zhu_sudu = 5;
View.OnTouchListener shoushi=new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch(arg1.getAction()){
case MotionEvent.ACTION_DOWN:
//手指点击
qiuY=qiuY-qiu_shang;
handler.sendEmptyMessage(0*123);
break;
}
return true;
}
};
//写一个手势识别
mygameView.setOnTouchListener(shoushi);
qiu_sudu = 3.5f;
qiu_shang = 90;
num = 0;
// 球的初始位置
qiuX = 50;
qiuY = zmGao / 2;
handler.sendEmptyMessage(0*123);
// 写一个定时器
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// 设置小球跟柱子的坐标
qiuY = qiuY + qiu_sudu;
zhuX = zhuX - zhu_sudu;
zhuX_2 = zhuX_2 - zhu_sudu;
//如果柱子碰到屏幕边缘
if(zhuX<=0){
zhuX = zmkuang - zhu_kuan;
zhuX_2 = zmkuang - zhu_kuan;
}
//判断小球是否碰到屏幕边缘
if(qiuY>=zmGao){
jieshu=true;
}
if(qiuX>=zhuX){
if(qiuY<zhu_gao||qiuY>zhu_gao_2 ){
jieshu=true;
}
//随机柱子的高
Random random=new Random();
int height = random.nextInt(250)+100;
// 设置球穿过两根柱子后位置
zhuX = zmkuang - zhu_kuan;
zhuY = 0;
zhuX_2 = zmkuang - zhu_kuan;
zhuY_2 = zmGao;
zhu_gao = zmGao / 2 - height;
zhu_gao_2 = zmGao - zhu_gao - height;
zhu_sudu = 5;
if(jieshu==false){
//写一个过柱子时声音的方法
muck();
num++;
}
}
if(jieshu==false){
handler.sendEmptyMessage(0*123);
}
}
}, 0, 15);
}
// handler消息机制
Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0*123) {
mygameView.invalidate();
}
}
};
private MygameView mygameView;
private MediaPlayer mp3;
// 写一个画板
class MygameView extends View {
// 写一个画笔的对象
Paint paint = new Paint();
public MygameView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//插入背景图片
canvas.drawRGB(0,0,0);
// 画笔的默认样式
paint.setStyle(Paint.Style.FILL);
// 设置抗拒齿
paint.setAntiAlias(true);
if (jieshu) {
// 执行游戏结束得效果
Intent intent=new Intent(MainActivity.this, TwoActivity.class);
intent.putExtra("sum", String.valueOf(num));
startActivity(intent);
finish();
} else {
// 执行游戏进行时的效果
// 设置球的颜色
paint.setColor(Color.rgb(251, 178, 23));
paint.setTextSize(60);
// 设置画笔的大小
// 画一个圆的小球
canvas.drawCircle(qiuX, qiuY, qiu_size, paint);
paint.setColor(Color.rgb(244, 96, 108));
paint.setTextSize(60);
// 开始写字
canvas.drawText(num+"", zmkuang / 2 - 10, 60, paint);
// 绘制上柱子
paint.setColor(Color.rgb(80, 80, 200));
canvas.drawRect(zhuX, zhuY, zhuX + zhu_kuan, zhuY + zhu_gao,
paint);
// 绘制下柱子
canvas.drawRect(zhuX_2, zhuY_2 - zhu_gao_2,
zhuX_2 + zhu_kuan_2, zhuY_2 + zhu_gao_2, paint);
}
}
}
//写一个背景音乐
public void muck(){
MediaPlayer mediaplayer;
mediaplayer=new MediaPlayer();
mediaplayer.setLooping(true);
mp3 = MediaPlayer.create(this, R.drawable.music);
try {
mp3.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mp3.start();
mp3.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
}
});
}
}
游戏内效果图-游戏结束界面:
TwoActivity.java游戏结束界面代码:
package com.example.feixian;
import java.util.ArrayList;
import java.util.Collections;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class TwoActivity extends Activity {
private String sum_value;
private ArrayList<String> score;
private int tab=1;
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 使游戏全屏运行
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//写一个集合
score = new ArrayList<String>();
//对集合中的元素进行排序
Collections.sort(score);
//获得控件
TextView end_TextView = (TextView) findViewById(R.id.end_TextView);
TextView sum_TextView = (TextView) findViewById(R.id.sum_TextView);
Button start_btn1 = (Button) findViewById(R.id.start_btn1);
Button upload_btn2 = (Button) findViewById(R.id.upload_btn2);
Button check_btn3 = (Button) findViewById(R.id.check_btn3);
sum_value = getIntent().getStringExtra("sum");
end_TextView.setText("Game Over");
sum_TextView.setText("你的成绩为:"+sum_value);
//写重新开始的单击事件
start_btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent=new Intent(TwoActivity.this, MainActivity.class);
startActivity(intent);
}
});
//写上传成绩的单击事件
upload_btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(tab==1){
score.add(sum_value);
Toast.makeText(TwoActivity.this, "上传成功!", 1).show();
tab++;
}else{
Toast.makeText(TwoActivity.this, "您已经上传!", 1).show();
}
}
});
//写查看榜单的单击事件
check_btn3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
StringBuffer buffer=new StringBuffer();
for (int i = 0; i < score.size(); i++) {
buffer.append(score.get(i)+"\n");
}
Toast.makeText(TwoActivity.this, "排行为:"+"\n"+buffer, 1).show();
}
});
}
}
喜欢的话可以进入我的GitHub里有这个游戏的项目文件,不喜勿喷,第一次写博客。
版权声明:非商用自由转载-保持署名-注明出处
署名(TM):TopGradeModel