Что такое 2048 в excel

Программа Microsoft Excel может пригодиться во многих ситуациях. Формулы, функции, справочники и учебные пособия, обработка бизнес-информации — всё это может делать Excel. Однако, что если вы хотите просто расслабиться? Excel может помочь и в этом.

В этой статье мы рассмотрим 8 игр, которые запускаются в Microsoft Excel.

2048

2048

Однопользовательская головоломка популярна на Android и iOS. Данная игра создана на основе предыдущих, таких как Threes и 1024. Всего за одну неделю её создал 19-летний Габриэль Сирулли. Не желая зарабатывать на том, что он не изобретал, Сирулли загрузил бесплатные версии игры 2048 на Android и iOS.

Есть версия игры для Excel, позволяющая играть в таблицах. Предлагается режим просмотра 2D и 3D, звуковые эффекты, отслеживание движений и история, некоторые другие трюки.

Скачать: 2048 для Microsoft Excel (бесплатная)

2048 Stealth Mode в Excel

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

Scrabble

Scrabble

Продолжая разговор о головоломках, поговорим о Scrabble. Tom_Jobim с Reddit создал игру, которая открывает отдельное окно в Excel, так что она не совсем в таблице. Применяется язык VBA.

Реализация игры на высоком уровне. Вы противостоите искусственному интеллекту с различными уровнями навыка, от 1 до 100. Имеется инструмент анаграмм, встроенный словарь, разные тематические планы, таймеры и многое другое.

Скачать: Scrabble для Microsoft Excel (бесплатная)

Arena.Xlsm

Arena

Не хотите головоломки? Arena.Xlsm даст вам возможность противостоять более 2000 потенциальных противников с искусственным интеллектом. Когда они появляются на экране, вы должны сразить их.

Имеется 8 боссов, 12 запрограммированных боевых арен, более 30 заклинаний, 20 уникальных предметов и даже системы достижений.

Arena.Xlsm также доступна на Itch.io, если вы предпочитаете отслеживать игры на определённых платформах.

Скачать: Arena.Xlsm для Microsoft Excel (бесплатная)

Candy Crunch Number Saga

Candy Crunch Number Saga

Вы берёте контроль над фондовым рынком, в том числе влияя на рыночную стоимость разработчика этой игры King.com.

Эта сатирическая игра происходит в недалёком будущем, где King.com (KING) провела успешное размещение акций (IPO) и их курс взлетел до небес.

Candy Number Crunch Saga предлагает более 35 новостных событий, которые влияют на стоимость акций. Отображается курс акций в реальном времени. Игра стала результатом четырёх дней работы канадского бухгалтера Кари Уолкина. Он же является автором Arena.Xlsm. Игра также доступна на Itch.io.

Скачать: Candy Crunch Number Saga для Microsoft Excel (бесплатная)

Championship Manager For Microsoft Excel

Championship Manager For Microsoft ExcelChampionship Manager For Microsoft Excel

Одна из наиболее сильно вызывающих привыкание игр есть и на Excel. Это неудивительно, поскольку серия футбольных менеджеров больше других игр похожа на таблицы.

Можно играть в четырёх английских лигах, есть кубок Англии, кубок Лиги, Лига Чемпионов. Для трансферов доступно около 3000 футболистов.

Имеются дисквалификации и травмы, которые можно компенсировать молодёжным составом. Кому-то понравится еженедельная таблица результатов в старом стиле.

Нужно иметь ввиду, что вы не сможете получить лучших футболистов Премьер-лиги из реального мира. Все имена созданы случайным образом, чтобы не нарушать авторские права.

Скачать: Championship Manager для Microsoft Excel (бесплатная)

CellSweeper

CellSweeper

CellSweeper представляет собой РПГ с подземельями в жанре Roguelike. Игра основана на Сапёре из старых версий Windows.

Она создана при помощи Excel и содержит шесть классов персонажей, быстрый игровой процесс и возможность поменять уровень сложности. CellSweeper может оказаться более привлекательной, чем кажется, поэтому время пролетит незаметно.

Скачать: CellSweeper для Microsoft Excel (бесплатная)

Tetris

Tetris

Раз на Excel так много головоломок, невозможно обойтись и без Tetris. Здесь данная игра представлена в довольно простом варианте, но это не делает её менее увлекательной.

Скачать: Tetris для Microsoft Excel (бесплатная)

Yahtzee

Yahtzee

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

Играть можно вдвоём или против искусственного интеллекта. Есть инструкции по игре и подсчёту очков.

Скачать: Yahtzee  для Microsoft Excel (бесплатная)

Бонус: Fraqcel

Fraqcel

Это не совсем игра, а скорее психоделический опыт. Или хотя бы попытка предложить его.

Fraqcel генерирует разнообразные геометрические фигуры, которые вы можете увеличивать в сотни раз. Есть четыре типа фракталов, возможность экспортировать изображения, глубокий зум и настраиваемые цветовые палитры.

Чем глубже вы погружаетесь, тем более невероятным становится дизайн. Вы можете использовать меню для изменения настроек, смены цветов и т.д.

Скачать: Fraqcel для Microsoft Excel (бесплатная)

Заключение

Игры для Excel являются довольно нишевым продуктом. Чаще всего их создают изучающие язык VBA люди в качестве практики. Почти все такие игры используют сочетание VBA и вручную созданных макросов. Excel также играет роль во многих Flash-играх. В последних сложнее сделать вид, что вы работаете.

Эти игры демонстрируют разнообразие возможностей Excel. Если вас увидят играющим, вы сможете сказать, что улучшаете ваши навыки работы с Excel.

TrashExpert Staff

Над статьей работал не только один автор, но и другие члены команды TrashExpert: администратор, редакторы или коллектив авторов.

Microsoft Excel is a savior in many ways. Formulas, functions, workbooks, and business intelligence are only some of its data processing powers. But what about those times where it’s all too much, when you just want to relax, if even for a moment? Well, Excel still has you covered, genius software that it is.

Let’s take a quick look at eight games you can play in Microsoft Excel without ever having to leave your spreadsheets behind.

1. 2048

microsoft excel 2048 game

Single-player puzzler 2048 remains an extremely popular choice for Android and iOS devices. 2048 is built on previous iterations of games such as Threes and 1024, and was coded in one weekend by 19-year-old Gabriele Cirulli. Unwilling to make money from «something he didn’t invent,» Cirulli uploaded free versions of 2048 for both iOS and Android.

Spreadsheet1 has built an Excel version of 2048, allowing you to play the numerical puzzler from your spreadsheet. It comes with a 2D or 3D view, sound effects, move tracking and history, and some more handy tricks.

Download: 2048 for Microsoft Excel (Free)

2048 Stealth Mode in Excel

microsoft excel stealth 2048 game

If displaying a game in Excel is frowned upon in your workplace, you can use Redditor Krzychu81’s stealth version with «highly advanced cloaking mechanisms to camouflage itself as financial statements.»

The game hides in a financial statement, disguised with other numbers. It’s basic but gets the job done.

2. Scrabble

microsoft excel scrabble game

Keeping with the puzzle games, why not try playing Scrabble in Excel?

Redditor Tom_Jobim coded a game that launches in a separate window to Excel, so it isn’t quite «in» the spreadsheet. However, the Scrabble version uses VBA to run the entire program, making it very much an Excel game.

The implementation is great, too. You play against a challenging AI opponent with a variable skill level (between 1-100). There’s also an anagram tool, integrated dictionary, different themed board, turn timers, and much more.

Download: Scrabble for Microsoft Excel (Free)

3. Arena.Xlsm

microsoft excel arena roguelike game

Prefer hacking and slashing to puzzle games? How about a little of both? Arena.Xlsm pits you against over 2,000 potential enemies, all with different AI abilities. As the enemies roll onto the screen, it’s your job to take them down, all the way from the little bunny up to the Death Mauler.

Arena also features eight boss encounters, 12 pre-programmed battle arenas, over 30 different spells your character can use, 20 unique items, and even an achievement system.

Arena.Xlsm is also available on Itch.io if you prefer to keep track of your games using a specific platform.

Download: Arena.Xlsm for Microsoft Excel (Free)

4. Candy Crunch Number Saga

microsoft excel candy crush stock game

Take control of the stock market, specifically influencing the market price of Candy Crush Saga developer, King.com. This satirical take on the series «takes place in the not too distant future, where King.com (KING) has had a successful IPO,» placing the burden of boosting their stock market dreams into the stratosphere.

Candy Number Crunch Saga features over 35 news events directly affecting your stock price, includes a real-time stock ticker, and was the excellent result of around four days of work by Canadian accountant Cary Walkin (also responsible for Arena.Xlsm, above).

Like Arena.Xlsm, Candy Crunch Number Saga is also available on Itch.io.

Download: Candy Crunch Number Saga for Microsoft Excel (Free)

5. Championship Manager for Microsoft Excel

microsoft excel championship manager manage club game

One of the world’s most addictive gaming franchises makes the jump into Excel. It makes sense, really, as earlier versions of Championship Manager were essentially just spreadsheet interfaces (in fact, has much changed?!), and this rendition of Championship Manager is just as one-click-more inducing as the best sports management games around.

You can play in the top four English leagues, the FA Cup, the League Cup, and the Champions League, and you can make transfers from a 3,000-player database.

Suspensions and injuries seem to come quite easily, but it’s also easy to bulk out a squad with youth players to mitigate them. I’m also quite fond of the old-school style scoresheet for each week’s round of fixtures.

Just bear in mind you won’t be signing any top-tier Premier League players from the real world. All names are random to ensure the game doesn’t receive copyright takedown requests.

Download: Championship Manager for Microsoft Excel (Free)

6. CellSweeper

microsoft excel cellsweeper game

CellSweeper is a dungeon-crawling RPG-come-roguelike, based on the Minesweeper from older versions of Windows.

Built using Excel, CellSweeper features six character classes, quick gameplay, and a seemingly reversed difficulty curve. Nonetheless, it’s more engaging than it appears, and I’m sure you’ll sink more time into it than you realize.

Download: CellSweeper for Microsoft Excel (Free)

7. Tetris

microsoft excel tetris game

Microsoft Excel lends itself to puzzle games. What list, then, would be complete without a mention of Tetris?

Tetris’s Excel game is definitely on the basic side, but it’s fine to pass some time.

If Tetris isn’t your thing, check out these quick free web games instead.

Download: Tetris for Microsoft Excel (Free)

8. Yahtzee

microsoft excel yahtzee game

Yahtzee is a great dice game you can play alone or with friends. You’re essentially trying to make poker hands using a set of dice, keeping back dice you want, or swapping them into your next roll. It is basic gameplay but fun in its simplicity.

The Excel version comes with a versus-AI mode and a 2-player mode. There are also instructions on how to play and how to score.

Download: Yahtzee for Microsoft Excel (Free)

Bonus: Fraqcel

microsoft excel fraqcel

This isn’t entirely a game, more a psychedelic exploratory experience. Or at least an attempt at one.

Fraqcel generates a sprawling fractal design for you to explore within Excel, allowing you to zoom in many hundreds of times to explore the depths of geometry. It features four fractal types, export functions for images, deep zooming capabilities, and customizable color palettes.

The deeper you dive, the more incredible the designs become. You can use the menu to customize settings, change colors, and more, so make sure to play around.

Download: Fraqcel for Microsoft Excel (Free)

Excel Games Roundup

Excel games are fairly niche. Most of the time, they come from people learning VBA as part of a course or to expand their Excel skillset. Almost all games use a combination of VBA and handcrafted macros to deliver the fun, but Excel can also play host to many flash games.

Be warned: the flash games are much harder to hide from other people!

These games show the amazing versatility of Excel, and if you’re caught playing while at work, you can at least point to your ever-expanding knowledge of the inner-workings of Excel!

Microsoft Excel – спаситель во многих отношениях. Формулы, функции, рабочие книги и бизнес-аналитика – это лишь некоторые из его возможностей по обработке данных. Но как насчет тех времен, когда всего этого слишком много, когда хочется просто расслабиться, хотя бы на мгновение? Что ж, Excel по-прежнему вас охватывает, гениальное программное обеспечение.

Давайте кратко рассмотрим восемь игр, в которые вы можете играть в Microsoft Excel, даже не бросая электронные таблицы.

1. 2048 г.

Пазл 2048 для одного игрока остается чрезвычайно популярным выбором для устройств Android и iOS. 2048 построен на основе предыдущих версий игр, таких как Threes и 1024, и был написан за один уик-энд 19-летним Габриэле Чирулли. Не желая зарабатывать деньги на «том, что он не изобретал», Чирулли загрузил бесплатные версии 2048 для iOS и Android .

Spreadsheet1 построил Excel версию 2048, позволяющую вам решать числовую головоломку из вашей электронной таблицы. Он поставляется с двухмерным или трехмерным представлением, звуковыми эффектами, отслеживанием перемещений и историей, а также некоторыми другими удобными приемами.

Скачать: 2048 для Microsoft Excel (бесплатно)

2048 Скрытый режим в Excel

Если отображение игры в Excel на вашем рабочем месте не одобряется, вы можете использовать скрытую версию Redditor Krzychu81 с «высокоразвитыми механизмами маскировки для маскировки под финансовую отчетность».

Игра скрывается в финансовой отчетности, замаскированной другими цифрами. Это просто, но выполняет свою работу.

2. Эрудит

Продолжая играть в головоломки, почему бы не попробовать сыграть в Scrabble в Excel?

Redditor Tom_Jobim написал игру, которая запускается в отдельном окне в Excel, поэтому она не совсем «в» электронной таблице. Однако версия Scrabble использует VBA для запуска всей программы, что делает ее во многом похожей на игру Excel.

Реализация тоже отличная. Вы играете против сложного AI-противника с различным уровнем навыков (от 1 до 100). Также есть инструмент анаграммы, интегрированный словарь, тематическая доска, таймеры поворота и многое другое.

Скачать: Scrabble для Microsoft Excel (бесплатно)

3. Arena.Xlsm

Предпочитаете взлом и рубку головоломкам? Как насчет того и другого? В Arena.Xlsm вас ждет более 2000 потенциальных врагов, каждый из которых обладает различными способностями ИИ. Пока враги катятся по экрану, ваша задача – уничтожить их, от маленького кролика до Гроза смерти.

На арене также есть восемь встреч с боссами, 12 заранее запрограммированных боевых арен, более 30 различных заклинаний, которые может использовать ваш персонаж, 20 уникальных предметов и даже система достижений.

Arena.Xlsm также доступна на Itch.io, если вы предпочитаете отслеживать свои игры на определенной платформе.

Скачать: Arena.Xlsm для Microsoft Excel (бесплатно)

4. Candy Crunch Number Saga

Возьмите под свой контроль фондовый рынок, особенно влияя на рыночную цену разработчика Candy Crush Saga, King.com. Этот сатирический взгляд на сериал «разворачивается в недалеком будущем, когда King.com (KING) успешно провел IPO», и бремя реализации их мечтаний о фондовом рынке становится невыносимым.

Candy Number Crunch Saga включает более 35 новостных событий, непосредственно влияющих на курс ваших акций, включает тикер акций в реальном времени и является отличным результатом примерно четырех дней работы канадского бухгалтера Кэри Уокина (также ответственного за Arena.Xlsm, см. Выше).

Как и Arena.Xlsm, Candy Crunch Number Saga также доступна на Itch.io.

Скачать: Candy Crunch Number Saga для Microsoft Excel (бесплатно)

Одна из самых захватывающих игровых франшиз в мире делает прыжок в Excel. На самом деле это имеет смысл, поскольку более ранние версии Championship Manager были, по сути, просто интерфейсами с электронными таблицами (на самом деле, многое изменилось ?!), и это исполнение Championship Manager так же увлекательно на один клик, как и лучшие игры по спортивному менеджменту. .

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

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

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

Скачать: Championship Manager для Microsoft Excel (бесплатно)

6. CellSweeper

CellSweeper – это ролевая игра в жанре ролевой игры, основанная на «Сапере» из старых версий Windows.

CellSweeper, созданный с использованием Excel, имеет шесть классов персонажей, быстрый игровой процесс и, казалось бы, обратную кривую сложности. Тем не менее, это более увлекательно, чем кажется, и я уверен, что вы потратите на это больше времени, чем вы думаете.

Скачать: CellSweeper для Microsoft Excel (бесплатно)

7. Тетрис

Microsoft Excel подходит для головоломок. Какой же список был бы полным без упоминания Тетриса?

Игра Excel в тетрисе определенно проста, но это нормально, чтобы скоротать время.

Если вам не нравится тетрис, попробуйте эти быстрые бесплатные веб-игры .

Скачать: Тетрис для Microsoft Excel (бесплатно)

8. Яцзи

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

Версия Excel поставляется с режимом против ИИ и режимом для двух игроков. Также есть инструкции о том, как играть и как забивать.

Скачать: Yahtzee для Microsoft Excel (бесплатно)

Бонус: Fraqcel

Это не совсем игра, это скорее психоделический исследовательский опыт. Или, по крайней мере, попытка одного.

Fraqcel создает обширный фрактальный дизайн, который вы можете изучить в Excel, позволяя увеличивать масштаб во много сотен раз, чтобы исследовать глубины геометрии. Он имеет четыре типа фракталов, функции экспорта изображений, возможности глубокого масштабирования и настраиваемые цветовые палитры.

Чем глубже вы погружаетесь, тем невероятнее становится дизайн. Вы можете использовать меню для настройки параметров, изменения цвета и многого другого, так что не забудьте поиграть.

Скачать: Fraqcel для Microsoft Excel (бесплатно)

Обзор игр Excel

Игры Excel довольно нишевые. В большинстве случаев они исходят от людей, изучающих VBA в рамках курса или для расширения своих навыков работы с Excel. Почти все игры используют комбинацию VBA и созданных вручную макросов, чтобы доставить удовольствие, но Excel также может использоваться во многих флеш-играх.

Предупреждаем: флеш игры намного сложнее скрыть от других людей!

Эти игры демонстрируют удивительную универсальность Excel, и если вас поймали за игрой на работе, вы можете хотя бы указать на свои постоянно расширяющиеся знания о внутренней работе Excel!

Я пытаюсь реализовать игра 2048 в Excel VBA.

Рисунок 1

Каждое логическое значение ИСТИНА / ЛОЖЬ в строках 2, 4, 6 и 8 используется для определения, что данные каждой ячейки в строках 1, 3, 5 и 7 равны 0 или нет.

Экспериментальная реализация

Sub MergeUp()
    Dim loop_num
    Dim loop_num2
    For loop_num2 = 1 To 3
        For loop_num = 1 To 4
            If Cells(6, loop_num) = True Then
                Cells(5, loop_num) = Cells(7, loop_num)
                Cells(7, loop_num) = 0
            End If
            If Cells(4, loop_num) = True Then
                Cells(3, loop_num) = Cells(5, loop_num)
                Cells(5, loop_num) = 0
            End If
            If Cells(2, loop_num) = True Then
                Cells(1, loop_num) = Cells(3, loop_num)
                Cells(3, loop_num) = 0
            End If
        Next
    Next
    For loop_num = 1 To 4
        If Cells(1, loop_num) = Cells(3, loop_num) Then
            Cells(1, loop_num) = Cells(1, loop_num) + Cells(3, loop_num)
            Cells(9, "C") = Cells(9, "C") + Cells(3, loop_num)
            Cells(3, loop_num) = 0
        End If
        If Cells(3, loop_num) = Cells(5, loop_num) Then
            Cells(3, loop_num) = Cells(3, loop_num) + Cells(5, loop_num)
            Cells(9, "C") = Cells(9, "C") + Cells(5, loop_num)
            Cells(5, loop_num) = 0
        End If
        If Cells(5, loop_num) = Cells(7, loop_num) Then
            Cells(5, loop_num) = Cells(5, loop_num) + Cells(7, loop_num)
            Cells(9, "C") = Cells(9, "C") + Cells(7, loop_num)
            Cells(7, loop_num) = 0
        End If
    Next
    For loop_num2 = 1 To 3
        For loop_num = 1 To 4
            If Cells(6, loop_num) = True Then
                Cells(5, loop_num) = Cells(7, loop_num)
                Cells(7, loop_num) = 0
            End If
            If Cells(4, loop_num) = True Then
                Cells(3, loop_num) = Cells(5, loop_num)
                Cells(5, loop_num) = 0
            End If
            If Cells(2, loop_num) = True Then
                Cells(1, loop_num) = Cells(3, loop_num)
                Cells(3, loop_num) = 0
            End If
        Next
    Next
    Call rand_num
End Sub
Sub MergeDown()
    Dim loop_num
    Dim loop_num2
    For loop_num2 = 1 To 3
        For loop_num = 1 To 4
            If Cells(4, loop_num) = True Then
                Cells(3, loop_num) = Cells(1, loop_num)
                Cells(1, loop_num) = 0
            End If
            If Cells(6, loop_num) = True Then
                Cells(5, loop_num) = Cells(3, loop_num)
                Cells(3, loop_num) = 0
            End If
            If Cells(8, loop_num) = True Then
                Cells(7, loop_num) = Cells(5, loop_num)
                Cells(5, loop_num) = 0
            End If
        Next
    Next
    For loop_num = 1 To 4
        If Cells(7, loop_num) = Cells(5, loop_num) Then
            Cells(7, loop_num) = Cells(7, loop_num) + Cells(5, loop_num)
            Cells(9, "C") = Cells(9, "C") + Cells(5, loop_num)
            Cells(5, loop_num) = 0
        End If
        If Cells(5, loop_num) = Cells(3, loop_num) Then
            Cells(5, loop_num) = Cells(5, loop_num) + Cells(3, loop_num)
            Cells(9, "C") = Cells(9, "C") + Cells(3, loop_num)
            Cells(3, loop_num) = 0
        End If
        If Cells(3, loop_num) = Cells(1, loop_num) Then
            Cells(3, loop_num) = Cells(3, loop_num) + Cells(1, loop_num)
            Cells(9, "C") = Cells(9, "C") + Cells(1, loop_num)
            Cells(1, loop_num) = 0
        End If
    Next
    For loop_num2 = 1 To 3
        For loop_num = 1 To 4
            If Cells(4, loop_num) = True Then
                Cells(3, loop_num) = Cells(1, loop_num)
                Cells(1, loop_num) = 0
            End If
            If Cells(6, loop_num) = True Then
                Cells(5, loop_num) = Cells(3, loop_num)
                Cells(3, loop_num) = 0
            End If
            If Cells(8, loop_num) = True Then
                Cells(7, loop_num) = Cells(5, loop_num)
                Cells(5, loop_num) = 0
            End If
        Next
    Next
    Call rand_num
End Sub
Sub MergeLeft()
    For loop_num2 = 1 To 3
        For loop_num = 1 To 7 Step 2
            If Cells(loop_num + 1, "C") = True Then
                Cells(loop_num, "C") = Cells(loop_num, "D")
                Cells(loop_num, "D") = 0
            End If
            If Cells(loop_num + 1, "B") = True Then
                Cells(loop_num, "B") = Cells(loop_num, "C")
                Cells(loop_num, "C") = 0
            End If
            If Cells(loop_num + 1, "A") = True Then
                Cells(loop_num, "A") = Cells(loop_num, "B")
                Cells(loop_num, "B") = 0
            End If
        Next
    Next
    For loop_num = 1 To 7 Step 2
        If Cells(loop_num, "A") = Cells(loop_num, "B") Then
            Cells(loop_num, "A") = Cells(loop_num, "A") + Cells(loop_num, "B")
            Cells(9, "C") = Cells(9, "C") + Cells(loop_num, "B")
            Cells(loop_num, "B") = 0
        End If
        If Cells(loop_num, "B") = Cells(loop_num, "C") Then
            Cells(loop_num, "B") = Cells(loop_num, "B") + Cells(loop_num, "C")
            Cells(9, "C") = Cells(9, "C") + Cells(loop_num, "C")
            Cells(loop_num, "C") = 0
        End If
        If Cells(loop_num, "C") = Cells(loop_num, "D") Then
            Cells(loop_num, "C") = Cells(loop_num, "C") + Cells(loop_num, "D")
            Cells(9, "C") = Cells(9, "C") + Cells(loop_num, "D")
            Cells(loop_num, "D") = 0
        End If
    Next
    For loop_num2 = 1 To 3
        For loop_num = 1 To 7 Step 2
            If Cells(loop_num + 1, "C") = True Then
                Cells(loop_num, "C") = Cells(loop_num, "D")
                Cells(loop_num, "D") = 0
            End If
            If Cells(loop_num + 1, "B") = True Then
                Cells(loop_num, "B") = Cells(loop_num, "C")
                Cells(loop_num, "C") = 0
            End If
            If Cells(loop_num + 1, "A") = True Then
                Cells(loop_num, "A") = Cells(loop_num, "B")
                Cells(loop_num, "B") = 0
            End If
        Next
    Next
    Call rand_num
End Sub
Sub MergeRight()
    For loop_num2 = 1 To 3
        For loop_num = 1 To 7 Step 2
            If Cells(loop_num + 1, "B") = True Then
                Cells(loop_num, "B") = Cells(loop_num, "A")
                Cells(loop_num, "A") = 0
            End If
            If Cells(loop_num + 1, "C") = True Then
                Cells(loop_num, "C") = Cells(loop_num, "B")
                Cells(loop_num, "B") = 0
            End If
             If Cells(loop_num + 1, "D") = True Then
                Cells(loop_num, "D") = Cells(loop_num, "C")
                Cells(loop_num, "C") = 0
            End If
        Next
    Next
    For loop_num = 1 To 7 Step 2
        If Cells(loop_num, "C") = Cells(loop_num, "D") Then
            Cells(loop_num, "D") = Cells(loop_num, "D") + Cells(loop_num, "C")
            Cells(9, "C") = Cells(9, "C") + Cells(loop_num, "C")
            Cells(loop_num, "C") = 0
        End If
        If Cells(loop_num, "B") = Cells(loop_num, "C") Then
            Cells(loop_num, "C") = Cells(loop_num, "C") + Cells(loop_num, "B")
            Cells(9, "C") = Cells(9, "C") + Cells(loop_num, "B")
            Cells(loop_num, "B") = 0
        End If
        If Cells(loop_num, "A") = Cells(loop_num, "B") Then
            Cells(loop_num, "B") = Cells(loop_num, "B") + Cells(loop_num, "A")
            Cells(9, "C") = Cells(9, "C") + Cells(loop_num, "A")
            Cells(loop_num, "A") = 0
        End If
    Next
    For loop_num2 = 1 To 3
        For loop_num = 1 To 7 Step 2
            If Cells(loop_num + 1, "B") = True Then
                Cells(loop_num, "B") = Cells(loop_num, "A")
                Cells(loop_num, "A") = 0
            End If
            If Cells(loop_num + 1, "C") = True Then
                Cells(loop_num, "C") = Cells(loop_num, "B")
                Cells(loop_num, "B") = 0
            End If
             If Cells(loop_num + 1, "D") = True Then
                Cells(loop_num, "D") = Cells(loop_num, "C")
                Cells(loop_num, "C") = 0
            End If
        Next
    Next
    Call rand_num
End Sub
Public Sub rand_num()
    Dim cell_row(4)
    cell_row(1) = 1
    cell_row(2) = 3
    cell_row(3) = 5
    cell_row(4) = 7
    Dim rand_number(2)
    rand_number(1) = cell_row(Int((4 - 1 + 1) * Rnd + 1))
    rand_number(2) = Int((4 - 1 + 1) * Rnd + 1)
    While (Cells(rand_number(1) + 1, rand_number(2)) = False)
    rand_number(1) = cell_row(Int((4 - 1 + 1) * Rnd + 1))
    rand_number(2) = Int((4 - 1 + 1) * Rnd + 1)
    Wend
    Cells(rand_number(1), rand_number(2)) = Int((2 - 1 + 1) * Rnd + 1)
    Randomize [Timer]
End Sub
Sub Clear()
    For loop_num = 1 To 4
        Cells(1, loop_num) = 0
        Cells(3, loop_num) = 0
        Cells(5, loop_num) = 0
        Cells(7, loop_num) = 0
    Next
    Cells(9, "C") = 0
    Call rand_num
    Call rand_num
End Sub

Все предложения приветствуются.

1 ответ

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

Переменные

Dim loop_num
Dim loop_num2
Dim rand_number(2) 'etc.

Хотя это и не требуется явно, переменные в VBA могут иметь типы, как и в строго типизированных языках, таких как c++. Включение типов в код дает два преимущества:

  • Повышает производительность, поскольку типизированные переменные работают быстрее и занимают меньше памяти
  • Возможно, что более важно, помогает документировать код; если мы знаем loop_num целое число или rand_num является плавающей точкой, то мы можем предположить некоторые вещи о том, для чего они могут быть использованы. Это значительно упрощает чтение, поддержку и улучшение кода.

Так что предпочитаю:

Dim loop_num As Long
Dim loop_num2 As Long
Dim rand_number(2) As Single

Пока мы это делаем, эти имена переменных не очень информативны, не так ли? Конечно loop_num говорит мне, что это, вероятно, увеличенная переменная в цикле for, но я уже вижу это, просто посмотрев! Лучше использовать описательные имена, которые сделают код самодокументированным и легким для понимания. Я действительно не знаю, для чего нужны все эти переменные, так как сейчас я сосредотачиваюсь на общих проблемах, но, возможно, что-то вроде:

Dim worksheetRow As Long
Dim iterationPassNumber As Long

…было бы лучше.

Также в нескольких местах вы не объявляете переменные; помимо того, что вы не можете объявить тип, отказ от принудительного объявления переменных может привести к пропуску опечаток, loop_counter против loop_cuonter. Добавлять Option Explicit в верхней части модуля (модулей), чтобы принудительно объявить переменную и помочь вам обнаружить опечатки.


Магические числа

Ваш код содержит множество магических чисел — буквальных значений, которые ничего не значат изолированно, но которые имеют особое значение в вашем коде.

Dim cell_row(4)
cell_row(1) = 1    'ok I guess, thanks to a fairly descriptive variable name
cell_row(2) = 3
cell_row(3) = 5
cell_row(4) = 7
Dim rand_number(2)   'um sure, 2 of them why not
rand_number(1) = cell_row(Int((4 - 1 + 1) * Rnd + 1))   'I'm at a loss... What do these numbers mean?!
rand_number(2) = Int((4 - 1 + 1) * Rnd + 1)
While (Cells(rand_number(1) + 1, rand_number(2)) = False)
rand_number(1) = cell_row(Int((4 - 1 + 1) * Rnd + 1))
rand_number(2) = Int((4 - 1 + 1) * Rnd + 1)
Wend
Cells(rand_number(1), rand_number(2)) = Int((2 - 1 + 1) * Rnd + 1)

Представьте, что вы читаете этот код в первый раз (как и я сейчас) — вы хоть представляете, что делает эта функция. Я вижу случайные числа, помещаемые в ячейки, какой-то цикл, который выглядит так, будто он никогда не остановится, я понятия не имею, какова должна быть логика этого кода. я имею в виду

Int((4 - 1 + 1) ' * [...]

Почему??

Добавление комментариев, объясняющих, почему ваш код делает то, что он делает, или, что еще лучше, переименование этих чисел в константы:

Const randomNumberScalingFactor As Long = 4 'or 4 + SomeMagicNumber - AnotherMagicNumber

… затем (например)

randomColumnIndexInSheet = Int(ColumnCount * Rnd + ColumnOffset))

СУХОЙ

Не повторяйся; MergeUp/Down иMergeLeft/Right содержат много повторений, но с немного разными комбинациями A,B,C,D. Было бы лучше использовать их как аргументы для одного Sub, чтобы вы могли повторно использовать код для выполнения нескольких задач.

Например:

For loop_num2 = 1 To 3
    For loop_num = 1 To 7 Step 2
        If Cells(loop_num + 1, "B") = True Then
            Cells(loop_num, "B") = Cells(loop_num, "A")
            Cells(loop_num, "A") = 0
        End If
        If Cells(loop_num + 1, "C") = True Then
            Cells(loop_num, "C") = Cells(loop_num, "B")
            Cells(loop_num, "B") = 0
        End If
         If Cells(loop_num + 1, "D") = True Then
            Cells(loop_num, "D") = Cells(loop_num, "C")
            Cells(loop_num, "C") = 0
        End If
    Next

For loop_num2 = 1 To 3
    For loop_num = 1 To 7 Step 2
        If Cells(loop_num + 1, "C") = True Then
            Cells(loop_num, "C") = Cells(loop_num, "D")
            Cells(loop_num, "D") = 0
        End If
        If Cells(loop_num + 1, "B") = True Then
            Cells(loop_num, "B") = Cells(loop_num, "C")
            Cells(loop_num, "C") = 0
        End If
        If Cells(loop_num + 1, "A") = True Then
            Cells(loop_num, "A") = Cells(loop_num, "B")
            Cells(loop_num, "B") = 0
        End If
    Next
Next

может стать примерно таким:

Sub MoveSidewaysWithMapping(ByVal first As String, ByVal second As String, ByVal third As String, ByVal fourth As String)
    '[...]
    For loop_num2 = 1 To 3
        For loop_num = 1 To 7 Step 2
            If Cells(loop_num + 1, third) = True Then
                Cells(loop_num, third) = Cells(loop_num, fourth)
                Cells(loop_num, fourth) = 0
            End If
            If Cells(loop_num + 1, second) = True Then
                Cells(loop_num, second) = Cells(loop_num, third)
                Cells(loop_num, third) = 0
            End If
            If Cells(loop_num + 1, first) = True Then
                Cells(loop_num, first) = Cells(loop_num, second)
                Cells(loop_num, second) = 0
            End If
        Next
    Next
    'etc...

называется как

'move left:
 MoveSidewaysWithMapping "A","B","C","D"

'move right
 MoveSidewaysWithMapping "D","C","B","A"

вы поняли (ps the Call ключевое слово как в Call rand_num устарело, оно вам больше не нужно, и это хорошо, чтобы удалить IMO, потому что это лишний беспорядок для вашего мозга)

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


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

Надеюсь, что это поможет, дайте мне знать, если вам нужны разъяснения (PS, я не уверен, сколько из этого будет для вас новым, поскольку я вижу, что вы уже задали много вопросов по CR, и это довольно общий / базовый совет, но я понимаю, что если вы просто балуетесь новым языком, вы можете потратить большую часть своего времени, пытаясь заставить его работать, и забыть некоторые важные стилистические основы!)

Option Explicit

' ------------------------------------------------------------
' Excel version of the 2048 web game by Gabriele Cirulli
' Created by Peter Bartholomew & Petros Chatzipantazis
' http://www.spreadsheet1.com/2048-game-version-for-excel.html
' Please distribute freely. Attribution required.
' ------------------------------------------------------------
' Modifications by Douglas Bliss:
' - Create Tile property to access grid data based on direction
' - Create a single MakeMove function based on direction
' - Call MakeMove function from key handlers
' ------------------------------------------------------------
' Tile Property - Accesses grid data based on direction
' (not the most efficient, but it's fast enough here)
' ------------------------------------------------------------

Private Property Get Tile(ByVal Direction As String, ByVal Row As Long, ByVal Col As Long) As Long

    Select Case Direction
        Case "L"
            Tile = Range("State").Cells(Row, Col).Value
        Case "R"
            Tile = Range("State").Cells(Row, 5 - Col).Value
        Case "U"
            Tile = Range("State").Cells(Col, 5 - Row).Value
        Case "D"
            Tile = Range("State").Cells(5 - Col, Row).Value
        Case Else
    End Select
    
End Property

Private Property Let Tile(ByVal Direction As String, ByVal Row As Long, ByVal Col As Long, ByVal RHS As Long)
    
    Select Case Direction
        Case "L"
            Range("State").Cells(Row, Col).Value = RHS
        Case "R"
            Range("State").Cells(Row, 5 - Col).Value = RHS
        Case "U"
            Range("State").Cells(Col, 5 - Row).Value = RHS
        Case "D"
            Range("State").Cells(5 - Col, Row).Value = RHS
        Case Else
    End Select
    
End Property

' ------------------------------------------------------------
' MakeMove - abstract logic for shifting/combining tiles
' ------------------------------------------------------------

Private Sub MakeMove(Direction As String)

    Dim bIsMove As Boolean
    Dim R As Long, C As Long, I As Long, lScore As Long
    
    lScore = 0
    
    For R = 1 To 4 Step 1
        For C = 1 To 3 Step 1
            
            ' Move from next tile over if empty:
            If Tile(Direction, R, C) = 0 Then
                For I = C + 1 To 4 Step 1
                    If Tile(Direction, R, I) > 0 Then
                        Tile(Direction, R, C) = Tile(Direction, R, I)
                        Tile(Direction, R, I) = 0
                        bIsMove = True
                        Exit For
                    End If
                Next I
            End If
            ' Combine with next tile over if they match:
            If Tile(Direction, R, C) > 0 Then
                For I = C + 1 To 4 Step 1
                    If Tile(Direction, R, I) > 0 Then
                        If Tile(Direction, R, C) = Tile(Direction, R, I) Then
                            lScore = lScore + 2 * 2 ^ Tile(Direction, R, C)
                            Tile(Direction, R, C) = Tile(Direction, R, C) + 1
                            Tile(Direction, R, I) = 0
                            bIsMove = True
                        End If
                        Exit For    ' stop combining after first non-empty tile
                    End If
                Next I
            End If
        Next C
    Next R
    
    m_lTotalScore = m_lTotalScore + lScore
    If bIsMove Then AddTile
    FormatTiles Direction, bIsMove
    If bIsMove Then MidiMakeMove lScore
    
End Sub

' ------------------------------------------------------------
' Key Handlers:
' ------------------------------------------------------------

Sub LeftArrowPressed()
    MakeMove "L"
End Sub

Sub RightArrowPressed()
    MakeMove "R"
End Sub

Sub UpArrowPressed()
    MakeMove "U"
End Sub

Sub DownArrowPressed()
    MakeMove "D"
End Sub

Occasionally, we like to feature the many creative and unexpected ways in which people are using Excel to solve all sorts of problems, for both work and play.

For those of you who are fans of the hit mobile phone game 2048, some ingenious Excel users have created versions of the game inside of Excel!

The folks at spreadsheet1.com created a beautiful graphical version that not only lets you play the game, it also tracks your moves so that you can analyze your strategy afterwards using the power of Excel.

2048 img 1

Reddit user Krzychu81 created a sneakier version of the game that looks just like a financial report, for those who need to take a quick break at work.

2048 img 2

You can download both versions of Excel-style 2048 here:

  • Graphical version with analysis tools
  • Camouflaged version

What are your favorite creative uses of Excel? Let us know in the comments below.

 –Daniel Stein, Excel Program Manager 

Понравилась статья? Поделить с друзьями:
  • Что такое delphi microsoft excel
  • Что такое 14 кегель в редакторе word
  • Что такое dax excel
  • Что такое 12 кегль в word это
  • Что такое 109 в excel