![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#121
|
|
![]() Зануда Сообщений: 2 237 Спасибо сказали: 2894 раза ![]() |
Цитата Так не получилось все равно А, тьфу, s на конце лишняя, надо было Код $ sudo apt-get install build-essential Ну да хрен с ним, если и без него работает. Цитата Компьтер стал что-то долго делать. Десять минут писал какие то. Это он генерировал объектные файлы: промежуточный продукт компиляции, из которых уже собирается готовый бинарник. В последствии, если ты изменишь код в одном файле, то компилятору достаточно будет перекомпилировать только его. |
|
|
![]()
Сообщение
#122
|
|
![]() Разработчик Сообщений: 534 Спасибо сказали: 222 раза ![]() |
Кнопка компании появилась!
![]() ![]() ![]() Но когда я не нее нажимаю кнопка нажимается но ничего не происходит ![]() ![]() Что делать? Сейчас у меня файл 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; } -------------------- |
|
|
![]()
Сообщение
#123
|
|
![]() Immortal Сообщений: 7 870 Спасибо сказали: 16066 раз ![]() |
Она и не должна работать, лол. Я же предупреждал. Ты всего лишь вернул картинку в игру, но скорее всего, кода, который заставит её работать, в фрихероес в принципе нет.
Пиши автору, ищи его емейл на сайте проекта. Я сейчас в другом городе и не могу посмотреть свою переписку с ним. |
|
|
![]()
Сообщение
#124
|
|
![]() Разработчик Сообщений: 534 Спасибо сказали: 222 раза ![]() |
Пиши автору, ищи его емейл на сайте проекта. Я сейчас в другом городе и не могу посмотреть свою переписку с ним. Я писал на fheroes2@gmail.com неделю назад еще никто не ответил. Она и не должна работать, лол. Я же предупреждал. Ты всего лишь вернул картинку в игру, но скорее всего, кода, который заставит её работать, в фрихероес в принципе нет. Я нарисовал карты по сценарию. Хочу сделать чтобы когда нажимаю кнопку компания сразу запускалась игра на первой карте, а картинки потом сделаю, вначале пусть сразу играет и чтобы когда игра закончится сразу игра на следующей карте шла. А автор на письмо не отвечает ![]() -------------------- |
|
|
![]()
Сообщение
#125
|
|
![]() Зануда Сообщений: 2 237 Спасибо сказали: 2894 раза ![]() |
Цитата Хочу сделать чтобы когда нажимаю кнопку компания сразу запускалась игра на первой карте Изучай С++, реализуй, в чем проблемы-то? Компилировать вон уже научился) |
|
|
![]()
Сообщение
#126
|
|
![]() Разработчик Сообщений: 534 Спасибо сказали: 222 раза ![]() |
Цитата Хочу сделать чтобы когда нажимаю кнопку компания сразу запускалась игра на первой карте Изучай С++, реализуй, в чем проблемы-то? Компилировать вон уже научился) А вы скажите какие команды надо написать чтобы когда кнопку компании нажимаешь игра на моей карте запускалась и я их выучу. -------------------- |
|
|
![]()
Сообщение
#127
|
|
![]() Зануда Сообщений: 2 237 Спасибо сказали: 2894 раза ![]() |
Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка.
|
|
|
![]()
Сообщение
#128
|
|
![]() Разработчик Сообщений: 534 Спасибо сказали: 222 раза ![]() |
Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка. Вставлять в файл 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."); дать команду сразу запустить новую игру на моей карте, просто я не знаю какой командой. -------------------- |
|
|
![]()
Сообщение
#129
|
|
![]() Зануда Сообщений: 2 237 Спасибо сказали: 2894 раза ![]() |
Цитата надо чтобы не говорила "Новая компания: в стадии строительства" а просто запустила игру на моей карте. Посмотри, как это реализовано в функции Game::NewStandard. Но толку? Это будет обычный сценарий, без возможности начала следующего в кампании с переходом героя. |
|
|
![]()
Сообщение
#130
|
|
![]() Разработчик Сообщений: 534 Спасибо сказали: 222 раза ![]() |
Цитата надо чтобы не говорила "Новая компания: в стадии строительства" а просто запустила игру на моей карте. Посмотри, как это реализовано в функции Game::NewStandard. Но толку? Это будет обычный сценарий, без возможности начала следующего в кампании с переходом героя. Герой же все равно сразу на карте прописан. Можно сделать чтобы после окончания первой игры сразу запускалась игра на второй карте. Правда с рейтингом не понятно что будет. Но это потом можно сделать когда картинки вставлять буду. -------------------- |
|
|
![]()
Сообщение
#131
|
|
![]() Разработчик Сообщений: 534 Спасибо сказали: 222 раза ![]() |
Я сейчас хочу сделать так. Нажимаешь кнопку Компания. Сразу запускается игра с карты номер 1. Без выбора и без ничего. Просто Герой сразу на карте оказывается. Если игрок первую игру выигрывает то открывается игра на карте номер 2 и так далее. Должна же быть какая то команда чтобы запустила игру на карте. И чтобы если игрок игру на моей карте закончил сразу запустила игру на второй карте.
-------------------- |
|
|
![]()
Сообщение
#132
|
|
![]() Зануда Сообщений: 2 237 Спасибо сказали: 2894 раза ![]() |
Цитата Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка. Причем, куда вставлять - это не просто файл, это еще и функция и порядок в функции. Херней страдаешь, в общем. То, что ты пытаешься делать, называется программированием, а программировать ты не умеешь. Сперва научись. |
|
|
![]()
Сообщение
#133
|
|
![]() Разработчик Сообщений: 534 Спасибо сказали: 222 раза ![]() |
Цитата Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка. Причем, куда вставлять - это не просто файл, это еще и функция и порядок в функции. Херней страдаешь, в общем. То, что ты пытаешься делать, называется программированием, а программировать ты не умеешь. Сперва научись. Но вы ведь умеете. Подскажите куда что вставлять. Я посмотрю и попробую научится. -------------------- |
|
|
![]()
Сообщение
#134
|
|
![]() Working hard Сообщений: 455 Спасибо сказали: 558 раз ![]() |
Но вы ведь умеете. Подскажите куда что вставлять. Я посмотрю и попробую научится. Ты сейчас предложил сделать дело за тебя. Тебе уже написали, что стоит начать с изучения языка программирования (но имхо, с с++ начинать ой как не стоит, все желание отпадет). Практика, и еще раз практика. Как разберешься в основах, можешь копать глубже. В итоге придешь к желаемому результату. Есть то, что дается не так просто, как хотелось бы. -------------------- |
|
|
![]()
Сообщение
#135
|
|
![]() Зануда Сообщений: 2 237 Спасибо сказали: 2894 раза ![]() |
Цитата Но вы ведь умеете. Подскажите куда что вставлять. Я посмотрю и попробую научится. Умею. Но Цитата Ну, во-первых, просто команд (только давай по-нормальному: алгоритма) тебе будет недостаточно, надо еще знать, куда их вставлять; во-вторых, ни того, ни другого не узнать без изучения кода движка. То есть, ты не понял, что такое программирование в принципе. Это не все равно, что скопировать в терминал убунты несколько команд из гугла. Программный код - это сложная система, где все взаимосвязано. Нельзя просто так взять и приписать к существующему коду новый функционал; это все равно, что ты сейчас притащишь партитуру симфонии и спросишь, какие ноты надо вставить, чтобы звучало повеселей. |
|
|
![]()
Сообщение
#136
|
|
![]() Разработчик Сообщений: 534 Спасибо сказали: 222 раза ![]() |
Немного разобрался в командах и как их изменять!
![]() ![]() ![]() Первое! Чтобы легко было менять команды это надо делать не через блокнотик. А через редактор Anjuta потому что у него подсказки! ![]() ![]() ![]() Чтобы этот редактор поставить надо дать такую команду Код 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); } И все получилось! Редактор перестал ругаться и собрал игру! ![]() ![]() ![]() И сейчас когда нажимаешь кнопку компании. Отображаются игры компании. И можно запустить игры Компании T-800 ![]() ![]() ![]() Правда не могу понять что надо как сделать чтобы после окончания первого эпизода сразу запускался следующий и чтобы нельзя было запустить до того как сыграл предыдущий потому что сейчас они все запускаются ![]() -------------------- |
|
|
![]()
Сообщение
#137
|
|
![]() Immortal Сообщений: 7 870 Спасибо сказали: 16066 раз ![]() |
Рад, что ты быстро учишься. Но слово Campaign пиши правильно, заклинаю тебя.
|
|
|
![]()
Сообщение
#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 пиши правильно, заклинаю тебя Аха. И, пожалуйста, "код", а не "команды". Команды - это в терминале. --- Вообще, советую не увлекаться копипастингом и подбором. Хочешь нормально программировать - изучи сперва язык. |
|
|
![]()
Сообщение
#139
|
|
![]() Разработчик Сообщений: 534 Спасибо сказали: 222 раза ![]() |
Можно в файле `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 сделать как вы сказали. Не открывается меню выбора камании. ![]() ![]() Выдает рейтинг а потом в главное меню. Я Потом даже на всякий случай в 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; } И все равно выдает рейтинг а потом в главное меню. ![]() -------------------- |
|
|
![]()
Сообщение
#140
|
|
![]() Зануда Сообщений: 2 237 Спасибо сказали: 2894 раза ![]() |
Цитата в game_newgame.cpp палочки перед кодом команды //Settings::Get().SetGameType(Game::TYPE_CAMPAIGN); убрал А, ну да, так и надо. Зачем ты их вообще туда ставил?) Цитата И все равно выдает рейтинг а потом в главное меню. Тогда хз. По логике должно было заработать. Цитата для этого надо весь код проекта изучать, а он большой и грязный
|
|
|
![]() ![]() |
Текстовая версия | Сейчас: 3 August 2025 - 12:32 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|