Android-看图猜成语

来源:互联网 发布:淘宝买正品退假货 编辑:程序博客网 时间:2024/04/28 18:17

这是一个很简单的游戏,以前写着练手的;忽然看到了,给大家分享一下; 代码地址:https://github.com/xiuergit/GuessPicture
效果图如下:
这里写图片描述

界面设计

<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.briup.guesspicture.MainActivity" >     <!-- 首行 得分 题号 -->   <LinearLayout          android:layout_width="match_parent"         android:layout_height="40dp"         android:orientation="horizontal"         android:background="@android:color/holo_green_light"        >      <TextView          android:id="@+id/tvNumber"        android:layout_width="100dp"        android:layout_height="35dp"        android:layout_weight="0.45"        android:text="@string/number_default"       />          <TextView         android:id="@+id/tvScore"        android:layout_width="wrap_content"        android:layout_height="40dp"        android:layout_marginRight="2dp"        android:gravity="center_vertical|right"        android:layout_weight="0.55"        android:text="@string/score"       />     </LinearLayout>  <!--  图片、题目、帮助、提示、大图  -->  <RelativeLayout      android:layout_width="match_parent"      android:layout_height="wrap_content"     >      <TextView          android:id="@+id/tvName"        android:layout_width="wrap_content"        android:layout_height="35dp"          android:layout_centerHorizontal="true"          android:text="@string/name_default"       />     <ImageView         android:id="@+id/ivPicture"        android:layout_below="@id/tvName"        android:layout_width="135dp"        android:layout_height="135dp"        android:layout_centerHorizontal="true"          android:contentDescription="@string/name_default"         />      <Button          android:id="@+id/btPrompt"         android:layout_below="@id/tvName"          android:layout_width="80dp"          android:layout_height="45dp"         android:layout_toRightOf="@id/ivPicture"          android:text="@string/prompt"          android:onClick="prompt"         />     <Button           android:id="@+id/btLevel"          android:layout_below="@id/tvName"          android:layout_width="45dp"          android:layout_height="130dp"          android:layout_toLeftOf="@id/ivPicture"          android:text="@string/level"          android:onClick="level"         />      <Button          android:id="@+id/btBigPicture"          android:layout_below="@id/btPrompt"          android:layout_width="80dp"          android:layout_height="45dp"           android:layout_toRightOf="@id/ivPicture"          android:text="@string/big_picture"          android:onClick="bigpicture"         />     <Button          android:id="@+id/btHelp"          android:layout_below="@id/btBigPicture"          android:layout_width="80dp"          android:layout_height="45dp"           android:layout_toRightOf="@id/ivPicture"          android:text="@string/help"          android:onClick="help"         />  </RelativeLayout>     <!--答案  -->     <LinearLayout          android:layout_marginTop="40dp"         android:orientation="horizontal"         android:id="@+id/answerView"         android:layout_width="wrap_content"         android:layout_height="50dp"         android:layout_gravity="center_horizontal"          >     </LinearLayout>      <!-- 答案选项 -->     <GridLayout          android:layout_marginTop="20dp"         android:orientation="vertical"         android:id="@+id/answerOptionsView"         android:layout_width="match_parent"         android:layout_height="wrap_content"         >     </GridLayout>    </LinearLayout>

代码设计(主要代码)

    /**初始化页面*    /    void init(){        score=100;//金币:100;        level="初来乍到";//刚开始        answerObjects=(ArrayList<Answer>) Resouce.answers();        icon=(ImageView)findViewById(R.id.ivPicture);        nameView=(TextView)findViewById(R.id.tvName);        numView=(TextView)findViewById(R.id.tvNumber);        scoreView=(TextView)findViewById(R.id.tvScore);        levelView=(Button)findViewById(R.id.btLevel);        answerView=(LinearLayout)findViewById(R.id.answerView);        answerOptionView=(GridLayout)findViewById(R.id.answerOptionsView);    }
/**每次挑到下一题时、整个UI界面重新加载参数    * @param answer :当前题目    */    void initLayoutValues(Answer answer){        int num=index+1;        levelView.setText(level);        numView.setText(num+"/10");        nameView.setText(answer.getTitle());        icon.setImageResource(answer.getIcon());          scoreView.setText("金币:"+score);         //添加子控件给answerview 与answerOptionView  重新换选择答案         addviewForAnswer(answer);         addviewForOptios(answer);    }
 /**     * //添加子控件给答案视图  (answer  当前题目   通过当前题目中的 答案的长度  添加子控件的个数)     * @param answer 当前问题     */    void addviewForAnswer(Answer answer){         AnswerButton   btAnswer;         LinearLayout answerLayout=(LinearLayout)findViewById(R.id.answerView);         if(answerLayout.getChildCount()>0){             answerLayout.removeAllViewsInLayout();         }         for(int i=0;i<answer.getAnswer().length();i++){            btAnswer=new AnswerButton(this);            int width=20;            //设置该选项是答案按钮            btAnswer.setIsAnswer(true);            btAnswer.setHeight(width);            btAnswer.setWidth(width);            answerLayout.addView(btAnswer, i);            btAnswer.setOnClickListener(this);        }     }
 /**    * //添加子控件给选项视图    * @param answer 当前题目    */     void addviewForOptios(Answer answer){         //Button btOptions;         AnswerButton btOptions;         GridLayout optionsLayout=(GridLayout)findViewById(R.id.answerOptionsView);         if(optionsLayout.getChildCount()>0){             optionsLayout.removeAllViewsInLayout();         }         for(int i=0;i<answer.getViewAnswer().length;i++){             int row=i%3;             int col=i%7;             GridLayout.Spec rowspec=GridLayout.spec(row);             GridLayout.Spec colspec=GridLayout.spec(col);              GridLayout.LayoutParams params=new GridLayout.LayoutParams(rowspec,colspec );            //获取屏幕的宽              DisplayMetrics metrics=new                      DisplayMetrics();             getWindowManager().getDefaultDisplay().getMetrics(metrics);           int width =metrics.widthPixels/7;                 params.width=width;             params.height=width;              btOptions=new AnswerButton(this);             btOptions.setLayoutParams(params);             //设置该选项不是答案             btOptions.setIsAnswer(false);             btOptions.setText(answer.getViewAnswer()[i]);             optionsLayout.addView(btOptions, i);              btOptions.setOnClickListener(this);         }     }
@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化布局        init();        //第一次加载显示的数据        initLayoutValues(answerObjects.get(index));    }
/**     * //1.点击答案按钮  (修改答案)     * @param v :用户点击的按钮     */    public void answer(AnswerButton v){         //1.1点击的是哪个 拿到值          String answers=v.getText().toString();         //1.2.从供选答案中找到放回去;          if(!answers.isEmpty()){              v.setText("");             revokeAnswer(answers);          }    }
/**     * 撤销一个答案     * @param answer 撤销的字符串     */    void revokeAnswer(String answer){         for(int i=0;i<answerOptionView.getChildCount();i++){               AnswerButton options=(AnswerButton)answerOptionView.getChildAt(i);                  //找到后               if(answer.equals(options.getText().toString())){                       //撤销的答案显示                   options.setVisibility(View.VISIBLE);               } }    }
/**     *  设置答案(找到第一个空白的地方放进去,一次放一个)     * @param answer 用户选中的答案     */    void chooseAnswer(String answer){        for(int i=0;i<answerView.getChildCount();i++){               AnswerButton  answerbt=(AnswerButton)  answerView.getChildAt(i);                 if(answerbt.getText().toString().isEmpty()){                     answerbt.setText(answer);                     break;                 }         }    }
/**     * 判断答案是否输入完成     * @return isfull  true  完成  false 没有完成      */    Boolean isfull(){         boolean isfull = true;         for(int i=0;i<answerView.getChildCount();i++){     AnswerButton answer= (AnswerButton)answerView.getChildAt(i);             if(answer.getText().toString().isEmpty()){                System.out.println("答案没有输入完成");                 isfull=false;                       break;             }             }        return isfull;    }
/**     * 判断答案是否正确     * @param anser     * @return     */    Boolean isCorrect(String answer){        //正确的答案        String answerStandard=answerObjects.get(index).getAnswer();        if(answer.endsWith(answerStandard)){            return true;        }        else {            return false;        }    }
/**     *      * @return 用户答题完毕--》答案     */    String answerSelect(){         StringBuffer answerUser=new StringBuffer();         for(int i=0;i<answerView.getChildCount();i++){             AnswerButton answer= (AnswerButton)answerView.getChildAt(i);             answerUser.append(answer.getText().toString());         }         return answerUser.toString();    }
/**     *  //2.点击选项按钮       * @param v  用户点击的按钮     */    public void option(AnswerButton v){        //2.1 不可操作         v.setVisibility(View.INVISIBLE);         String answers=v.getText().toString();//当前选中的答案         //找到第一个答案空的位置放上去         chooseAnswer(answers);//2.2 设置答案(找到第一个空白的地方放进去,一次放一个)          //答案输入完成           if(isfull()){               //2.3判断答案是否正确                       System.out.println("答案输入完成");                 if (isCorrect(answerSelect())){                            //正确                            Toast.makeText(this, "答题成功", Toast.LENGTH_SHORT).show();                            if(index==9){                                 new AlertDialog.Builder(this).setTitle("猜图游戏").                                setMessage("恭喜恭喜,通关了").setPositiveButton("下次再会",null).show();                              }else{                             //答对了。。。。                                 score=score+10;                        new AlertDialog.Builder(this).setTitle("猜图游戏").                              setMessage("恭喜恭喜,您答对了;\n目前得分:"+score).setPositiveButton("进入下一题",new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                next();                            }                        }).show();}                        }                        else{                            //不正确                             if(index==9){                                 new AlertDialog.Builder(this).setTitle("猜图游戏").                                    setMessage("很遗憾,答错了,是否重头开始?").                                    setPositiveButton("否",null).setNegativeButton("是",                                            new  DialogInterface.OnClickListener() {                                    @Override                                        public void onClick(DialogInterface dialog, int which) {                                            // TODO Auto-generated method stub                                            index=-1;                                            next();                                        }                                    }).show();                              }                              else{                                  new AlertDialog.Builder(this).setTitle("猜图游戏").                                    setMessage("很遗憾,答错了,是否重新选择?").                                    setPositiveButton("是",null).setNegativeButton("否",                                            new  DialogInterface.OnClickListener() {                                        @Override                                        public void onClick(DialogInterface dialog, int which) {                                            // TODO Auto-generated method stub                                            next();                                            score=100;                                        }                                    }).show();                              }                        }                 }    }
//禁用所有控件的点击事件    public void cancelClick(ViewGroup group){          for(int i=0;i<group.getChildCount();i++){                 AnswerButton answer=(AnswerButton)group.getChildAt(i);                answer.setEnabled(false);                //  answer.setVisibility(View.VISIBLE);          }    }
@Override    public void onClick(View v) {        AnswerButton answer=(AnswerButton)v;           //点击的是答案button  否则   点击对应的选项又有相应的操作        if(answer.getIsAnswer()){             System.out.println(answer.getIsAnswer());             //1.点击答案按钮               answer(answer);        }else{             System.out.println(answer.getIsAnswer());             //2.点击选项按钮             option(answer);        }    }
public void next(){        index++;        if(score>150){            level="游学四方";        }        initLayoutValues(answerObjects.get(index));     }
 //下一个    public void level(View v){        new AlertDialog.Builder(this).setMessage("当前处在第"+(index+1)+"关").        setTitle(level).setPositiveButton(" 继续", null).show();    }
  //提示    public void prompt(View v){        new AlertDialog.Builder(this).setMessage("确定花50金币获取提示?").        setTitle("求助太没面子了").setPositiveButton(" 是", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                if(score>=50){                    score=score-50;                    for(int i=0;i<answerView.getChildCount();i++){                        AnswerButton answer=(AnswerButton) answerView.getChildAt(i);                        if(answer.getText().toString().isEmpty()){                            char[]answers=answerObjects.get(index).getAnswer().toCharArray();                            System.out.println(answers[i]);                            answer.setText(answers[i]+"");                            scoreView.setText("金币:"+score);;                            break;                        }                    }                }                else{                    Toast.makeText(MainActivity.this, "金币不足50,请自行解决吧", Toast.LENGTH_SHORT).show();                }            }        }).show();        // Toast.makeText(this, "提示", Toast.LENGTH_SHORT).show();    }
 //分享帮助    public void help(View v){         Toast.makeText(this, "帮助", Toast.LENGTH_SHORT).show();    } 
//大图    public void bigpicture(View v){        Toast.makeText(this, "大图", Toast.LENGTH_SHORT).show();        Intent intent=new Intent(this,ImageActivity.class);         Bundle data=new Bundle();         //Bitmap bitmap=(BitmapDrawable)icon.getDrawable();        // BitmapFactory.decodeResource(getResources(), )         data.putInt("image", answerObjects.get(index).getIcon());         intent.putExtra("data", data);        startActivity(intent);   }
2 0
原创粉丝点击