2048

Entertainment for 5 minutes, hours, days
  • raandoom wrote:Так... Кое что обнаружил. Компилятор, оптимизируя код, выкинул сохранение результата :) По этой причине в rd даже файл не создается, хотя должен :) А так выходит, что сохранение в rd работает (как минимум до перезагрузки), для постоянного надо пользовать RDSAVE. Завтра исправлю код, чтобы компилятор не считал код сохранения ненужным :)
    А вот нечего на Хабре оптимизирующие компиляторы хвалить, и говорить, что Ассемблер не нужен :lol:
  • punk_joker wrote:Игра сразу пишет на rd, или в начале пытается в папке с бинарником писать?
    В данный момент игра пытается читать и писать в файл "/sys/games/2048.dat".
    yogev_ezra wrote:А вот нечего на Хабре оптимизирующие компиляторы хвалить, и говорить, что Ассемблер не нужен :lol:
    :) Ну это не про меня.
    Во первых: я read-only там, потому хвалить ничего не мог. Но не считаю, что оптимизация плохо, но не в данном случае :) Не понятно на чём компилятор основывался, вырезав кусок кода.
    Во вторых: как так не нужен? С Ассемблера я начал программировать, решив научиться писать патчи для телефонов Sony Ericsson. И научился :) А потом и на Си и C++ перешел. Поэтому, как минимум, мне он очень был нужен :)
  • 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));
    Сделаем мир лучше!
  • CleverMouse, спасибо большое за помощь. Теперь загрузка и сохранение результата работает как надо :)
    Еще добавил сообщение о том, что ходы кончились. Уже все в репозитории и к данному моменту скорее всего собралось :)
  • Отлично, все работает. Но можно попросить сделать, чтобы в начале игра пыталась сохранить рекорд в той же папке что и бинарник, а уже в случае неудачи на rd?
    to infinity and beyond
  • Хорошо, конечно можно. А нужна ли возможность возобновления прошлой игры? То есть играл, закрыл игру, открыл и продолжил с того состояния (распложение фишек и очки), в котором закрывал игру.
  • Было бы неплохо.
    to infinity and beyond
  • Добавил сохранение всего состояния игры :) Теперь можно поиграть, закрыть игру, погулять, открыть игру и продолжить играть с места, на котором игра была закончена. Чудеса :)
  • Просто увеличил шрифт на фишках в 2 раза. Теперь это выглядит так. Так лучше?
    Image
  • Просьба ответить на опрос о предпочтительном способе голосования: viewtopic.php?f=8&t=2959
  • Тест-репорт от организатора конкурса:
    1) Дело в том, что великий комбинатор играл в шахматы второй раз в жизни. Ты не поверишь, но я поиграл в 2048 первый раз в своей жизни! Ну так получилось - не люблю я такие игры. И я долго не мог понять, какими кнопками управлять, и как же вообще играть - ни в самой игре, ни в файле README, ни в теме на форуме никаких указаний не было. Пришлось перегружаться в Windows, и лезть в интернет читать правила игры. Не мешало бы добавить инструкции в саму игру или в файл README.
    2)
    raandoom wrote:
    punk_joker wrote:Игра сразу пишет на rd, или в начале пытается в папке с бинарником писать?
    В данный момент игра пытается читать и писать в файл "/sys/games/2048.dat".
    Всё-таки первым делом нужно пытаться писать в папке с бинарником, а он у тебя на <disk_name>/KolibriOS/games/2048/2048. Но приятно, что теперь сохранение работает правильно.
    3) В последней версии цифры на кубиках стали хорошо видны, но зато стала плохо видна первая строчка (Restart / очки / рекорд). Надо бы оставить её такой же, как в самой первой версии (или как-то ещё поменять, но сейчас очень сложно разобрать).
  • Who is online

    Users browsing this forum: No registered users and 6 guests