第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

如果要設(shè)計(jì)成關(guān)卡,進(jìn)入下一關(guān),只改變圖片,要怎么設(shè)計(jì)

感覺要改變很多代碼,弄了很久都不行

正在回答

7 回答

關(guān)鍵代碼,在//加載關(guān)卡數(shù)據(jù)的下面追加

				/*?======實(shí)現(xiàn)下一關(guān)效果=======?*/
				//?初始化游戲小方塊
				Bitmap?bigBm?=?((BitmapDrawable)?getResources().getDrawable(R.drawable.b)).getBitmap();
				int?tuWandH?=?bigBm.getWidth()?/?3;//?每個(gè)小方塊的寬和高
				//?重新設(shè)置對(duì)應(yīng)的要展示的圖片
				for?(int?i?=?0;?i?<?iv_game_arr.length;?i++)?{
					for?(int?j?=?0;?j?<?iv_game_arr[0].length;?j++)?{
						Bitmap?bm?=?Bitmap.createBitmap(bigBm,?j?*?tuWandH,?i?*?tuWandH,?tuWandH,?tuWandH);//?根據(jù)行列切成游戲圖片
						iv_game_arr[i][j].setImageBitmap(bm);//?設(shè)置每一個(gè)方塊的圖標(biāo)
						iv_game_arr[i][j].setPadding(2,?2,?2,?2);//?設(shè)置方塊間距
						iv_game_arr[i][j].setTag(new?GameData(i,?j,?bm));//?綁定自定義數(shù)據(jù)
					}
				}
				setNullImageView(iv_game_arr[2][2]);//?設(shè)置最后一個(gè)方塊是空的
				isGameStart?=?false;//?設(shè)置游戲未開始,方便下面打亂順序時(shí)不顯示動(dòng)畫。
				randomMove();//?初始化隨機(jī)打亂順序
				isGameStart?=?true;//?開始游戲狀態(tài),此時(shí)點(diǎn)擊方塊移動(dòng)時(shí)會(huì)有動(dòng)畫

第二關(guān)圖片如下

http://img1.sycdn.imooc.com//58143b150001fce503330333.jpg

效果演示

58143b450001426305000889.jpg

58143b4900016dcb05000889.jpg

58143b4e0001bf1005000889.jpg

58143b530001299705000889.jpg


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕勒0695240 提問(wèn)者

如果是這種方法,要導(dǎo)入很多圖片的話,就會(huì)重復(fù)很多代碼,有沒有一種不用寫很多代碼的。我想把要用的圖片放到一個(gè)數(shù)組里,通過(guò)關(guān)卡索引來(lái)改變圖片
2016-10-29 回復(fù) 有任何疑惑可以回復(fù)我~
#2

阿旭_ 回復(fù) 慕勒0695240 提問(wèn)者

可以把這段代碼封裝起來(lái),方便的參數(shù)是int id類型,然后全局做一個(gè)變量控制關(guān)卡的變量int t (做為數(shù)組的下標(biāo),0表示第一關(guān),1表示第二關(guān)以此類推),再做一個(gè)數(shù)組保存所有的圖片id 。int[] arr_img_id = new int[]{R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d};于是調(diào)用方法法的時(shí)候傳的id就變成了arr_img_id[t];即,第N關(guān)的的圖片就是arr_img_id[t]
2016-10-29 回復(fù) 有任何疑惑可以回復(fù)我~

完整代碼如下:

package?com.example.admin.pintu;

import?android.app.Activity;
import?android.graphics.Bitmap;
import?android.graphics.drawable.BitmapDrawable;
import?android.os.Bundle;
import?android.os.SystemClock;
import?android.view.GestureDetector;
import?android.view.MotionEvent;
import?android.view.View;
import?android.view.animation.Animation;
import?android.view.animation.TranslateAnimation;
import?android.widget.Chronometer;
import?android.widget.GridLayout;
import?android.widget.ImageButton;
import?android.widget.ImageView;
import?android.widget.LinearLayout;
import?android.widget.RelativeLayout;
import?android.widget.TextView;

public?class?MainActivity?extends?Activity?{
	private?boolean?isGameStart?=?false;//?判斷游戲是否開始
	private?boolean?isGameOver?=?false;//?判斷游戲是否結(jié)束
	private?boolean?changeDataByImageView?=?false;//?判斷游戲是否交換數(shù)據(jù)
	private?ImageView[][]?iv_game_arr?=?new?ImageView[3][3];//?利用二維數(shù)組創(chuàng)建方塊
	private?GridLayout?gl_main_game;//?主頁(yè)面
	private?ImageView?iv_null_ImageView;//?當(dāng)前空方塊的實(shí)例的保存
	private?GestureDetector?mDetector;//?當(dāng)前手勢(shì)
	private?boolean?isAnimRun?=?false;//?當(dāng)前動(dòng)畫是否在執(zhí)行
	private?Chronometer?timer;
	private?ImageButton?stop;
	private?View?mPassView;
	private?TextView?mCurrentTimeSpend;
	private?TextView?mCurrentStageView;
	private?int?mCurrentStageIndex?=?0;
	private?Bitmap?bigBm;

	//?private?ArrayList<BitmapDrawable>?mBigBm;
	//?設(shè)置手勢(shì)
	@Override
	public?boolean?onTouchEvent(MotionEvent?event)?{
		return?mDetector.onTouchEvent(event);
	}

	@Override
	public?boolean?dispatchTouchEvent(MotionEvent?ev)?{
		mDetector.onTouchEvent(ev);
		return?super.dispatchTouchEvent(ev);
	}

	@Override
	protected?void?onCreate(Bundle?savedInstanceState)?{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.content_main);
		//?設(shè)置監(jiān)聽器
		mDetector?=?new?GestureDetector(this,?new?GestureDetector.OnGestureListener()?{
			@Override
			public?boolean?onSingleTapUp(MotionEvent?arg0)?{
				return?false;
			}

			@Override
			public?void?onShowPress(MotionEvent?arg0)?{
			}

			@Override
			public?boolean?onScroll(MotionEvent?arg0,?MotionEvent?arg1,?float?arg2,?float?arg3)?{
				return?false;
			}

			@Override
			public?void?onLongPress(MotionEvent?arg0)?{
			}

			@Override
			public?boolean?onFling(MotionEvent?arg0,?MotionEvent?arg1,?float?arg2,?float?arg3)?{
				int?type?=?getDirByGes(arg0.getX(),?arg0.getY(),?arg1.getX(),?arg1.getY());
				changeByDir(type);//?傳遞方法
				return?false;
			}

			@Override
			public?boolean?onDown(MotionEvent?arg0)?{
				return?false;
			}
		});
		//?獲取時(shí)間和停止按鈕資源
		this.timer?=?(Chronometer)?findViewById(R.id.chronometer);
		this.stop?=?(ImageButton)?findViewById(R.id.imageButton);
		stop.setOnClickListener(isstop);
		//?顯示當(dāng)前關(guān)的索引
		mCurrentStageView?=?(TextView)?findViewById(R.id.textView);
		if?(mCurrentStageView?!=?null)?{
			mCurrentStageView.setText("第"?+?(mCurrentStageIndex?+?1)?+?"關(guān)");
		}
		//?初始化游戲小方塊
		//?獲取一張大圖
		Bitmap?bigBm?=?((BitmapDrawable)?getResources().getDrawable(R.drawable.a)).getBitmap();
		int?tuWandH?=?bigBm.getWidth()?/?3;//?每個(gè)小方塊的寬和高
		int?ivWandH?=?getWindowManager().getDefaultDisplay().getWidth()?/?3;//?小方塊寬應(yīng)為整個(gè)屏幕/3
		for?(int?i?=?0;?i?<?iv_game_arr.length;?i++)?{
			for?(int?j?=?0;?j?<?iv_game_arr[0].length;?j++)?{
				Bitmap?bm?=?Bitmap.createBitmap(bigBm,?j?*?tuWandH,?i?*?tuWandH,?tuWandH,?tuWandH);//?根據(jù)行列切成游戲圖片
				iv_game_arr[i][j]?=?new?ImageView(this);
				iv_game_arr[i][j].setImageBitmap(bm);//?設(shè)置每一個(gè)方塊的圖標(biāo)
				iv_game_arr[i][j].setLayoutParams(new?RelativeLayout.LayoutParams(ivWandH,?ivWandH));
				iv_game_arr[i][j].setPadding(2,?2,?2,?2);//?設(shè)置方塊間距
				iv_game_arr[i][j].setTag(new?GameData(i,?j,?bm));//?綁定自定義數(shù)據(jù)
				iv_game_arr[i][j].setOnClickListener(new?View.OnClickListener()?{
					@Override
					public?void?onClick(View?v)?{
						boolean?flag?=?isHasByNullImageView((ImageView)?v);
						if?(flag)?{
							changeDataByImageView((ImageView)?v);
						}
					}
				});
			}
		}
		//?初始化游戲界面,添加方塊
		gl_main_game?=?(GridLayout)?findViewById(R.id.gl_main_game);
		for?(int?i?=?0;?i?<?iv_game_arr.length;?i++)?{
			for?(int?j?=?0;?j?<?iv_game_arr[0].length;?j++)?{
				gl_main_game.addView(iv_game_arr[i][j]);
			}
		}
		setNullImageView(iv_game_arr[2][2]);//?設(shè)置最后一個(gè)方塊是空的
		randomMove();//?初始化隨機(jī)打亂順序
		isGameStart?=?true;//?開始游戲狀態(tài)
		timer.start();
	}

	//?重載,由于開始100次隨即無(wú)動(dòng)畫
	public?void?changeByDir(int?type)?{
		changeByDir(type,?true);
	}

	//?根據(jù)手勢(shì)方向獲取空方塊相鄰位置,存在方塊,進(jìn)行數(shù)據(jù)交換,1up,2down,3left,4right
	public?void?changeByDir(int?type,?boolean?isAnim)?{
		GameData?mNullGameData?=?(GameData)?iv_null_ImageView.getTag();//?獲取當(dāng)前空方塊位置
		int?new_x?=?mNullGameData.x;//?根據(jù)方向設(shè)置相應(yīng)位置坐標(biāo)
		int?new_y?=?mNullGameData.y;
		if?(type?==?1)?{//?要移動(dòng)的方塊在空的下面
			new_x++;
		}?else?if?(type?==?2)?{
			new_x--;
		}?else?if?(type?==?3)?{
			new_y++;
		}?else?if?(type?==?4)?{
			new_y--;
		}
		//?判斷新坐標(biāo)是否存在
		if?(new_x?>=?0?&&?new_x?<?iv_game_arr.length?&&?new_y?>=?0?&&?new_y?<?iv_game_arr[0].length)?{
			if?(isAnim)?{
				changeDataByImageView(iv_game_arr[new_x][new_y]);//?存在,移動(dòng)
			}?else?{//?無(wú)動(dòng)畫
				changeDataByImageView(iv_game_arr[new_x][new_y],?isAnim);
			}
		}?else?{
			//?不用做什么
		}
	}

	//?游戲暫停
	private?View.OnClickListener?isstop?=?new?View.OnClickListener()?{
		@Override
		public?void?onClick(View?v)?{
			timer.stop();
		}
	};

	//?判斷游戲結(jié)束方法
	public?void?isGameOver()?{
		boolean?isGameOver?=?true;
		//?遍歷每個(gè)游戲方塊
		for?(int?i?=?0;?i?<?iv_game_arr.length;?i++)?{
			for?(int?j?=?0;?j?<?iv_game_arr[0].length;?j++)?{
				//?為空的方塊數(shù)據(jù)跳過(guò)
				if?(iv_game_arr[i][j]?==?iv_null_ImageView)?{
					continue;
				}
				GameData?mGameData?=?(GameData)?iv_game_arr[i][j].getTag();
				if?(!mGameData.isTrue())?{
					isGameOver?=?false;
					break;
				}
			}
		}
		//?根據(jù)一個(gè)開關(guān)變量決定是否結(jié)束
		if?(isGameOver)?{
			timer.stop();
			handlePassEvent();
		}
	}

	//?處理過(guò)關(guān)界面
	private?void?handlePassEvent()?{
		//?顯示過(guò)關(guān)界面
		mPassView?=?(LinearLayout)?findViewById(R.id.pass_view);
		mPassView.setVisibility(View.VISIBLE);
		//?當(dāng)前關(guān)的索引
		mCurrentTimeSpend?=?(TextView)?findViewById(R.id.time_spend);
		if?(mCurrentTimeSpend?!=?null)?{
			mCurrentTimeSpend.setText("用時(shí):"?+?timer.getText());
		}
		//?下一關(guān)按鍵處理
		ImageButton?btnPass?=?(ImageButton)?findViewById(R.id.btn_next);
		btnPass.setOnClickListener(new?View.OnClickListener()?{
			@Override
			public?void?onClick(View?v)?{
				/**
				?*?if(judegAppPassed){?//進(jìn)入到通關(guān)界面?}else?{
				?*/
				//?開始新的一關(guān)
				mPassView.setVisibility(View.GONE);
				//?時(shí)間清零
				timer.setBase(SystemClock.elapsedRealtime());
				timer.start();
				//?加載關(guān)卡數(shù)據(jù)
				/*?======實(shí)現(xiàn)下一關(guān)效果=======?*/
				//?初始化游戲小方塊
				Bitmap?bigBm?=?((BitmapDrawable)?getResources().getDrawable(R.drawable.b)).getBitmap();
				int?tuWandH?=?bigBm.getWidth()?/?3;//?每個(gè)小方塊的寬和高
				//?重新設(shè)置對(duì)應(yīng)的要展示的圖片
				for?(int?i?=?0;?i?<?iv_game_arr.length;?i++)?{
					for?(int?j?=?0;?j?<?iv_game_arr[0].length;?j++)?{
						Bitmap?bm?=?Bitmap.createBitmap(bigBm,?j?*?tuWandH,?i?*?tuWandH,?tuWandH,?tuWandH);//?根據(jù)行列切成游戲圖片
						iv_game_arr[i][j].setImageBitmap(bm);//?設(shè)置每一個(gè)方塊的圖標(biāo)
						iv_game_arr[i][j].setPadding(2,?2,?2,?2);//?設(shè)置方塊間距
						iv_game_arr[i][j].setTag(new?GameData(i,?j,?bm));//?綁定自定義數(shù)據(jù)
					}
				}
				setNullImageView(iv_game_arr[2][2]);//?設(shè)置最后一個(gè)方塊是空的
				isGameStart?=?false;//?設(shè)置游戲未開始,方便下面打亂順序時(shí)不顯示動(dòng)畫。
				randomMove();//?初始化隨機(jī)打亂順序
				isGameStart?=?true;//?開始游戲狀態(tài),此時(shí)點(diǎn)擊方塊移動(dòng)時(shí)會(huì)有動(dòng)畫
			}
		});
	}

	
	//?判斷是否通關(guān)
	/**
	?*?private?boolean?judegAppPassed(){?return?(mCurrentStageIndex==
	?*?Const.SONG_INFO.length?-?1);?}
	?*/
	//?手勢(shì)判斷
	public?int?getDirByGes(float?start_x,?float?start_y,?float?end_x,?float?end_y)?{
		boolean?isLeftOrRight?=?(Math.abs(start_x?-?end_x)?>?Math.abs(start_y?-?end_y))???true?:?false;//?是否是左右
		if?(isLeftOrRight)?{//?左右
			boolean?isLeft?=?start_x?-?end_x?>?0???true?:?false;
			if?(isLeft)?{
				return?3;
			}?else?{
				return?4;
			}
		}?else?{//?上下
			boolean?isUp?=?start_y?-?end_y?>?0???true?:?false;
			if?(isUp)?{
				return?1;
			}?else?{
				return?2;
			}
		}
		//?1up,2down,3left,4right
	}

	//?隨即打亂順序
	public?void?randomMove()?{
		//?打亂次數(shù)
		for?(int?i?=?0;?i?<?10;?i++)?{
			//?開始交換,無(wú)動(dòng)畫
			int?type?=?(int)?(Math.random()?*?4)?+?1;
			changeByDir(type,?false);
		}
	}

	public?void?changeDataByImageView(final?ImageView?miImageView)?{//?重載有動(dòng)畫
		changeDataByImageView(miImageView,?true);
	}

	//?利用動(dòng)畫結(jié)束之后,交換兩個(gè)方塊數(shù)據(jù)
	public?void?changeDataByImageView(final?ImageView?miImageView,?boolean?isAnim)?{
		if?(isAnimRun)?{
			return;
		}
		if?(!isAnim)?{
			GameData?mGameData?=?(GameData)?miImageView.getTag();
			iv_null_ImageView.setImageBitmap(mGameData.bm);
			GameData?mNullGameData?=?(GameData)?iv_null_ImageView.getTag();
			mNullGameData.bm?=?mGameData.bm;
			mNullGameData.p_x?=?mGameData.p_x;
			mNullGameData.p_y?=?mGameData.p_y;
			setNullImageView(miImageView);//?設(shè)置當(dāng)前點(diǎn)擊的為空方塊
			if?(isGameStart)?{
				isGameOver();//?成功時(shí),彈出一個(gè)toast
			}
			return;
		}
		TranslateAnimation?translateAnimation?=?null;//?創(chuàng)建一個(gè)動(dòng)畫,設(shè)置方向,移動(dòng)距離
		if?(miImageView.getX()?>?iv_null_ImageView.getX())?{//?當(dāng)前點(diǎn)擊在空之上
			translateAnimation?=?new?TranslateAnimation(0.1f,?-miImageView.getWidth(),?0.1f,?0.1f);//?向上移動(dòng)
		}?else?if?(miImageView.getX()?<?iv_null_ImageView.getX())?{
			translateAnimation?=?new?TranslateAnimation(0.1f,?miImageView.getWidth(),?0.1f,?0.1f);//?向下移動(dòng)
		}?else?if?(miImageView.getY()?>?iv_null_ImageView.getY())?{
			translateAnimation?=?new?TranslateAnimation(0.1f,?0.1f,?0.1f,?-miImageView.getHeight());//?向左移動(dòng)
		}?else?if?(miImageView.getY()?<?iv_null_ImageView.getY())?{
			translateAnimation?=?new?TranslateAnimation(0.1f,?0.1f,?0.1f,?miImageView.getHeight());//?向右移動(dòng)
		}
		translateAnimation.setDuration(70);//?設(shè)置動(dòng)畫時(shí)常,ms
		translateAnimation.setFillAfter(true);//?設(shè)置動(dòng)畫結(jié)束之后是否停留
		//?設(shè)置動(dòng)畫結(jié)束之后真正交換數(shù)據(jù)
		translateAnimation.setAnimationListener(new?Animation.AnimationListener()?{
			@Override
			public?void?onAnimationStart(Animation?animation)?{
				isAnimRun?=?true;
			}

			@Override
			public?void?onAnimationRepeat(Animation?animation)?{
			}

			@Override
			public?void?onAnimationEnd(Animation?animation)?{
				isAnimRun?=?false;
				miImageView.clearAnimation();
				GameData?mGameData?=?(GameData)?miImageView.getTag();
				iv_null_ImageView.setImageBitmap(mGameData.bm);
				GameData?mNullGameData?=?(GameData)?iv_null_ImageView.getTag();
				mNullGameData.bm?=?mGameData.bm;
				mNullGameData.p_x?=?mGameData.p_x;
				mNullGameData.p_y?=?mGameData.p_y;
				setNullImageView(miImageView);//?設(shè)置當(dāng)前點(diǎn)擊的為空方塊
				if?(isGameStart)?{
					isGameOver();
				}
			}
		});
		miImageView.startAnimation(translateAnimation);//?執(zhí)行動(dòng)畫
	}

	//?設(shè)置空方塊,mImageView是當(dāng)前設(shè)置為空方塊的實(shí)例
	public?void?setNullImageView(ImageView?mImageView)?{
		mImageView.setImageBitmap(null);
		iv_null_ImageView?=?mImageView;
	}

	//?判斷當(dāng)前點(diǎn)擊的是否是空方塊位置為相鄰關(guān)系,mImageView所點(diǎn)擊的方塊
	public?boolean?isHasByNullImageView(ImageView?mImageView)?{
		//?分別獲取當(dāng)前空方塊的位置與點(diǎn)擊方塊的位置
		GameData?mNullGameData?=?(GameData)?iv_null_ImageView.getTag();
		GameData?mGameData?=?(GameData)?mImageView.getTag();
		if?(mNullGameData.y?==?mGameData.y?&&?mNullGameData.x?+?1?==?mGameData.x)?{//?當(dāng)前點(diǎn)擊方塊在空方塊上面
			return?true;
		}?else?if?(mNullGameData.y?==?mGameData.y?&&?mNullGameData.x?-?1?==?mGameData.x)?{//?當(dāng)前點(diǎn)擊方塊在空方塊下面
			return?true;
		}?else?if?(mNullGameData.y?==?mGameData.y?+?1?&&?mNullGameData.x?==?mGameData.x)?{//?當(dāng)前點(diǎn)擊方塊在空方塊左面
			return?true;
		}?else?if?(mNullGameData.y?==?mGameData.y?-?1?&&?mNullGameData.x?==?mGameData.x)?{//?當(dāng)前點(diǎn)擊方塊在空方塊右面
			return?true;
		}
		return?false;
	}

	//?小方塊的監(jiān)測(cè)數(shù)據(jù)
	class?GameData?{
		public?int?x?=?0;//?方塊位置x
		public?int?y?=?0;//?方塊位置y
		public?Bitmap?bm;//?方塊圖片
		public?int?p_x;//?圖片位置x
		public?int?p_y;//?圖片位置y

		public?GameData(int?x,?int?y,?Bitmap?bm)?{
			super();
			this.x?=?x;
			this.y?=?y;
			this.bm?=?bm;
			this.p_x?=?x;
			this.p_y?=?y;
		}

		//?方塊的位置是否正確
		public?boolean?isTrue()?{
			if?(x?==?p_x?&&?y?==?p_y)?{
				return?true;
			}
			return?false;
		}
	}
}


0 回復(fù) 有任何疑惑可以回復(fù)我~

寫一個(gè)方法用來(lái)重置圖片即可。

步驟1:方法的參數(shù)是Bitmap的。

步驟2:重新為每個(gè)ImageView設(shè)置新的圖片,綁定新的GameData

步驟3:調(diào)用“設(shè)置最后一個(gè)方塊是空的”和“初始化隨機(jī)打亂順序方塊”方法。

如果還是實(shí)現(xiàn)不了,請(qǐng)把你的代碼貼上來(lái),我?guī)湍銓?shí)現(xiàn)再發(fā)給你。

0 回復(fù) 有任何疑惑可以回復(fù)我~

http://img1.sycdn.imooc.com//5814572f0001bead12030569.jpg。。。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕勒0695240 提問(wèn)者

這是什么問(wèn)題啊
2016-10-29 回復(fù) 有任何疑惑可以回復(fù)我~
#2

阿旭_

內(nèi)存不夠了,可能的原因有兩個(gè),一個(gè)是圖片太大。另一種可能是代碼可能有地方寫成了死循環(huán)。 建議把圖片改成333*333像素的試一下。
2016-10-29 回復(fù) 有任何疑惑可以回復(fù)我~
#3

慕勒0695240 提問(wèn)者 回復(fù) 阿旭_

對(duì)!是圖片太大了
2016-10-29 回復(fù) 有任何疑惑可以回復(fù)我~

http://img1.sycdn.imooc.com//58144eef0001531c03870715.jpg點(diǎn)擊下一關(guān)后會(huì)出現(xiàn)這個(gè)

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

阿旭_

發(fā)一下控制臺(tái)的錯(cuò)誤日志,看能不能定位崩潰的代碼是哪一行。
2016-10-29 回復(fù) 有任何疑惑可以回復(fù)我~

? //處理過(guò)關(guān)界面

? ? private void handlePassEvent(){

? ? ? ? //顯示過(guò)關(guān)界面

? ? ? ? mPassView = (LinearLayout)findViewById(R.id.pass_view);

? ? ? ? mPassView.setVisibility(View.VISIBLE);

? ? ? ? //當(dāng)前關(guān)的索引

? ? ? ? mCurrentTimeSpend=(TextView)findViewById(R.id.time_spend);

? ? ? ? if(mCurrentTimeSpend!=null){

? ? ? ? ? ? mCurrentTimeSpend.setText("用時(shí):"+timer.getText());

? ? ? ? }

? ? ? ? //下一關(guān)按鍵處理

? ? ? ? ImageButton btnPass = ( ImageButton)findViewById(R.id.btn_next);

? ? ? ? btnPass.setOnClickListener(new View.OnClickListener() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onClick(View v) {

? ? ? ? ? ? ? ? /** ? if(judegAppPassed){

? ? ? ? ? ? ? ? ?//進(jìn)入到通關(guān)界面

? ? ? ? ? ? ? ? ?}else {*/

? ? ? ? ? ? ? ? //開始新的一關(guān)

? ? ? ? ? ? ? ? mPassView.setVisibility(View.GONE);

? ? ? ? ? ? ? ? //時(shí)間清零

? ? ? ? ? ? ? ? timer.setBase(SystemClock.elapsedRealtime());

? ? ? ? ? ? ? ? timer.start();

? ? ? ? ? ? ? ? //加載關(guān)卡數(shù)據(jù)

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? ?//判斷是否通關(guān)

? /** ?private ?boolean judegAppPassed(){

? ? ? ? return (mCurrentStageIndex== Const.SONG_INFO.length - 1);

? ? }*/

? ? //手勢(shì)判斷

? ? public int getDirByGes(float start_x,float start_y,float end_x,float end_y){

? ? ? ? boolean isLeftOrRight=(Math.abs(start_x-end_x)>Math.abs(start_y-end_y))?true:false;//是否是左右

? ? ? ? if(isLeftOrRight){//左右

? ? ? ? ? ? boolean isLeft = start_x-end_x>0?true:false;

? ? ? ? ? ? if(isLeft){

? ? ? ? ? ? ? ? return 3;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? return 4;

? ? ? ? ? ? }

? ? ? ? }else{//上下

? ? ? ? ? ? boolean isUp = start_y-end_y>0?true:false;

? ? ? ? ? ? if(isUp){

? ? ? ? ? ? ? ? return 1;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? return 2;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? //1up,2down,3left,4right

? ? }

? ? //隨即打亂順序

? ? public void randomMove(){

? ? ? ? //打亂次數(shù)

? ? ? ? for (int i = 0; i < 10; i++) {

? ? ? ? ? ? //開始交換,無(wú)動(dòng)畫

? ? ? ? ? ? int type = (int) (Math.random()*4)+1;

? ? ? ? ? ? changeByDir(type,false);

? ? ? ? }

? ? }

? ? public void changeDataByImageView(final ImageView miImageView){//重載有動(dòng)畫

? ? ? ? changeDataByImageView(miImageView,true);

? ? }

? ? //利用動(dòng)畫結(jié)束之后,交換兩個(gè)方塊數(shù)據(jù)

? ? public void changeDataByImageView(final ImageView miImageView,boolean isAnim){

? ? ? ? if (isAnimRun) {

? ? ? ? ? ? return;

? ? ? ? }

? ? ? ? if(!isAnim){

? ? ? ? ? ? GameData mGameData = (GameData) miImageView.getTag();

? ? ? ? ? ? iv_null_ImageView.setImageBitmap(mGameData.bm);

? ? ? ? ? ? GameData mNullGameData = (GameData) iv_null_ImageView.getTag();

? ? ? ? ? ? mNullGameData.bm = mGameData.bm;

? ? ? ? ? ? mNullGameData.p_x = mGameData.p_x;

? ? ? ? ? ? mNullGameData.p_y = mGameData.p_y;

? ? ? ? ? ? setNullImageView(miImageView);//設(shè)置當(dāng)前點(diǎn)擊的為空方塊

? ? ? ? ? ? if(isGameStart){

? ? ? ? ? ? ? ? isGameOver();//成功時(shí),彈出一個(gè)toast

? ? ? ? ? ? }

? ? ? ? ? ? return;

? ? ? ? }

? ? ? ? TranslateAnimation translateAnimation=null;//創(chuàng)建一個(gè)動(dòng)畫,設(shè)置方向,移動(dòng)距離

? ? ? ? if(miImageView.getX()>iv_null_ImageView.getX()){//當(dāng)前點(diǎn)擊在空之上

? ? ? ? ? ? translateAnimation = new TranslateAnimation(0.1f,-miImageView.getWidth(), 0.1f,0.1f);//向上移動(dòng)

? ? ? ? }else if(miImageView.getX()<iv_null_ImageView.getX()){

? ? ? ? ? ? translateAnimation = new TranslateAnimation( 0.1f,miImageView.getWidth(),0.1f,0.1f);//向下移動(dòng)

? ? ? ? }else if(miImageView.getY()>iv_null_ImageView.getY()){

? ? ? ? ? ? translateAnimation = new TranslateAnimation(0.1f, 0.1f,0.1f,-miImageView.getHeight());//向左移動(dòng)

? ? ? ? }else if(miImageView.getY()<iv_null_ImageView.getY()){

? ? ? ? ? ? translateAnimation = new TranslateAnimation(0.1f, 0.1f,0.1f,miImageView.getHeight());//向右移動(dòng)

? ? ? ? }

? ? ? ? translateAnimation.setDuration(70);//設(shè)置動(dòng)畫時(shí)常,ms

? ? ? ? translateAnimation.setFillAfter(true);//設(shè)置動(dòng)畫結(jié)束之后是否停留

? ? ? ? //設(shè)置動(dòng)畫結(jié)束之后真正交換數(shù)據(jù)

? ? ? ? translateAnimation.setAnimationListener(new Animation.AnimationListener() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onAnimationStart(Animation animation) {

? ? ? ? ? ? ? ? isAnimRun = true;

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onAnimationRepeat(Animation animation) {

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onAnimationEnd(Animation animation) {

? ? ? ? ? ? ? ? isAnimRun = false;

? ? ? ? ? ? ? ? miImageView.clearAnimation();

? ? ? ? ? ? ? ? GameData mGameData = (GameData) miImageView.getTag();

? ? ? ? ? ? ? ? iv_null_ImageView.setImageBitmap(mGameData.bm);

? ? ? ? ? ? ? ? GameData mNullGameData = (GameData) iv_null_ImageView.getTag();

? ? ? ? ? ? ? ? mNullGameData.bm = mGameData.bm;

? ? ? ? ? ? ? ? mNullGameData.p_x = mGameData.p_x;

? ? ? ? ? ? ? ? mNullGameData.p_y = mGameData.p_y;

? ? ? ? ? ? ? ? setNullImageView(miImageView);//設(shè)置當(dāng)前點(diǎn)擊的為空方塊

? ? ? ? ? ? ? ? if(isGameStart){

? ? ? ? ? ? ? ? ? ? isGameOver();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? });

? ? ? ? miImageView.startAnimation(translateAnimation);//執(zhí)行動(dòng)畫

? ? }

? ? //設(shè)置空方塊,mImageView是當(dāng)前設(shè)置為空方塊的實(shí)例

? ? public void setNullImageView(ImageView mImageView){

? ? ? ? mImageView.setImageBitmap(null);

? ? ? ? iv_null_ImageView ?= mImageView;

? ? }

? ? //判斷當(dāng)前點(diǎn)擊的是否是空方塊位置為相鄰關(guān)系,mImageView所點(diǎn)擊的方塊

? ? public boolean isHasByNullImageView(ImageView mImageView){

? ? ? ? //分別獲取當(dāng)前空方塊的位置與點(diǎn)擊方塊的位置

? ? ? ? GameData mNullGameData=(GameData) iv_null_ImageView.getTag();

? ? ? ? GameData mGameData=(GameData)mImageView.getTag();

? ? ? ? if(mNullGameData.y==mGameData.y&&mNullGameData.x+1==mGameData.x){//當(dāng)前點(diǎn)擊方塊在空方塊上面

? ? ? ? ? ? return true;

? ? ? ? }else if(mNullGameData.y==mGameData.y&&mNullGameData.x-1==mGameData.x){//當(dāng)前點(diǎn)擊方塊在空方塊下面

? ? ? ? ? ? return true;

? ? ? ? }else if(mNullGameData.y==mGameData.y+1&&mNullGameData.x==mGameData.x){//當(dāng)前點(diǎn)擊方塊在空方塊左面

? ? ? ? ? ? return true;

? ? ? ? }else if(mNullGameData.y==mGameData.y-1&&mNullGameData.x==mGameData.x){//當(dāng)前點(diǎn)擊方塊在空方塊右面

? ? ? ? ? ? return true;

? ? ? ? }

? ? ? ? return false;

? ? }

? ? //小方塊的監(jiān)測(cè)數(shù)據(jù)

? ? class GameData{

? ? ? ? public int x=0;//方塊位置x

? ? ? ? public int y=0;//方塊位置y

? ? ? ? public ?Bitmap bm;//方塊圖片

? ? ? ? public int p_x;//圖片位置x

? ? ? ? public int p_y;//圖片位置y

? ? ? ? public GameData(int x, int y, Bitmap bm) {

? ? ? ? ? ? super();

? ? ? ? ? ? this.x = x;

? ? ? ? ? ? this.y = y;

? ? ? ? ? ? this.bm = bm;

? ? ? ? ? ? this.p_x = x;

? ? ? ? ? ? this.p_y = y;

? ? ? ? }

? ? ? ? //方塊的位置是否正確

? ? ? ? public boolean isTrue() {

? ? ? ? ? ? if (x==p_x&&y==p_y) {

? ? ? ? ? ? ? ? return true;

? ? ? ? ? ? }

? ? ? ? ? ? return false;

? ? ? ? }

? ? }

}



0 回復(fù) 有任何疑惑可以回復(fù)我~

package com.example.admin.pintu;


import android.app.Activity;

import android.content.DialogInterface;

import android.graphics.Bitmap;

import android.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

import android.os.SystemClock;

import android.support.design.widget.FloatingActionButton;

import android.support.design.widget.Snackbar;

import android.support.v7.app.AppCompatActivity;

import android.support.v7.widget.Toolbar;

import android.view.GestureDetector;

import android.view.MotionEvent;

import android.view.View;

import android.view.Menu;

import android.view.MenuItem;

import android.view.animation.Animation;

import android.view.animation.TranslateAnimation;

import android.widget.Chronometer;

import android.widget.ExpandableListView;

import android.widget.GridLayout;

import android.widget.ImageButton;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import android.widget.TextView;

import android.widget.Toast;

import com.example.admin.R;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

? ? private boolean isGameStart = false;//判斷游戲是否開始

? ? private boolean isGameOver = false;//判斷游戲是否結(jié)束

? ? private boolean changeDataByImageView=false;//判斷游戲是否交換數(shù)據(jù)

? ? private ImageView[][] iv_game_arr = new ImageView[3][3];//利用二維數(shù)組創(chuàng)建方塊

? ? private GridLayout gl_main_game;//主頁(yè)面

? ? private ImageView iv_null_ImageView;//當(dāng)前空方塊的實(shí)例的保存

? ? private GestureDetector mDetector;//當(dāng)前手勢(shì)

? ? private boolean isAnimRun= false;//當(dāng)前動(dòng)畫是否在執(zhí)行

? ? private Chronometer timer;

? ? private ImageButton stop;

? ? private View mPassView;

? ? private TextView mCurrentTimeSpend;

? ? private TextView mCurrentStageView;

? ? private int ?mCurrentStageIndex = 0;

? ? private ?Bitmap bigBm;

? // ?private ArrayList<BitmapDrawable> mBigBm;

? ? //設(shè)置手勢(shì)

? ? @Override

? ? public boolean onTouchEvent(MotionEvent event) {

? ? ? ? return mDetector.onTouchEvent(event);

? ? }

? ? @Override

? ? public boolean dispatchTouchEvent(MotionEvent ev) {

? ? ? ? mDetector.onTouchEvent(ev);

? ? ? ? return super.dispatchTouchEvent(ev);

? ? }

? ? @Override

? ? protected void onCreate(Bundle savedInstanceState) {

? ? ? ? super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.content_main);

? ? ? ? //設(shè)置監(jiān)聽器

? ? ? ? mDetector = new GestureDetector(this,new GestureDetector.OnGestureListener() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public boolean onSingleTapUp(MotionEvent arg0) {

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onShowPress(MotionEvent arg0) {

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? float arg3) {

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public void onLongPress(MotionEvent arg0) {

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,float arg3) {

? ? ? ? ? ? ? ? int type = getDirByGes(arg0.getX(), arg0.getY(), arg1.getX(), arg1.getY());

? ? ? ? ? ? ? ? changeByDir(type);//傳遞方法

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public boolean onDown(MotionEvent arg0) {

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? });

? ? ? ? //獲取時(shí)間和停止按鈕資源

? ? ? ? this.timer = (Chronometer)findViewById(R.id.chronometer);

? ? ? ? this.stop=(ImageButton)findViewById(R.id.imageButton);

? ? ? ? stop.setOnClickListener(isstop);

? ? ? ? //顯示當(dāng)前關(guān)的索引

? ? ? ? mCurrentStageView = (TextView) findViewById(R.id.textView);

? ? ? ? if (mCurrentStageView != null) {

? ? ? ? ? ? mCurrentStageView.setText("第" + (mCurrentStageIndex + 1) + "關(guān)");

? ? ? ? }

? ? ? ? //初始化游戲小方塊

? ? ? ? ? ? //獲取一張大圖

? ? ? ? ? ? Bitmap ?bigBm = ((BitmapDrawable) getResources().getDrawable(R.drawable.a)).getBitmap();

? ? ? ? ? ? int tuWandH = bigBm.getWidth() / 3;//每個(gè)小方塊的寬和高

? ? ? ? ? ? int ivWandH = getWindowManager().getDefaultDisplay().getWidth() / 3;//小方塊寬應(yīng)為整個(gè)屏幕/3

? ? ? ? ? ? for (int i = 0; i < iv_game_arr.length; i++) {

? ? ? ? ? ? ? ? for (int j = 0; j < iv_game_arr[0].length; j++) {

? ? ? ? ? ? ? ? ? ? Bitmap bm = Bitmap.createBitmap(bigBm, j * tuWandH, i * tuWandH, tuWandH, tuWandH);//根據(jù)行列切成游戲圖片

? ? ? ? ? ? ? ? ? ? iv_game_arr[i][j] = new ImageView(this);

? ? ? ? ? ? ? ? ? ? iv_game_arr[i][j].setImageBitmap(bm);//設(shè)置每一個(gè)方塊的圖標(biāo)

? ? ? ? ? ? ? ? ? ? iv_game_arr[i][j].setLayoutParams(new RelativeLayout.LayoutParams(ivWandH, ivWandH));

? ? ? ? ? ? ? ? ? ? iv_game_arr[i][j].setPadding(2, 2, 2, 2);//設(shè)置方塊間距

? ? ? ? ? ? ? ? ? ? iv_game_arr[i][j].setTag(new GameData(i, j, bm));//綁定自定義數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? iv_game_arr[i][j].setOnClickListener(new View.OnClickListener() {

? ? ? ? ? ? ? ? ? ? ? ? @Override

? ? ? ? ? ? ? ? ? ? ? ? public void onClick(View v) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? boolean flag = isHasByNullImageView((ImageView) v);

? ? ? ? ? ? ? ? ? ? ? ? ? ? if (flag) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? changeDataByImageView((ImageView) v);

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? //初始化游戲界面,添加方塊

? ? ? ? ? ? gl_main_game = (GridLayout) findViewById(R.id.gl_main_game);

? ? ? ? ? ? for (int i = 0; i < iv_game_arr.length; i++) {

? ? ? ? ? ? ? ? for (int j = 0; j < iv_game_arr[0].length; j++) {

? ? ? ? ? ? ? ? ? ? gl_main_game.addView(iv_game_arr[i][j]);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? setNullImageView(iv_game_arr[2][2]);//設(shè)置最后一個(gè)方塊是空的

? ? ? ? ? ? randomMove();//初始化隨機(jī)打亂順序

? ? ? ? ? ? isGameStart = true;//開始游戲狀態(tài)

? ? ? ? ? ? timer.start();

? ? ? ? }

? ? //重載,由于開始100次隨即無(wú)動(dòng)畫

? ? public void changeByDir(int type){

? ? ? ? changeByDir(type,true);

? ? }

? ? //根據(jù)手勢(shì)方向獲取空方塊相鄰位置,存在方塊,進(jìn)行數(shù)據(jù)交換,1up,2down,3left,4right

? ? public void changeByDir(int type,boolean isAnim){

? ? ? ? GameData mNullGameData=(GameData) iv_null_ImageView.getTag();//獲取當(dāng)前空方塊位置

? ? ? ? int new_x=mNullGameData.x;//根據(jù)方向設(shè)置相應(yīng)位置坐標(biāo)

? ? ? ? int new_y=mNullGameData.y;

? ? ? ? if (type==1) {//要移動(dòng)的方塊在空的下面

? ? ? ? ? ? new_x++;

? ? ? ? }else if (type==2) {

? ? ? ? ? ? new_x--;

? ? ? ? }else if (type==3) {

? ? ? ? ? ? new_y++;

? ? ? ? }else if (type==4) {

? ? ? ? ? ? new_y--;

? ? ? ? }

? ? ? ? //判斷新坐標(biāo)是否存在

? ? ? ? if(new_x>=0&&new_x<iv_game_arr.length&&new_y>=0&&new_y<iv_game_arr[0].length){

? ? ? ? ? ? if (isAnim) {

? ? ? ? ? ? ? ? changeDataByImageView(iv_game_arr[new_x][new_y]);//存在,移動(dòng)

? ? ? ? ? ? }else {//無(wú)動(dòng)畫

? ? ? ? ? ? ? ? changeDataByImageView(iv_game_arr[new_x][new_y],isAnim);

? ? ? ? ? ? }

? ? ? ? }else {

? ? ? ? ? ? //不用做什么

? ? ? ? }

? ? }

? ? //游戲暫停

? ? private View.OnClickListener isstop=new View.OnClickListener() {

? ? ? ? @Override

? ? ? ? public void onClick(View v) {

? ? ? ? ? ? timer.stop();

? ? ? ? }

? ? };

? ? //判斷游戲結(jié)束方法

? ? public void isGameOver(){

? ? ? ? boolean isGameOver = true;

? ? ? ? //遍歷每個(gè)游戲方塊

? ? ? ? for (int i = 0; i < iv_game_arr.length; i++) {

? ? ? ? ? ? for (int j = 0; j < iv_game_arr[0].length; j++) {

? ? ? ? ? ? ? ? //為空的方塊數(shù)據(jù)跳過(guò)

? ? ? ? ? ? ? ? if (iv_game_arr[i][j]==iv_null_ImageView) {

? ? ? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? GameData mGameData=(GameData) iv_game_arr[i][j].getTag();

? ? ? ? ? ? ? ? if(!mGameData.isTrue()){

? ? ? ? ? ? ? ? ? ? isGameOver = false;

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? //根據(jù)一個(gè)開關(guān)變量決定是否結(jié)束

? ? ? ? if (isGameOver) {

? ? ? ? ? ? timer.stop();

? ? ? ? ? ? handlePassEvent();

? ? ? ? }

? ? }

??

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
快速實(shí)現(xiàn)不一樣的移動(dòng)拼圖
  • 參與學(xué)習(xí)       15584    人
  • 解答問(wèn)題       69    個(gè)

實(shí)現(xiàn)一個(gè)支持手勢(shì)的移動(dòng)拼圖小游戲,手把手帶你開發(fā)小游戲

進(jìn)入課程

如果要設(shè)計(jì)成關(guān)卡,進(jìn)入下一關(guān),只改變圖片,要怎么設(shè)計(jì)

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)