Page 4 of 4

Posted: Wed Dec 17, 2014 1:40 am
by punk_joker
Игра сразу пишет на rd, или в начале пытается в папке с бинарником писать?

Re: 2048

Posted: Wed Dec 17, 2014 1:42 am
by yogev_ezra
raandoom wrote:Так... Кое что обнаружил. Компилятор, оптимизируя код, выкинул сохранение результата :) По этой причине в rd даже файл не создается, хотя должен :) А так выходит, что сохранение в rd работает (как минимум до перезагрузки), для постоянного надо пользовать RDSAVE. Завтра исправлю код, чтобы компилятор не считал код сохранения ненужным :)
А вот нечего на Хабре оптимизирующие компиляторы хвалить, и говорить, что Ассемблер не нужен :lol:

Re: 2048

Posted: Wed Dec 17, 2014 2:01 pm
by raandoom
punk_joker wrote:Игра сразу пишет на rd, или в начале пытается в папке с бинарником писать?
В данный момент игра пытается читать и писать в файл "/sys/games/2048.dat".
yogev_ezra wrote:А вот нечего на Хабре оптимизирующие компиляторы хвалить, и говорить, что Ассемблер не нужен :lol:
:) Ну это не про меня.
Во первых: я read-only там, потому хвалить ничего не мог. Но не считаю, что оптимизация плохо, но не в данном случае :) Не понятно на чём компилятор основывался, вырезав кусок кода.
Во вторых: как так не нужен? С Ассемблера я начал программировать, решив научиться писать патчи для телефонов Sony Ericsson. И научился :) А потом и на Си и C++ перешел. Поэтому, как минимум, мне он очень был нужен :)

Re: 2048

Posted: Wed Dec 17, 2014 3:02 pm
by CleverMouse
raandoom wrote:Не понятно на чём компилятор основывался, вырезав кусок кода.
В коде написано, что __asm__-блок использует адрес переменной cfg, но не написано, что он использует содержимое переменной cfg. Вот компилятор и выкидывает все записи в cfg. То же самое касается функции загрузки - в __asm__-блоке не написано, что он меняет highscore, а всё остальное записывает 0 в highscore, так что компилятор сразу возвращает 0. Объяснить компилятору, что __asm__-блок может читать или писать куда угодно в память, можно примерно так:

Code: Select all

    __asm__ __volatile__("int $0x40":"=a"(ret),"=b"(rnum):
                         "a"(70),"b"(&cfg):
                         "memory");
Если заранее известно, какие переменные затронуты, можно и так:

Code: Select all

    __asm__ __volatile__("int $0x40":"=a"(ret),"=b"(rnum),"=m"(highscore):
                         "a"(70),
                         "b"(&cfg),"m"(cfg));

Re: 2048

Posted: Thu Dec 18, 2014 1:50 am
by raandoom
CleverMouse, спасибо большое за помощь. Теперь загрузка и сохранение результата работает как надо :)
Еще добавил сообщение о том, что ходы кончились. Уже все в репозитории и к данному моменту скорее всего собралось :)

Posted: Thu Dec 18, 2014 2:54 am
by punk_joker
Отлично, все работает. Но можно попросить сделать, чтобы в начале игра пыталась сохранить рекорд в той же папке что и бинарник, а уже в случае неудачи на rd?

Re: 2048

Posted: Thu Dec 18, 2014 3:05 am
by raandoom
Хорошо, конечно можно. А нужна ли возможность возобновления прошлой игры? То есть играл, закрыл игру, открыл и продолжил с того состояния (распложение фишек и очки), в котором закрывал игру.

Posted: Thu Dec 18, 2014 3:07 am
by punk_joker
Было бы неплохо.

Re: 2048

Posted: Sat Dec 20, 2014 1:34 am
by raandoom
Добавил сохранение всего состояния игры :) Теперь можно поиграть, закрыть игру, погулять, открыть игру и продолжить играть с места, на котором игра была закончена. Чудеса :)

Re: 2048

Posted: Sun Dec 21, 2014 1:42 am
by raandoom
Просто увеличил шрифт на фишках в 2 раза. Теперь это выглядит так. Так лучше?
Image

Re: 2048

Posted: Sat Jan 03, 2015 1:15 am
by yogev_ezra
Просьба ответить на опрос о предпочтительном способе голосования: viewtopic.php?f=8&t=2959

Re: 2048

Posted: Sun Jan 04, 2015 1:17 am
by yogev_ezra
Тест-репорт от организатора конкурса:
1) Дело в том, что великий комбинатор играл в шахматы второй раз в жизни. Ты не поверишь, но я поиграл в 2048 первый раз в своей жизни! Ну так получилось - не люблю я такие игры. И я долго не мог понять, какими кнопками управлять, и как же вообще играть - ни в самой игре, ни в файле README, ни в теме на форуме никаких указаний не было. Пришлось перегружаться в Windows, и лезть в интернет читать правила игры. Не мешало бы добавить инструкции в саму игру или в файл README.
2)
raandoom wrote:
punk_joker wrote:Игра сразу пишет на rd, или в начале пытается в папке с бинарником писать?
В данный момент игра пытается читать и писать в файл "/sys/games/2048.dat".
Всё-таки первым делом нужно пытаться писать в папке с бинарником, а он у тебя на <disk_name>/KolibriOS/games/2048/2048. Но приятно, что теперь сохранение работает правильно.
3) В последней версии цифры на кубиках стали хорошо видны, но зато стала плохо видна первая строчка (Restart / очки / рекорд). Надо бы оставить её такой же, как в самой первой версии (или как-то ещё поменять, но сейчас очень сложно разобрать).