Eu só quero um conselho profissional sobre como devo começar o design do meu jogo?
O design do jogo é a especificação da jogabilidade, dos ativos, dos sistemas de pontuação etc. - estes não são específicos do software. Como tal, a UML é a ferramenta errada para essa tarefa.
Quando se trata de projetar o código para implementar esses sistemas, a UML é uma boa ferramenta para a tarefa, fornecendo à sua equipe o conhecimento e aderindo aos tipos de diagrama mais comuns. Normalmente, ao tentar criar um recurso, você saberá se precisa usar uma descrição ou um diagrama. Se você precisar usar um diagrama, a UML fornece uma maneira padrão de desenhá-lo, o que é uma coisa boa.
Depois de codificar por um tempo, as coisas começam a se deteriorar devido a um planejamento insuficiente (quando adiciono um novo recurso, isso me faz ter que recodificar todo o programa).
Isso geralmente é um problema com a maneira como você programa, e não com o que você planeja. Um bom software geralmente é fácil de estender e reutilizar. Se você seguir as boas práticas de programação, esse problema diminuirá. Mas um melhor planejamento também ajudará, e você não precisa de diagramas complexos para isso. Só ter uma lista de recursos significa que, quando você codifica uma coisa, você tem as outras características em mente e pode considerá-las enquanto codifica.
Portanto, algum conselho de como devo planejar meu jogo? Como devo colocá-lo em imagens visíveis, para que eu e meus amigos possamos visualizar os desenhos?
Parece que você está misturando 2 problemas aqui, o design do jogo e o design do código.
Sugiro primeiro escrever um design de jogo básico, especificando os recursos de que você precisa, os gráficos e sons de que precisa, como o jogo é vencido e perdido, etc. Procure 'documentos de design' se precisar de ajuda.
A partir daí, você terá uma idéia dos recursos que precisa codificar. Você pode examinar cada recurso por vez e tentar pensar em como implementá-los. Os diagramas podem ajudar a mostrar as relações entre diferentes classes e objetos em seu jogo, mas a habilidade de saber quais objetos precisam existir é algo que você precisa aprender através da prática e / ou leitura adicional.
Além disso, tente trabalhar em projetos menores e menos ambiciosos. Isso o acostumará a escrever código bom e funcional, sem a necessidade de planejamento ou reescrita extensos.