猜歌游戏 总结二
来源:互联网 发布:vue.js event.target 编辑:程序博客网 时间:2024/05/29 07:02
MianActivity
/** * 游戏实现逻辑: * 1.点击中间播放按钮,唱片动画开始,并播放歌曲 * 2.点击下面文字选择区域→待选框内显示点击的字→flag++ * →点击待选框内的字→flag--→当flag的大小等于歌曲长度,判断是否答题正确 * 1)正确跳转页面 2)不正确待选框闪烁 * * */public class MainActivity extends Activity implements View.OnClickListener { public final static String TAG = "MainActivity"; private Animation mPanAnim;//唱片旋转动画 private Animation mBarInAnim;//拨杆进入动画 private Animation mBarOutAnim;//拨杆出去动画 private ImageView mViewPan; // 唱片控件 private ImageView mViewPanBar; // 拨杆控件 private ImageButton mBtnPlayStart; //开始游戏按钮 private GridView mGridView;//文字选择区域的GridView private GridViewAdapter mAdapter;//GridView适配器 private List<WordButton> mAllWords;//文字框内的文字集合 //四个选择框 private TextView tvText01; private TextView tvText02; private TextView tvText03; private TextView tvText04; //这个数组用于存放选择过的按钮信息 private int[] indexArray = new int[4]; private int flag = 0;//用来记录选择的长度 public static Song mSong;//当前关的歌曲 private MyPlayer mPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initVariable();//初始化变量 initListener();//初始化监听事件 /** * 注册监听事件 * 字选择区域点击事件 * 自定义的一个监听事件 * */ mAdapter.buttonListener(new IWordButtonClickListener() { @Override public void onWordButtonClick(WordButton pButton) { textEvent(pButton); } }); } /** * 初始化监听事件 */ private void initListener() { mBtnPlayStart.setOnClickListener(this); tvText01.setOnClickListener(this); tvText02.setOnClickListener(this); tvText03.setOnClickListener(this); tvText04.setOnClickListener(this); } /** * 初始化变量 */ private void initVariable() { // 初始化控件 mViewPan = (ImageView) findViewById(R.id.imageView1);//唱片 mViewPanBar = (ImageView) findViewById(R.id.imageView2);//拨杆 mBtnPlayStart = (ImageButton) findViewById(R.id.btn_play_start);//开始按钮 //初始化4个选择框 tvText01 = (TextView) findViewById(R.id.text_01); tvText02 = (TextView) findViewById(R.id.text_02); tvText03 = (TextView) findViewById(R.id.text_03); tvText04 = (TextView) findViewById(R.id.text_04); // 初始化动画 mPanAnim = AnimationUtils.loadAnimation(this, R.anim.rotate);//唱片旋转动画 mBarInAnim = AnimationUtils.loadAnimation(this, R.anim.rotate_45);//拨杆进入动画 mBarInAnim.setFillAfter(true);//设置动画停留在结束位置 mBarOutAnim = AnimationUtils.loadAnimation(this, R.anim.rotate_d_45);//拨杆出去动画 mBarOutAnim.setFillAfter(true); //初始化GridView中的数据 mGridView = (GridView) findViewById(R.id.gridView);//文字选择区域的GridView mAllWords = new ArrayList<>();//初始化List mAdapter = new GridViewAdapter(mAllWords, this); mGridView.setAdapter(mAdapter); if (mSong == null) { mSong = SongsData.getSongData(1);//设置关卡 只要改变这个就好了 } mAllWords.addAll(createText(mSong.getName())); //初始化数组 for (int i = 0; i < 4; i++) { indexArray[i] = i; } //初始化选择区域 if (mSong.getNameLength() == 3) { tvText04.setVisibility(View.GONE); } if (mSong.getNameLength() == 2) { tvText04.setVisibility(View.GONE); tvText03.setVisibility(View.GONE); } } /** * 设置开始按钮的点击事件 * 点击逻辑: * 每次进入都先判断1→2→3→5 * 1.判断第一个Text是否为空 * 为空设置它的值 * 2.若不为空,设置第二个Text */ private void textEvent(WordButton pButton) { if (tvText01.getText().toString().trim().equals("")) { textEvent01(0, pButton, tvText01); } else if (tvText02.getText().toString().trim().equals("")) { textEvent01(1, pButton, tvText02); } else if (tvText03.getText().toString().trim().equals("") && tvText03.getVisibility() != View.GONE) { textEvent01(2, pButton, tvText03); } else if (tvText04.getText().toString().trim().equals("") && tvText04.getVisibility() != View.GONE) { textEvent01(3, pButton, tvText04); } if (flag == mSong.getNameLength()) { isFinish(); } } public void textEvent01(int i, WordButton pButton, TextView mTextView) { flag++; indexArray[i] = pButton.mIndex; mTextView.setText(pButton.mWordString); mAllWords.get(pButton.mIndex).mIsVisiable = false; mAdapter.notifyDataSetChanged(); } /** * 点击开始游戏(播放)按钮后 * 1.开始按钮消失 →2.拨杆拨进→3.唱片旋转→3.拨杆播出→4.开始按钮显示,并让音乐停止播放 */ private void startButtonEvent() { mBtnPlayStart.setVisibility(View.INVISIBLE);//按钮消失 mViewPanBar.startAnimation(mBarInAnim);//拨杆进入 startMusic();//播放音乐 //监听拨杆进入动画结束,唱片动画开始 mBarInAnim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mViewPan.startAnimation(mPanAnim); } @Override public void onAnimationRepeat(Animation animation) { } }); //唱片旋转结束时拨杆出来 mPanAnim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { if (mPlayer.getPlayer().isPlaying()) { mPlayer.getPlayer().stop();//停止 mPlayer.getPlayer().release();//释放 } mViewPanBar.startAnimation(mBarOutAnim);//拨杆出去 mBtnPlayStart.setVisibility(View.VISIBLE);//显示按钮 } @Override public void onAnimationRepeat(Animation animation) { } }); } /** * 点击事件 */ @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_play_start://开始按钮 startButtonEvent(); break; case R.id.text_01: setMyText(tvText01, 0); break; case R.id.text_02: setMyText(tvText02, 1); break; case R.id.text_03: setMyText(tvText03, 2); break; case R.id.text_04: setMyText(tvText04, 3); break; } } /** * 点击选择框的逻辑 * 1.当前点击的TextView 2.TextView里面的字对应的Index */ private void setMyText(TextView mTextView, int k) { //判断当前点击的选择框是否为空,不为空返回到候选区域 if (!mTextView.getText().toString().trim().equals("")) { flag--; mAllWords.get(indexArray[k]).mIsVisiable = true; mAdapter.notifyDataSetChanged();//通知更新 mTextView.setText(""); } } /** * 播放音乐 */ private void startMusic() { mPlayer = new MyPlayer(); mPlayer.playSong(this, mSong.getSongId()); } private void isFinish() { //获得"四个"TextView的数据 String result = tvText01.getText().toString().trim() + tvText02.getText().toString().trim() + tvText03.getText().toString().trim() + tvText04.getText().toString().trim(); if (result.equals(mSong.getName())) { startRightEvent();//执行答对时的逻辑 } else { //文字进行闪烁 //设置透明度动画 AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);//从0.1→1.0 alphaAnimation.setDuration(100);//动画时间 alphaAnimation.setRepeatCount(5);//重复次数 alphaAnimation.setRepeatMode(Animation.REVERSE); //倒序重复REVERSE 正序重复RESTART tvText01.startAnimation(alphaAnimation); tvText02.startAnimation(alphaAnimation); tvText03.startAnimation(alphaAnimation); tvText04.startAnimation(alphaAnimation); } } private void startRightEvent() { Intent mIntent; if (mSong.getLevel() < 6) { mIntent = new Intent(MainActivity.this, RightActivity.class); mIntent.putExtra("Level", mSong.getLevel());//把当前歌曲的等级传给正确页面 startActivity(mIntent); } else { //打开全部完成的页面 mIntent = new Intent(MainActivity.this, QuitActivity.class); startActivity(mIntent); } finish(); } @Override public void onPause() { //mPlayer.getPlayer().release();//若出现意外,则停止所有歌曲 mViewPan.clearAnimation(); super.onPause(); } public List<WordButton> createText(String songName){ //添加除歌词外的字 List<WordButton> mList = new ArrayList<>(); char[] stringArr = songName.toCharArray(); for (int i = 0; i < stringArr.length; i++) { WordButton zz = new WordButton(); zz.mWordString = stringArr[i] + ""; mList.add(zz); } for (int i = 0; mList.size() < 24; i++) { String a = MyUtils.getRandomChar() + ""; WordButton zy = new WordButton(); zy.mWordString = a; mList.add(zy); } //打乱候选字 for (int i = 0; i < 300; i++) { int a = (int) (20 * Math.random());//产生一个随机数 //让随机数和他后面的第四个数交换数据 String k = mList.get(a).mWordString; mList.get(a).mWordString = mList.get(a + 4).mWordString; mList.get(a + 4).mWordString = k; } return mList; }}
0 0
- 猜歌游戏 总结二
- 猜歌游戏 总结一
- 游戏跨区的实践总结(二)
- 有关游戏的部署方案总结(二)
- 二、c++猜数字游戏
- 游戏引擎Andengine总结(二):AndEngine引擎运行原理
- H5游戏开发的架构总结(二) 服务器端
- Windows游戏编程总结(二)粒子系统初步
- 猜纸牌游戏之二 实体类
- 【转】从工作中总结的游戏场景设计思路浅谈(二)[图]
- 【iOS-cocos2d-X 游戏开发之二】【必看篇】总结阐述Cocos2d-X与Cocos2d-iphone区别;
- 【iOS-cocos2d-X 游戏开发之二】【必看篇】总结阐述Cocos2d-X与Cocos2d-iphone区别;
- 【iOS-cocos2d-X 游戏开发之二】【必看篇】总结阐述Cocos2d-X与Cocos2d-iphone区别
- 【iOS-cocos2d-X 游戏开发之二】【必看篇】总结阐述Cocos2d-X与Cocos2d-iphone区别
- 2048游戏回顾二:算法总结(移动、合并、动画等)
- 游戏开发技巧二
- 一起做游戏(二)
- 游戏基础(二)
- Android与JavaScript互相调用与通信。
- 正则表达式
- JVM内存分区和GC回收算法
- 回文树模板
- Swift学习记录 -- 15.tableView的创建与基本操作
- 猜歌游戏 总结二
- 单链表的整表创建--头插法
- 猜歌游戏 三
- 单链表整表的创建--尾插法
- poj 3030 Nasty Hacks
- 短作业调度算法
- Java:接口
- 猜歌游戏 四
- node+express+mongodb可运行