创四方·大部落

 找回密码
 立即注册
搜索
查看: 549|回复: 11

[游戏开发] 15—软工 服务器组作品贴

[复制链接]

1

主题

9

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2018-9-27 19:02:58 | 显示全部楼层 |阅读模式
通信协议
以下用以S表示Server,C表示Client
总体格式:
    {"s":状态,"d":具体数据对象}
注意当值为数字时,无需加双引号
d: 代表data。是具体返回的数据。
s: 代表state。指明返回数据的状态。
0正常。此状态下,data是由各种datatype定义。
1失败。失败是由用户操作导致的,比如用户输入的密码不正确。
{"s":1,"d":{"uid":"594","t":1537088958}}登录成功
{"s":0,"d":"\u7528\u6237\u4e0d\u5b58\u5728\u6216\u88ab\u7981\u7528"}账号错误
{"s":0,"d":"\u5bc6\u7801\u9519\u8bef\uff01"}密码错误            
具体通信过程,c2s均采用post方式传递参数
c2s: client to server,     s2c:  server to client
1、用户注册 regis
    c2s:username=用户名。
           password=密码。
Remember=记住密码。
Time=时间戳
  s2c: s=0 ,d={"u": "用户ID " }  
       或s=1,2,d="信息提示 "
  
2、用户登录 login
  c2s: n、 p、t
  s2c:s=0 ,d={"u": "用户ID " }  
      或s=1,d={"用户名和密码不能为空 "或"用户名或密码错误 " }

3、角色信息 role creation
c2s:     roleid = 角色ID。
Sex=性别
                  Clothing=服装
Face type=脸型
S2c:d=”创建成功为1”,”角色重复为2”

4、玩家信息 player information
  c2s:
                playerid = 玩家ID。
                time = 当前时间戳。
s2c:d = {"userid": "用户ID","name": "用户名",  "time": "当前时间戳",economics:经济,
total field number:总场数,victory field:胜场,winrate:胜率 }

5、皮肤购买 skin purchase
  c2s           skinname=皮肤名称。
                  usersid = 用户ID。
             time = 当前时间戳。  
  s2c:          d = “成功时为1”,”余额不足为2”,”您已拥有为3”
6、进入游戏 enter the game
c2s:         RoomID=房间ID。
time = 当前时间戳。
s2c        d=”进入成功为1”,”当前房间已满为2”,”当前房间需要密码为3‘’
7、游戏结束 game over
        c2s:        usersid = 用户ID。
                      time = 当前时间戳。
                    experience=获得的经验值
                         economics=获得的经济
        s2c:         d = {"usersid":"用户ID", "time": "当前时间戳", " gameover ":"游戏结束"}
回复

使用道具 举报

1

主题

9

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2018-9-30 01:10:25 | 显示全部楼层
本帖最后由 Paul5613 于 2018-10-10 19:59 编辑

http://47.101.60.128/phpmyadmin/ ... 0e954c4fc8de4e9c30d

回复

使用道具 举报

0

主题

8

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2018-10-1 20:55:43 | 显示全部楼层
本帖最后由 joker 于 2018-10-19 00:43 编辑

帐户表(Player)
  
字段名
  
  
数据类型
  
  
字段长度
  
  
允许空否
  
  
字段说明
  
  
id
  
  
int
  
  
  
  
Not Null
  
  
用户ID,主键
  
  
name
  
  
char
  
  
10
  
  
Not Null
  
  
玩家名
  
  
money
  
  
int
  
  
  
  
Not Null
  
  
金币
  
  
fighting
  
  
int
  
  
  
  
Not Null
  
  
战斗力
  
  
winNumber
  
  
int
  
  
  
  
Not Null
  
  
胜利次数
  
  
failNumber
  
  
int
  
  
  
  
Not Null
  
  
失败次数
  
  
passedtask
  
  
int
  
  
  
  
Not Null
  
  
已通过的关卡
  

对战记录表(BattleRecords)
  
字段名
  
  
数据类型
  
  
字段长度
  
  
允许空否
  
  
字段说明
  
  
id
  
  
int
  
  
  
  
Not Null
  
  
对战ID,主键
  
  
uid1
  
  
int
  
  
  
  
Not Null
  
  
用户ID1 ,外键
  
  
uid2
  
  
int
  
  
  
  
Not Null
  
  
用户ID2,外键
  
  
getExperience
  
  
int
  
  
  
  
Null
  
  
获得经验值
  
  
getGold
  
  
int
  
  
  
  
Null
  
  
获得金币
  
  
playLineup
  
  
int
  
  
  
  
Not Null
  
  
出战阵容
  
  
Status
  
  
boolean
  
  
  
  
Not Null
  
  
游戏对战状态
  
  
turn
  
  
int
  
  
  
  
Not Null
  
  
回合数
  
  
winnerId
  
  
int
  
  
  
  
Not Null
  
  
获胜的id
  

关卡表(Transcript)
  
字段名
  
  
数据类型
  
  
字段长度
  
  
允许空否
  
  
字段说明
  
  
id
  
  
int
  
  
  
  
Not Null
  
  
关卡ID,主键
  
  
title
  
  
Varchar
  
  
50
  
  
Not Null
  
  
关卡名
  
  
starSeries
  
  
int
  
  
  
  
Not Null
  
  
星级数
  
  
getstarCondition
  
  
Varchar
  
  
100
  
  
Not Null
  
  
获得星级数条件
  
  
orderTranscript
  
  
int
  
  
  
  
Not Null
  
  
下一关卡
  
  
initData
  
  
Varchar
  
  
100
  
  
Null
  
  
初始化数据
  
  
passReward
  
  
Varchar
  
  
50
  
  
Null
  
  
通关奖励
  

关卡进度表(TranscriptSchedule)
  
字段名
  
  
数据类型
  
  
字段长度
  
  
允许空否
  
  
字段说明
  
  
id
  
  
int
  
  
  
  
Not Null
  
  
关卡进度ID,主键
  
  
uid
  
  
int
  
  
  
  
Not Null
  
  
用户ID
  
  
cid
  
  
int
  
  
  
  
Not Null
  
  
已通关关卡ID, 外键
  
  
getStar
  
  
int
  
  
  
  
Not Null
  
  
获得的星级数
  
回复

使用道具 举报

0

主题

8

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2018-10-1 21:14:46 | 显示全部楼层
本帖最后由 joker 于 2018-10-11 13:38 编辑

英雄表(Hero)
  
字段名
  
  
数据类型
  
  
字段长度
  
  
允许空否
  
  
字段说明
  
  
id
  
  
int
  
  
  
  
Not Null
  
  
英雄ID,主键
  
  
name
  
  
char
  
  
16
  
  
Not Null
  
  
英雄名
  
  
type
  
  
int
  
  
  
  
Not Null
  
  
五行属系
  
  
expRequire
  
  
int
  
  
  
  
Not Null
  
  
需要经验
  
  
experienceGrowth
  
  
int
  
  
  
  
Not Null
  
  
经验增长系数
  
  
attack
  
  
int
  
  
  
  
Not Null
  
  
基础攻击力
  
  
hp
  
  
int
  
  
  
  
Not Null
  
  
基础生命值
  
  
defense
  
  
int
  
  
  
  
Not Null
  
  
基础防御值
  
  
attackGrowth
  
  
int
  
  
  
  
Not Null
  
  
攻击力增长系数
  
  
hpGrowth
  
  
int
  
  
  
  
Not Null
  
  
生命值增长系数
  
  
defenseGrowth
  
  
int
  
  
  
  
Not Null
  
  
防御值增长系数
  
  
ordinarySkills
  
  
Varchar
  
  
100
  
  
Not Null
  
  
被动技能
  
  
ultimateSkills
  
  
Varchar
  
  
100
  
  
Not Null
  
  
终极技能
  
  
introduction
  
  
Varchar
  
  
200
  
  
Null
  
  
简介
  

用户英雄表(UserHero)
  
字段名
  
  
数据类型
  
  
字段长度
  
  
允许空否
  
  
字段说明
  
  
id
  
  
int
  
  
  
  
Not Null
  
  
用户英雄ID,主键
  
  
uid
  
  
int
  
  
  
  
Not Null
  
  
用户ID,外键
  
  
hid
  
  
int
  
  
  
  
Not Null
  
  
英雄ID,外键
  
  
level
  
  
int
  
  
  
  
Not Null
  
  
英雄等级
  
  
experience
  
  
int
  
  
  
  
Not Null
  
  
经验值
  
  
status
  
  
boolean
  
  
  
  
Not Null
  
  
出战状态
  
  
attack
  
  
int
  
  
  
  
Not Null
  
  
攻击力
  
  
hp
  
  
int
  
  
  
  
Not Null
  
  
生命值
  
  
defense
  
  
int
  
  
  
  
Not Null
  
  
防御值
  
  
fighting
  
  
int
  
  
  
  
Not Null
  
  
战斗力
  
  
lineup
  
  
int
  
  
  
  
Not Null
  
  
英雄所在阵容及位置
  
回复

使用道具 举报

1

主题

9

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2018-10-1 23:55:43 | 显示全部楼层
以下用以S表示Server,C表示Client
总体格式:
    {"s":状态,"d":具体数据对象}
注意当值为数字时,无需加双引号
d: 代表data。是具体返回的数据。
s: 代表state。指明返回数据的状态。
0正常。此状态下,data是由各种datatype定义。
1失败。失败是由用户操作导致的,比如用户输入的密码不正确。
           此情况下,用消息框提示失败信息后,可自行消失,或提供确定按钮,用户点击后消失。之后用户可重新操作。
2错误。错误是系统因素导致的,比如数据库连接失败。
            此情况下,用消息框提示错误信息后,应提供重试或取消给用户选择。
3 时间戳超过容许范围。(弹出消息框超时请重新登录)            
具体通信过程,c2s均采用post方式传递参数

c2s: client to server,     s2c:  server to client
1、用户注册 regis
    c2s:n=用户名
            p=密码
    s2c: s=0 ,d={"userid": "用户ID ",”time”= 当前时间戳 }  
          或s=1,d="用户名已存在 "
          或s=2,d="写入数据库失败! "
  
2、用户登录 login
     c2s:n=用户名
             p=密码
     s2c:s=0 ,d={"userid": "用户ID ",”time”= 当前时间戳  }  
          或s=1,d={"用户名和密码不能为空 "或"用户名或密码错误 " }

3、配置阵容selecthero
    c2s:userid=用户id
          selecthero={英雄ID1,英雄ID2,英雄ID3,英雄ID4}
    s2c:s=0,d=”选择成功”
          s=1,d=”未拥有英雄”
          time=当前时间戳

4、用户匹配
     c2s: usersid=用户ID1,用户ID2  
     s2c:s=0,d=”匹配成功”
      或 s=1,d=”匹配失败,请耐心等待”
          time=当前时间戳

5、游戏结束 game over
      c2s: usersid = 用户ID。
      s2c: d = {user_record:["usersid":"用户ID", "time": "当前时间戳", " gameover ":"游戏结束",”
                   experience”:”获得的经验值”,”money”:”获得的金币”]}
回复

使用道具 举报

1

主题

9

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2018-10-2 23:57:40 | 显示全部楼层
以下用以S表示Server,C表示Client
总体格式:
    {"s":状态,"d":具体数据对象}
注意当值为数字时,无需加双引号
d: 代表data。是具体返回的数据。
s: 代表state。指明返回数据的状态。
0正常。此状态下,data是由各种datatype定义。
1失败。失败是由用户操作导致的,比如用户输入的密码不正确。
           此情况下,用消息框提示失败信息后,可自行消失,或提供确定按钮,用户点击后消失。之后用户可重新操作。
2错误。错误是系统因素导致的,比如数据库连接失败。
            此情况下,用消息框提示错误信息后,应提供重试或取消给用户选择。
3 时间戳超过容许范围。(弹出消息框超时请重新登录)            
具体通信过程,c2s均采用post方式传递参数

c2s: client to server,     s2c:  server to client
1、用户注册 regis
    c2s:n=用户名
            p=密码
    s2c: s=0 ,d={"userid": "用户id ","time"= "当前时间戳" }  
          s=1,d="用户名已存在 "
          s=2,d="写入数据库失败! "
  
2、用户登录 login
     c2s:n=用户名
             p=密码
     s2c:s=0 ,d={"userid": "用户id","time"= "当前时间戳 " }  
          s=1,d={"用户名和密码不能为空 "或"用户名或密码错误 " }

3、配置阵容selecthero
    c2s:userid=用户id
          selecthero={英雄id1,英雄id2,英雄id3,英雄id4}
    s2c:s=0,d="选择成功"
        s=1,d="未拥有英雄"
          time=当前时间戳
4、匹配玩家接口match
    c2s:userid:用户id
    s2c:d={"userid":"用户id","name":"用户名","level":"用户等级","number":"英雄个数"}

5、用户匹配
     c2s: usersid=用户id
     s2c:s=0,d={"gameid":"游戏id","player":"{'uid':'用户id','username':'用户名'}","firstPlayer":"先手玩家的id","initData":"游戏初始化数据","startTime":"游戏开始的时间戳"}
        或s=1,d={"gameid:0"}
     gameid:为0代表未匹配成功。
     gameid:一旦匹配成功,就要建立一个游戏,在数据库的game表中创建一条记录,用于存储这个游戏的相关数据,gameId即是game表中创建的记录的主键值。
     player:是匹配到的对手玩家的数据,
     firstPlayer:先手的玩家的id,指明谁先操作。
     initData:游戏初始化数据,双方的出场阵容。
     startTime:游戏开始的时间戳,该时间应为匹配成功后,一定时间段之后。

6、游戏状态查询  getGameInfo
      c2s:gameid=游戏id
      s2c:s=0,d={"gameState":"0","turn":"当前的回合数","currentPlayer":"当前可以操作的玩家id","timeLimit":"当前操作的截止时间戳","lastOperate":"最后一次操作的数据","gameData":"游戏局面的数据"}
           s=1,d={"gameState":"1","turn":"回合数","totalTime":"游戏总用时","winner":"获胜的玩家id(若平局则为0)","lastOperate":"最后一次操作的数据","gameData":"游戏当前局面的数据"}
回复

使用道具 举报

34

主题

76

帖子

1264

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1264
发表于 2018-10-3 18:49:34 | 显示全部楼层
直接复制我的设计,然后补充需要补充之处即可。目前该补充的地方未补充,如:initData、lastOperate、gameData
目前的设计可以看出是做了合并,但也破坏了我原有设计的统一性规范。如:登录注册中的参数命名规范变得不统一了

对于我的设计仍存在理解不透彻之处,如有些地方s=1的使用,并不对,s=1是失败,但有些操作返回的并不是失败,例如:match、getGameInfo
我的设计中也已声明,下方所有的定义都是s=0时的返回数据
回复

使用道具 举报

1

主题

9

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2018-10-6 00:36:24 | 显示全部楼层
本帖最后由 Paul5613 于 2018-10-19 01:40 编辑

采用http方式进行通信
客户端发出request。以post方式发出请求参数
服务器端返回response。以json格式返回数据
response的总体格式为:
        {state:状态,data:具体数据对象}
        state: 状态。0正常,1失败,2错误。
        data: 返回的具体数据。state:0时,data的定义由以下各接口具体定义。state:1或2

时,data为具体失败或错误的提示信息。

1、获取服务端时间接口 getTime
该接口用于查询服务端时间,当客户端与服务端时间不匹配时,可利用该接口重新同步时间
request:
        无
response:
        服务端时间戳
(注意这里为避免重复书写,所以只写response中,state:0时,data的取值格式,以此处为例,最终完整的格式为{state:0,data:服务端时间戳})

2、注册接口 regist
该接口中包含了获取服务端时间,以便在注册操作中,顺带完成时间同步
request:
        name:用户名
        password:密码
response:
        {userId:用户id,time:服务端时间戳}

3、登录接口 login
该接口中包含了获取服务端时间,以便在登录操作中,顺带完成时间同步
request:
        name:用户名
        password:密码
response:
        {userId:用户id,time:服务端时间戳}

4、查询用户信息接口 getUserInfo
request:
        userId:用户id
response:
        {userId:用户id,name:用户名,glod:用户金币,fight:战斗力,empirical:经验值}        

5、匹配玩家接口 match
request:
        userId:用户id
response:
        未匹配成功  {gameId:0}
        gameId:为0代表未匹配成功。
        匹配成功  {gameId:游戏id,player0:玩家id,player1:玩家id,initData:[{userheroId01,uId,heroId,level:等级},{userheroId02,uId,heroId,level:等级},{userheroId03,uId,heroId,level:等级},{userheroId04,uId,heroId,level:等级},{userheroId11,uId,heroId,level:等级},{userheroId12,uId,heroId,level:等级},{userheroId13,uId,heroId,level:等级},{userheroId14,uId,heroId,level:等级}]
,startTime:游戏开始的时间戳}
        gameId:一旦匹配成功,就要建立一个游戏,在数据库的game表中创建一条记录,用于存储这个游戏的相关数据,gameId即是game表中创建的记录的主键值。
        player:是匹配到的对手玩家的数据,该数据的格式应与getUserInfo接口中定义的格式相同。
        firstPlayer:先手的玩家的id,指明谁先操作。
        initData:游戏初始化数据,例如:双方的出场阵容。
        startTime:游戏开始的时间戳,该时间应为匹配成功后,一定时间段之后。

6、游戏状态查询  getGameInfo
该接口是,当前等待对方操作的玩家,间隔一定时间就应查询的接口,以获取游戏状态的变化
request:
        gameId:游戏id
response:
        游戏未结束  {gameState:0,turn:当前的回合数,currentPlayer:当前可以操作的玩家id,timeLimit:当前操作的截止时间戳,lastOperate:{userheroId:用户英雄id,coordinates:{x:横坐标位置, y: 纵坐标位置},aSpeed:加速度,turn:回合数} ,gameData:{turn:回合数,player0:玩家id,player1:玩家id,time:时间戳} }
        游戏结束  {gameState:1,turn:回合数,totalTime:游戏总用时,winner:获胜的玩家id(若平局则为0),lastOperate:{userheroId:用户英雄id,coordinates:{x:横坐标位置, y: 纵坐标位置},aSpeed:加速度,turn:回合数}}
        lastOperate:最后一次操作的数据
        gameData:游戏局面的数据

7、用户英雄查询  getUserHeroInfo
request:
        userId:用户id         
response:
        {heroId:英雄id,heroName:英雄名,level英雄等级,empirical:经验值,status:{play:是否出战}}
        status:某个英雄目前的状态

8、英雄查询  getHeroInfo
request:
         heroId:英雄id。        
response:
        {name:英雄名称,attrack:英雄攻击力,hp:英雄血量,type:英雄属性,defand:英雄防御,hpG:英雄血量增长值,defandG:英雄防御增长值,attackG:英雄攻击力增长}


9、游戏操作接口 doOperate
request:
        gameId:游戏id
        userId:用户id
        turn:回合数
        operate:{userheroId:用户英雄id,coordinates:{x:横坐标位置, y: 纵坐标位置}}
response:
        {result:操作结果,gameInfo:{gameState:0,turn:当前的回合数,currentPlayer:当前可以操作的玩家id,timeLimit:当前操作的截止时间戳,lastOperate:{userHeroId:用户英雄id,coordinates:{x:横坐标位置, y: 纵坐标位置},aSpeed:加速度,turn:回合数}}}
        result:0:操作成功,1:操作超时,1以上:其他错误,根据具体游戏进行定义
        gameInfo:与getGameInfo接口返回数据相同

10、对战记录查询:battleRecordsInfo
request:
        playId:对战id
response:
        {playerId:对手id,getExperience:获得经验值,getGold:获得金币,status:{win/lose:赢或输},turn:回合数,startTime:开始时间,overTime:结束时间}
        status:游戏对战状态
       
11、再玩一局 playAgain
request:
        userId:用户id
        gameId:游戏id
response:
        失败
        {wait:等待匹配}
        成功
        {gameId:游戏id,player0:玩家id,player1:玩家id,initData:[{userheroId01,uId,heroId,level:等级},{userheroId02,uId,heroId,level:等级},{userheroId03,uId,heroId,level:等级},{userheroId04,uId,heroId,level:等级},{userheroId11,uId,heroId,level:等级},{userheroId12,uId,heroId,level:等级},{userheroId13,uId,heroId,level:等级},{userheroId14,uId,heroId,level:等级}]}
回复

使用道具 举报

34

主题

76

帖子

1264

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1264
发表于 2018-10-12 20:24:04 | 显示全部楼层
initData:{position:初始位置,team:双方的出场阵容}要给出具体的内容格式
lastOperate:{hero:使用的英雄,Rounds:回合数,empirical:经验值}   严重错误!
gameData:{playerhero:双方出战的英雄,kill:击杀人数,bout:回合数,surplushero:剩余英雄数}    错误!
用户英雄查询  userhero   命名不规范   request与response的设计都错
英雄查询  hero    设计错误
playAgain response,设计错误
回复

使用道具 举报

0

主题

8

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2018-10-14 21:46:19 | 显示全部楼层
服务器B组gitee:
https://gitee.com/code_to_the_rabbit
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

创四方·大部落 ( 闽ICP备17018841号 )

GMT+8, 2018-10-23 09:56

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表