English 中文(简体)
A. 长期运行的全球时间
原标题:Long running global timer in php

在我的申请中,我有多个不是实时的“加梅”。 在每个游戏中,每个参与者都有一分。 在游戏过程中,参与者可能采取一些行动。

然而,如果在一定时间内(任何时间从1小时到1个月)不采取行动,那么双方将失去x点。

我认为,有一个全球“时代者”,这是由一项艰巨的工作所呼吁的。 在1小时之间,时间段将称为每个游戏条码<>点()。

在<代码>下点()功能之内 我将这样做:

deductPoints()
{
   timeSinceLastDeduction++;
   if(timeSinceLastDeduction >= frequencyOfDeduction)
   {
       deduct();
       timeSinceLastDeduction = 0;
   }
}

Is there a better way to accomplish this task?

最佳回答

如果你愿意储存更多的数据,我就建议这一设计。

相反,不要每次打上点(强视游戏的“状态”),而是储存各方所采取的一切行动。 顺便提一下:

 id | playerid | action   |         stamp
----+----------+----------+------------------------
  1 |        1 | e2 to e4 | 2011-10-27 04:00:00-04
  2 |        1 |          | 2011-10-27 04:30:00-04
  3 |        1 |          | 2011-10-27 06:00:00-04
  4 |        1 |          | 2011-10-27 07:45:00-04
  5 |        1 |          | 2011-10-27 08:00:00-04

等等。

e2至e4是指以行方式移动的支票,这是共同的开端行动之一。 你的游戏,我确实可以设计。 然而,“行动”是任择性的,你实际上只需要储存一项行动来计算惩罚。 (只要你当然有这样做的余地,也可以储存额外信息。)

“id”是本案的关键。 在Pogresql,DDL希望:

CREATE TABLE actions(
  id BIGSERIAL PRIMARY KEY,
  playerid int,
  action text,
  stamp timestamptz,
  UNIQUE(playerid, stamp));

理论(互动、研究)将是“真实”的主要关键。 “id”是代号钥匙。

看到时间序列的差异,使用窗口功能的代码相对简单。 (继续使用邮政局)

select playerid, time_between, id FROM
        (SELECT playerid,
                stamp - lag(stamp) OVER () as time_between,
                id FROM actions
                ORDER BY stamp)
                as ss
        WHERE playerid = 1
                AND time_between >  1 hour ;

样本产出,考虑到先前的测试数据:

 playerid | time_between | id
----------+--------------+----
        1 | 01:30:00     |  3
        1 | 01:45:00     |  4

你们根本就没有工作。 你们储存更多的数据(因此,“undo”行动更容易。 如果愿意,你们的参与者可以审查过去的行动。 如果计算惩罚措施效率不高,那么你总是能够把记分放在更高的水平上。

MySQL btw没有温饱功能。 但可在邮政总局、服务器和Oracle查阅。

EDIT:如果空间是令人关切的问题,那么你总是可以“垃圾收集”这一表格。 尽管如此,这还是有很多游戏。 每一行各占约48英特(假定“行动”无效)。 如果你有1,000名运动员,每家游戏200次,有40次行动,则只有大约384个数据元。

问题回答

当情况发生变化时,仅仅将目前的时段存放在数据库中,然后使用警棍在某些间隔期间进行检查,如果所需时间已经过去,则履行你的游戏职能。

基本上与你一样,但你需要在某些地方储存时间价值。 输入数据库或存档。





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签