package com.bosi.chineseclass.han.fragments; import java.util.HashMap; import java.util.List; import android.media.AudioManager; import android.media.SoundPool; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.GridView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.bosi.chineseclass.BaseFragment; import com.bosi.chineseclass.R; import com.bosi.chineseclass.han.components.HeadLayoutComponents; import com.bosi.chineseclass.han.db.GameDbOperation; import com.bosi.chineseclass.han.db.GameIconInfo; import com.bosi.chineseclass.han.modle.ImageAdapter; import com.bosi.chineseclass.han.util.PreferencesUtils; import com.bosi.chineseclass.han.util.Utils; import com.lidroid.xutils.view.annotation.ViewInject; public class GameFragment extends BaseFragment { @ViewInject(R.id.headactionbar) View mHeadActionBar; HeadLayoutComponents mHeadActionBarComp; @ViewInject(R.id.title_game) private TextView mTitleTV; @ViewInject(R.id.game_grid) private GridView mGameGrid; private ImageAdapter mGridAdapter; private View mIcon_focuse; @ViewInject(R.id.game_step_layout) private LinearLayout mStepLayout; @ViewInject(R.id.game_success_layout) private LinearLayout mSuccessLayout; @ViewInject(R.id.game_success_bt_next_step) private TextView mNextStepTv; @ViewInject(R.id.game_success_bt_restart) private TextView mRestartTv; private final int MAXSTEP = 9; private int mCurrentStep; private boolean isFirstClick = true; private int mFirstClickItemIndex = -1; private int matchCount = 0; private String COMPLETE_STEP = "max_step"; private String GAME_ICON_NULL = "game_icon_null"; private int mCompleteStep; private SoundPool mSoundPool; private HashMap<Integer, Integer> mSoundPoolMap; private final int GOODSOUND = 1; private final int BADSOUD =2; private List<GameIconInfo> mIconList = null; @Override protected View getBasedView() { return inflater.inflate(R.layout.fragment_layout_game, null); } @Override protected void afterViewInject() { initHeadActionBarComp(); mCompleteStep = PreferencesUtils.getInt(mActivity, COMPLETE_STEP, 0); mIconList = getGameIconList(); initStepLayout(); initGameGrid(); initSuccessLayout(); initSoundPool(); } private void initSoundPool() { mSoundPool = new SoundPool(2, AudioManager.STREAM_SYSTEM, 0); mSoundPoolMap = new HashMap<Integer, Integer>(); mSoundPoolMap.put(GOODSOUND, mSoundPool.load(mActivity, R.raw.good, 1)); mSoundPoolMap.put(BADSOUD, mSoundPool.load(mActivity, R.raw.bad, 2)); } private List<GameIconInfo> getGameIconList() { GameDbOperation gameDbOperation = new GameDbOperation(); //TODO:sql需要加入mCurrentStep String sql = "select * from game where step = " + mCurrentStep; // String sql = "select * from game"; List<GameIconInfo> iconList = gameDbOperation.selectDataFromDb(sql); return iconList; } private void initStepLayout() { TextView stepBt = null; for (int i = 0; i < MAXSTEP; i++ ) { final int step = i; stepBt = new TextView(getActivity()); stepBt.setBackgroundResource(R.drawable.game_step_bt); stepBt.setPadding(20, 14, 20, 14); stepBt.setText(String.valueOf(i+1)); stepBt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (mCurrentStep != step && step <= mCompleteStep) { mCurrentStep = step; refreshGameView(); } else if (step > mCompleteStep) { Toast.makeText(mActivity, "请先完成前面的关卡", Toast.LENGTH_SHORT).show(); } } }); mStepLayout.addView(stepBt); } initButtonTextColor(); } private void initButtonTextColor(){ for (int i = 0; i < MAXSTEP; i++ ) { initButtonColor(i); } } private void initButtonColor(int btIndex) { //TODO:颜色值 TextView stepBt = (TextView) mStepLayout.getChildAt(btIndex); if (btIndex == mCurrentStep) { stepBt.setTextColor(getResources().getColor(android.R.color.holo_red_light)); } else if (btIndex > mCompleteStep){ stepBt.setTextColor(getResources().getColor(android.R.color.darker_gray)); } else { stepBt.setTextColor(getResources().getColor(android.R.color.black)); } } private void initGameGrid() { mGridAdapter = new ImageAdapter(mActivity, mIconList); mGameGrid.setAdapter(mGridAdapter); mGameGrid.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View view, int currenItemIndex, long arg3) { String path = mIconList.get(currenItemIndex).getIconPath(); if (path.equals(GAME_ICON_NULL)) { return; } if (isFirstClick) { ImageAdapter.GridHolder holder = (ImageAdapter.GridHolder) view.getTag(); mIcon_focuse = holder.getIcon_above(); mIcon_focuse.setVisibility(View.VISIBLE); mFirstClickItemIndex = currenItemIndex; isFirstClick = false; } else { if (mFirstClickItemIndex != -1) { mIcon_focuse.setVisibility(View.GONE); } if (isIconMatch(mFirstClickItemIndex,currenItemIndex)) {//判断如果两个图片匹配的话,消失 mIconList.get(mFirstClickItemIndex).setIconPath(GAME_ICON_NULL); mIconList.get(currenItemIndex).setIconPath(GAME_ICON_NULL); mGridAdapter.notifyDataSetChanged(); matchCount += 2; playGoodMusic(); } else { playBadMusic(); } if (matchCount == mIconList.size()) { setSuccessLayoutVisible(); Toast.makeText(mActivity, "完成本关", Toast.LENGTH_SHORT).show(); } isFirstClick = true; } } }); } private void playGoodMusic(){ mSoundPool.play(mSoundPoolMap.get(GOODSOUND), 1, 1, 0, 0, 1); } private void playBadMusic(){ mSoundPool.play(mSoundPoolMap.get(BADSOUD), 1, 1, 0, 0, 1); } private void initSuccessLayout() { mNextStepTv.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { mCurrentStep++; refreshGameView(); } }); mRestartTv.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { refreshGameView(); } }); } private void refreshGameView() { mSuccessLayout.setVisibility(View.GONE); mIconList.clear(); mIconList.addAll(getGameIconList()); mGridAdapter.notifyDataSetChanged(); matchCount = 0; initButtonTextColor(); } private boolean isIconMatch(int mFirstClickItemIndex, int currenIndex){ if (mFirstClickItemIndex != currenIndex) { int firstItemType = mIconList.get(mFirstClickItemIndex).getType(); int currenItemType = mIconList.get(currenIndex).getType(); if (firstItemType == currenItemType) { return true; } } return false; } private void setSuccessLayoutVisible() { if (mCurrentStep >= mCompleteStep) { mCompleteStep = mCurrentStep + 1; PreferencesUtils.putInt(mActivity, COMPLETE_STEP, mCompleteStep); } if (mCompleteStep == MAXSTEP) { //完成第九关后,不显示下一关按钮 mNextStepTv.setVisibility(View.GONE); } else { mNextStepTv.setVisibility(View.VISIBLE); } mSuccessLayout.setVisibility(View.VISIBLE); } private void initHeadActionBarComp() { mHeadActionBarComp = new HeadLayoutComponents(mActivity, mHeadActionBar); mHeadActionBarComp.setTextMiddle("趣味游戏", -1); mHeadActionBarComp.setDefaultLeftCallBack(true); mHeadActionBarComp.setDefaultRightCallBack(true); } }