Математики, физики, звездочёты, ясновидящие, помогите

Discussion in 'Болталка' started by Ponchik, 8 Dec 2010.

  1. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    У мя тут важный вопрос по поводу вселенной...
    Пишу гаму, и делаю систему левлов
    exp = кол-во минут в игре
    level = какой у игрока левл
    Для того чтоб получить новый левл, нужно... Эмм... В общем слушайте, перечитывайте 3 раза, но я хз как вам это объяснить, вот например таблицу такую напишу

    левл - необходимое кол-во часов для получения левла
    эээ.... ща... эммм....
    *пол часа спустя*
    0 - 0
    1 - 2
    2 - эээ... не, ща... эээ...
    *ещё пол часа спустя*
    в общем
    для 1го левла надо играть 2 часа
    для 2го левла надо играть ЕЩЁ 4 часа (не всего 4, а ещё 4)
    для 3го левла надо играть ещё 6 часов
    для 4го левла надо играть ещё 8 часов
    для 5го левла надо играть ещё 10 часов
    для 6го левла надо играть ещё 12 часов
    В общем всегда +2
    Вот нужна формула... Ато что я сделал, выдаёт левл каждые 2 часа
    exp - кол-во минут, скоко гамал игрок (а оно в формуле и не надо получаецо)
    level - его текущий левл
    сколько нужно exp для седующего левла - мозг has gone away during query
    P.S> моё оно вот need_exp_to_level_up = level*60+120;
     
    #1 Ponchik, 8 Dec 2010
    Last edited: 8 Dec 2010
  2. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,697
    Likes Received:
    3,139
    Reputations:
    236
    цикл же.

    пишется печенька геймеру, или в данные его на сервере.
    по интервалу в 1 час - данные обновляются.

    на сервере - проще.
    демон crond всё сделает, bash script. не сложнее, чем написать новый левел игры.
     
  3. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    altblitz, да чего ты... мне надо знать need_exp_to_level_up в которой хранится кол-во минут необходимое для следующего уровня
     
  4. satana666

    satana666 Member

    Joined:
    10 Apr 2009
    Messages:
    0
    Likes Received:
    24
    Reputations:
    6
    Если я тебя правильно понял, то "need_exp_to_level_up = level*60+120;" верно.
     
  5. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    ты под героином?

    зы я думаю тебе поможет одна глобальная переменная которая хранит обшее время игры.
     
    #5 sn0w, 8 Dec 2010
    Last edited: 8 Dec 2010
  6. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    satana666, вот ща как у мя, каждые 2 часа левл даётся, а мне не так надо
    sn0w, я лёгкии/лёхкие/лёгкие (этот русский язык фиг поймёшь) наркотики не юзаю
     
  7. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,697
    Likes Received:
    3,139
    Reputations:
    236
    Ponchik,
    стараемся, как проще.
    crond - исполняется раз в час, сутки, месяц.

    к тому, чтобы данные о посещении юзером сайта - хранить на сайте.
    в данных пользователя - next_level_up,
    сравнивается - текущее время и время последнего посещения, которое обновляется при логине юзера.

    if разница => 2 часа
    поле в базе данных пользователя level = level++

    ------ edit ------
    во-первых, отключатся от сервера и тут же заходить по-новой - не сработает.
    менять время на локальном компе - тоже. сервер точно хранит время.
     
    #7 altblitz, 8 Dec 2010
    Last edited: 8 Dec 2010
  8. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    [​IMG]
    altblitz, гама не браузерка, на серваке всё со временем нормально, +1 exp каждую минуту, а вот теперь надо подсчитать какой левл давать игроку
    А именно скоко опыта надо всего для следующего уровня
     
  9. Scripter

    Scripter Member

    Joined:
    3 Sep 2008
    Messages:
    141
    Likes Received:
    95
    Reputations:
    6
    need_exp_to_level_up = (level+1)*2*60;

    для первого уровня покажет 120
    для второго уровня покажет 240
    и тд

    это в минутах конечно
     
  10. Scripter

    Scripter Member

    Joined:
    3 Sep 2008
    Messages:
    141
    Likes Received:
    95
    Reputations:
    6
    need_exp_to_level_up = ((level+1)*2 + level*2)*60;

    а это сколько опыта всего надо....

    получается для первого уровня всего надо - 120
    для второго - 360 и тд
     
  11. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    во, на любимом пыхе смогу вам показать как надо
    PHP:
    $next_level 0;
    $summ 0;

    for(
    $i=0;$i<=20;$i++) {
        echo 
    "Для $i левла надо играть ещё $next_level часов, всего $summ часов\r\n";
        
    $next_level += 2;
        
    $summ += $next_level;
    }
    И фот нужна формула, в которую передать левел, и она вернёт кол-во часов, которых нужно всего для игры, эээ.. ну вы поняли
    Scripter, попробуемс
    не, не так твоё работает
     
    #11 Ponchik, 8 Dec 2010
    Last edited: 8 Dec 2010
  12. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,697
    Likes Received:
    3,139
    Reputations:
    236
    Scripter, ай лол'д ))
    и как эта команда будет исполняться ?

    [​IMG]
     
  13. Scripter

    Scripter Member

    Joined:
    3 Sep 2008
    Messages:
    141
    Likes Received:
    95
    Reputations:
    6
    ошибся, вот так:

    int total = 0;
    int level = 17;
    for (int x = 0; x <= level; x++)
    {
    total = total + x*2;
    }
     
    #13 Scripter, 8 Dec 2010
    Last edited: 8 Dec 2010
  14. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    И победитель Scripter за формулу ((level-1)*level)+(level*2)
     
  15. Renji

    Renji Member

    Joined:
    5 Dec 2010
    Messages:
    24
    Likes Received:
    5
    Reputations:
    0
    Может добавление массива, проиндексированного int значением level, наполненного соответствующими данными необходимого времени игры (полного, без ЕЩЁ). Так можно регулировать баланс игры. Высчитывать оставшееся время - очень просто.

    ptivate int[] lTimes = new int[666];

    lTimes[2] = 2; // 2 level = 2 hours
    lTimes[3] = 6; // 3 level = 6 hours
    lTimes[4] = 12; // 4 level = 12 hours

    private int level_of_player = 2; // Текущий уровень игрока
    private int currentHour = 3; // Текщее игровое время, абстрактно представим

    public int ToNextLevelTimes()
    {
    int aTime = lTimes[(level_of_player + 1)]; // Всего времени до следующего уровня, получаем значение массива по индексу (уровень игрока + 1)
    int bTime = currentHour - aTime // Вауля! Текущее игровое время - всего времени до следующего уровня!
    return bTime
    }
     
  16. Scripter

    Scripter Member

    Joined:
    3 Sep 2008
    Messages:
    141
    Likes Received:
    95
    Reputations:
    6
    Renji: херня какая то
     
  17. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    Code:
    
    typedef struct _PLAYER
    {
    	int	nLevel;
    	int nRemainedTime;	
    	// ...
    }PLAYER, *PPLAYER;
    
    // Primary callback
    void GameEventCallback(IN PPLAYER pcurrplayer, EVENT event)
    {
    	if(event == EVENT_TIME_TICK) // каждую минуту например
    	{
    		pcurrplayer->nRemainedTime--;
    
    		if(pcurrplayer->nRemainedTime <= 0)
    		{
    			pcurrplayer->nLevel++;
    			pcurrplayer->nRemainedTime = 120;
    		}
    	}
    	else if(event == EVENT_PLAYER_JOINED)
    	{
    	// ...
    	}
    	else
    	{
    	// ...
    	}
    }
    
    // Player API
    // ...
    int GetPlayerLevelRemain(PPLAYER ppl)
    {
    	return ppl->nRemainedTime;
    }
    
    int GetPlayerLevel(PPLAYER ppl)
    {
    	return ppl->nLevel;
    }
    // ...
    
    кажется я за тебя игру написал :D :D
    и даже не знаю, красивше ли будет если оформить классом?
     
    #17 sn0w, 8 Dec 2010
    Last edited: 8 Dec 2010
  18. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    нихера себе как вы арифметическую прогрессию складываете