今天的主要任务是实现Android端的画板功能,为了丰富任务的内容,我打算模拟游戏“你画我猜”的模式进行开发。
首先是登录界面,和第一天所开发的界面一样,填好账号密码,选择游戏区服后进行登录,虽然我没有在这里进行账号密码的验证,但是为了接下来的UI可以有更逼真的游戏效果,所以在登录前先填好所有信息,下面是登录界面:
登录界面主要就是账号密码的录入和登录的activity跳转,这里就不在贴代码了
接下来是登陆后的界面,这个界面是玩家输入答案和提示信息的地方,就如“你画我猜”一样,首先是电脑出题然后在让一个玩家画画,另一个玩家再根据提示信息进行猜解。不同的是,这里的答案和提示信息都要玩家手动输入,下面是游戏的界面
这个界面也比较简单,后台的java代码就是简单的定位各个组件和一些传值,这里也不贴代码了。
接下来是整个游戏的重点部分,就是画图的模块。界面由这几个部分构成,画布,提示信息,颜色的选择器,答案输入框,输入的历史记录,计时器还有提交按键。主要的功能是这样的,首先是已知答案的玩家根据答案进行绘图,另外一个玩家根据给出的提示信息和图样在给定的时间内猜出答案,当答案正确时会有弹框提示,否则答案将被放到答题的历史记录中,当时间到了玩家还没能猜出答案,系统也会弹框提示并给出正确的答案,下面是游戏开始的部分
答案输入错误,答案归入历史记录,请继续作答!
为了有更好的游戏体验,我在答案的前面加上了当前账户的昵称,这样是不是效果更佳!这就是为什么要输入账号的原因
时间结束没能猜出答案,弹框提醒,按下确认键回到输入答案的界面
点击确认键回到输入答案的界面
当输入正确答案时,弹框提醒,点击确认回到输入答案的界面
下面是绘画界面的xml,都是一些标准的组件
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Play" > <com.example.huaban.paintview android:id="@+id/paintview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/paintview" android:layout_alignTop="@+id/paintview" android:layout_marginLeft="104dp" android:layout_marginTop="42dp" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignRight="@+id/paintview" android:text="@string/tijiao" /> <TextView android:id="@+id/textView2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@+id/editText1" android:layout_alignLeft="@+id/paintview" android:layout_marginBottom="17dp" /> <EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@+id/button1" android:layout_alignParentRight="true" android:layout_marginBottom="18dp" android:ems="10" /> <Spinner android:id="@+id/color" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/paintview" android:layout_alignParentLeft="true" android:entries="@array/color" /> </RelativeLayout>
java实现的代码,里面有注释,这里不再说明
package com.example.huaban; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.os.CountDownTimer; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Point; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.AdapterView.OnItemSelectedListener; public class Play extends Activity { private TextView tishi_view; private String daan; private EditText shuru; private TextView ed; private Button button; private Spinner spinner; private String color1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_play); //新建一个Intent,用于接受从上一个Activity传过来的值 Intent intent=getIntent(); daan=intent.getStringExtra("question"); //定位组件,读取与写入 tishi_view=(TextView)findViewById(R.id.textView1); shuru=(EditText)findViewById(R.id.editText1); ed=(TextView)findViewById(R.id.textView2); button=(Button)findViewById(R.id.button1); spinner=(Spinner)findViewById(R.id.color); //定时器的实现 CountDownTimer cdt = new CountDownTimer(100000, 100) { @Override public void onTick(long millisUntilFinished) { Intent intent=getIntent(); //将倒计时显示在界面上 tishi_view.setText("提示:"+intent.getStringExtra("tishi")+" "+"倒计时:"+millisUntilFinished + ""); } @Override public void onFinish() { //计时结束后的弹出框 AlertDialog.Builder builder = new Builder(Play.this); builder.setTitle("时间到" ) ; builder.setMessage("正确答案:"+ daan) ; builder.setPositiveButton("是" , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent=new Intent(); intent.setClass(Play.this, Question.class); Play.this.startActivity(intent); }}); builder.show(); } }; //开始计时 cdt.start(); //tishi_view.setText("提示:"+intent.getStringExtra("tishi")); //颜色选择器的定位 spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { //拿到被选择项的值 color1 = (String) spinner.getSelectedItem(); if(color1.equals("红色")) paintview.color1=-1001; else if(color1.equals("黄色")) paintview.color1=-1003; else if(color1.equals("绿色")) paintview.color1=-1004; else if(color1.equals("蓝色")) paintview.color1=-1006; else if(color1.equals("紫色")) paintview.color1=-1007; else paintview.color1=1000; } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } }); //提交正确答案的提示 button.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) {Intent intent=getIntent(); ed.setText(ed.getText().toString()+"\n"+intent.getStringExtra("zhanghu")+":"+shuru.getText().toString()); if(daan.equals(shuru.getText().toString())){ AlertDialog.Builder builder = new Builder(Play.this); builder.setTitle("恭喜" ) ; builder.setMessage("答案正确" ) ; builder.setPositiveButton("是" , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent=new Intent(); intent.setClass(Play.this, Question.class); Play.this.startActivity(intent); }}); builder.show(); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.play, menu); return true; } }
相关推荐
NULL 博文链接:https://username2.iteye.com/blog/1870110
很简单 只为了学习 下载的人也别骂我 只是第二天学习做的 根据一个视频
第二篇以7个比较大的案例来说明Android平台下3D游戏的开发流程,通过这7个案例的讲解,读者对3D游戏的开发将会有更深层次的理解。 章 名主 要 内 容 第16章 体育类游戏——《疯狂投篮》本章介绍了Android 3D游戏...
在千锋”逆战”学习第20天, 每个人生阶段都需要努力去扮好自己的角色,越努力越轻松,越坚强越幸运! 加油! 基础代码理解 (1)因为整体布局为线性布局,所以根节点为 (2)XML 命名空间语法:xmlns:namespace-prefix...
第二天 1> 单元测试 2> 查看与输出日志信息 3> 文件操作 4> 往SDCard读写文件 5> XML解析(SAX/DOM/PULL),写xml文件 6> SharedPreferences 第三天 1> SQLite数据库添删改查操作 A.创建数据库 B....
我尝试每2天,每天1天学习和第二天应用知识学习新事物的项目,这是一个跟踪知识的地方。 想法是学习新事物,然后应用它,方法是:在第1天投入一些时间研究该主题,然后在第2天将这些知识应用到平台上,例如进行HTB...
第二天 1> 单元测试 2> 查看与输出日志信息 3> 文件操作 4> 往SDCard读写文件 5> XML解析(SAX/DOM/PULL),写xml文件 6> SharedPreferences 第三天 1> SQLite数据库添删改查操作 A.创建数据库 B....
安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学习日记第三天_新手怪button 安卓开发学习日记第四天_会爬就会跑 安卓开发学习日记第四天番外篇_用Kotlin炒冷饭——越炒越小 今天一早打开我的新项目,结果...
第二天学习日记之破环陷阱卡之sync的坑 今天我们就试一下在项目里面用两种方法放下一个button 第一步,打开我们的布局设计文件(一般打开过工程之后都已经默认打开了) 那么大家就会看到一个小小的问题,没学过,...
安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学习日记第三天_新手怪button 经历了之前的学习,我们从出生到眨眼睛,然后会爬了 今天就开始跑吧! 这个小游戏其实就是我们小时候经常玩的关灯游戏 首先...
2.学生预约第二天的座位,座位进入预约状态,学生对预约的座位进行入馆操作,座位进入占座状态 3.学生退座,座位进入可占座状态 4.管理员可以对预约超时的座位进行重置,座位进入可占座状态,并对预约该座位的学生...
大家在新年里肯定会收到一堆祝福短信,特别是除夕来临,拜年短信像潮水般的涌过来。...但是,俺在此声明,里面的代码可以进行学习、修改,甚至是进行二次开发。但严禁将其改造为恶意软件,否则后果自行负责。
此处中所述的APP引导用Kotlin语言为Android初级学习者提供一次完整的APP开发实践。在APP设计过程中作者融合了活动的生命周期,信息传递,数据库,网络连接,接口调用,自定义数据结构,UI设计,服务后台服务,共享...
实现听书无非就是用讯飞或者其他文字转语音的第三方工具加一个普通的txt阅读器,还有项目里蜡笔小新版的合成语音听着真逗逼,感兴趣的自己下载看一下吧,如果想要纯净版的可以下载上面的那个蝌蚪听书。本项目编码GBK...
第二名是客厅占比52.87%,第三名是厨房占比28.72%。 近些年,更是催生出“整理师”这一新兴前卫的职业。所谓整理师,就是为个人、家庭、企业提供咨询服务的专业人士,负责为物品、环境、思路、规划等方方面面不够...
The_Ten_Day安卓开发初级学习的十个简单小demo的总结。从2015-1-30开始,到20150-2-8结束。项目简介一共十天,每天内容不同,通用一个README,在项目工程代码中...第二天 猜鸡蛋游戏根据android开发实战一书进行更该。
第二天 - 在单个活动中开发具有添加、删除和编辑功能的待办事项应用程序。 第 3 天 - 开发具有编辑功能的待办事项应用程序,如前期工作中所述。 第 4 天 - 添加了在 SQL-Lite 数据库中存储列表项的功能。 第五天 - ...
leetcode中国 Chiachi-s-Summer-Plan-2015 As title. 嘉琪的个人暑假封训计划 ###封训时间### 封训时间:2015年7月4日 至 2015年8月1日(7月22日至7月29日参加中国首届APP大赛志愿者活动,临时...Android第二阶段学习