Автор работы: Пользователь скрыл имя, 10 Июня 2013 в 15:17, курсовая работа
Игра “НИМ” – одна из самых старых и увлекательных математических игр. Для игры в “ним” необходим партнёр (в “ним” играют вдвоём), стол и набор фишек. В качестве фишек обычно используются камешки или монетки.
Правила игры “Ним” очень просты. Игроки по очереди забирают одну или несколько фишек из любого ряда. Не разрешается за один ход брать фишки из нескольких рядов. Выигрывает тот, кто возьмёт последнюю фишку (фишки).
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(
Selection.Borders(
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(
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = 55
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = 55
End With
With Selection.Borders(
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = 55
End With
With Selection.Borders(
.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.
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.
ActiveSheet.Shapes("AutoShape 4").Select
Selection.ShapeRange.ZOrder msoBringToFront
Range("C3:L12").Select
Selection.Borders(
Selection.Borders(
Selection.Borders(xlEdgeLeft).
Selection.Borders(xlEdgeTop).
Selection.Borders(
Selection.Borders(xlEdgeRight)
Selection.Borders(
Selection.Borders(
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.
ActiveSheet.Shapes("AutoShape 4").Select
Selection.ShapeRange.ZOrder msoBringToFront
Range("C3:L12").Select
Selection.Borders(
Selection.Borders(
Selection.Borders(xlEdgeLeft).
Selection.Borders(xlEdgeTop).
Selection.Borders(
Selection.Borders(xlEdgeRight)
Selection.Borders(
Selection.Borders(
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