@galaxy-0
2017-06-13T19:08:44.000000Z
字数 2614
阅读 639
软需
时间 | 内容 |
---|---|
6.13 | 添加Controller的逻辑和接口 |
其中aiCardArea是AI的牌堆,cardState是显示当前出的牌的地方,cardArea是玩家的牌堆。一个方框是一个layout
,建议layout
的ID设置为图中的名字方便沟通
每一个layout
和button
都有自己的id
,通过id
可以访问到对应的组件。
不同的组件有不同的api
,可以对这个组件进行一定的操作
比如获取到一个button
之后可以添加点击事件,可以通过代码修改button
的样式
比如获取到一个layout
之后可以获取子组件列表,可以添加或者删除子组件
卡牌的类,属性包括卡牌的状态(是否被选中),还有卡牌的花色数字
getter包括三个属性的getter,setter允许设置selected
卡牌的数据在初始化的时候就确定下来
在UI上面卡牌使用imageButton实现,通过判断卡牌的花色和数字,在代码中设置imageButton的src值来动态引用图案
这个是和Controller通信的时候的信息类,每次发数据到Controller的时候都会得到result对象
status表明请求是否成功,1是成功0是失败,比如发送一个出牌请求到Controller,得到的回复是1表明可以出牌,执行出牌的ui操作
error是错误信息,在status是0的时候设置
AICard是一个二维数组,分别代表两个ai接下来要出的牌,数组长度为0说明ai弃牌
userCard是一个二维数组,只有在发牌的时候用到,表明三个玩家每个人手里的牌,随机生成
这个类的基本方法已经列出来,可以根据需要添加方法
这个方法在获取玩家初始的牌的时候会调用
返回的Result对象中,userCard保存着玩家初始的牌,其它字段见上面的定义
这个方法在玩家点击出牌按钮的时候调用,会传入一个数组,里面是选中待出的牌,均为Card对象
Controller判断玩家出的牌是否符合规则(在Controller内部自行保存上一个玩家出的牌),如果符合,在返回的result对象里面status设置为1,并且在aiCard(一个二维数组)中保存两个ai要出的牌
如果不符合,status为0,并加上错误信息error
这个方法在玩家点击pass按钮时调用,返回的result对象要设置aiCard
class MainAcitivity extends Activity {
Button submit;
Button pass;
//......
public void onCreate() {
//初始化
submit=(Button)findViewById(R.id.submit);
//........
//发牌
startGame();
//点击出牌按钮的事件
submit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
/*
1.获取当前选中的牌
Card[] card = getCardSelected();
2.将当前选中的牌提交到Controller
Result res = con.sendCrad(card);
3.判断res的内容
if (res.state==1)
sendCard(card,res);//UI执行玩家出牌动作,展示牌,展示ai出牌,然后回到玩家回合
else showError(res);//UI显示错误信息,不能够出牌
*/
Card[] card = getCardSelected();
Result res = con.sendCrad(card);
if (res.state==1)
sendCard(card,res);//UI执行玩家出牌动作,展示牌,展示ai出牌,然后回到玩家回合
else showError(res);//UI显示错误信息,不能够出牌
}
});
pass.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//提交弃牌信息
Result res = con.passCrad();
if (res.state==1)
sendCard(card,res);//UI执行玩家弃牌动作,展示ai出牌,然后回到玩家回合
else showError(res);//UI显示错误信息
}
});
}
private Card[] getCardSelected(){
//这个函数返回一个Card数组,代表选中的待出的牌
//这个函数从cardArea中获取相应的信息打包返回
}
private void sendCard(Card[] card,Result res){
//这个函数第一个参数是玩家出的牌,第二个参数是结果对象,结果对象中包括了ai出的牌
//这个函数执行显示出牌的UI操作
}
private void showError(){
//这个函数执行显示错误的操作
}
private void startGame(){
//这个函数执行开始游戏的UI操作
//向Controller请求初始的牌
//....
Result res = con.startGame();
//上面返回的对象有一个userCard的属性,保存了三个玩家的初始的牌
//....
}
}