Практикум по программированию: игра "Жизнь"

Ключевые слова: программирование, язык программирования, практикум, классика, игра, жизнь, клеточный автомат, клетка, visual basic for applications, vba, doc, пример, скачать

Автор: Приходько Максим Александрович

Игра «Жизнь» - классическая задача программирования, которую однажды решает, наверное, любой программист. Насколько игра проста, настолько же потрясающие результаты можно получить с ее помощью.

Игра "Жизнь" - пример клеточного автомата. Правила классической игры просты: конечное прямоугольное поле разбито на квадратные ячейки. Каждая из таких ячеек может быть либо пуста, либо содержать "жизнь" - клетку. В начальный момент времени имеется набор n клеток, размещенных по полю тем или иным образом. Каждое следующее размещение клеток определяется пошагово на основании нескольких правил, учитывающих число соседей клетки (максимально возможное число соседей - 8, т.е. учитываются и соседи по диагонали):

  • если у живой клетки 2 или 3 соседа, она продолжает жить
  • если у пустой ячейки ровно 3 соседа, то в ней зарождается жизнь (появляется клетка)
  • если у любой клетки меньше 2 или больше 3 соседей, то она остается пустой или "умирает"
  • сначала определяются оживающие клетки
  • потом - "умирающие", при этом "оживающие" на этом шаге клетки не учитываются
  • "переразмещение" клеток происходит одновременно, чтобы исключить ошибки, возникающие в случае последовательного размещения клеток
В данном практикуме предлагается изучить реализацию игры "Жизнь" на языке VBA, а затем ответить на несколько вопросов.

В некоторых версиях MS Word может возникнуть

проблема с компиляцией кода. Для ее решения

необходимо внести следующие изменения:

1. Shading.BackgroundPatternColor заменить на

Shading.BackgroundPatternColorIndex (жирным

выделено изменение)

2. в определениях цветов wdColorBrightGreen

и wdColorWhite убрать слово Color, чтобы получилось

wdBrightGreen и wdWhite соответственно

Пройти аттестацию "Практикум программирования: игра "Жизнь"

(аттестация откроется в новом окне, не закрывайте текущее окно, так как вам понадобится приведенный далее текст программы)

1

Sub xlife()

2

'

3

' draw Макрос

4

' Макрос создан 19.05.2008 mprikhodko

5

'

6

Dim i As Integer

7

Dim j As Integer

8

Dim n As Integer

9

Dim m As Integer

10

Dim x As Integer

11

Dim y As Integer

12

13

Dim a As Integer

14

Dim b As Integer

15

16

Dim t As Table

17

18

Dim sosedi As Integer

19

20

Dim

life(10, 10) As Integer

21

Dim

born(10, 10) As Integer

22

Dim

die(10, 10) As Integer

23

24

For

a = 1 To 10

25

For

b = 1 To 10

26

life(a

- 1, b - 1) = 0

27

Next

28

Next

29

30

i

= 10

31

j

= 10

32

33

n

= 50

34

m

= 0

35

Do

While (m < n)

36

Randomize

37


38

x

= Int(10 * Rnd)

39

y

= Int(10 * Rnd)

40

41

If

(life(x, y) = 0) Then

42

life(x,

y) = 1

43

m

= m + 1

44

End

If

45

Loop

46

47

Do

While (ThisDocument.Tables.Count > 0)

48

Set

t = ThisDocument.Tables(1)

49

t.Delete

50

Loop

51

52

Selection.Collapse

53

Set

t = ThisDocument.Tables.Add(Selection.Range, 10, 10)

54

For

a = 1 To 10

55

For

b = 1 To 10

56

If

life(a - 1, b - 1) = 1 Then

57

t.Cell(a,

b).Shading.BackgroundPatternColorIndex = wdBrightGreen

58

Else

59

t.Cell(a,

b).Shading.BackgroundPatternColorIndex = wdWhite

60

End

If

61

Next

62

Next

63

64

Do

While (n > 2)

65

For

a = 1 To 10

66

For

b = 1 To 10

67

68

sosedi

= 0

69

If

a > 1 And b > 1 Then

70

sosedi

= sosedi + life(a - 2, b - 2)

71

End

If

72

If

a < 10 And b < 10 Then

73

sosedi

= sosedi + life(a, b)

74

End

If

75

If

a > 1 Then

76

sosedi

= sosedi + life(a - 2, b - 1) + life(a - 2, b)

77

End

If

78

If

b > 1 Then

79

sosedi

= sosedi + life(a - 1, b - 2) + life(a, b - 2)

80

End

If

81

sosedi

= sosedi + life(a, b - 1) + life(a - 1, b)

82

83

If

sosedi = 3 Then

84

born(a

- 1, b - 1) = 1

85

Else

86

born(a

- 1, b - 1) = 0

87

End

If

88

Next

89

Next

90

91

For

a = 1 To 10

92

For

b = 1 To 10

93

sosedi

= 0

94

If

a > 1 And b > 1 Then

95

sosedi

= sosedi + life(a - 2, b - 2)

96

End

If

97

If

a < 10 And b < 10 Then

98

sosedi

= sosedi + life(a, b)

99

End

If

100

If

a > 1 Then

101

sosedi

= sosedi + life(a - 2, b - 1) + life(a - 2, b)

102

End

If

103

If

b > 1 Then

104

sosedi

= sosedi + life(a - 1, b - 2) + life(a, b - 2)

105

End

If

106

sosedi

= sosedi + life(a, b - 1) + life(a - 1, b)

107

108

If

sosedi <> 3 Then

109

die(a

- 1, b - 1) = 1

110

Else

111

die(a

- 1, b - 1) = 0

112

End

If

113

Next

114

Next

115

116

For

a = 1 To 10

117

For

b = 1 To 10

118

If

born(a - 1, b - 1) = 1 Then

119

life(a

- 1, b - 1) = 1

120

End

If

121

Next

122

Next

123

124

For

a = 1 To 10

125

For

b = 1 To 10

126

If

die(a - 1, b - 1) = 1 Then

127

life(a

- 1, b - 1) = 0

128

End

If

129

Next

130

Next

131

132

n

= 0

133

For

a = 1 To 10

134

For

b = 1 To 10

135

If

(life(a - 1, b - 1) = 1) Then

136

n

= n + 1

137

End

If

138

Next

139

Next

140

141

Do

While (ThisDocument.Tables.Count > 0)

142

Set

t = ThisDocument.Tables(1)

143

t.Delete

144

Loop

145

146

Selection.Collapse

147

Set

t = ThisDocument.Tables.Add(Selection.Range, 10, 10)

148

For

a = 1 To 10

149

For

b = 1 To 10

150

If

life(a - 1, b - 1) = 1 Then

151

t.Cell(a,

b).Shading.BackgroundPatternColorIndex = wdBrightGreen

152

Else

153

t.Cell(a,

b).Shading.BackgroundPatternColorIndex = wdWhite

154

End

If

155

Next

156

Next

157

158

MsgBox

("step")

159

160

161

Loop

162


163

End

Sub

Файлы для скачивания

Все файлы
1 файла

Игра "Жизнь"

 

Учебная программа, иллюстрирующая игру "Жизнь"

Скачать! (n/a)

Загружен: 24.05.2008
Скачан: 358
Последний раз: 19.07.2022

Адаптивное тестирование - быстрая и точная оценка персонала
 

Другие статьи в рубрике