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
- Android-看图猜成语
- 看图猜成语
- Android---乐学成语
- 成语
- 成语
- 成语
- Android之乐学成语
- Android开发之成语连连看
- Android乐学成语的实现分析
- Android综合项目乐学成语
- Android乐学成语之界面实现
- Android小程序-乐学成语学习(一)
- 学习Android开发-乐学成语之TabHost控件
- android--乐学成语--------复制数据库,测试数据库
- Android小程序-乐学成语查询(二)
- Android小程序-乐学成语收藏(三)
- Android小程序-乐学成语游戏(四)
- Android综合项目乐学成语(二)
- 推荐一个zookeeper信息查看工具
- Android 使用MultipartEntity 图文上传相关处理
- poj2201 Cartesian Tree
- view添加到NavigationBar上
- K近邻,kd树
- Android-看图猜成语
- ioctl 函数
- iOS 如何在应用中播放设备中的视频
- 简要描述对闭包的理解
- C#正则表达式语法规则详解(详细好理解)
- linux学习笔记(1)
- Ag设置全局变量的N种方法
- TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知
- H3 BPM让天下没有难用的流程之产品概述