软件工程课程设计_第十四周


小组成员

姓名学号
张伯威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];
}

示例

建立账号,进行多人游戏
在这里插入图片描述


总结

大致上在功能上完成了联机游戏的功能,可以进行正常的游戏,但是后期可以优化的地方还很多,包括算法效率,成绩的存储,用户的认证等等,后期还可以进一步的去维护

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值