Android-看图猜成语

这是一个很简单的游戏,以前写着练手的;忽然看到了,给大家分享一下; 代码地址: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);



   }
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值