小组成员
姓名 | 学号 |
---|---|
张伯威 | 2018141461065 |
罗正 | 2018141461092 |
当前完成工作
进行网络多人游戏,访问黄金点游戏。可以通过谷歌浏览器建立无痕窗口实现两人游戏。
过程解释
1.建立账号
用户登录之后建立session存储登录信息
if ($request->isMethod('post')){
session(['sef'=>'yes']);
$gg_user = DB::table('gg_user');
$ifHasUser = $gg_user->where('userName','=', $request['userName'])->first();
if ($request['userName'] == null || $request['userPw'] == null){
return back()->with('message','请填入完整信息');
}
if ($ifHasUser == null){
DB::insert('insert into gg_user(id,userName,userPw,nowHome) values (?,?,?,?)',[null,$request['userName'],$request['userPw'],null]);
session(['isLogin'=>'yes','nameLogin'=>$request['userName']]);
return redirect('/');
}else{
if ($ifHasUser->userName != $request['userName']) {
return back()->with('message', "用户名错误");
} elseif ($ifHasUser->userPw != $request['userPw']) {
return back()->with('message', "密码错误");
}
session(['isLogin'=>'yes','nameLogin'=>$request['userName']]);
return redirect('/');
}
2.多人游戏时对房间信息进行认证
$idinfo = DB::table('gamehome')->where('id','=',$homeid)->get()->first();
if ($idinfo != null){ // 存在房间
DB::update('update gg_user set nowHome=? where userName=?',[$homeid,session('nameLogin')]);
$playname = $idinfo->playname;
if (preg_match("/".session('nameLogin')."/i",$playname)){
}else{
DB::update('update gamehome set playname=? where id=?',[$playname.session('nameLogin').'_.',$homeid]);
DB::update('update gamehome set nowplayer=? where id=?',[$idinfo->nowplayer+1,$homeid]);
}
3.多人游戏对成绩的计算
大致和单人一样,不过用的是php的写法
$gamenumber = count($eachplayer); //游戏的人数
$turn = DB::table('gamehome')->where('id','=',$homeid)->get()->first()->maxturn;//游戏的轮数
$scoreholder = array(); //成绩容器
$endscore = array();
$nameHolder = array();//名称容器
for($i=0;$i<$gamenumber;$i++){
$endscore[$i] = 0;
$nameHolder[$i] = explode("]",explode("[",$eachplayer[$i])[1])[0];
$scoreholder[$i] = array();
for($j=0;$j<$turn;$j++){
$scoreholder[$i][$j] = explode(">",explode("<",$eachplayer[$i])[$j+1])[0];
}
}
//开始计算
$winner = array();
for($i=0;$i<$turn;$i++){
$average = 0;
$closestNumber = 0;
$fartherNumber = 0;
$closestSub = 100;
$fartherSub = 0;
for($j=0;$j<$gamenumber;$j++){
//获得平均分
$average += $scoreholder[$j][$i];
}
$average = $average / 10 * 0.618;
for($j=0;$j<$gamenumber;$j++){
$playerSub = abs($scoreholder[$j][$i] - $average);
if($j==0){
$closestSub = $playerSub;
$fartherSub = $playerSub;
$closestNumber = 0;
$fartherNumber = 0;
}
else {
if ($playerSub < $closestSub){
$closestNumber = $j;
}
if ($playerSub > $fartherSub){
$fartherNumber = $j;
}
}
}
$endscore[$closestNumber] += 10;
$endscore[$fartherNumber] -= 2;
$winner[$i] = "第".($i+1)."局平均数:".$average.",winner:".($closestNumber+1).",loser:".($fartherNumber+1);
}
for($i=0;$i<$gamenumber;$i++){
$j = DB::table("gg_user")->where("id","=",$nameHolder[$i])->get()->first()->userName;
$endscore[$i] = "玩家".$j.":".$endscore[$i];
}
示例
建立账号,进行多人游戏
总结
大致上在功能上完成了联机游戏的功能,可以进行正常的游戏,但是后期可以优化的地方还很多,包括算法效率,成绩的存储,用户的认证等等,后期还可以进一步的去维护