Jump to content

[C++] Ajuda para codificar RPG


Recommended Posts

Posted

Boas, sou newbie em c++ e tenho sérias dificuldades ao trabalhar com classes! O meu grande problema é que tenho um projecto para fazer pra escola em que tenho que codificar um rpg. O enunciado é o seguinte:

“Aventura” é um jogo onde cada jogador controla um conjunto de aventureiros que exploram o fantástico território de Xabulon, combatendo monstros terríveis e descobrindo tesouros escondidos.

O jogo desenrola-se por turnos: cada jogador dá um conjunto de ordens ao seu grupo de aventureiros, e essas ordens são cumpridas antes dos outros jogadores/grupos terem a oportunidade de fazer o mesmo.

Os aventureiros de Xabulon possuem as seguintes características:

Pontos de Vida (PV) Quando chega a zero, a personagem é eliminada (sepertencer a um grupo é removida desse grupo).

Defesa (DEF) Capacidade de evitar danos.

Ataque Distante (ATD) Capacidade de infligir danos à distância.

Ataque (AT) Capacidade de combater corpo a corpo.

Experiência (EXP) Experiência ganha a combater e explorar o mundo.

Nível (N) Característica calculada em função da experiência

(EXP/100 +1). Influencia a eficácia do aventureiro, determinando o número de ataques em cada combate.

Em cada turno, o jogador deverá dar apenas uma ordem a cada um dos seus grupos que será cumprida imediatamente, passando-se em seguida para outro grupo, até dar a volta a todos os grupos.

Os grupos não controlados pelo(s) jogador(es) são controlados por uma IA (inteligência artificial) da mesma forma que um jogador controla os seus grupos.

Os grupos que possuem controladores diferentes são considerados inimigos mútuos (um controlador pode controlar mais do que um grupo).

O mundo de Xabulon pode ser visto como um imenso quadriculado. Em cada instante um grupo encontra-se numa determinada posição (quadrícula). O grupo pode movimentar-se em 8 direcções (N, S, E, O, NE, NO, SE, SO). Em geral um grupo pode-se deslocar para qualquer posição adjacente, segundo uma das 8 direcções, desde que esta posição não esteja ocupada.

As ordens que podem ser dadas a um grupo são:

DESCANSAR: O grupo permanece na mesma posição e todos os elementos do grupo recuperam naturalmente das suas feridas (+1 PV se o total de PV for menor do que o máximo).

MOVE (N/S/E/O/NE/NO/SE/SO): Move o grupo na direcção indicada. Não é possível deslocar-se para uma região na qual já se encontra outro grupo. No entanto, caso esse seja um grupo inimigo, inicia-se o combate com ele, sem se deslocar.

Morte de membros do grupo: Sempre que um elemento de um grupo é reduzido a 0 PV, é destruído. Quando o grupo é reduzido a 0 elementos, é destruído e removido do jogo.

Combate:

O combate processa-se nas seguintes etapas:

• Combate à distância: Os aventureiros com capacidade de ataque à distância (ATD) >0 têm direito a N ataques (durante cada turno/jogada desse grupo). A ordem de ataque é dada apenas uma vez nessa jogada. Os alvos de cada ataque são seleccionados aleatoriamente entre todos os membros do grupo adversário. O combate à distância dura enquanto houver aventureiros que ainda não esgotaram o seu número de ataques.

• Combate corpo a corpo: Os aventureiros com capacidade de ataque corpo a corpo (AT) >0 têm direito a N ataques. Os alvos de cada ataque são seleccionados aleatoriamente entre todos os membros do grupo adversário. Tal como o combate à distância, o combate corpo a corpo dura enquanto houver aventureiros que ainda não esgotaram o seu número de ataques.

O combate à distância e combate corpo a corpo são resolvidos de forma análoga, sendo simplesmente considerada como força de ataque o valor ATD no primeiro caso, e AT no segundo. Os aventureiros que têm capacidade para ambas as etapas do combate (ATD > 0 e AT > 0) utilizam o valor N (que depende de EXP), independentemente de o terem esgotado numa delas.

O combate é resolvido escolhendo alternadamente, de cada um dos grupos, um combatente que ainda tem a possibilidade de efectuar um ataque (o primeiro combatente é escolhido do grupo defensor).

Sempre que um combatente aplica o golpe final a um adversário, deve ganhar 1 ponto de experiência. Qualquer combatente aniquilado deve ser imediatamente removido do grupo e combate.

Exemplo:

O grupo 1 ataca o grupo 2.

Grupo 1

“Zé”                  (AT=5, ATD=0, PV=4, DEF=6, N=2)

“Ambrósio”        (AT=0, ATD=1, PV=2, DEF=2, N=1)

“Guilhermino”    (AT=0, ATD=1, PV=2, DEF=1, N=2)

Grupo 2

“Óscar” (AT=1, ATD=5, PV=3, DEF=4, N=5)

Neste caso, durante a fase de combate à distância, apenas o Ambrósio, Guilhermino e o Óscar iriam intervir. O primeiro teria direito a um ataque (N=1), enquanto que o segundo tem direito a 2 ataques (N=2) e por fim o Óscar terá direito a 5 (N=5). Como o Óscar pertence ao grupo atacado, terá o privilégio de desferir o primeiro ataque.

Consideramos que nenhum dos intervenientes morre durante os ataques deste exemplo.

Possível ordem do ataque na fase de combate à distância:

1º - Óscar (5 ataques no total, 1 efectuado)

2º - Guilhermino (2 ataques no total, 1 efectuado)

3º - Óscar (5 ataques no total, 2 efectuados)

4º - Guilhermino (2 ataques no total, 2 efectuados)

5º -Óscar (5 ataques no total, 3 efectuados)

6º - Ambrósio (1 ataque no total, 1 efectuado)

7º - Óscar (5 ataques no total, 4 efectuados)

8º - Óscar (5 ataques no total, 5 efectuados)

Outra possibilidade seria:

1º - Óscar (5 ataques no total, 1 efectuado)

2º - Guilhermino (2 ataques no total, 1 efectuado)

3º - Óscar (5 ataques no total, 2 efectuados)

4º - Ambrósio (1 ataque no total, 1 efectuado)

5º - Óscar (5 ataques no total, 3 efectuados)

6º - Guilhermino (2 atques no total, 2 efectuados)

7º - Óscar (5 ataques no total, 4 efectuados)

8º - Óscar (5 ataques no total, 5 efectuados)

Depois de esgotada a fase de combate à distância, processa-se a fase de combate corpo a corpo.

Neste caso, apenas o Zé e o Óscar iriam intervir. O primeiro teria direito a 2 ataques (N=2), enquanto que o segundo tem direito a 5 ataques (N=5). Como o Óscar pertence ao grupo atacado, terá o privilégio de desferir o primeiro ataque.

Consideramos que nenhum dos intervenientes morre durante os ataques deste exemplo.

Ordem do ataque na fase de combate corpo a corpo:

1º - Óscar (5 ataques no total, 1 efectuado)

2º - Zé (2 ataques no total, 1 efectuado)

3º - Óscar (5 ataques no total, 2 efectuados)

4º - Zé (2 ataques no total, 2 efectuados)

5º - Óscar (5 ataques no total, 3 efectuados)

6º - Óscar (5 ataques no total, 4 efectuados)

7º - Óscar (5 ataques no total, 5 efectuados)

Cálculo do dano

O dano efectuado por cada ataque é calculado da seguinte forma:

Se a força de ataque for maior do que a defesa do alvo, então são feitos AT(D)-DEF pontos de dano. Caso a defesa seja superior, então cada ataque tem uma probabilidade de AT(D)/DEF de fazer 1 ponto de dano. Estes pontos de dano devem ser subtraídos ao montante total de PV dos aventureiros atacados. Os aventureiros em que o valor de PV seja reduzido a 0 ou menos,  serão imediatamente eliminados.

Exemplo:

O alvo do ataque do Óscar é o Ambrósio. A força do ataque à distância do primeiro é de (ATD=5), sendo a defesa do segundo dada por DEF=2. O Ambrósio perde 5-2=3 PV e é imediatamente eliminado porque tem PV=2. O Óscar ganha um ponto de EXP. Em seguida, o Guilhermino vai atacar o Óscar para vingar a morte do seu amigo Ambrósio. O seu poder de ataque é ATD=1 e a defesa do Óscar é de DEF=4. Isto significa que o Guilhermino tem ¼ =25% de probabilidade de conseguir infligir 1 ponto de dano ao Óscar.

Controladores

O conceito de controlador é bastante importante. É usado não só para representar quem controla as acções um determinado grupo, como também para determinar as diversas facções e inimizades entre os diversos grupos. É importante perceber que um controlador pode controlar um ou vários grupos distintos, e que estes podem ser usados para obter diferentes efeitos:

P. Ex:

- O mesmo jogador pode controlar 2 grupos diferentes.

- Um jogador poderá, por exemplo, assumir o controlo temporário de um grupo inimigo.

Deve construir uma IA de serviços mínimos (ou seja, que consiga dar ordens aos seus grupos, mesmo que perca quase sempre). Isto significa uma IA que, pelo menos, ataque adversários que lhe estão adjacentes (e não ataca amigos). É obvio que podem ser consideradas muitas opções adicionais: perseguir adversários, fugir, descansar de forma inteligente, etc. mas não é fundamental.

Será que alguem me pode ajudar a construir as classes? Tou mesmo a nora, agradecia imenso alguma ajuda.

Cumprimentos e bons programas.

Posted

Cheira-me que não vais ter muito sucesso assim... Chapares assim todo esse texto.... Ninguém o vai ler!  😛

É melhor ires postando as tuas dúvidas sempre que surgirem pois nós cá estaremos para ajudar. 🙂

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

Não devias ter primeiro uma cadeira de programação?!

É que fazer logo uma coisa destas é entrar um bocado á força pela medeira!!

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Posted

Bem vindo ao fórum Skazi

Bem, programar C++ é programar com classes.

Se não percebes como funciona as classes, vai a secção dos tutoriais C++:Portugal-a-Programar | Tutoriais e experimenta cumprir algumas pequenas metas do projecto (começa do mais simples para o mais complicado).

Conforme vão surgindo dúvidas sobre o desenvolvimento do projecto, posta aqui que nós ajudamos.

O teu projecto é muito complexo, só se existir alguém interessado em fazer também isso, só assim é que se metia nesse projecto contigo (as probabilidades são muito baixas).

Cumpr. bk@ero

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.