|
|
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Пишу игру SeaWar. Как упростить вот такую вот проверку (проверяет все клетки вокруг однопалубного корабля, ищет совпадения по всему полю)? Нужен рациональный подход. Представь, что получится, если я стану проверять таким макаром четырех палубник :-) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 20:52 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Так проверяй не на ship, а на ship1, то есть измени классификацию ячейки. Введи ship1, ship2, ship3, ship4 и будет счастье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 20:57 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковТак проверяй не на ship, а на ship1, то есть измени классификацию ячейки. Введи ship1, ship2, ship3, ship4 и будет счастье. Я только начинаю программировать, мне иногда трудно понять некоторые моменты. Будь добр разъясни на примере . Что значит классификация ячейки? У меня корабли расставляются случайно, мне нужно проверять, чтоб не получилась "куча". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 21:07 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Stalcer Анатолий ШироковТак проверяй не на ship, а на ship1, то есть измени классификацию ячейки. Введи ship1, ship2, ship3, ship4 и будет счастье. Я только начинаю программировать, мне иногда трудно понять некоторые моменты. Будь добр разъясни на примере . Что значит классификация ячейки? У меня корабли расставляются случайно, мне нужно проверять, чтоб не получилась "куча". Проверку на наличие однопалубных кораблей можно сделать примерно так: (это только идея, набросок, код сырой, так что ногами не пинать :)) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Алгоритм можно докрутить для 1,2 и более палубных кораблей. Когда сам писал морской бой. то делал примерно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 11:15 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Спасибо, сейчас буду разбираться :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 13:08 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Я либо чего-то не понял, но ф-ция у меня не работает :-( (иногда лепит два корабля вместе). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 14:08 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
StalcerЯ либо чего-то не понял, но ф-ция у меня не работает :-( (иногда лепит два корабля вместе). Покажи, плз., как переделать ф-цию для кораблей >1 палубы . 1) в моем коде есть небольшая ошибка, вместо ((dx > 0) надо поставить ((dx >= 0), для dy соответственно. 2) все, что делает эта функция, проверяет - есть ли в данной клетке однопалубный корабль - т.е. клетка заполнена, и вокруг нее нет других заполненных клеток. Эту функцию можно использовать, например, для поиска всех кораблей (что у меня и приведено в тесте). Но это не готовое решение для твоего случая, я же честно принался, что это только набросок :) Алгоритм поиска кораблей длины (n) - пройтись по полю и для каждой точки определить является ли она началом корбаля длины n - т.е. надо проверить отрезок - (по горизонтали или по вертикали) размером n клеток. Алгоритм поиска свободного места для установки корабля размером n - пройтись по полю и для клетки определить может ли она быть началом корабля размером n, т.е. проверить есть ли слева (внизу) от нее свободная линия, плюс свободная граница вокруг нее размером в 1 клетку (чтобы корабли не склеиваились). Мне кажется ничего сложного... 2-3 цикла, плюс столько же проверок :-\ 3) не знаю как рабоатет AutoShip, но подозреваю в чем глюк и почему корабли лепятся вместе - ты же сначала ставишь корабль в клетку, и только потом проверяешь стоило ли это делать :) 4) если нужен готовый код, то могу и написать, но только поздно вечером из дома, ибо сейчас на работе и так есть чем заняться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 14:27 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Спасибо за активную помощь. AutoShip случайно выбирает координаты (ориент., если >1) и ставит корабль. Я ставлю 4 корабля и проверяю если все четыре вокруг себя не имеют кораблей, значит можно показать на экран... Если тебя это не сильно затруднит и будет время, помоги студенту с проверкой на корабли >1 плз.. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 15:12 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
после исправлений все равно лепит :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 15:13 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Как я уже говорил, у тебя плохая классификация ячеек. После постановки очередного корабля на игоровое поле, помимо установки признака "корабль" той ячейке, в который он установлен необходимо так же как-то "метить" окружающие корабль ячейки, которые уже не могут содержать другие корабли. Что это означает: Например, мы случайным образом установили, что однопалубный корабль имеет координаты (2, 2). Так вот, после постановки корабля на игровое поле мы метим не только ячейку (2,2) (пусть 2), но и все 8-связные с ней ячейки (пусть 1). 0 отметим не занятые ячейки: 11100000 12100000 11100000 00000000 Теперь вернемся к твоей задаче, которая состоит в том, чтобы разместить n-палубный корабль. Что есть n-палубный корабль (пусть пока горизонтально ориентированный) - это прямоугольник (x-1, y-1) - (x + n, y + 1). Поэтому, чтобы определить можно ли разместить n-палубный корабль в точку (x, y) достаточно подсчитать сумму ячеек покрываемую этим прямоугольником и если она будет равна нулю, то (x,y) и есть искомая точка: Код: plaintext 1. 2. 3. 4. 5. 6. Неприятность составляет проверка на граничные условия, но их можно легко избежать, если увеличить размерность игрового поля N на 2 - то есть по 1 с каждой стороны. В этом случае координаты игрового поля будут в точности принадлежать множеству [1, N] x [1, N]. Вот и все идеи. Теперь ты легко все реализуешь. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 16:12 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Ответ разумный, конечно, за что и спасибо. Принцип понял, а вот синтаксис мне пока тяжело понять :-) Приведи пример плз., если мне нужно поставить 3 двух трубных корабля, в случайные координаты x и y, поле 10x10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 16:44 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
2 Stalcer Извини, но пример ты как-нибудь сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 17:30 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Что такое size_t? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 22:28 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Stalcer... Я ставлю 4 корабля и проверяю если все четыре вокруг себя не имеют кораблей, значит можно показать на экран... Если тебя это не сильно затруднит и будет время, помоги студенту с проверкой на корабли >1 плз.. :-) Меня то не затруднит, только сдавать ДЗ тебе все равно самому придецца :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. Вот, примерно так. Остальное сам :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2005, 01:00 |
|
||
|
Рациональный подход
|
|||
|---|---|---|---|
|
#18+
Спасибки!!! Сейчас попробуем поюзать :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2005, 15:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33037081&tid=2033393]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 414ms |

| 0 / 0 |
