Современные программные средства , Игра “НИМ” на Visual Basic, Excel

Автор работы: Пользователь скрыл имя, 10 Июня 2013 в 15:17, курсовая работа

Описание работы

Игра “НИМ” – одна из самых старых и увлекательных математических игр. Для игры в “ним” необходим партнёр (в “ним” играют вдвоём), стол и набор фишек. В качестве фишек обычно используются камешки или монетки.
Правила игры “Ним” очень просты. Игроки по очереди забирают одну или несколько фишек из любого ряда. Не разрешается за один ход брать фишки из нескольких рядов. Выигрывает тот, кто возьмёт последнюю фишку (фишки).

Файлы: 4 файла

7ВТ5д-1_ПятовАМ_СПС2_1.xls

— 25.50 Кб (Просмотреть файл, Скачать файл)

7ВТ5д-1_ПятовАМ_СПС2_2.xls

— 43.50 Кб (Просмотреть файл, Скачать файл)

Курсовая работа.xls

— 82.00 Кб (Просмотреть файл, Скачать файл)

Пояснительная_записка_к_курсовой_работе.doc

— 1.38 Мб (Скачать файл)

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

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

  1. создать игровое поле с некоторым количеством фишек,
  2. предоставить возможность игроку сделать выбор,
  3. проверить условие победы и убрать выбранные фишки,
  4. проверить условие победы  и предоставить выбор компьютеру,
  5. вывести сообщение о победе или проигрыше.

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

Для начала составим процедуру, которая подготовит игровое поле. Назовем её - Макрос_подготовка_поля. Её основная задача состоит в обозначении видимых границ поля и фишек, а так же их размера и цвета. Так как фишки представляют собой ячейки рабочего листа, то всё игровой поле – это некоторая часть этого листа. Так как было условленно, что максимальное количество столбцов и фишек равняется десяти, то внешней границей игрового поля будут диапазоны ячеек A1:A14, A14:N14, N1:N14, A1:N1, внутренней границей – B2:B13, B13:M13, M2:M13, B2:M2 (две границ выбраны из-за того, что они имеют разный цвет фона ячеек). Соответственно оставшийся диапазон C3:L12 – это собственно само игровое поле. В этой процедуре используются функции обращения к свойствам ячеек рабочего листа, такие как:

  • Range.Select – выбор ячейки или их диапазона,
  • Rows.RowHeight – изменение высоты строки,
  • Columns.ColumnWidth – изменение ширины столбца,
  • Selection.Interior.ColorIndex – изменение цвета фона ячейки,
  • Selection.Borders – изменение границ ячейки.

Эта часть процедуры

'Удаление линий сетки за пределами поля

Range("15:100").Select

Selection.Interior.ColorIndex = 2

Range("O:AZ").Select

 Selection.Interior.ColorIndex = 2

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

Когда эта процедура  будет готова следует вызвать  её на выполнение, после которого на активном рабочем листе появится пустое игровое поле (рис. 1).


 

 

 

 

 

 

 

 

 


 

Нужно также подготовить интерфейс  пользователя, с помощью которого игрок будет управлять ходом игры. Для этого в открытой книге Excel на первом рабочем листе при помощи панели рисования Автофигуры\Основные фигуры\Багетная рамка подготовим три управляющих кнопки: “Начать игру”, ”Подтвердить выбор” и ”Сдаться” и расположить их так, как показано на рисунке 2.


 

 

 

 

 

 

 

 

 

 

 


 

На рисунке представлена одна кнопка, в то время как две другие располагаются точно под ней. Этот рисунок также представляет собой первый экран интерфейса, который будет видеть игрок, а нажатие на кнопку “Начать игру” запустит всю программу на выполнение.

Теперь следует определить оставшиеся необходимые процедуры и  проработать все их взаимосвязи внутри нашей программы после её запуска. Составим список всех процедур:

  1. Макрос_генерация_количества_фишек,
  2. Макрос_подготовка_поля,
  3. Прорисовка_фишек,
  4. Изменение_расположения_кнопок,
  5. Выбор_игрока,
  6. Button_Подтвердить_выбор,
  7. Изменение_количества_и_перерисовка_фишек,
  8. Выбор_компьютера,
  9. Button_Начать_игру,
  10. Button_Сдаться.

Процедуры, названия которых начинаются со слова “Button” вызываются после нажатия соответствующей кнопки, и именно они вызывают все остальные процедуры. На рисунке 3 представлен алгоритм вызова процедур после нажатия кнопки “Начать игру”.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Процедура Макрос_генерация_количества_фишек использует генератор VBA Rnd(), при этом вначале нужно его инициализировать при помощи команды Randomize. Также вместе с функцией Rnd() используется функция Int(), которая позволяет сгенерировать только натуральные значения. В переменную Amount_Column запоминается значение количества столбцов, и она же задаёт размерность массива Array_keep, который хранит число фишек для каждого столбца.

Randomize    'инициализация VBA-генератора

Amount_Column = Int((b - a + 1) * Rnd + a)

If Amount_Column < 3 Then Amount_Column = 3 'увеличение количества столбцов до трёх

'Генерация количества  фишек в столбце

ReDim Array_keep(Amount_Column) 'резервирование в памяти массива

'Заполнение  массива сгенерированными числами

For i = 1 To Amount_Column

    Array_keep(i) = Int((b - a + 1) * Rnd + a)

Next i

Как видно из блок-схемы (рис. 3) после нажатия кнопки “Начать игру” с помощью функции Call происходит вызов процедур, которые подготавливают игровое поле для первого хода. При этом в процедуре Прорисовка_фишек производится проверка очерёдности хода:

'Проверка очерёдности хода

Select Case P

       Case Is = 0

            Call Выбор_компьютера

       Case Is = 1

            Call Выбор_игрока

End Select

Причём первоначальное значение переменной P=-1 присваивается уже в процедуре Макрос_генерация_количества_фишек. Это необходимо для того, чтобы обойти множественный выбор Case на первом ходу.

Процедура Прорисовка_фишек использует значения переменной Amount_Column и массива Array_keep для отображения в игровом поле текущего количества фишек и их распределения по столбцам. При первом её вызове (после нажатия кнопки “Начать игру”) будет показано первоначальное состояние игры. Для этого сначала вычисляется координата первого столбца, причем производится проверка на четность полученного значения, если число нечетное, то от него отбрасывается дробная часть, и оно увеличивается на единицу. Это необходимо для того, чтобы выровнять текущее количество столбцом относительно центра игрового поля (столбца H).

'Расчёт координаты  первого столбца

a = Amount_Column / 2

If a - Int(a) > 0 Then a = Int(a) + 1

a = Asc("H") - a

First_Column = a - 64

После определяется значение переменной a в ASCI кодах,  используемое вместе с функцией Chr() в цикле, который отображает количество фишек для каждого столбца. В переменная b вычисляется значение для верхней фишки в текущем столбце, а в переменной String_Range задаётся диапазон ячеек.

'Цикл прорисовки

For i = 1 To Amount_Column

    b = 13 - Array_keep(i)  'расчёт координаты верхней фишки

    String_Range = Chr(a) & LTrim(Str(b)) & ":" & Chr(a) & "12"

    'функция LTrim() используется из-за того, что Str() создаёт пробел перед числом

    Range(String_Range).Select 

После того как процедура Прорисовка_фишек выполнена (при условии, что P=-1) управление передаётся в процедуру Изменение_расположения_кнопок, которая, используя свойства объектов Excel, изменяет расположение управляющих кнопок. Далее вызывается процедура Выбор_игрока, выводящая сообщение “Сделайте свой выбор”, после чего происходит выход из процедуры Button_Начать_игру и программа переходит в режим ожидания до тех пор пока игрок не нажмёт какую-либо из управляющих кнопок.

Как только игрок выберет (выделит) какие-нибудь фишки в игровом  поле и нажмет кнопку “Подтвердить выбор” программа передаст управление процедуре Button_Подтвердить_выбор, главная задача которой проверить выбор игрока. Для этого вначале происходит сохранение параметров выделенной области в переменные X,Y,H,W. Затем проверяется количество выбранных столбцов, если их количество равно единице, то проверка продолжается, если же нет, то выдаётся сообщение о неправильном выборе и программа снова переходит в режим ожидания. Далее проверяется, где находиться выделенная область относительно столбцов. Если она выходит за пределы игрового поля, то программа опять ожидает повторного выбор игрока. Когда это условие выполнится, начнётся поиск индекса массива Array_keep, где храниться количество фишек в данном столбце:

   i1 = 1

   a = First_Column

   Do While a <> Y

            a = a + 1

            i1 = i1 + 1

   Loop

Как только такое значение будет найдено, начнётся проверка выбора именно фишек в этом столбце. При  наличии в выделенной области ячеек, которые не входят в диапазон фишек, программа снова перейдёт в режим ожидания. Если таких ячеек не обнаружится, то последует проверка выбора фишек внутри игрового поля относительно нижней границы (строки 12). При условии правильного выбора произойдет последняя проверка победы игрока, в случае подтверждения которой процедура Button_Подтвердить_выбор изменит расположение управляющих кнопок, очистит игровое поле и выдаст сообщение о победе. Если же условие не будет выполнено, то переменная P изменит значение на 0 и будет вызвана процедура Изменение_количества_и_перерисовка_фишек.

Эта процедура при помощи дополнительного  массива Array_keep_2 меняет размерность массива Array_keep при условии, что были выбраны все фишки в столбце. Также происходит удаление этих фишек из игрового поля, сохранение оставшихся фишек в заново зарезервированный массив Array_keep с новой размерностью и вызов процедуры Прорисовка_фишек. В случае если выделены не все фишки, происходит удаление выбранных фишек с сохранением в массив Array_keep с этим же индексом нового количества фишек и их отображение на игровом поле. Потом проверяется очерёдность хода и в зависимости от результата вызывается процедура: Выбор_компьютера или Выбор_игрока.

Как только управление передаться в процедуру Выбор_компьютера будет выведено сообщение “Ход компьютера”, и осуществлена проверка условия победы компьютера, в случае подтверждения которой вызовется процедура Button_Сдаться. Если это условие не выполнимо, то компьютер при помощи генератора случайных чисел наугад выберет какой-нибудь столбец и какое-нибудь количество фишек в нём, после чего будет снова вызвана процедура Изменение_количества_и_перерисовка_фишек.

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

 

 

 

Руководство оператора

 

Программа предназначена  для игры человека с компьютером. Цель игры заключается в том, что необходимо любыми средствами попытаться последним забрать оставшиеся фишки. Основные трудности возникают из-за того, что брать фишки можно только из одного столбца. Поэтому нужно стараться сделать так, чтобы количество оставшихся фишек можно было забрать за два хода: противника и своего, что обеспечит победу.

Интерфейс программы  представляет собой рабочий лист Microsoft Excel, на котором отображается игровое поле и управляющие кнопки. При первоначальном запуске управляющая кнопка только одна (рис. 4) – это кнопка “Начать игру”.


 

 

 

 

 

 

 

 

 

 


 

 

При нажатии на неё произойдёт изменение интерфейса (рис. 5) – появление двух новых кнопок “Подтвердить выбор” и ”Сдаться” – и появление на игровом поле начального количества фишек.


 

 

 

 

 

 

 

 

 

 


 

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


 

 

 



После нажатия в этом окне кнопки OK программа перейдёт в режим ожидания подтверждения выбора или желания сдаться. Прежде чем нажимать кнопку “Подтвердить выбор” необходимо на игровом поле выбрать какое-нибудь количество фишек в каком-то одном столбце (рис. 7).

 

 


 

 

 

 

 

 

 

 

 


 

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


 

 

 

 


 

 

 

 

 

 

 

Игра будет продолжаться до тех  пор, пока или игрок или компьютер  не заберут последние фишки. Если последние фишки забрал игрок, то появится окно с сообщением “Вы победили” (рис. 9а), если последние фишки взял компьютер, то появиться окно “Вы проиграли” (рис. 9б). Это же окно появиться, когда игрок нажмёт кнопку “Сдаться”.


 

 

 

 


 

 

 

 




Информация о работе Современные программные средства , Игра “НИМ” на Visual Basic, Excel