Advertisement
Guest User

map.go

a guest
May 19th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.91 KB | None | 0 0
  1. package game_logic
  2.  
  3. import (
  4. "fmt"
  5. "math/rand"
  6. "time"
  7. )
  8.  
  9. type Template struct {
  10. Tmp []int
  11. Barriers [][]int
  12. }
  13.  
  14. func Insert(slice []int, index, value int) []int {
  15. // Увеличиваем срез на один элемент
  16. slice = slice[0 : len(slice)+1]
  17. // Используем copy для перемещения верхней части среза наружу и создания пустого места
  18. copy(slice[index+1:], slice[index:])
  19. // Записываем новое значение.
  20. slice[index] = value
  21. // Возвращаем результат.
  22. return slice
  23. }
  24.  
  25. // Создание карты
  26. func MapGeneration() (*Map, []*Barrier) {
  27.  
  28. var m Map
  29. var b []*Barrier
  30.  
  31. // Инициализируем параметры карты
  32. m.TileSize = 20
  33. m.SizeX = 100
  34. m.SizeY = 100
  35.  
  36. // Логика заполнения карты препятствиями:
  37. // Делим карту на 16 блоков (4x4 каждый по 25 тайлов)
  38. // Заполняем каждый блок препятствиями
  39.  
  40. // blockX := ( m.SizeX ) / blockCount;
  41. // blockY := ( m.SizeY ) / blockCount;
  42.  
  43. // Создаем границы карты
  44.  
  45. // Генерируем вертикальные границы
  46. // for i := 0; i < m.SizeY; i++ {
  47. // for j := 0; j < m.SizeX; j++ {
  48. // if i == 0 || i == m.SizeY-1 || j == 0 || j == m.SizeX -1 {
  49. // m.Field[m.SizeY * i + j] = 1;
  50. // }
  51. // }
  52. // }
  53.  
  54. // Задаем массив шаблонов карт:
  55. // Каждый шаблон - массив 20x20, заполенный препядствием
  56.  
  57.  
  58. tmp1 := Template{
  59. Tmp : []int{
  60. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  61. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  62. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  63. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  64. 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  65. 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  66. 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  67. 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
  68. 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
  69. 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
  70. },
  71. Barriers : [][]int{
  72. []int{
  73. 7 * m.TileSize, 0, 3 * m.TileSize, 2 * m.TileSize,
  74. },
  75. []int {
  76. 0, 4 * m.TileSize, 6 * m.TileSize, 3 * m.TileSize,
  77. },
  78. []int {
  79. 0, 4 * m.TileSize, 6 * m.TileSize, 3 * m.TileSize,
  80. },
  81. },
  82. }
  83.  
  84. tmp2 := Template{
  85. Tmp : []int{
  86. 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  87. 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  88. 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  89. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  90. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  91. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  92. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  93. 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
  94. 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
  95. 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
  96. },
  97. Barriers : [][]int{
  98. []int{
  99. 0, 0, 6 * m.TileSize, 3 * m.TileSize,
  100. },
  101. []int {
  102. 3 * m.TileSize, 7 * m.TileSize, 3 * m.TileSize, 3 * m.TileSize,
  103. },
  104. },
  105. }
  106.  
  107. tmp3 := Template{
  108. Tmp : []int{
  109. 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
  110. 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
  111. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  112. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  113. 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  114. 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  115. 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  116. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  117. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  118. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  119. },
  120. Barriers : [][]int{
  121. []int{
  122. 0, 0, 3 * m.TileSize, 2 * m.TileSize,
  123. },
  124. []int {
  125. 0, 4 * m.TileSize, 6 * m.TileSize, 3 * m.TileSize,
  126. },
  127. },
  128. }
  129.  
  130. tmp4 := Template{
  131. Tmp : []int{
  132. 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
  133. 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
  134. 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
  135. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  136. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  137. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  138. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  139. 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
  140. 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
  141. 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
  142. },
  143. Barriers : [][]int{
  144. []int{
  145. 4 * m.TileSize, 0, 6 * m.TileSize, 3 * m.TileSize,
  146. },
  147. []int{
  148. 7 * m.TileSize, 3 * m.TileSize, 3 * m.TileSize, 3 * m.TileSize,
  149. },
  150. []int {
  151. 0, 7 * m.TileSize, 3 * m.TileSize, 3 * m.TileSize,
  152. },
  153. },
  154. }
  155.  
  156. tmp5 := Template{
  157. Tmp : []int{
  158. 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  159. 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  160. 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  161. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  162. 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
  163. 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
  164. 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
  165. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  166. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  167. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  168. },
  169. Barriers : [][]int{
  170. []int{
  171. 0, 0, 2 * m.TileSize, 3 * m.TileSize,
  172. },
  173. []int{
  174. 4 * m.TileSize, 4 * m.TileSize, 6 * m.TileSize, 3 * m.TileSize,
  175. },
  176. []int {
  177. 7 * m.TileSize, 7 * m.TileSize, 3 * m.TileSize, 3 * m.TileSize,
  178. },
  179. },
  180. }
  181.  
  182. tmp6 := Template{
  183. Tmp : []int{
  184. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  185. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  186. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  187. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  188. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  189. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  190. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  191. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  192. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  193. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  194. },
  195. Barriers : [][]int{},
  196. }
  197.  
  198. var templates []Template
  199.  
  200. templates = append(templates, tmp1)
  201. templates = append(templates, tmp2)
  202. templates = append(templates, tmp3)
  203. templates = append(templates, tmp4)
  204. templates = append(templates, tmp5)
  205. templates = append(templates, tmp6)
  206. // templates = append(templates, template5)
  207. // templates = append(templates, template6)
  208.  
  209. // Задаем сид для рандомайзера
  210. rand.Seed(time.Now().UnixNano())
  211.  
  212. blockSize := 10
  213. blockCount := m.SizeX / blockSize
  214.  
  215. // Билдм мапу
  216.  
  217. for i := 0; i < m.SizeY; i++ {
  218. for j := 0; j < m.SizeX; j++ {
  219. m.Field[i][j] = 0
  220. }
  221. }
  222.  
  223. for i := 0; i < blockCount; i++ {
  224. for j := 0; j < blockCount; j++ {
  225. template := templates[rand.Intn(len(templates))]
  226. for g := 0; g < len(template.Barriers); g++ {
  227. bar := Barrier {}
  228. bar.Object = &DynamycObject{
  229. X : template.Barriers[g][0],
  230. Y : template.Barriers[g][1],
  231. Xsize : template.Barriers[g][2],
  232. Ysize : template.Barriers[g][3],
  233. }
  234. // bar.Object.X = template.Barriers[g][0]
  235. b = append(b, &bar)
  236. fmt.Println("Barrier: ", template.Barriers[g])
  237. }
  238. for k := 0; k < blockSize; k++ {
  239. for l := 0; l < blockSize; l++ {
  240. m.Field[k + i * blockSize][l + j * blockSize] = template.Tmp[k * blockSize + l]
  241. }
  242. }
  243. }
  244. }
  245.  
  246. for i := 0; i < m.SizeY; i++ {
  247. for j := 0; j < m.SizeX; j++ {
  248. // template := templates[rand.Intn(len(templates))]
  249. if i == 0 || i == m.SizeY-1 || j == 0 || j == m.SizeX-1 {
  250. m.Field[i][j] = 1
  251. }
  252. }
  253. }
  254.  
  255. // Отрисовываем результат в консоль
  256. // for i := 0; i < 10; i++ {
  257. // for j := 0; i < 10; j++ {
  258. // // fmt.Println(i, j)
  259. // fmt.Print(m.Field[i*10+j])
  260. // }
  261. // fmt.Println("")
  262. // }
  263.  
  264. // for i := 0; i < 50; i++ {
  265. // m.Field = append(m.Field, field[i])
  266. // }
  267.  
  268. // fmt.Println(m.Field)
  269.  
  270. return &m, b
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement