去年12月份,看到了举办MSN大赛。。。闲来无聊,也写了一个。由于是一次写完的。后来也没改过。。代码比较长,没有进行脚本化(游戏里常用)
简介
机器人名字:扑克豆子,能进行很简单的对话,和游戏(21点),还能帮你查找歌曲(baidu)
主要由2个模块构成
net.gamewo.game.card ----- 游戏逻辑
net.gamewo.robot ----- 对话处理逻辑
下面就列出主要实现类
package
net.gamewo.robot;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
java.awt.Color;
import
java.util.ArrayList;
import
java.util.Date;
import
java.util.HashMap;
import
java.util.List;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
net.gamewo.game.card.Card;
import
net.gamewo.game.card.CardManager;
import
net.gamewo.game.card.CardParam;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
com.incesoft.botplatform.sdk.RobotException;
import
com.incesoft.botplatform.sdk.RobotHandler;
import
com.incesoft.botplatform.sdk.RobotMessage;
import
com.incesoft.botplatform.sdk.RobotServer;
import
com.incesoft.botplatform.sdk.RobotSession;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/** */
/**
*
* @author andy
*
*/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
CardHandler
implements
RobotHandler
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//记录用户
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private class User...{
String ID;//用户账号
int userWinCount = 0;//赢的次数
int robotWinCount = 0;//机器人赢的次数
int nudgeCount = 0;//震动发送次数
//int status = 1<<7 | 0;//准备开始游戏|正在游戏|准备结束游戏|游戏结束|正在查询信息
boolean isPreStart = false;//准备开始游戏
boolean onQuery = false;//正在查询信息(独立存在状态)
boolean onGame = false;//正在游戏
boolean isPreOver = false;//准备结束游戏
boolean isOver = false;//游戏结束
///暂停状态保存/
boolean temp_isPreStart = false;//准备开始游戏
boolean temp_onGame = false;//正在游戏
boolean temp_isPreOver = false;//准备结束游戏
boolean temp_isOver = false;//游戏结束
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
void setTemp()...{//保存临时状态
temp_isPreStart = isPreStart;
temp_onGame = onGame;
temp_isPreOver = isPreOver;
temp_isOver = isOver;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
void getTemp()...{//恢复暂停状态
isPreStart = temp_isPreStart;
onGame = temp_onGame;
isPreOver = temp_isPreOver;
isOver = temp_isOver;
}
//
List<Card> cards = null;//存放玩家的扑克
List<Card> robotCards = null;//存放与玩家游戏的机器人的牌
//是否正准备开始
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
boolean isPreStart()...{
return isPreStart&!onGame&!isPreOver&!isOver;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
void setPreStart()...{
isPreStart = true;
onGame = false;
isPreOver = false;
isOver = false;
}
//开始阶段
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
boolean isInit()...{
return !isPreStart&!onGame&!isOver&!isPreOver&!onQuery;
}
//游戏阶段
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
boolean isOnGame()...{
return (!isPreStart)&onGame&(!isOver);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
void setOnGame()...{
isPreStart = false;
onGame = true;
isPreOver = false;
isOver = false;
}
//准备结束
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
boolean isPreOver()...{
return (!isPreStart)&onGame&isPreOver&(!isOver);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
void setPreOver()...{
isPreStart = false;
onGame = true;
isPreOver = true;
isOver = false;
}
//结束阶段
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
boolean isOver()...{
return (!isPreStart)&(!onGame)&(!isPreOver)&isOver;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
void setOver()...{
isPreStart = false;
onGame = false;
isPreOver = false;
isOver = true;
}
//正在查询信息
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
boolean isOnQuery()...{
return !isPreStart&!onGame&!isOver&!isPreOver&onQuery;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
void setQuery()...{//查询时暂停当前状态
isPreStart = false;
onGame = false;
isPreOver = false;
isOver = false;
onQuery = true;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
User(String id)...{
this.ID = id;
cards = new ArrayList<Card>();
robotCards = new ArrayList<Card>();
}
}//内部类定义结束
private HashMap<String,String> type = null;
private RobotMessage msg = null;
private RobotServer server = null;
private volatile List<User> userList = null;
private CardManager manager = null;
private String mp3 = "http://mp3.baidu.com/m?ct=134217728&rn=&f=ms&tn=baidump3&lf=&lm=-1&word=";
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public CardHandler(RobotServer s) ...{
server = s;
userList = new ArrayList<User>();
type = new HashMap<String,String>();
type.put(CardParam.TYPES[0],"黑桃");
type.put(CardParam.TYPES[1],"红桃");
type.put(CardParam.TYPES[2],"梅花");
type.put(CardParam.TYPES[3],"方片");
}
//处理会话开始状态
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private void onOpen(RobotSession session)...{
msg = session.createMessage();
msg.setFontColor(Color.BLUE);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* 分时间段相映
* 8-22:hi~~~~;)
* 22-3:这么晚还不睡啊。。。。(瞌睡表情)
* 3-8:传说中有一个强人难道是你.......(大笑表情)
*/
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if (RobotSession.OPEN_MODE_CONV_OPEN == session.getOpenMode())...{
Date d = new Date();
int time = d.getHours();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if((time>8)&&(time<22))...{
msg.setString("hi~~~~~~"+Faces.ZHAYAN);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if((time>22)||(time<3))...{
msg.setString("这么晚还不睡啊...."+Faces.KESHUI);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if((time>3)&&(time<8))...{
msg.setString("传说中有一个强人难道是你......."+Faces.DAXIAO);
}
session.send(msg);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (RobotException e) ...{
e.printStackTrace();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void sessionOpened(RobotSession session) ...{
System.out.println("EVENT: sessionOpened (" + session.getUser().getClientID() + "," + session.getUser().getStatus() + ")");
this.onOpen(session);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void sessionClosed(RobotSession session) ...{
System.out.println("EVENT: sessionClosed");
String id = session.getUser().getID();
this.clear(id);
}
//析构函数
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private void clear(String id)...{
User user = null;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for(int i=0;i<userList.size();i++)...{
user = userList.get(i);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.ID.equals(id))...{
userList.remove(user);
}
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void messageReceived(RobotSession session, RobotMessage message) ...{
User user = null;
msg = session.createMessage();
msg.setFontColor(Color.BLUE);
String command = message.getString();
System.out.println("EVENT: messageReceived");
boolean exist = false;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for(int i=0;i<userList.size();i++)...{
user = userList.get(i);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.ID.equals(session.getUser().getID()))...{
exist = true;
break;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(!exist)...{
userList.add(new User(session.getUser().getID()));
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(!exist)...{//第一次对话
msg.setString("呵呵。。。。找我玩游戏呀。。。我现在只学会了21点"+Faces.HAIXIU+"....玩不?");
session.send(msg);
}else if(command.indexOf("歌")!=-1||command.indexOf("查")!=-1
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
||command.indexOf("找")!=-1||command.indexOf("听")!=-1)...{//查找歌曲。。
msg.setString("找啥呢?我只帮你找歌哦。。。。。你要找歌的话给我说(mp3 歌名),不影响游戏的。。");
user.setTemp();
user.setQuery();
session.send(msg);
}else
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.isInit())...{//开始阶段
if (command.startsWith("好") || command.startsWith("行")||
command.indexOf("恩")!=-1 || command.indexOf("y")!=-1||
command.indexOf("o")!=-1 || command.startsWith("玩")||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.startsWith("来")||command.startsWith("哦") ) ...{
user.setPreStart();//同意游戏后准备开始游戏
msg.setString(Faces.DAXIAO+"嘿嘿.....规则知道吧?知道的话就开始了哦,对了。。如果你想听歌的话给我说(找歌听),我帮你找找(边听边玩很爽吧)"+Faces.ZHAYAN);
session.send(msg);
}else if(command.startsWith("不") || command.startsWith("n")||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.indexOf("没")!=-1 || command.indexOf("无")!=-1)...{
msg.setString("真地???那我闪了。。。别人还有饭局呢。。");
session.send(msg);
this.clear(session.getUser().getID());//清除ID
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}else ...{
msg.setString("......什么嘛。。。玩不玩嘛"+Faces.KESHUI);
session.send(msg);
}
}else
///准备开始游戏
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.isPreStart())...{//准备开始游戏
if(command.indexOf("恩")!=-1 ||command.indexOf("y")!=-1 ||
(command.indexOf("知道")!=-1&&!(command.indexOf("不")!=-1))|| command.startsWith("明白")||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.indexOf("哦")!=-1)...{
Date d = new Date();
int time = d.getHours();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* 分时间段相映
* 8-18:今天又有人要败在我的手下了。。。。(大笑表情)
* 18-24:今晚又要有一场大战了。。。。。。。
* 0-8:半夜我是最清醒的,你死定了...捏哈哈哈哈.......(大笑表情)
*/
if(time>8 && time<18)
msg.setString("那就开始了。。。。HOHO。。。"+" "+"今天又有人要败在我的手下了。。。。"+Faces.ZHAYAN);
if(time>18 && time<24)
msg.setString("那就开始了。。。。HOHO。。。"+" "+"今晚又要有一场大战了。。。。。。。"+Faces.TUSHETOU);
if(time>0 && time<8)
msg.setString("那就开始了。。。。HOHO。。。"+" "+"半夜我是最清醒的,你死定了...捏哈哈哈哈......."+Faces.DAXIAO);
session.send(msg);
Thread.sleep(1000);//停顿1秒
msg.setString("洗牌中。。。。。。等等先");//重置标签
session.send(msg);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* 这里调入扑克模块
*/
manager = CardManager.getInstance();
for(int i=0;i<4;i++)
if(i%2==0)user.cards.add(manager.getNextCard());
else user.robotCards.add(manager.getNextCard());
Thread.sleep(2000);//停顿2秒
//发牌
//if(user.cards.get(0).getType()){}
StringBuilder sb = new StringBuilder();
sb.append("你的牌: ").
append(type.get(user.cards.get(0).getType())).
append(user.cards.get(0).getFace()).append(" ").
append(type.get(user.cards.get(1).getType())).
append(user.cards.get(1).getFace()).append(" 还要的话你就说,还要不了?");
msg.setString(sb.toString());
user.setOnGame();//进行游戏
session.send(msg);
}
else if(command.indexOf("?")!=-1 || command.indexOf("不")!=-1 ||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.indexOf("什么")!=-1 || command.indexOf("啥")!=-1)...{
msg.setString("规则很简单:我来发牌,每人先发2张,然后你就看你牌的点数和(例如:红桃4就是4点,黑桃J就是11点,没有花色的区分) " +
"如果你的点数离21点很远(比如11点),你就可以继续向我要牌,直到你觉得合适。然后比较咱俩的点数谁更接近21点," +
"如果相同的话就是平局拉。。。嘿嘿。。。如果你输的了的话。。。。HOHO。。。。会有大礼包哦。。。"+Faces.DAXIAO);
session.send(msg);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
else...{
msg.setString("。。。你在搞虾米东东??到底知道不知道...??"+Faces.KESHUI);
session.send(msg);
}
}else
///进行游戏
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.isOnGame())...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(!user.isPreOver())...{
if(command.indexOf("恩")!=-1 ||command.startsWith("要") ||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.startsWith("是") || command.indexOf("y")!=-1)...{//需要加牌
user.cards.add(manager.getNextCard());
StringBuilder sb = new StringBuilder();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* 出牌逻辑,是否需要加牌
*/
//
int sum = 0;
int size = user.robotCards.size();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for(int i=0;i<size;i++)...{
sum += user.robotCards.get(i).getValue();
}
int check = 21 - sum;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(check < 0)...{}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(check > 8)...{
user.robotCards.add(manager.getNextCard());
sb.append("我也要了一张 ");
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}else if(check > 5)...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.userWinCount < 2)...{
user.robotCards.add(manager.getNextCard());
sb.append("我也要了一张");
}
}
//
int csize = user.cards.size();
sb.append(" 你的牌: ");
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for(int i=0;i<csize;i++)...{
sb.append(type.get(user.cards.get(i).getType())).
append(user.cards.get(i).getFace()).append(" ");
}
sb.append(" 还要不?");
msg.setString(sb.toString());
session.send(msg);
}
else if(command.indexOf("不")!=-1 ||command.indexOf("够")!=-1 ||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.indexOf("n")!=-1)...{//不需要加牌
msg.setString("呵呵。。。够了??够了你就说嘛。。你不说我怎么知道你够了。。 " +
"不可能你说不够我不给你发,你说够了我硬要给你发。。。大家讲道理嘛。。 " +
"你真的要开??不是真的要开吧??难道你真的要开?? "+Faces.DAXIAO+"那准备开牌吧。。看看你能收到那个大礼不。。"+Faces.DAXIAO+",开不开?");
user.setPreOver();//准备结束
session.send(msg);
}
}else
准备结束
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.isPreOver())...{
if(command.indexOf("开")!=-1 ||command.indexOf("y")!=-1 ||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.indexOf("恩")!=-1||command.indexOf("好")!=-1)...{//开牌
int userSum = 0;
int robotSum = 0;
StringBuilder sb = new StringBuilder();
//显示玩家所有牌
int csize = user.cards.size();
sb.append(" 你的牌: ");
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for(int i=0;i<csize;i++)...{
sb.append(type.get(user.cards.get(i).getType())).
append(user.cards.get(i).getFace()).append(" ");
userSum += user.cards.get(i).getValue();
}
sb.append(" 总点数:"+userSum);
csize = user.robotCards.size();
sb.append(" 我的牌: ");
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for(int i=0;i<csize;i++)...{
sb.append(type.get(user.robotCards.get(i).getType())).
append(user.robotCards.get(i).getFace()).append(" ");
robotSum += user.robotCards.get(i).getValue();
}
sb.append(" 总点数:"+robotSum);
msg.setString(sb.toString());
session.send(msg);//显示结束信息并停顿2秒
Thread.sleep(2000);
int check = Math.abs(21-userSum) - Math.abs(21-robotSum);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(check == 0)...{//平局
msg.setString("竟然跟我平手。。。。"+Faces.FENGCI);
}
else
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(check > 0)...{
msg.setString("不好意思。。。我又赢了。。。。(为什么要加个'又'呢)"+Faces.ZHAYAN);
user.robotWinCount++;
}
else
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(check < 0)...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.userWinCount > 2)...{
msg.setString("你太强了。。。。"+Faces.BEISHANG);
user.userWinCount++;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.userWinCount == 0)...{
msg.setString("才赢了一把。。再来。。。"+Faces.ZHAYAN);
user.userWinCount++;
}
}
session.send(msg.setString(msg.getString()+"还玩不玩??"));
user.setOver();//结束当前游戏局
}
else if(command.indexOf("不")!=-1 ||command.indexOf("会")!=-1 ||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.indexOf("等")!=-1)...{
msg.setString("哦。。。。");
session.send(msg);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}else...{
msg.setString("郁闷。。。开不开啊。。。。。??");
session.send(msg);
}
}
}else
///游戏结束
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.isOver())...{
if(command.startsWith("玩") ||command.indexOf("y")!=-1 ||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.indexOf("再")!=-1 || command.startsWith("好"))...{//是否重新游戏
this.reset(user);
msg.setString("那就开始了哦。。。。");
session.send(msg);
}
if(command.indexOf("不")!=-1 ||command.indexOf("n")!=-1 ||
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
command.indexOf("算")!=-1)...{//是否重新游戏
msg.setString("那我找别人玩去拉。。。888");
session.send(msg);
//清楚该用户信息
this.clear(user.ID);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}else if(user.isOnQuery())...{//查询时保存现有状态,查询完毕恢复
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(command.indexOf("mp3")!=-1)...{//是否查询歌曲
msg.setString("正在帮你找。。。等下。。。");
session.send(msg);
String word = command.substring(command.indexOf("3")+1,command.length());
Thread.sleep(2000);//等待2秒查询
msg.setString("找到好多。。。给你发个页面。。你点接受");
session.sendActivity(mp3.concat(word));
session.send(msg);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}else...{
msg.setString("窝 特 啊 有 读 应???"+Faces.FENGCI+"......不给你找了");
session.send(msg);
//重设暂停状态
user.getTemp();//恢复状态
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}else...{
msg.setString(command+"?? 啥东西。。不懂。。"+Faces.BEISHANG);
this.clear(session.getUser().getID());
session.send(msg);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (RobotException e) ...{
e.printStackTrace();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (InterruptedException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//重置游戏
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private void reset(User user)...{
user.cards.clear();//清除刚才所有牌
user.isOver = false;
user.isPreOver = false;
user.isPreStart = true;
user.onGame = false;
user.onQuery = false;
user.robotCards.clear();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private String onNudge(User user)...{
String back = null;
int c = user.nudgeCount;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
switch(c)...{
case 0:
back = user.onGame?"........快点游戏拉":"........";
break;
case 1:
back = user.onGame?"玩不过我也不要震我嘛。。。"+Faces.DAXIAO:Faces.FENGCI+"还来??";
break;
case 2:
back = user.onGame?"你再震我可就不玩了哦。。。"+Faces.KESHUI:"我要开始反击了。。。。";
break;
case 3:
back = user.onGame?"不理你。。。"+Faces.BEISHANG:Faces.KESHUI+"啥都不说了。。。先扔俩震过去。。。";
break;
}
return back;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void nudgeReceived(RobotSession session) ...{
System.out.println("EVENT: nudgeReceived");
User user = null;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for(int i=0;i<userList.size();i++)...{
user = userList.get(i);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(user.ID.equals(session.getUser().getID()))...{
user.nudgeCount++;
session.send(onNudge(user));
if(user.nudgeCount ==3)
session.sendNudge();
else
return;
}
}
userList.add(new User(session.getUser().getID()));
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (RobotException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void activityAccepted(RobotSession session) ...{
System.out.println("EVENT: activityAccepted");
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void activityRejected(RobotSession session) ...{
System.out.println("EVENT: activityRejected");
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
session.send("不听算了。。。");
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (RobotException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void exceptionCaught(RobotSession session, Throwable cause) ...{
System.out.println("SERVER ERROR: " + cause.getMessage());
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void userAdd(String robot,String user) ...{
System.out.println("EVENT: userAdd (" + user + ")");
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void userRemove(String robot, String user) ...{
System.out.println("EVENT: userRemove (" + user + ")");
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
实际上这个类完成了所有的交互工作,他的工作方式类似EJB。实际上也是如此,由于代码比较多,我就不一一列出来了,这里奉上SRC
大家可以加andy_yukun@hotmail.com来体验
有什么问题联系我:andyyukun@hotmail.com