Ну, смотри. Сообщение
self.x >= -self.width:
TypeError: '>=' not supported between instances of 'NoneType' and 'int'
указывает нам на то, что во время ошибки
self.x = None
Изначально вижу x заполняется. Значит в процессе работы он в какой-то момент устанавливается в None.
Такой проблемный момент видно только в
return_self, где его значение устанавливается в некий передаваемый
radius
self.x = radius
который в свою очередь получается из функции find_radius.
При беглом взгляде на эту функцию бросается в глаза, что единственный
return в ней из-за отступов находится внутри блока
if. Т.е. если условие не выполняется, функция как раз и возвращает None, вызывая ошибку программы.
Так что проблему надо искать там. Так как запланированной логики работы игры я не знаю, предположу, что достаточно просто поправить эту строку с
return radius (убрать лишний отступ), логично, чтобы она возвращала результат независимо от условия.