简介 目录 评价 推荐
  • weibo_慕勒1547492 2020-12-26
    设置当前方块位置为空失败了

    那是没有设置好吧

    1回答·530浏览
  • AbduRxit 2018-09-23
    移动方向

    这个难道要用set()吗?

    1回答·888浏览
  • qq_一岁一枯荣丶_0 2018-09-06
    随机打乱出错,出现两个白方块或者两个一样的方块

    我和你一样,你怎么解决了?在做实训,求教教我

    2回答·1111浏览
  • 幕布斯7183808 2018-05-15
    无法打乱问题

    把图片放小一点啊,真是的

    1回答·1190浏览
  • qq_三生三世背影成双_0 2018-01-11
    图片的问题
    1回答·1280浏览
  • Shawshank_L 2017-12-23
    在coding的过程中碰上了内存泄漏的问题 应该怎么解决呢

    换一种新的图片加载框架,是不是图片大小过大

    2回答·1364浏览
  • 慕斯2564950 2017-11-05
    请教下老师

    数组变成5*5的数组不就可以了吗


    1回答·1371浏览
  • 赵不羁 2017-09-17
    lang报错 说没有高度

    就是图片过大  换成了 555*333就好了

    1回答·1235浏览
  • qq_不要阴天_0 2017-09-16
    ?随机打乱处有问题
    1回答·1236浏览
  • 慕妹5288269 2017-09-14
    最后测试出问题

    在构造函数是没有对bm初始化


    1回答·1216浏览
  • 方天画戟 2017-06-11
    在拼图下面放原图
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.baiyun.pitu.MainActivity"
        android:background="#f79b11">
        <GridLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/gl_main_game"
            android:columnCount="5"
            android:rowCount="3"></GridLayout>
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/ic_game_tu"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="200dp"/>
    </RelativeLayout>


    1回答·1583浏览
  • 莜莜栀洁 2017-06-05
    出现项目停止运行了

    您说的课程的收藏吗

    3回答·1432浏览
  • 春水碧于天King 2017-03-09
    老师的x ,y坐标系是不是反了??

    没有。

    1回答·1466浏览
  • micasa 2017-02-06
    在判断图片是否与空图片相邻这,为什么我点击任何方块都显示false?
    2回答·1409浏览
  • micasa 2017-02-06
    在判断图片是否与空图片相邻这,为什么我点击任何方块都显示false?
    3回答·1492浏览
  • 小莫程序学习 2017-01-31
    老师请问怎么才能把它做成全屏游戏呢
    int displayWidthPixels = getResources().getDisplayMetrics().widthPixels;
    int displayHeightPixels = getResources().getDisplayMetrics().heightPixels;
    float density = getResources().getDisplayMetrics().density;

    1、获取到屏幕像素宽度和高度;

    2、获取到图片dpi宽高;

    3、搜图片转换方法,将图片缩放到和屏幕大小一致。

    1回答·1413浏览
  • 星月交辉 2017-01-27
    为什么我的小方块不移动

    588a1f440001a68105000119.jpg

    588a1f450001890005000082.jpg

    好像也没报错,就是移动不了


    1回答·1372浏览
  • 星月交辉 2017-01-20
    if判断大于小于好像有问题吧

    调试时已修改过来

    1回答·1229浏览
  • 星月交辉 2017-01-19
    运行时闪退,高度出了问题
    2回答·934浏览
  • 小莫程序学习 2017-01-19
    在做判断点击方块周边是否存在缺口的时候出现问题一点击就报错程序闪退

    public class MainActivity extends Activity {
       private boolean isAnimRun = false;
       //判断游戏是否开始
       private boolean isGameStart = false;
       private ImageView [] [] iv_game_arr = new ImageView[3][5];
       private GridLayout gl_main_game;
       private ImageView iv_null_ImageView;
       private GestureDetector mDetector;

       @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.activity_main);
           mDetector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
               @Override
               public boolean onDown(MotionEvent motionEvent) {
                   return false;
               }

               @Override
               public void onShowPress(MotionEvent motionEvent) {

               }

               @Override
               public boolean onSingleTapUp(MotionEvent motionEvent) {
                   return false;
               }

               @Override
               public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
                   return false;
               }

               @Override
               public void onLongPress(MotionEvent motionEvent) {

               }

               @Override
               public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
                   int type = getDirByGes(motionEvent.getX(),motionEvent.getY(),motionEvent1.getX(),motionEvent1.getY());
    //                Toast.makeText(MainActivity.this,""+type,Toast.LENGTH_SHORT).show();
                   changeByDir(type);
                   return false;
               }
           });
           Bitmap bigBm = ((BitmapDrawable) getResources().getDrawable(R.drawable.ic_game_tu)).getBitmap();
           int tuWandH = bigBm.getWidth()/5;
           int ivWandH = getWindowManager().getDefaultDisplay().getWidth()/5;
           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);
                   iv_game_arr[i][j]=new ImageView(this);
                   iv_game_arr[i][j].setImageBitmap(bm);
                   iv_game_arr[i][j].setLayoutParams(new RelativeLayout.LayoutParams(ivWandH,ivWandH));
                   iv_game_arr[i][j].setPadding(2,2,2,2);
                   iv_game_arr[i][j].setTag(new GameData(i,j,bm));
                   iv_game_arr[i][j].setOnClickListener(new View.OnClickListener() {
                       @Override
                       public void onClick(View v) {
                           boolean flag = isHasByNullImageView((ImageView)v);
                           //Toast.makeText(MainActivity.this,"位置关系是否存在:"+flag,Toast.LENGTH_SHORT).show();
                           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][4]);
           //随机打乱顺序
           randomMove();
           isGameStart = true;
       }

       //随机打乱顺序
       public void randomMove(){
           for(int i=0;i<100;i++){
               int type = (int) ((Math.random()*4)+1);
               changeByDir(type,false);
           }
       }
       public void changeByDir(int type){
            changeByDir(type,true);
       }

       public void changeByDir(int type ,boolean isAnim){
           GameData mNullGameData = (GameData) iv_null_ImageView.getTag();
           int new_x = mNullGameData.x;
           int new_y = mNullGameData.y;
           if(type == 1){
               new_x++;
           }else if(type == 2){
               new_x--;
           }else if(type == 3){
               new_y++;
           }else if(type == 4){
               new_y--;
           }
           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]);
               }else {
                   changeDataByImageView(iv_game_arr[new_x][new_y],isAnim);
               }
           }else {

           }
       }
       //判断结束的方法
       public void isGameOver(){
           boolean isGameOver = true;
           for(int i=0;i<iv_game_arr.length;i++){
               for(int j=0;j<iv_game_arr[0].length;j++){
                   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;
                   }
               }

               }
           if(isGameOver){
               Toast.makeText(MainActivity.this,"游戏结束",Toast.LENGTH_SHORT).show();
           }
       }
       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;
               }
           }
       }

       public void setNullImageView(ImageView mImageView){
           mImageView.setImageBitmap(null);
           iv_null_ImageView = mImageView;
       }

       public void changeDataByImageView(final ImageView mImageView){
           changeDataByImageView(mImageView,true);
       }

       public void changeDataByImageView(final ImageView mImageView, boolean isAnim){
           if(isAnimRun){
               return;
           }
           if(!isAnim){
               GameData mGameData = (GameData) mImageView.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(mImageView);//设置当前点击的是空方块
               if(isGameStart){
                   //成功时,弹出Toast
                   isGameOver();
               }
               return;
           }
           TranslateAnimation translateAnimation = null;
           if(mImageView.getX()>iv_null_ImageView.getX()){
               translateAnimation = new TranslateAnimation(0.1f,-mImageView.getWidth(),0.1f,0.1f);
           }else if(mImageView.getX()<iv_null_ImageView.getX()){
               translateAnimation = new TranslateAnimation(0.1f,mImageView.getWidth(),0.1f,0.1f);
           }else if(mImageView.getY()>iv_null_ImageView.getY()){
               translateAnimation = new TranslateAnimation(0.1f,0.1f,0.1f,-mImageView.getWidth());
           }else if(mImageView.getY()<iv_null_ImageView.getY()){
               translateAnimation = new TranslateAnimation(0.1f,0.1f,0.1f,mImageView.getWidth());
           }
           //设置动画时长
           translateAnimation.setDuration(70);
           //结束设置后是否停留
           translateAnimation.setFillAfter(true);
           translateAnimation.setAnimationListener(new Animation.AnimationListener() {
               @Override
               public void onAnimationStart(Animation animation) {
                   isAnimRun = true;
               }

               @Override
               public void onAnimationEnd(Animation animation) {
                   isAnimRun = false;
                   mImageView.clearAnimation();
                   GameData mGameData = (GameData) mImageView.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(mImageView);//设置当前点击的是空方块
                   if(isGameStart){
                       //成功时,弹出Toast
                       isGameOver();
                   }
               }

               @Override
               public void onAnimationRepeat(Animation animation) {

               }
           });
           //执行动画
           mImageView.startAnimation(translateAnimation);
       }

       public boolean isHasByNullImageView(ImageView mImageView){
           GameData mNullGameData = (GameData) iv_null_ImageView.getTag();
           GameData mGameData = (GameData) mImageView.getTag();
           if(mNullGameData.y==mGameData.y && mGameData.x+1==mNullGameData.x){
               return true;
           }else if(mNullGameData.y==mGameData.y && mGameData.x-1==mNullGameData.x){
               return true;
           }else if(mNullGameData.y==mGameData.y+1 && mGameData.x==mNullGameData.x){
               return true;
           }else if(mNullGameData.y==mGameData.y-1 && mGameData.x==mNullGameData.x){
               return true;
           }
           return false;
       }
       class GameData{
           public int x = 0;
           public int y = 0;
           public Bitmap bm;
           public int p_x = 0;
           public int p_y = 0;

           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;
           }
       }

    }

    2回答·1616浏览
  • qq_周荣_04174604 2017-01-04
    为什么运行时布局中只显示3行4列

    兄弟 你看清楚啊

    1回答·1192浏览
  • Fatky77 2016-12-15
    运行之后手机桌面没有logo

    在AndroidManifest.xml的启动activity标签内增加

    <intent-filter>

         <action android:name="android.intent.action.MAIN" />

         <category android:name="android.intent.category.LAUNCHER" />

    </intent-filter>


    1回答·1218浏览
  • qq_花開若相惜_0 2016-12-13
    怎么在下面显示原图
    0回答·1008浏览
  • 站在岁月之巅放牧心灵 2016-12-12
    设置鼠标滑动后app停止运行是什么情况
    已采纳 qq_花開若相惜_0 的回答

    if (isAnim) {

    changeDataByImageView(iv_game_arr[new_x][new_y]);

    } else {

    changeDataByImageView(iv_game_arr[new_x][new_y]);

    }

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

    } else {

    // 什么也不做

    }

    你这里多了个else

    应该是:

    if (isAnim) {

    changeDataByImageView(iv_game_arr[new_x][new_y]);

    } else {

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

    }

    } else {

    //什么也不做

    }

    2回答·1380浏览
  • qq_花開若相惜_0 2016-12-12
    我照抄的显示出来的界面是3X4的??
    2回答·1311浏览
  • qq__5221 2016-11-28
    我的app运行停止是为什么???没代码错误

    看看崩溃日志会有提示,猜测是图片太大了,可以利用http://www.webps.cn/

    剪裁一张图片大小333*555像素的应该就可以了。

    我自己用你的代码+下面的图片测试了一下,是可以的。

    http://img.mukewang.com/583f77560001704705550333.jpg

    http://img.mukewang.com/583f77aa0001b6f206181130.jpg

    1回答·1594浏览
  • 慕粉4140763 2016-11-14
    关于SimpleDateFormat的问题。

    好吧,解决了,AndroidStudio中默认的包是android.icu.text.SimpleDateFormat;

    而我把包替换成了java.text.SimpleDateFormat; 就解决了。

    1回答·1235浏览
  • ksjks289 2016-11-10
    GameData中的x,y与p_x,p_y的区别?

    x 和 y 用来判断最终游戏结束时,与对应的二维数组图片的下标是否一致来决定游戏是否成功。

    p_x 和 p_y 用来表示图片所在的位置,当点击某个图片的时候我想知道当前图片与空方块的位置(是左边还是右边等……)

    解决的方法不唯一,只要你理解了一个View可以通过这种方式绑定多个数据(通常一个tag只能绑定一个值,但如果是这种class的GameData类型就可以绑定多个值)这种方式,自己设计一下也许能设计的比我设计的更好哈。

    4回答·1687浏览
  • danielyy 2016-11-07
    daniel661839@163.com 能发我一份吗?

    抱歉,慕课不许我发源码,你可以看看其它同学做的。

    zzlandroid

    照着老师的教程敲的一个样例:https://github.com/kiritozzl/PuzzleGame

    王正一

    我实现的项目源码:https://github.com/wangzhengyi/HYPinTu

    慕粉3288933

    我写了代码,地址在https://github.com/jowang2016/pintumooc 但是判断程序结束那里总是没有提示


    2回答·2304浏览
  • 天钊nice 2016-11-03
    girdlayout布局用不了

    AndroidManifest.xml里设置的   android:minSdkVersion的最小值要大于等于14才行。

    别的布局不行,因为我这个代码是针对GridLayout做的。

    1回答·1458浏览
数据加载中...
开始学习 免费