android学习第二天
今天的主要任务是实现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;
}
}