本项目实现了一个双人在线对战的web21点游戏,进入页面后需要创建房间或者加入房间,等待房间存在两个人准备即可,等待双方准备完毕即可开始游戏,游戏采用轮庄模式,并实时显示服务器在线人数。
本项目基于springwebsocket,首先要让所以玩家建立一个链接,即对战平台,建立链接与聊天室的方式一样,才能实时信息交互!只有建立的动态链接才能进行下一步!
接下来就是房间系统!!!
先定义通过session找到房间号,通过房间号找到房间的map
private HashMap<String, GameRoom> NumberIndexRoom = new HashMap<String, GameRoom>();
private HashMap<WebSocketSession, String> sessionNumber = new HashMap<WebSocketSession, String>();
创建房间
public void creatRoom(WebSocketSession session) throws IOException, InterruptedException {
// 创建房间
int number = creatRoomNumber();
GameRoom gameRoom = new GameRoom();
System.out.println(gameRoom);
gameRoom.setGameNumber(number + "", session);
NumberIndexRoom.put(number + "", gameRoom);
sessionNumber.put(session, number + "");
}
private int creatRoomNumber() {
// 创建唯一的房间号
Random random = new Random();
int nextInt;
while (true) {
nextInt = random.nextInt(900000) + 100000;
if (NumberIndexRoom.get(nextInt) == null) {
return nextInt;
}
}
}
加入房间:
private void joinRoom(WebSocketSession session, String number) throws IOException, InterruptedException {
// TODO Auto-generated method stub
// 加入房间
GameRoom gameRoom = NumberIndexRoom.get(number);
System.out.println(gameRoom + "房间");
if (gameRoom == null) {
session.sendMessage(new TextMessage("b房间不存在"));
} else {
if (gameRoom.getRoomOnline() >= 2) {
session.sendMessage(new TextMessage("b房间人数已满"));
} else {
gameRoom.joinRoom(session);
sessionNumber.put(session, number);
session.sendMessage(new TextMessage("a" + number));
}
}
}
退出房间:
public void error(WebSocketSession session) throws IOException, InterruptedException {
// TODO Auto-generated method stub
// session异常
String number = sessionNumber.get(session);
if (number == null)// 还未加入房间,不用处理异常
return;
GameRoom gameRoom = NumberIndexRoom.get(number);
if (gameRoom.getRoomOnline() == 1) {
// 如果房间只有一个人,直接删除房间
NumberIndexRoom.remove(number);
} else {
// 房间两个人,移除异常的session
gameRoom.removeSession(session);
}
sessionNumber.remove(session);// session的房间号移除
}
主要的核心是websocket链接还有房间系统,其他的就
是简单的程序设计,在代码注释中都有!
设计效果展示
初始化界面:
没有加入房间或者创建房间不能进行游戏操作:
创建房间:
将房间号告诉好友,加入房间并双方准备
双方准备,游戏开始
进行游戏
玩家操作没有结束,庄家不能进行操作:
玩家听牌后不能摸牌,等待庄家操作:
庄家听牌后展示结果:
通知输赢
自己准备:
对方也准备就可以开始游戏
项目浏览:http://120.78.164.110:8080/Blackjack/blackjack/blackJack.html
项目源码:https://github.com/Vimmone/BlackJack