Современные программные средства , Игра “НИМ” на 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 Мб (Скачать файл)

 

4217.02067988.07 – 1824 13

 

4217.02067988.07 – 1824

 

4217.02067988.07 – 1824

 

4217.02067988.07 – 1824 13

 

4217.02067988.07 – 1824 13

 

4217.02067988.07 – 1824 34

 

4217.02067988.07 – 1824 34

 

4217.02067988.07 – 1824 46

 

4217.02067988.07 – 1824 46

Министерство образования и науки Российской Федерации

Федеральное агентство  по образованию

Государственное образовательное  учреждение

высшего профессионального  образования

«Комсомольский-на-Амуре  государственный технический университет»

 

Кафедра «Математического обеспечения и применения ЭВМ»

Специальность 230105 – «Программное обеспечение вычислительной

техники и автоматизированных систем»

 

УТВЕРЖДАЮ

Заведующий кафедрой

В.А. Тихомиров

« »  2009 г.

 

 

 

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К КУРСОВОЙ РАБОТЕ

 

Игра “НИМ”

 

 

 

 

 

 

 

 

 

 

 

РУКОВОДИТЕЛЬ

______________В. А. Тихомиров

 

СТУДЕНТ группы 7ВТ5д-1

______________А. М. Пятов


 

 

 

 

2009

 

Министерство образования  и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

«Комсомольский-на-Амуре  государственный технический университет»

Кафедра 

 

УТВЕРЖДАЮ

Зав. кафедрой 

« » 200_ г.

 

ЗАДАНИЕ

на курсовую работу

Выдано студенту 

1. Тема проекта (работы) 

 

 

2. Исходные данные к проекту (работе) 

 

 

 

 

 

 

 

Задание принял к исполнению    « » 200_ г.

(подпись)

Руководитель  

(подпись) (Ф.И.О.)

 

 

Содержание

 

Введение               4

Текст программы              5

Руководство программиста                       11

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

 

 

 

Введение

 

 

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

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

 

 

 

 

 

 

 

 

 

Текст программы

 

Option Base 1 'изменение стандартного считывания индексов массива

 

' объявление общих переменных

Dim Array_keep()  As Variant  'массив для хранения генерируемого количества

 'фишек в столбце

Dim Array_keep_2  As Variant   'вспомогательный массив для изменения

'размерности первого массива

Dim String_Range  As String    'строка для записи диапазона ячеек

Dim Amount_Column  As Integer 'для хранения количества столбцов фишек

Dim i, i1  As Integer          'индексы циклов

Dim a, b  As Integer           'для присвоения граничных значений количества

        'фишек и для расчёта координат фишек

Dim First_Column  As Integer 'для хранения координаты первого столбца фишек

Dim X, Y, H, W As Integer     'для хранения координат выделенной области

Dim P  As Integer              'для проверки очерёдности хода

 

Sub Макрос_генерация_количества_фишек()

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

'Выбор диапазона  генерируемых значений от a до b

a = 1        'минимальное генерируемое значение

b = 10       'максимальное генерируемое значение

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

P = -1 'присвоение первоначального значения, для обхода условия в процедуре прорисовки фишек

End Sub

 

Sub Макрос_подготовка_поля()

'Подготовка  размера внешней рамки

Rows("1:1").RowHeight = 17.25

Rows("14:14").RowHeight = 17.25

Columns("A:A").ColumnWidth = 2.57

Columns("N:N").ColumnWidth = 2.57

'Подготовка цвета внешней рамки

Range("A1:A14").Select

Selection.Interior.ColorIndex = 12

Range("A14:N14").Select

Selection.Interior.ColorIndex = 12

Range("N1:N14").Select

Selection.Interior.ColorIndex = 12

Range("A1:N1").Select

Selection.Interior.ColorIndex = 12

'Подготовка размера внутренней рамки

Rows("2:2").RowHeight = 3.75

Rows("13:13").RowHeight = 3.75

Columns("B:B").ColumnWidth = 0.33

Columns("M:M").ColumnWidth = 0.33

 

'Подготовка цвета внутренней рамки

Range("B2:B13").Select

Selection.Interior.ColorIndex = 2

Range("B13:M13").Select

Selection.Interior.ColorIndex = 2

Range("M2:M13").Select

Selection.Interior.ColorIndex = 2

Range("B2:M2").Select

Selection.Interior.ColorIndex = 2

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

Range("15:100").Select

Selection.Interior.ColorIndex = 2

Range("O:AZ").Select

Selection.Interior.ColorIndex = 2

'Удаление линий сетки в поле

Range("C3:L12").Select

With Selection.Interior

     .ColorIndex = 2

     .Pattern = xlSolid

     .PatternColorIndex = xlAutomatic

End With

'Подготовка вида рамки фишек

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

With Selection.Borders(xlEdgeLeft)

    .LineStyle = xlDouble

   .Weight = xlThick

     .ColorIndex = 55

End With

With Selection.Borders(xlEdgeTop)

     .LineStyle = xlDouble

     .Weight = xlThick

     .ColorIndex = 55

End With

With Selection.Borders(xlEdgeBottom)

     .LineStyle = xlDouble

     .Weight = xlThick

     .ColorIndex = 55

End With

With Selection.Borders(xlEdgeRight)

     .LineStyle = xlDouble

     .Weight = xlThick

     .ColorIndex = 55

End With

With Selection.Borders(xlInsideVertical)

     .LineStyle = xlDouble

     .Weight = xlThick

     .ColorIndex = 55

End With

With Selection.Borders(xlInsideHorizontal)

     .LineStyle = xlDouble

     .Weight = xlThick

     .ColorIndex = 55

End With

'Подготовка размера фишек

Rows("3:12").RowHeight = 28.5

Columns("C:L").ColumnWidth = 4.71

End Sub

 

Sub Прорисовка_фишек()

'Прорисовка фишек с  выравниванием по горизонтали  относительно столбца H

'(по центру) и по вертикали относительно строки 12 (по нижней границе)

'Полная очистка поля

Range("C3:L12").Select

With Selection.Interior

     .ColorIndex = 2

     .Pattern = xlSolid

     .PatternColorIndex = xlAutomatic

End With

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

a = Amount_Column / 2

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

a = Asc("H") - a

First_Column = a - 64 'сохранение координаты первого столбца в цифровой

       'индексации, т.е. ячейка A1 - это (1;1)

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

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  'выбор области прорисовки

    'Подготовка вида фишек

    With Selection.Interior

         .ColorIndex = 50         'цвет фона

         .Pattern = xlGray8      'вид узора

         .PatternColorIndex = 42 'цвет узора

    End With

   a = a + 1 'изменение координаты столбца

Next i

Range("C3").Select

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

Select Case P

       Case Is = 0

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

       Case Is = 1

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

End Select

End Sub

 

Sub Изменение_расположения_кнопок()

ActiveSheet.Shapes("AutoShape 19").Select  'выбор кнопки (автофигура "Багетная рамка")

                                      'AutoShape 4 - кнопка "Начать игру"

                                       'AutoShape 18 - кнопка "Подтвердить выбор"

                                      'AutoShape 19 - кнопка "Сдаться"

Selection.ShapeRange.ZOrder msoBringToFront 'перемещение выделенного

       'объекта на передний план

ActiveSheet.Shapes("AutoShape 18").Select

Selection.ShapeRange.IncrementTop -80  'смещение выделенного объекта вверх на 80 единиц

Range("C3").Select

End Sub

 

Sub Выбор_игрока()

MsgBox "Сделайте свой выбор"

End Sub

 

Sub Button_Подтвердить_выбор()

'Параметры выделенной  области

X = Selection.Row            'строка

Y = Selection.Column         'столбец

H = Selection.Rows.Count    'количество строк

W = Selection.Columns.Count 'количество столбцов

'Проверка количества выделенных столбцов

If W > 1 Then

   MsgBox "Сделайте правильный выбор" & vbCr & "Выбрано два или более столбца"

  Exit Sub

End If

'Проверка выделения столбцов внутри поля

If First_Column <= Y And Y < First_Column + Amount_Column Then

   'Поиск и запоминание индекса массива, где хранится количество фишек в выбранном столбце

   i1 = 1

   a = First_Column

   Do While a <> Y

            a = a + 1

            i1 = i1 + 1

   Loop

   'Проверка выделения фишек внутри поля в пределах одного уже выбранного столбца

   If 13 - Array_keep(i1) <= X And X <= 12 Then

      'Проверка выделения фишек ниже строки 12

      If X = 12 And H > 1 Then

         MsgBox "Сделайте правильный выбор"

         Exit Sub

     Else

         'условие победы ирока

         If Amount_Column = 1 And Array_keep(i1) = H Then

            ActiveSheet.Shapes("AutoShape 18").Select

            Selection.ShapeRange.IncrementTop 80 'смещение выделенного объекта вниз на 80 единиц

            ActiveSheet.Shapes("AutoShape 4").Select

            Selection.ShapeRange.ZOrder msoBringToFront

            Range("C3:L12").Select

            Selection.Borders(xlDiagonalDown).LineStyle = xlNone

            Selection.Borders(xlDiagonalUp).LineStyle = xlNone

            Selection.Borders(xlEdgeLeft).LineStyle = xlNone

            Selection.Borders(xlEdgeTop).LineStyle = xlNone

            Selection.Borders(xlEdgeBottom).LineStyle = xlNone

            Selection.Borders(xlEdgeRight).LineStyle = xlNone

            Selection.Borders(xlInsideVertical).LineStyle = xlNone

           Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

            With Selection.Interior

                 .ColorIndex = 1

                 .Pattern = xlGray50

                 .PatternColorIndex = 2

            End With

            Range("C3").Select

            MsgBox "Вы победили"

            Range("C3").Select

            Exit Sub

         End If

         P = 0 'для проверки выполнения процедуры прорисовки

         Call Изменение_количества_и_перерисовка_фишек

      End If

   Else

      MsgBox "Сделайте правильный выбор"

      Exit Sub

   End If

 

Else

   MsgBox "Сделайте правильный выбор"

   Exit Sub

End If

End Sub

 

Sub Изменение_количества_и_перерисовка_фишек()

'Резервирование в памяти  дополнительного массива, необходимого для

'изменения размерности первого

ReDim Array_keep_2(Amount_Column)

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

For i = 1 To Amount_Column

    Array_keep_2(i) = Array_keep(i)

Next i

a = Amount_Column  'запоминание старой размерности массива

'Проверка: выделен ли столбец полностью

If Array_keep(i1) = H Then

   Amount_Column = Amount_Column - 1  'изменение размерности массива

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

   'Удаление полностью выделенного столбца

   b = 0

   For i = 1 To a

       If i <> i1 Then

          b = b + 1

         Array_keep(b) = Array_keep_2(i)

       End If

   Next i

   Call Прорисовка_фишек 'прорисовка нового количества фишек

'Изменение количества  фишек в выделеном столбце

Else

   Array_keep(i1) = Array_keep(i1) - H

   b = 13 - Array_keep(i1) 'новая координата расположения верхней фишки

   'Удаление выбранных фишек

   String_Range = Chr(Y + 64) & "3" & ":" & Chr(Y + 64) & LTrim(Str(b - 1))

   Range(String_Range).Select

   With Selection.Interior

        .ColorIndex = 2

        .Pattern = xlSolid

        .PatternColorIndex = xlAutomatic

   End With

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

   String_Range = Chr(Y + 64) & LTrim(Str(b)) & ":" & Chr(Y + 64) & "12"

   Range(String_Range).Select

   With Selection.Interior

        .ColorIndex = 50

        .Pattern = xlGray8

        .PatternColorIndex = 42

  End With

   Range("C3").Select

   Select Case P

          Case Is = 0

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

          Case Is = 1

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

   End Select

End If

End Sub

 

Sub Выбор_компьютера()

MsgBox "Ход компьютера"

'Условие победы компьютера

If Amount_Column = 1 Then

   Call Button_Сдаться

Else

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

   a = 1

   b = Amount_Column

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

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

   a = 1

   b = Array_keep(i1)

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

   P = 1

   Call Изменение_количества_и_перерисовка_фишек

End If

End Sub

 

Sub Button_Начать_игру()

Call Макрос_генерация_количества_фишек

Call Макрос_подготовка_поля

Call Прорисовка_фишек

Call Изменение_расположения_кнопок

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

End Sub

 

Sub Button_Сдаться()

ActiveSheet.Shapes("AutoShape 18").Select

Selection.ShapeRange.IncrementTop 80 'смещение выделенного объекта вниз на 80 единиц

ActiveSheet.Shapes("AutoShape 4").Select

Selection.ShapeRange.ZOrder msoBringToFront

Range("C3:L12").Select

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

Selection.Borders(xlEdgeLeft).LineStyle = xlNone

Selection.Borders(xlEdgeTop).LineStyle = xlNone

Selection.Borders(xlEdgeBottom).LineStyle = xlNone

Selection.Borders(xlEdgeRight).LineStyle = xlNone

Selection.Borders(xlInsideVertical).LineStyle = xlNone

Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

With Selection.Interior

     .ColorIndex = 1

    .Pattern = xlGray50

   .PatternColorIndex = 2

End With

Range("C3").Select

MsgBox "Вы проиграли"

End Sub

 

 

 

Руководство программиста

 

Правила игры “НИМ” состоят в том, что соперники по очереди забирают из одной группы любое количество предметов (количество групп и предметов в группах изначально произвольное) и побеждает тот, кто возьмёт последние предметы. Так как программироваться данная программа будет в среде Visual Basic for Application в табличном редакторе Microsoft Excel, то для удобства назовем предметы – фишками, которые будут представлять собой ячейки, объединённые в группы (столбцы) рабочего листа Excel.

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