手机网络象棋开发(1): 服务器类Server介绍

为了更好的理解手机网络游戏的架构和开发技巧,本人在他人手机网络象棋的基本上,进一步进行网络通信部分的修改和优化,采用socket方式进行数据通信。

以下是server的Server.java的简介。

此类主要负责:
1. 游戏共用数据的初始化
playerMap.clear() 玩家容器的清空
Desk[] 遍历数组,赋控制

2. 启动serversocket, 等待client连接

3. 连接客户端后,将socket作为参数,启动独立线程独立读写、逻辑业务(第二篇重点描述)

具体代码如下:

/**
*
*/
package net.tuolian.newserver;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;

/**
* @author sean
*
* @since 2009/06/18
*
* 1.create serversocket
* 2. wait for new connection
* 3. start thread to handle data and logic
* 4.
*
*/
public class Server {

static int port=9999;
static ServerSocket server;

static final int DESKNUM = 10; //总共游戏桌子数量

public static int playerId = 1; //默认玩家id为1

public static Map<Integer, Player> playerMap = new HashMap<Integer, Player>(); //玩家容器

public static int counter = 0; //客户端连接累计数,即玩家id的依据

static Desk[] desks = new Desk[10]; //桌子数组

/**
* @param args
*/
public static void main(String[] args) {
// TODO 初始化

init();

try {
server = new ServerSocket(port);
System.out.println("服务器端已启动:" + port);

while(true){
System.out.println("ready to accept new client");
Socket socket = server.accept();
System.out.println("accepted a client: " + socket.getRemoteSocketAddress());

//此处需要修改,目前每个客户端登录,启动专门线程,耗费资源
new Network(socket).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if( server != null){
try {
server.close();
server = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}


}

private static void init() {
// TODO 服务器server的初始化动作,playerMap情况, 桌子情况

//初始化工作
playerMap.clear();

for (int i = 0; i < DESKNUM; i++) {
desks[i] = new Desk();
desks[i].setID(i);
}
}

/**
* 发送消息类
* 主要工作就是发送到队列
* 由发送线程去除队列中消息,进行依次发送
*
* @param player
* @param m
*
*/
public static void sendMessage(Player player, String message) {
// TODO 改写sendMessage方法,按照msg方式进行封装,并且压入消息队列中
int cmdType = Message.GAME_RESP;
Message msg = new Message(cmdType, message);
msg.setPlayerId(player.getID());
player.data.push(msg);
System.out.println("游戏中消息发送完毕:"+ msg.getMessage());
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本项目是一个基于安卓的象棋项目源码,为联网游戏而设计的。配有java服务端,不过只能单开。我没有测试具体的功能,感兴趣的可以自己链接数据库试试吧。下面是运行指南和开发设计文档。 本源码分为客户端和服务端 客户端编译即可运行,socket连接为:127.0.0.1:9898 运行服务端时,需要使用MySQL建表,建表语句如下: create database chinachess; use chinachess; create table user( id int primary key auto_increment, name char(10) unique not null, password char(16) not null, head int default 0, score int default 0, victory_count int default 0, defeat_count int default 0, draw_count int default 0, join_time datetime ) charset utf8 collate utf8_general_ci; 服务端DbUtil.java里面有连接数据库的配置 简单的设计文档: 1.图片收集 ①背景图片 ②棋子图片 ③按钮图片 2.音乐收集 ①背景音乐 ②按钮点击音乐 ③选子音乐 ④吃子音乐 ⑤走棋音乐 ⑥胜利音乐 ⑦失败音乐 3.界面设计(photoshop画图) ①加载界面 ②菜单界面 ④匹配界面 ⑤游戏界面 ⑥结算界面 4.技术点 ①socket ②多线程同步 ③MySQL连接 ④游戏逻辑 ⑤通信数据格式 5.软件 ①Java环境 ②安卓开发环境(adt bundle) ③MySQL5.7 6.数据处理 byte数据头 * 0:分割 --发往服务器 * 1:登陆 * 2.注册 * 3.消息 * 4:匹配游戏 * 5:走棋 * 6:求和 * 7:同意求和 * 8:悔棋 * 9:同意悔棋 * 10:认输 * 11:心跳包 --发往用户 * 12:登陆回调 * 13:注册回调 * 14:开始游戏 * 15:游戏数据 * 16:游戏结束 7.游戏规则 ①车走直线,不能挡车 ②马走日,前压马腿 ③象走田,前压象腿,不可越河 ④士空走斜一,吃走斜一,不可越将营 ⑤将走直一,(吃将可走直线可越将营),不可越将营 ⑥炮空走直线,吃走炮台 ⑦兵可进不可退,走直一 8.绝杀(选) 定义:无论怎么走,将都会被杀的棋叫做绝杀 实现:扫描每个己方棋子的每一步,只要有一步致使不会死帅,就不是绝杀之棋 9.智能AI(略) 10.流程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值