1. VisualBasic / Говнокод #12966

    −114

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    Function Shoot(lay() As String, x, y) As String
     Let Shoot = ssMiss
     Dim HorCheck As Boolean
     Dim i As Byte
     If lay(x, y) = ssShip Then
      If 1 < x Then
       If lay(x - 1, y) = ssEmpty Then GoTo Shoot_Right_Check
       Let HorCheck = True
       If lay(x - 1, y) = ssShip Then GoTo Shoot_WriteHit
      End If
      If 2 < x Then
       If lay(x - 2, y) = ssEmpty Then GoTo Shoot_Right_Check
       If lay(x - 2, y) = ssShip Then GoTo Shoot_WriteHit
      End If
      If 3 < x Then
       If lay(x - 3, y) = ssEmpty Then GoTo Shoot_Right_Check
       If lay(x - 3, y) = ssShip Then GoTo Shoot_WriteHit
      End If
    Shoot_Right_Check:
      If x < N Then
       If lay(x + 1, y) = ssEmpty Then GoTo Shoot_Up_Check
       Let HorCheck = True
       If lay(x + 1, y) = ssShip Then GoTo Shoot_WriteHit
      End If
      If x < (N - 1) Then
       If lay(x + 2, y) = ssEmpty Then GoTo Shoot_Up_Check
       If lay(x + 2, y) = ssShip Then GoTo Shoot_WriteHit
      End If
      If x < (N - 2) Then
       If lay(x + 3, y) = ssEmpty Then GoTo Shoot_Up_Check
       If lay(x + 3, y) = ssShip Then GoTo Shoot_WriteHit
      End If
    Shoot_Up_Check:
      If HorCheck Then GoTo Shoot_Write_Sink
      For i = 1 To 3
       If i < y Then
        If lay(x, y - i) = ssEmpty Then GoTo Shoot_Down_Check
        If lay(x, y - i) = ssShip Then GoTo Shoot_WriteHit
       End If
      Next i
    Shoot_Down_Check:
      For i = 1 To 3
       If y < N - i + 1 Then
        If lay(x, y + i) = ssEmpty Then GoTo Shoot_Write_Sink
        If lay(x, y + i) = ssShip Then GoTo Shoot_WriteHit
       End If
      Next i
    Shoot_Write_Sink:
      Let Shoot = ssSink
     End If
     Exit Function
    Shoot_WriteHit:
     Let Shoot = ssHit
    End Function

    Из решения задачи про морской бой из заочной олимпиады.
    Процедура выстрела на твердой логике (ближе к концу перекроил на цикл) и грешном GoTo.
    А еще строчка из другой процедуры порадовала. Оставлю её здесь: Dim x, y, i As Byte

    Запостил: ckopo, 05 Мая 2013

    Комментарии (11) RSS

    • Иногда мне даже жалко школьников, пишущих на бейсике.
      Ответить
      • А мне еще более жаль жкольников (sic), пишущих на ПеХеПе.
        Тем более, летом меня ждет основательное изучение Си. Пора отрываться от земли.

        [Бейсик - штука такая, в чьи руки попадет. На нем недавно игру целую забабахали. На Гринлайт идет.
        А один взрослый человек трактат написал. Называется "В защиту Бейсика".]
        Ответить
        • > летом меня ждет основательное изучение Си
          Тогда вам надо было взять ник ckopo_C
          Ответить
          • ckopo_/\eTo
            Ответить
          • Хе-хе.
            Нет, в моём "ckopo" уже есть "C", мне еще одну не надо. :з
            Да еще и неизвестно, как ckopo, дожить надо, с ceroDH9 расправиться.
            Ответить
          • С_3a_/|eTo, от авторов "с++ за 10 лет".
            Ответить
    • Кстати, это мой код.
      Ответить
      • Нет, мой. с:
        100% оригинально с нуля.

        Где пруф, что твой, м?
        Ответить
    • код в стиле "как слищится, так и пищится"
      Ответить
      • На железной логике и грешных GoTo.
        Зато работает, как надо. с:
        Ответить
    • ОТВЕЧАЮ МОЙ КОД С КОФЕВАРКИ ПИШУ
      Ответить

    Добавить комментарий