В прошлом году делал курсач на ассемблере - игру "Морской бой". Размещение кораблей делал примерно так: два массива из 100 элементов представляли игровое поле игрока и компьютера, в которых хранилась информация, свободна ли очередная ячейка, или нет. Отдельным образом помечались свободные ячейки, ячейки, хранящие сегменты корабля, и ячейки, соседствующие с сегментами корабля. Для размещения очередного корабля с помощью генератора случайных чисел выбирался способ размещения (горизонтально или вертикально), потом опять-таки случайным образом выбиралась ячейка для размещения одного сегмента корабля. Потом производилась проверка, есть ли свободное место для размещения целого корабля, начиная с этой ячейки и далее (вправо, для горизонтального размещения, и вниз, для вертикального). Если нет, то тогда просто выбиралась следующая ячейка, и проверка повторялась до тех пор, пока не найдется подходящая ячейка. Могу выложить код, но сомневаюсь, что ты в нем разберешься (мне самому уже трудно в нем разобраться).
Не по теме:
Кстати, программа только что запустилась под wine, что не может не радовать 