第十四周开发记录:利用本地端作为server,实现网页端联机功能

一、本周工作总述

1.编写了网页端,并实现了网页联机功能
2.玩家可以查看历史记录

二、运行截图

server端具有本地游玩模式和网页联机模式服务端的双重功能,游戏开始前需在其上填写玩家人数和轮数。
在这里插入图片描述

从网页运行端填写游玩数字

在这里插入图片描述
刷新后,服务端显示每轮结果
在这里插入图片描述
若玩家还未填写新一轮,则提示还未准备好
在这里插入图片描述
轮数结束后,显示最终结果
在这里插入图片描述

三、代码

1.服务端代码

1.1 连接数据库
void Widget::connectDB()
{
    m_db = QSqlDatabase::addDatabase("QMYSQL");
      m_db.setHostName("localhost");
      m_db.setDatabaseName("test");
      m_db.setUserName("root");
      m_db.setPassword("123456");
      m_db.open();

}
1.2服务端数据处理
bool Widget::on_databasemode2_clicked()
{

    QSqlQuery query(m_db);
    query.exec("select * from gold_point ORDER BY user_id asc;");
    QList<int> strinput[2];
    QStringList nameinput[2];
    int temp=ui->timesLable->text().toInt()+1;
    ui->timesLable->setText(QString::number(temp,10));//设置游戏轮数
    qDebug()<<"temp is "<<temp;
    ui->inputEdit->clear();

    ui->numgameLable_2->setText(QString(temp));
    int mark1=0;
    while(query.next())
    {

        // qDebug()<<query.value(1);
         //qDebug()<<query.value(2);
        // qDebug()<<query.value(3);
        strinput[0]<< query.value(2).toInt();
        strinput[1]<< query.value(3).toInt();
        if(strinput[1][mark1]==1){
        nameinput[1]<< query.value(1).toStringList();}
        mark1++;
    }
    qDebug()<<"nameinput is "<<nameinput[1];
     qDebug()<<"valueinput is "<<strinput[0];
      qDebug()<<"roundinput is "<<strinput[1];
     int a = strinput[0][0];
   /* for(int j=0,k=0;j<playerNum||(k<(times*playerNum));k++)
    {
        if(strinput[1][k]==temp-1){
            nameinput[0][j]=QString(playerNum);
            j++;
            qDebug()<<"namenumber is "<<nameinput[0][j];
        }

    }*/
   // ui->stackedWidget->setCurrentIndex(4);

    int i=0,m,mark=0;
    double t,goldenpoint=0;
    qDebug()<<"playnum is "<<playerNum;
    while (i<playerNum&&(mark<playerNum*times))
    {
        qDebug()<<"strinput is"<<strinput[1]<<"temp is "<<temp;
        if(strinput[1][mark]==temp){
           a=strinput[0][mark];
           num[i]=double(a);
           goldenpoint=goldenpoint+num[i];
           qDebug()<<"num1 is "<<num[i];
           i=i+1;
          }
        mark++;
    }
    qDebug()<<"num is "<<num[0]<<" "<<num[1];
    goldenpoint=goldenpoint*0.618/playerNum;//计算黄金点
    qDebug()<<goldenpoint;
    ui->goldenpointLabel_2->setText(QString::number(goldenpoint,'g',5));//显示黄金点值
    for(int j=1;j<=playerNum;j++)
    {
        num[j-1]=qAbs(num[j-1]-goldenpoint);
        defaultPlayer[j-1]=j;
        qDebug()<<num[j-1];
        qDebug()<<defaultPlayer[j-1];
    }
    for(int j=1;j<=playerNum;j++)
    {

        qDebug()<<num[j-1];

    }

   // std::sort(num[0], num[playerNum-2]);
    for(int j=0;j<playerNum-1;j++)
     {
      for(int k=0;k<playerNum-j-1;k++)
       {
        if(num[k]>num[k+1])         //小到大排序。
        {
         t=num[k];
         num[k]=num[k+1];
         num[k+1]=t;
         m=defaultPlayer[k];
         defaultPlayer[k]=defaultPlayer[k+1];
         defaultPlayer[k+1]=m;
        }
       }
     }

    //赋分
    qDebug()<<"------------";
    for(int j=1;j<=playerNum;j++)
    {
        qDebug()<<num[j-1];
        qDebug()<<defaultPlayer[j-1];
    }
    qDebug()<<defaultPlayer[0]-1;
    qDebug()<<defaultPlayer[playerNum-1]-1;
     score[defaultPlayer[0]-1]=score[defaultPlayer[0]-1]+playerNum;
     score[defaultPlayer[playerNum-1]-1]=score[defaultPlayer[playerNum-1]-1]-2;
     ui->textBrowser_3->clear();
    //显示排行榜
     //defaultPlayer[j]-1;
     strRank="";
     for(int j=0;j<playerNum;j++)
     {
         strRank=strRank+"第"+QString::number(j+1,10)+"位玩家"+nameinput[1][j]+"得分:"+QString::number(score[j],10);
         strRank=strRank+"\n";
     }
     ui->textBrowser_3->setText(strRank);//显示排行榜
     qDebug()<<"now temp and times is"<<temp<<" "<<times;
     if(temp==times)//游戏所有轮数完成,跳入结果页面
     {
         ui->timesLable->clear();
         ui->inputEdit->clear();
         ui->textBrowser->clear();
         ui->goldenpointLabel->clear();
         ui->stackedWidget->setCurrentIndex(2);
         ui->textBrowser_2->setText(strRank);
}
     /*else{
     int mark3=0,tmp4=0;
     while(1){
         tmp4=temp+1;
         QString tmp2=QString::number(tmp4);
         qDebug()<<tmp2;
         QString sql="select count(*) from gold_point where round="+tmp2+";";
         qDebug()<<sql;
         query.exec(sql);

         if(query.first()){
             mark3=query.value(0).toInt();
         }
         qDebug()<<"temp and mark3 is"<<temp+1<<" "<<mark3;
         if(mark3==playerNum){
             on_databasemode2_clicked();
             break;
         }
          Sleep(1000);
     }
    }*/
}

2.网页端代码

2.1 上传页面
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@page import="java.sql.*,java.io.*"%>
<html>
	<head>
		<title>黄金点</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	</head>
	<body>
	<%int i=1;%>
		<form id="add_form" name="add_form" action="upload.jsp">
			<br>
			您的名称:
			<input type="text" id="user_id" name="user_id" value="">
			<br>
			您的数值:
			<input type="text" id="user_value" name="user_value" value="">
          	<br>
          	轮数:
			<%out.print("<input type=textfield  id=\"round\" name=\"round\" value=");
             out.print("");
              out.print(">");%>
          	<br>
			<input type="submit" name="submit_btn" value="提交">
		</form>
		<input type="button" value="当前数据列表" onclick="javascrtpt:window.location.href='record_list.jsp'"/>
		</body>
</html>
2.2 游戏记录页面
<%--  --%><%@page contentType="text/html; charset=UTF-8"%>
<html>
	<head>
		<meta charset="utf-8" />
		<title>游戏记录</title>
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta content="width=device-width, initial-scale=1" name="viewport" />
		<meta content="" name="description" />
		<meta content="" name="author" />
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	</head>
	<body>
		<div style="margin:50px;border:2px solid pink;">
			<table class="table table-striped table-bordered table-hover datatable" id="record_list">
				<thead>
					<tr>
						<th class="table-checkbox"><input type="checkbox" class="group-checkable" data-set="#record_list .checkboxes" /></th>
						<th>序号</th>
						<th>玩家名称</th>
						<th>玩家的值</th>
						<th>上传时间</th>
					</tr>
				</thead>
			</table>
		</div>
	</body>
	<!-- END BODY -->
</html>
<link rel="stylesheet" type="text/css" href="dataTables.bootstrap.css" />
<link rel="stylesheet" type="text/css" href="bootstrap.min.css"/>

<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="jquery.uniform.min.js"></script>
<script type="text/javascript" src="jquery.dataTables.min.js"></script>

<script src="record_list.js" type="text/javascript"></script>

四、总结

本周利用网页实现了联机功能,并在原来的游戏客户端版本的基础上添加了新功能,迭代为服务端,基本上实现了游戏的联机游玩功能。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值