IPB

Здравствуйте, гость ( Вход | Регистрация )

11 страниц V  « < 5 6 7 8 9 > »   
Reply to this topicStart new topic
> Free Heroes II, обсужение свободного движка
Эроласт
сообщение 31 Aug 2015, 17:23 (Сообщение отредактировал Эроласт - 31 Aug 2015, 17:25)
Сообщение #121

Зануда
Сообщений: 2 237
Спасибо сказали: 2894 раза




Цитата
Так не получилось все равно

А, тьфу, s на конце лишняя, надо было
Код
$ sudo apt-get install build-essential

Ну да хрен с ним, если и без него работает.

Цитата
Компьтер стал что-то долго делать. Десять минут писал какие то.

Это он генерировал объектные файлы: промежуточный продукт компиляции, из которых уже собирается готовый бинарник. В последствии, если ты изменишь код в одном файле, то компилятору достаточно будет перекомпилировать только его.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 01 Sep 2015, 08:01 (Сообщение отредактировал t800 - 01 Sep 2015, 08:41)
Сообщение #122

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Кнопка компании появилась! brags.gif brags.gif




Но когда я не нее нажимаю кнопка нажимается но ничего не происходит sad.gif




Что делать?


Сейчас у меня файл game_newgame.cpp выглядит вот так:


Код
/***************************************************************************
*   Copyright (C) 2009 by Andrey Afletdinov <fheroes2@gmail.com>          *
*                                                                         *
*   Part of the Free Heroes2 Engine:                                      *
*   http://sourceforge.net/projects/fheroes2                              *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
*   This program is distributed in the hope that it will be useful,       *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU General Public License for more details.                          *
*                                                                         *
*   You should have received a copy of the GNU General Public License     *
*   along with this program; if not, write to the                         *
*   Free Software Foundation, Inc.,                                       *
*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
***************************************************************************/

#include "gamedefs.h"
#include "agg.h"
#include "dialog.h"
#include "text.h"
#include "cursor.h"
#include "settings.h"
#include "button.h"
#include "pocketpc.h"
#include "world.h"
#include "game.h"

int Game::NewStandard(void)
{
    Settings & conf = Settings::Get();
    conf.SetGameType(Game::TYPE_STANDARD);
    conf.SetPreferablyCountPlayers(0);
    return Game::SELECTSCENARIO;
}

int Game::NewBattleOnly(void)
{
    Settings & conf = Settings::Get();
    conf.SetGameType(Game::TYPE_BATTLEONLY);

    return Game::NEWMULTI;
}

int Game::NewHotSeat(void)
{
    Settings & conf = Settings::Get();
    conf.SetGameType(conf.GameType() | Game::TYPE_HOTSEAT);

    if(conf.GameType(Game::TYPE_BATTLEONLY))
    {
    conf.SetPreferablyCountPlayers(2);
    world.NewMaps(10, 10);
    return StartBattleOnly();
    }
    else
    {
    const u32 select = conf.QVGA() ? 2 : SelectCountPlayers();
    if(select)
    {
        conf.SetPreferablyCountPlayers(select);
        return Game::SELECTSCENARIO;
    }
    }
    return Game::MAINMENU;
}

int Game::NewCampain(void)
{
    Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
    VERBOSE("New Campain Game: under construction.");
    return Game::NEWGAME;
}

#ifdef NETWORK_ENABLE
int Game::NewNetwork(void)
{
    Settings & conf = Settings::Get();
    conf.SetGameType(conf.GameType() | Game::TYPE_NETWORK);

    // cursor
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();
    //Settings & conf = Settings::Get();

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0);
    panel.Blit(top.x + 405, top.y + 5);

    LocalEvent & le = LocalEvent::Get();

    Button buttonHost(top.x + 455, top.y + 45, ICN::BTNNET, 0, 1);
    Button buttonGuest(top.x + 455, top.y + 110, ICN::BTNNET, 2, 3);
    Button buttonCancelGame(top.x + 455, top.y + 375, ICN::BTNMP, 8, 9);

    buttonHost.Draw();
    buttonGuest.Draw();
    buttonCancelGame.Draw();

    cursor.Show();
    display.Flip();

    // newgame loop
    while(le.HandleEvents())
    {
    le.MousePressLeft(buttonHost) ? buttonHost.PressDraw() : buttonHost.ReleaseDraw();
    le.MousePressLeft(buttonGuest) ? buttonGuest.PressDraw() : buttonGuest.ReleaseDraw();
    le.MousePressLeft(buttonCancelGame) ? buttonCancelGame.PressDraw() : buttonCancelGame.ReleaseDraw();

    //if(le.MouseClickLeft(buttonHost) || HotKeyPressEvent(EVENT_BUTTON_HOST)) return NetworkHost();
    //if(le.MouseClickLeft(buttonGuest) || HotKeyPressEvent(EVENT_BUTTON_GUEST)) return NetworkGuest();
    if(HotKeyPressEvent(EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancelGame)) return MAINMENU;

        // right info
    if(le.MousePressRight(buttonHost)) Dialog::Message(_("Host"), _("The host sets up the game options. There can only be one host per network game."), Font::BIG);
    if(le.MousePressRight(buttonGuest)) Dialog::Message(_("Guest"), _("The guest waits for the host to set up the game, then is automatically added in. There can be multiple guests for TCP/IP games."), Font::BIG);
    if(le.MousePressRight(buttonCancelGame)) Dialog::Message(_("Cancel"), _("Cancel back to the main menu."), Font::BIG);
    }

    return Game::MAINMENU;
}
#endif

int Game::NewGame(void)
{
    Mixer::Pause();
    AGG::PlayMusic(MUS::MAINMENU);
    Settings & conf = Settings::Get();

    // reset last save name
    Game::SetLastSavename("");

    if(conf.QVGA()) return PocketPC::NewGame();

    // cursor
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();
    display.Fill(ColorBlack);

    // load game settings
    conf.BinaryLoad();

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0);
    panel.Blit(top.x + 405, top.y + 5);

    LocalEvent & le = LocalEvent::Get();

    Button buttonStandartGame(top.x + 455, top.y + 45, ICN::BTNNEWGM, 0, 1);
    Button buttonMultiGame(top.x + 455, top.y + 110, ICN::BTNNEWGM, 4, 5);
    Button buttonSettings(top.x + 455, top.y + 240, ICN::BTNDCCFG, 4, 5);
    Button buttonCancelGame(top.x + 455, top.y + 375, ICN::BTNNEWGM, 6, 7);
    Button buttonBattleGame(top.x + 455, top.y + 175, ICN::BTNBATTLEONLY, 0, 1);


    Button buttonCampainGame(top.x + 455, top.y + 305, ICN::BTNNEWGM, 2, 3);
    //Button buttonMultiGame(top.x + 455, top.y + 175, ICN::BTNNEWGM, 4, 5);
    //Button buttonSettings(top.x + 455, top.y + 240, ICN::BTNDCCFG, 4, 5);
    //Button buttonCancelGame(top.x + 455, top.y + 375, ICN::BTNNEWGM, 6, 7);

    buttonStandartGame.Draw();
    buttonCampainGame.Draw();
    buttonMultiGame.Draw();
    buttonCancelGame.Draw();
    buttonSettings.Draw();

    if(conf.QVGA())
    buttonBattleGame.SetDisable(true);
    else
    buttonBattleGame.Draw();

    cursor.Show();
    display.Flip();

    // newgame loop
    while(le.HandleEvents())
    {
    le.MousePressLeft(buttonStandartGame) ? buttonStandartGame.PressDraw() : buttonStandartGame.ReleaseDraw();
    le.MousePressLeft(buttonCampainGame) ? buttonCampainGame.PressDraw() : buttonCampainGame.ReleaseDraw();
    le.MousePressLeft(buttonMultiGame) ? buttonMultiGame.PressDraw() : buttonMultiGame.ReleaseDraw();
    le.MousePressLeft(buttonCancelGame) ? buttonCancelGame.PressDraw() : buttonCancelGame.ReleaseDraw();
    le.MousePressLeft(buttonSettings) ? buttonSettings.PressDraw() : buttonSettings.ReleaseDraw();
    buttonBattleGame.isEnable() && le.MousePressLeft(buttonBattleGame) ? buttonBattleGame.PressDraw() : buttonBattleGame.ReleaseDraw();

    if(HotKeyPressEvent(EVENT_BUTTON_STANDARD) || le.MouseClickLeft(buttonStandartGame)) return NEWSTANDARD;
    if(HotKeyPressEvent(EVENT_BUTTON_CAMPAIN) || le.MouseClickLeft(buttonCampainGame)) return NEWCAMPAIN;
    if(HotKeyPressEvent(EVENT_BUTTON_MULTI) || le.MouseClickLeft(buttonMultiGame)) return NEWMULTI;
    if(HotKeyPressEvent(EVENT_BUTTON_SETTINGS) || le.MouseClickLeft(buttonSettings)){ Dialog::ExtSettings(false); cursor.Show(); display.Flip(); }
    if(HotKeyPressEvent(EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancelGame)) return MAINMENU;

    if(buttonBattleGame.isEnable())
    if(HotKeyPressEvent(EVENT_BUTTON_BATTLEONLY) || le.MouseClickLeft(buttonBattleGame)) return NEWBATTLEONLY;

        // right info
    if(le.MousePressRight(buttonStandartGame)) Dialog::Message(_("Standard Game"), _("A single player game playing out a single map."), Font::BIG);
    if(le.MousePressRight(buttonCampainGame)) Dialog::Message(_("Campaign Game"), _("A single player game playing through a series of maps."), Font::BIG);
    if(le.MousePressRight(buttonMultiGame)) Dialog::Message(_("Multi-Player Game"), _("A multi-player game, with several human players completing against each other on a single map."), Font::BIG);
    if(le.MousePressRight(buttonSettings)) Dialog::Message(_("Settings"), _("FHeroes2 game settings."), Font::BIG);
    if(le.MousePressRight(buttonCancelGame)) Dialog::Message(_("Cancel"), _("Cancel back to the main menu."), Font::BIG);
    }

    return QUITGAME;
}

int Game::NewMulti(void)
{
    Settings & conf = Settings::Get();

    if(! (conf.GameType(Game::TYPE_BATTLEONLY)))
    conf.SetGameType(Game::TYPE_STANDARD);

    if(conf.QVGA()) return PocketPC::NewMulti();

    // cursor
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0);
    panel.Blit(top.x + 405, top.y + 5);

    LocalEvent & le = LocalEvent::Get();

    Button buttonHotSeat(top.x + 455, top.y + 45, ICN::BTNMP, 0, 1);
    Button buttonNetwork(top.x + 455, top.y + 110, ICN::BTNMP, 2, 3);
    Button buttonCancelGame(top.x + 455, top.y + 375, ICN::BTNMP, 8, 9);

    buttonHotSeat.Draw();
    buttonCancelGame.Draw();
    buttonNetwork.SetDisable(true);

    cursor.Show();
    display.Flip();

    // newgame loop
    while(le.HandleEvents())
    {
    le.MousePressLeft(buttonHotSeat) ? buttonHotSeat.PressDraw() : buttonHotSeat.ReleaseDraw();
    le.MousePressLeft(buttonCancelGame) ? buttonCancelGame.PressDraw() : buttonCancelGame.ReleaseDraw();

    if(le.MouseClickLeft(buttonHotSeat) || HotKeyPressEvent(EVENT_BUTTON_HOTSEAT)) return NEWHOTSEAT;
    if(HotKeyPressEvent(EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancelGame)) return MAINMENU;

        // right info
    if(le.MousePressRight(buttonHotSeat)) Dialog::Message(_("Hot Seat"), _("Play a Hot Seat game, where 2 to 4 players play around the same computer, switching into the 'Hot Seat' when it is their turn."), Font::BIG);
    if(le.MousePressRight(buttonCancelGame)) Dialog::Message(_("Cancel"), _("Cancel back to the main menu."), Font::BIG);

#ifdef NETWORK_ENABLE
    if(buttonNetwork.isEnable())
    {
        le.MousePressLeft(buttonNetwork) ? buttonNetwork.PressDraw() : buttonNetwork.ReleaseDraw();
        if(le.MouseClickLeft(buttonNetwork) || HotKeyPressEvent(EVENT_BUTTON_NETWORK)) return NEWNETWORK;
        if(le.MousePressRight(buttonNetwork)) Dialog::Message(_("Network"), _("Play a network game, where 2 players use their own computers connected through a LAN (Local Area Network)."), Font::BIG);
    }
#endif
    }

    return QUITGAME;
}

u32 Game::SelectCountPlayers(void)
{
    // cursor
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    const Sprite &panel = AGG::GetICN(ICN::REDBACK, 0);
    panel.Blit(top.x + 405, top.y + 5);

    LocalEvent & le = LocalEvent::Get();

    Button button2Players(top.x + 455, top.y + 45, ICN::BTNHOTST, 0, 1);
    Button button3Players(top.x + 455, top.y + 110, ICN::BTNHOTST, 2, 3);
    Button button4Players(top.x + 455, top.y + 175, ICN::BTNHOTST, 4, 5);
    Button button5Players(top.x + 455, top.y + 240, ICN::BTNHOTST, 6, 7);
    Button button6Players(top.x + 455, top.y + 305, ICN::BTNHOTST, 8, 9);
    Button buttonCancel(top.x + 455, top.y + 375, ICN::BTNNEWGM, 6, 7);

    button2Players.Draw();
    button3Players.Draw();
    button4Players.Draw();
    button5Players.Draw();
    button6Players.Draw();
    buttonCancel.Draw();

    cursor.Show();
    display.Flip();

    // newgame loop
    while(le.HandleEvents())
    {
    le.MousePressLeft(button2Players) ? button2Players.PressDraw() : button2Players.ReleaseDraw();
    le.MousePressLeft(button3Players) ? button3Players.PressDraw() : button3Players.ReleaseDraw();
    le.MousePressLeft(button4Players) ? button4Players.PressDraw() : button4Players.ReleaseDraw();
    le.MousePressLeft(button5Players) ? button5Players.PressDraw() : button5Players.ReleaseDraw();
    le.MousePressLeft(button6Players) ? button6Players.PressDraw() : button6Players.ReleaseDraw();

    le.MousePressLeft(buttonCancel) ? buttonCancel.PressDraw() : buttonCancel.ReleaseDraw();

    if(le.MouseClickLeft(button2Players) || le.KeyPress(KEY_2)) return 2;
    if(le.MouseClickLeft(button3Players) || le.KeyPress(KEY_3)) return 3;
    if(le.MouseClickLeft(button4Players) || le.KeyPress(KEY_4)) return 4;
    if(le.MouseClickLeft(button5Players) || le.KeyPress(KEY_5)) return 5;
    if(le.MouseClickLeft(button6Players) || le.KeyPress(KEY_6)) return 6;

    if(HotKeyPressEvent(Game::EVENT_DEFAULT_EXIT) || le.MouseClickLeft(buttonCancel)) return 0;

        // right info
    if(le.MousePressRight(button2Players)) Dialog::Message(_("2 Players"), _("Play with 2 human players, and optionally, up, to 4 additional computer players."), Font::BIG);
    if(le.MousePressRight(button3Players)) Dialog::Message(_("3 Players"), _("Play with 3 human players, and optionally, up, to 3 additional computer players."), Font::BIG);
    if(le.MousePressRight(button4Players)) Dialog::Message(_("4 Players"), _("Play with 4 human players, and optionally, up, to 2 additional computer players."), Font::BIG);
    if(le.MousePressRight(button5Players)) Dialog::Message(_("5 Players"), _("Play with 5 human players, and optionally, up, to 1 additional computer players."), Font::BIG);
    if(le.MousePressRight(button6Players)) Dialog::Message(_("6 Players"), _("Play with 6 human players."), Font::BIG);
    if(le.MousePressRight(buttonCancel)) Dialog::Message(_("Cancel"), _("Cancel back to the main menu."), Font::BIG);
    }

    return 0;
}


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Orzie
сообщение 01 Sep 2015, 08:48 (Сообщение отредактировал Orzie - 01 Sep 2015, 08:49)
Сообщение #123

Immortal
Сообщений: 7 870
Спасибо сказали: 16066 раз




Она и не должна работать, лол. Я же предупреждал. Ты всего лишь вернул картинку в игру, но скорее всего, кода, который заставит её работать, в фрихероес в принципе нет.

Пиши автору, ищи его емейл на сайте проекта. Я сейчас в другом городе и не могу посмотреть свою переписку с ним.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 01 Sep 2015, 09:20 (Сообщение отредактировал t800 - 01 Sep 2015, 09:23)
Сообщение #124

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(Orzie @ 01 Sep 2015, 09:48) *
Пиши автору, ищи его емейл на сайте проекта. Я сейчас в другом городе и не могу посмотреть свою переписку с ним.


Я писал на fheroes2@gmail.com неделю назад еще никто не ответил.

Цитата(Orzie @ 01 Sep 2015, 09:48) *
Она и не должна работать, лол. Я же предупреждал. Ты всего лишь вернул картинку в игру, но скорее всего, кода, который заставит её работать, в фрихероес в принципе нет.


Я нарисовал карты по сценарию. Хочу сделать чтобы когда нажимаю кнопку компания сразу запускалась игра на первой карте, а картинки потом сделаю, вначале пусть сразу играет и чтобы когда игра закончится сразу игра на следующей карте шла. А автор на письмо не отвечает sad.gif


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 01 Sep 2015, 09:45 (Сообщение отредактировал Эроласт - 01 Sep 2015, 09:48)
Сообщение #125

Зануда
Сообщений: 2 237
Спасибо сказали: 2894 раза




Цитата
Хочу сделать чтобы когда нажимаю кнопку компания сразу запускалась игра на первой карте

Изучай С++, реализуй, в чем проблемы-то? Компилировать вон уже научился)


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 01 Sep 2015, 09:55 (Сообщение отредактировал t800 - 01 Sep 2015, 09:56)
Сообщение #126

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(Эроласт @ 01 Sep 2015, 10:45) *
Цитата
Хочу сделать чтобы когда нажимаю кнопку компания сразу запускалась игра на первой карте

Изучай С++, реализуй, в чем проблемы-то? Компилировать вон уже научился)


А вы скажите какие команды надо написать чтобы когда кнопку компании нажимаешь игра на моей карте запускалась и я их выучу.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 01 Sep 2015, 10:24 (Сообщение отредактировал Эроласт - 01 Sep 2015, 10:25)
Сообщение #127

Зануда
Сообщений: 2 237
Спасибо сказали: 2894 раза




Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 01 Sep 2015, 11:18 (Сообщение отредактировал t800 - 01 Sep 2015, 11:18)
Сообщение #128

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(Эроласт @ 01 Sep 2015, 10:24) *
Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка.


Вставлять в файл game_newgame.cpp он же новую игру запускает потому что называется newgame.

Там про команию есть такие команды

Код
int Game::NewCampain(void)
{
    Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
    VERBOSE("New Campain Game: under construction.");
    return Game::NEWGAME;
}


Я просмотрел это значит что программа говорит "Новая компания: в стадии строительства"
А надо чтобы не говорила "Новая компания: в стадии строительства" а просто запустила игру на моей карте.
Ей надо вместо команды VERBOSE("New Campain Game: under construction."); дать команду
сразу запустить новую игру на моей карте, просто я не знаю какой командой.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 01 Sep 2015, 11:26
Сообщение #129

Зануда
Сообщений: 2 237
Спасибо сказали: 2894 раза




Цитата
надо чтобы не говорила "Новая компания: в стадии строительства" а просто запустила игру на моей карте.

Посмотри, как это реализовано в функции Game::NewStandard.

Но толку? Это будет обычный сценарий, без возможности начала следующего в кампании с переходом героя.
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 01 Sep 2015, 11:35 (Сообщение отредактировал t800 - 01 Sep 2015, 11:37)
Сообщение #130

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(Эроласт @ 01 Sep 2015, 11:26) *
Цитата
надо чтобы не говорила "Новая компания: в стадии строительства" а просто запустила игру на моей карте.

Посмотри, как это реализовано в функции Game::NewStandard.

Но толку? Это будет обычный сценарий, без возможности начала следующего в кампании с переходом героя.


Герой же все равно сразу на карте прописан. Можно сделать чтобы после окончания первой игры сразу запускалась игра на второй карте. Правда с рейтингом не понятно что будет. Но это потом можно сделать когда картинки вставлять буду.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 01 Sep 2015, 15:03 (Сообщение отредактировал t800 - 01 Sep 2015, 15:07)
Сообщение #131

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Я сейчас хочу сделать так. Нажимаешь кнопку Компания. Сразу запускается игра с карты номер 1. Без выбора и без ничего. Просто Герой сразу на карте оказывается. Если игрок первую игру выигрывает то открывается игра на карте номер 2 и так далее. Должна же быть какая то команда чтобы запустила игру на карте. И чтобы если игрок игру на моей карте закончил сразу запустила игру на второй карте.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 01 Sep 2015, 17:02 (Сообщение отредактировал Эроласт - 01 Sep 2015, 17:09)
Сообщение #132

Зануда
Сообщений: 2 237
Спасибо сказали: 2894 раза




Цитата
Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка.

Причем, куда вставлять - это не просто файл, это еще и функция и порядок в функции.

Херней страдаешь, в общем. То, что ты пытаешься делать, называется программированием, а программировать ты не умеешь. Сперва научись.
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 01 Sep 2015, 18:08
Сообщение #133

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(Эроласт @ 01 Sep 2015, 17:02) *
Цитата
Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка.

Причем, куда вставлять - это не просто файл, это еще и функция и порядок в функции.

Херней страдаешь, в общем. То, что ты пытаешься делать, называется программированием, а программировать ты не умеешь. Сперва научись.


Но вы ведь умеете. Подскажите куда что вставлять. Я посмотрю и попробую научится.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
SaintDark
сообщение 01 Sep 2015, 18:16 (Сообщение отредактировал SaintDark - 01 Sep 2015, 18:16)
Сообщение #134

Working hard
Сообщений: 455
Спасибо сказали: 558 раз




Цитата(t800 @ 02 Sep 2015, 01:08) *
Но вы ведь умеете. Подскажите куда что вставлять. Я посмотрю и попробую научится.


Ты сейчас предложил сделать дело за тебя. Тебе уже написали, что стоит начать с изучения языка программирования (но имхо, с с++ начинать ой как не стоит, все желание отпадет). Практика, и еще раз практика. Как разберешься в основах, можешь копать глубже. В итоге придешь к желаемому результату. Есть то, что дается не так просто, как хотелось бы.


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 01 Sep 2015, 18:44
Сообщение #135

Зануда
Сообщений: 2 237
Спасибо сказали: 2894 раза




Цитата
Но вы ведь умеете. Подскажите куда что вставлять. Я посмотрю и попробую научится.

Умею. Но
Цитата
Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка.


То есть, ты не понял, что такое программирование в принципе. Это не все равно, что скопировать в терминал убунты несколько команд из гугла. Программный код - это сложная система, где все взаимосвязано. Нельзя просто так взять и приписать к существующему коду новый функционал; это все равно, что ты сейчас притащишь партитуру симфонии и спросишь, какие ноты надо вставить, чтобы звучало повеселей.

Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 12 Sep 2015, 12:34 (Сообщение отредактировал t800 - 12 Sep 2015, 12:48)
Сообщение #136

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Немного разобрался в командах и как их изменять! brags.gif brags.gif brags.gif

Первое! Чтобы легко было менять команды это надо делать не через блокнотик.
А через редактор Anjuta потому что у него подсказки! brags.gif brags.gif brags.gif

Чтобы этот редактор поставить надо дать такую команду

Код
danya@danya:~$sudo apt-get install anjuta


И в этом реадакторе надо открыть MakeFile в папочке fheroes2 и редактор сразу увидит все исходые файлы и если файл открыть
редактор сам делает подсказки.

Я отрыл файл game_newgame.cpp и там где была команда int Game::NewCampain(void)
и вместо них написал такие команды которые я скопировал из файла game_loadgame.cpp
там эти команды загружают сохраненные игры.

Код
int Game::NewCampain(void)
{
  // Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
  // VERBOSE("New Campain Game: under construction.");
  // return Game::NEWCAMPAIN;
  
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();
    display.Fill(ColorBlack);

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    cursor.Show();
    display.Flip();

    //std::string file = Dialog::SelectFileLoad();
    std::string file = Dialog::SelectFileCampainLoad();
    if(file.empty() || !Game::Load(file)) return MAINMENU;
    return STARTGAME;

}


Но только вместо команды Dialog::SelectFileLoad(); я написал Dialog::SelectFileCampainLoad();
И попробовал собрать игру. Это можно делать прямое в редакторе. Просто нажать Собрать Проект!
Но редактор собрать игру не смог а заругался что команда SelectFileCampainLoad() не описана в каком то
Dialog тогда я решил посмотреть где записана команда SelectFileLoad()

Для этого я дал такую команду

Код
danya@danya:~$ grep -rl 'SelectFileLoad' fheroes2-code-3277-trunk/fheroes2/src/
fheroes2-code-3277-trunk/fheroes2/src/fheroes2/game/game_loadgame.cpp
fheroes2-code-3277-trunk/fheroes2/src/fheroes2/game/game_newgame.cpp
fheroes2-code-3277-trunk/fheroes2/src/fheroes2/dialog/dialog.h
fheroes2-code-3277-trunk/fheroes2/src/fheroes2/dialog/dialog_selectfile.cpp


Потом открыл в редакторе dialog.h и dialog_selectfile.cpp
Нашел там команды SelectFileLoad

Код
std::string Dialog::SelectFileLoad(void)
{
    const std::string & lastfile = Game::GetLastSavename();
    return SelectFileListSimple(_("File to Load:"), (lastfile.size() ? lastfile : ""), false);
}


прото скопировал их и изменил FileLoad на FileCampainLoad

Код
std::string Dialog::SelectFileLoad(void)
{
    const std::string & lastfile = Game::GetLastSavename();
    return SelectFileListSimple(_("File to Load:"), (lastfile.size() ? lastfile : ""), false);
}


И еще я поменял надпись File to Load на Campain to Play
Код
std::string Dialog::SelectFileCampainLoad(void)
{
    const std::string & lastfile = Game::GetLastSavename();
    return SelectFileListSimple(_("Campain to Play:"), (lastfile.size() ? lastfile : ""), false);
}


И все получилось! Редактор перестал ругаться и собрал игру! brags.gif brags.gif brags.gif

И сейчас когда нажимаешь кнопку компании. Отображаются игры компании.
И можно запустить игры Компании T-800 brags.gif brags.gif brags.gif



Правда не могу понять что надо как сделать чтобы после окончания первого эпизода сразу запускался следующий
и чтобы нельзя было запустить до того как сыграл предыдущий потому что сейчас они все запускаются sad.gif


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Orzie
сообщение 12 Sep 2015, 19:02
Сообщение #137

Immortal
Сообщений: 7 870
Спасибо сказали: 16066 раз




Рад, что ты быстро учишься. Но слово Campaign пиши правильно, заклинаю тебя.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 12 Sep 2015, 21:06 (Сообщение отредактировал Эроласт - 12 Sep 2015, 21:13)
Сообщение #138

Зануда
Сообщений: 2 237
Спасибо сказали: 2894 раза




Цитата
Чтобы легко было менять команды это надо делать не через блокнотик. А через редактор Anjuta потому что у него подсказки!

Ну да. Это называется IDE, то есть, Integrated Development Environment. Anjuta не единственна в своем роде, существуют и другие подобные. Советую как-нибудь погуглить "linux c++ IDE" и поизучать варианты.

Цитата
после окончания первого эпизода сразу запускался следующий

Можно в файле `src\fheroes2\game\game_over.cpp` в функции GameOver::Result::LocalCheckGameOver поменять 338-339 строки на
Код
GameOver::DialogWins(result);

if (Settings::Get().GameType(Game::TYPE_CAMPAIGN))
{
    res = GAME::NEWCAMPAIN;
}
else
{
    res = Game::HIGHSCORES;
}

Тогда при завершении сценария будет сразу открываться меню выбора кампании.

Большего не подскажу: для этого надо весь код проекта изучать, а он большой и грязный.

Цитата
слово Campaign пиши правильно, заклинаю тебя

Аха. И, пожалуйста, "код", а не "команды". Команды - это в терминале.

---

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


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 13 Sep 2015, 07:18 (Сообщение отредактировал t800 - 13 Sep 2015, 07:22)
Сообщение #139

Разработчик
Сообщений: 534
Спасибо сказали: 222 раза




Цитата(Эроласт @ 12 Sep 2015, 22:06) *
Можно в файле `src\fheroes2\game\game_over.cpp` в функции GameOver::Result::LocalCheckGameOver поменять 338-339 строки на
Код
GameOver::DialogWins(result);

if (Settings::Get().GameType(Game::TYPE_CAMPAIGN))
{
    res = GAME::NEWCAMPAIN;
}
else
{
    res = Game::HIGHSCORES;
}

Тогда при завершении сценария будет сразу открываться меню выбора кампании.


Попробовал в game_over.cpp сделать как вы сказали. Не открывается меню выбора камании. no.gif no.gif

Выдает рейтинг а потом в главное меню.

Я Потом даже на всякий случай в game_newgame.cpp палочки перед кодом команды

//Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);

убрал я и вот так сделал

Код
int Game::NewCampain(void)
{
   Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);
  // VERBOSE("New Campain Game: under construction.");
  // return Game::NEWCAMPAIN;
  
    Cursor & cursor = Cursor::Get();
    cursor.Hide();
    cursor.SetThemes(cursor.POINTER);

    Display & display = Display::Get();
    display.Fill(ColorBlack);

    // image background
    const Sprite &back = AGG::GetICN(ICN::HEROES, 0);
    const Point top((display.w() - back.w()) / 2, (display.h() - back.h()) / 2);
    back.Blit(top);

    cursor.Show();
    display.Flip();

    //std::string file = Dialog::SelectFileLoad();
    std::string file = Dialog::SelectFileCampainLoad();
    if(file.empty() || !Game::Load(file)) return MAINMENU;
    return STARTGAME;

}


И все равно выдает рейтинг а потом в главное меню. dunno.gif



--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 13 Sep 2015, 09:18 (Сообщение отредактировал Эроласт - 13 Sep 2015, 09:18)
Сообщение #140

Зануда
Сообщений: 2 237
Спасибо сказали: 2894 раза




Цитата
в game_newgame.cpp палочки перед кодом команды

//Settings::Get().SetGameType(Game::TYPE_CAMPAIGN);

убрал

А, ну да, так и надо. Зачем ты их вообще туда ставил?)

Цитата
И все равно выдает рейтинг а потом в главное меню.

Тогда хз. По логике должно было заработать.
Цитата
для этого надо весь код проекта изучать, а он большой и грязный
Go to the top of the pageAdd Nick
 
+Quote Post

11 страниц V  « < 5 6 7 8 9 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 3 August 2025 - 12:32
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика