Aula 07
Término da Implementação da Classe de Jogo
Summary
Resumo da Aula de Programação
Introdução
A aula se concentra em aprimorar a classe jogo
a partir do código discutido na aula anterior. O objetivo é organizar e refatorar o código para que seja mais acessível e eficiente.
Estrutura do Código
- Variável Azulejos:
- A variável
azulejos
, uma matriz 2D, foi transformada em um membro privado da classejogo
para facilitar o acesso em várias funções.
- A variável
- Posições de Entrada e Saída:
- As variáveis relacionadas às posições de entrada e saída do jogador também foram movidas para a classe como membros privados.
- Construtor:
- Um construtor foi adicionado para inicializar as posições de entrada e saída, além do tamanho do azulejo.
Funções
-
Carregar Mapa:
- A função
carrega-mapa
foi movida para a classejogo
, eliminando a necessidade de passar parâmetros que já são acessíveis dentro da classe.
- A função
-
Imprimir Mapa:
- A função
imprimir-mapa
também foi convertida em um método da classejogo
, removendo a necessidade de parâmetros.
- A função
-
Mapa de Jogo:
- Uma variável chamada
mapa_de_jogo
foi criada como um membro privado da classejogo
.
- Uma variável chamada
Game Loop
- Rodar:
- Um novo método chamado
rodar
foi adicionado para gerenciar o loop do jogo e processar a entrada do jogador.
- Um novo método chamado
- Entrada do Jogador:
- A função
processar_entrada_do_jogador
foi modificada para operar com variáveis privadas e não requer mais parâmetros.
- A função
Gerenciamento de Memória
- A discussão sobre possíveis memory leaks levou à implementação de liberações de memória adequadas para a superfície do mapa.
Organização do Código
- Includes:
- Ajustes foram feitos para os headers colocados nos arquivos apropriados, e include guards foram adicionados para prevenir inclusões múltiplas.
Conclusão
O código foi reformulado para melhorar a clareza e a acessibilidade, assegurando que todas as variáveis relevantes são membros privados da classe, o que simplifica a lógica do jogo. No final, o jogo foi testado e funcionou corretamente, com o jogador podendo interagir no mapa.
Agradecimentos
A aula foi encerrada com agradecimentos aos participantes e a promessa de continuar com o aprendizado nas próximas aulas.
Video Transcript
Olá pessoal, estamos de volta com mais uma aula.
Vamos partir da aula anterior, onde começamos a
premar a meta de código, a criação da classe jogo.
Então, vamos terminar isso. Estamos no meio do caminho, então vamos chegar lá.
Então, nos deparamos aqui com a linha 184 do arquivo main.cpp,
que é a declaração dessa array de duas dimensões, chamada azulejos.
Bem, uma variável azulejos aqui é usada como argumento para chamada da função
carrega-mapa e também para imprimir mapa, né?
E para criar superfície-mapa de jogo e para processar entrada do jogador e poss...
Então, são várias referências a essa variável.
Então, isso é um candidato para quê?
Como a gente quer permitir o acesso dessa variável de vários locais,
de várias funções membro da classe jogo,
teremos que pegar essa variável e pôr como membro privado da classe jogo.
Então, vamos recortar a linha 184 na jogo.h, na nova linha 7,
que é como o escopo privado, implicitamente, né?
Eu vou declarar aqui, tá?
Isso vai ser acessível de qualquer método ou membro função, né? Função membro.
Membro function.
De volta ao main.cpp, isso vai lidar com isso.
Agora, tem essa parte aqui da posição de entrada, posição de saída que é
referenciada na hora de carregar a mapa, na hora de setar a posição do jogador, né?
E também pintar a entrada e tal.
Bem, também outro candidato, né? Linhas 185 e 186 para ser variáveis, né?
Membros privados da classe jogo. Então, podemos fazer isso também.
Então, vou pegar da linha 185 e 186, eu vou recortar e vou na classe, na declaração da classe,
no arquivo jogo.h e na nova linha 8 e 9, nós colamos isso.
Agora, tem a parte do esquerdo que é a declaração e a parte direita que é a definição do valor inicial.
Bem, eu quero mover essa definição do valor inicial para o construtor, tá?
Então, o que é que eu vou fazer? Na nova linha 11, eu vou fazer um construtor, tá?
Então, vou chamar aqui o jogo, que é o mesmo nome da classe. Será o construtor?
Tá? Deixa eu copiar a linha 8 e 9 aqui.
Aí, lá no arquivo jogo.cpp, vou lá em cima, vou definir o construtor, que...
Então, jogo 2 pontos, 2 pontos, jogo, sem parâmetro, abre os chaves e eu vou colar aquele código.
Agora, como as variáveis serão declaradas lá, não.
No corpo da classe, vou remover o tipo aqui, das linha 6 e linha 7.
Agora, tem essa referência aqui, a variável chamada as tamanho do azul leito.
Tá? Então, também, vamos pegar essa variável e pôr como membro privado da classe, jogo.
De volta, também, em ponto cpp, onde está aquela constante.
Vou lá em cima, ver se está lá.
Então, está aqui na linha 7, eu vou copiar depois de a gente apaga, tá?
E vou colar no jogo.h na nova linha 6, eu vou botar o int, tamanho do azul leito, igual a 32.
Vou deixar assim mesmo.
Volta no jogo.cpp, essa variável agora já está definida porque é acessível do construtor.
Então, quando você, na hora, o que acontece, né?
Cpp mais, mais base.
Volta no main, na função main aqui, int main, se lembra?
Na linha 175, você cria uma instância, um objeto, né?
Criou o objeto, o jogo, que é de classe, jogo.
Primeira letra maiúsquia.
Agora, na hora que você faz isso, ele vai chamar o construtor e ele vai na mesma hora, ok?
A posição da entrada é isso, a posição de sair é isso, tá?
Agora, no jogo.h, vamos fazer a limpeza.
Como a gente já definiu a posição-entrada e a posição-saída no construtor,
a parte do igual e o lado direito aqui serão...
A gente tem que apagar.
Então, linha 9, linha 10, é só a declaração do nome da variável e o tipo antes do nome.
Prefixo, precedindo o nome.
Tá bom? E com isso, a gente fez esse aí.
Agora, essas variáveis, posição-entrada, posição-saída, azulejos,
são todas acessíveis de todos os métodos das instâncias da classe-jogo.
Muito bem.
Até essa parte que pesquisam, sei o quê,
eu...
Deixa eu recortar onde é que eu vou, pois...
Coluna, window height...
Poderia remover, não sei o que fazer, deixar como nota para você aí.
Eu vou remover, tá?
Então, vamos na próxima, linha 131,
tem a chamada da função para carregar o mapa.
Bem, precisa usar as zulejos,
posição-entrada, posição-saída,
mas já temos as variáveis aqui acessíveis lá da classe,
então nem vai precisar na hora de chamar isso.
Então, o que é que vai acontecer?
Essa aqui será... a gente vai mover essa função para a classe-jogo.
Aí, quando tiver isso, a gente vai só chamar o jogo.carregamapa.
Como esses caras aqui já são acessíveis de lá,
não vai precisar do parâmetro, então vai ser assim.
Tá certo? Então, vamos lá.
Vamos aqui lá em cima na implementação do Carregamapa,
no arquivo main.cpp,
cadê? Então, lians11 a 44, vou recortar,
vou ao arquivo jogo.cpp e vou adicionar essa função,
copiar, eu colei.
Agora, Carregamapa será, pertencerá à classe-jogo,
então vou botar o jogo 2.2. antes do nome da função.
Agora, não vai precisar mais desses parâmetros,
porque já é disponível lá, porque é membro privado.
Então, a instância tem acesso a essas variáveis.
E tal, e tal, temos o EF Stream aqui,
então vai precisar incluir o EF Stream lá em cima,
include EF Stream.
E mapa do jogo e tal, variável local,
linha da entrada, dia da saída,
constante também já acessível da instância,
e dedo azulejo, azulejo também acessível da instância,
e tudo certo, então, essa foi rápida.
Agora, vamos lá copiar essa assinatura
e adicionar a declaração lá na classe, no arquivo jogo.h,
na nova linha 17, você vai colar lá o Carregamapa,
precedindo de Vorde e adicionando o ponto e vila,
não se esqueça de remover o jogo 2.2 pontos.
Pronto, então, vamos para a próxima.
Voltando lá para o main.cpp, a gente tem lá de volta no main.
Agora temos essa definição da posição do jogador,
isso é usado onde, na hora de chamar o processo
de entrar no jogador e também na hora de dar o fill rack,
então, mais um candidato para ser o quê?
Membro privado para ser acessível da instância,
de cada método da instância.
Então, um detalhe, no entanto,
ele depende da variável posição entrada e posse x e y,
posição entrada que é definido lá, se você se lembra, no construtor.
Então, a gente vai fazer a mesma maneira que a gente fez
para essa variável que é entrada e saída.
A gente vai adicionar a definição no construtor,
mais vai ter a declaração no arquivo jogo.h.
Então, vamos copiar o lado esquerdo do igual para o jogo.h na nova linha 11,
como membro privado, na tributa, posição do jogador.
Voltando ao main, eu vou recortar tudo, mas não vai precisar do tipo,
porque a variável já foi declarada, então, vou recortar e remover esse tipo aqui.
De volta, jogo.cpp, lá no construtor, jogo, jogo, na nova linha 9,
você vai definir a posição do jogador a isso.
Então, a posição entrada já está definida aqui antes, então, não vai ter problema.
Salvar, vamos ver o jogo estar aqui.
De volta, main, posse cpp, vamos continuar.
A próxima é o imprimir mapa.
Então, vai ser a mesma maneira que a gente fez para carregar a mapa.
Então, que tal você fazer aí, por si próprio, pause o vídeo e veja se você consegue fazer,
e a gente continua já já.
E aí, deu certo? Vamos lá, então?
Então, a gente vai tornar isso como um método da classe de jogo, a instância,
vai chamar o método, não precisa usar as o leite, porque já está acessível de dentro do método da instância, né?
Eu vou pegar a implementação no imprimir mapa, vai cortar do main.cpp e vou colar no jogo.cpp,
vou aqui no final e colar como imprimir mapa, que será, pertencerá à classe de jogo,
tem o que adicionar para o precedente, jogo 2.2 pontos.
Não precisa do parâmetro mais, vou remover.
Vamos só conferir aqui se não tem problema, 4in e tal, 4in, variáveis locais, STD,
Cout, a gente já tem o include do IEWStream, o aso legis, o membro privado, acessível, porque pertence à classe,
Cout, STD, inline e tal e tal.
Agora a gente vai pegar essa assinatura da função e vai adicionar jogo.h na nova linha 19.
Então, remove esse jogo 2.2 pontos e adiciona o ponto e vivo.
E com isso ele vai com nossos problemas.
Então vamos lá aqui de volta, o main pode ser pp, continuar na próxima.
Você vê aqui que temos a linha 733, tem uma variável chamada mapa de jogo, que é referenciada na linha 734,
e na linha 149 e tal e tal.
Então isso vai ser uma variável que será acessível de todas as instâncias de jogo.
Então vamos fazer uma variável aqui do lado esquerdo, copiar, jogo.h nova linha 12,
você adicionar STD, acho que é isso, mapa de jogo 2.2 pontos e vivo.
Agora no de volta o main pode ser pp, o lado direito do igual você vai criar os pf do mapa de jogo,
eu vou remover, ah o que que vai acontecer, vamos ver aqui.
É um detalhe porque ele está definindo a variável, não é só função void nesse caso.
Então vamos pensar aqui, então ele tem, pega os azulejos e cria nessa surface o mapa de jogo,
então vamos criar uma nova função aqui, vamos ver aqui.
Essa função, então a gente vai fazer bem bem bem bem bem bem bem aqui.
Se eu olhar as próximas linhas tem a pintar, entrar e pintar, saída também, o que que eu posso fazer aqui?
Então a gente pode fazer o seguinte, talvez a gente pode recortar esses três e fazer uma função,
porque isso é um note que já bateu aqui no game loop,
então essa função será a responsável para configurar o mapa do jogo e essa configuração inclui a pintura da entrada e da saída.
Então vou recortar esses caras da linha 733, 735 e vou chamar a nova função,
que eu vou chamar a jogo.configurar, a mapa, configurar, superfície do mapa de jogo,
superfície do mapa de jogo e vou lá colar no jogo.cpp,
nós temos aqui, a gente tem que fazer a posição, configurar o superfície do mapa de jogo,
o valor, o tipo do retorno é void e vou colar aquele código.
Como a gente já declarou o mapa de jogo, não precisa do tipo aqui, então vou remover,
agora ele vai definir o mapa de jogo, vai chamar essa função aqui que a gente não tem ainda,
então a gente vai chamar também pintar entrada e pintar sair,
então essas três funções a gente vai ter que mover aqui como membro da classe jogo.
Vamos adicionar o jogo dois pontos, dois pontos aqui só para terminar aqui,
vou adicionar essa assinatura para o jogo.h antes de implementar as outras funções,
então aqui debaixo de public na nova linha 21 do arquivo jogo dentro da declaração da classe jogo,
eu vou adicionar void, configurar, superfície do mapa de jogo, só para ter aí já, sem problemas.
Agora vamos precisar mover as funções, criar superfície do mapa de jogo, pintar entrada e pintar sair,
então vamos lá, voltando a main.cpp, eu vou aqui, temos o pintar sair, pintar entrada,
vou já assinando na mesma hora e tem também cada outro, acho que o outro está lá em cima,
então deixa eu só recortar o pintar entrada e pintar sair, vou colocar no jogo aqui,
vou colocar antes aqui, então vou adicionar o prefixo antes do nome da função,
jogo dois pontos, dois pontos, já modifiquei na mesma multissalação,
então já estou fazendo pintar entrada e pintar sair antes do criar superfície,
porque foi bem rápido, já achei primeiro, então o pintar entrada ele vai referenciar o mapa do jogo,
mas isso já está aqui, você se lembra do jogo potagado, o mapa do jogo já está aqui,
como é privado, então vai ter acesso, então não precisa mais desse parâmetro,
mesmo é coisa de posição entrada, agora vamos ver aqui, unit 32, col sdl mapa de jogo,
temos acesso, sdl filrack mapa de jogo, temos acesso, posição entrada, também temos acesso e col,
certo, variável local, e a mesma coisa para pintar sair, que tal você fazer para o seu próprio,
e aí, vamos lá remover os parâmetros, e só isso, agora vamos fazer o criar o superfície do mapa de jogo,
ah antes, eu esqueci do que, assinatura lá, então vamos lá para o jogo potagado,
debaixo de public da nova linha ptd2, ptd3, vamos fazer o void pintar entrada,
abre fecha de parênteses, ponto e bilo, também o void pintar sair, abre fecha de parênteses, ponto e bilo,
voltando aqui ao main.cpp, vamos pegar outra função lá, que foi lá em cima,
se eu estou rolando lá para cima, a criar o superfície do mapa de jogo,
eu vou pegar até a linha 50, vou recortar, vou lá no jogo.cpp, e vou colar,
ah deixa um pouco antes de configurar o superfície do mapa de jogo,
e certo, vou colocar o jogo 2 pontos 2 pontos antes do nome da função,
ah vou tirar esse parâmetro, então precisa mais de accessível, vou copiar e vou adicionar o jogo potagado,
debaixo de public lá na nova linha 24, vai ser assinatura sdlsurface,
acho que teriasco o nome da função, criar o superfície do mapa de jogo e 2 ponto e bilo.
De volta ao jogo.cpp na implementação do criar o superfície do mapa de jogo,
vamos dar uma olhada nos conferir, então ele faz aqui, ele cria uma superfície,
variável local, ele cria uma variável local retângulo,
vou ital, ele refere o azul lejo que é o mesmo privado, atributo da instância,
vou do azul lejo, está aqui, está aqui, dá o sdlsurface, variável local,
ponteiro, e tem o retângulo e cor do azul lejo, e dá o return.
Agora deixa eu pensar um pouco aqui, que eu estou pensando na,
eu estava só pensando aqui na, no escopo dessa variável aqui,
porque você faz o ponteiro local aqui, superfície,
e a função está retornando, o que está certo, estou certo,
eu só estou, eu estou pensando aqui no memory leak pode acontecer,
porque a gente cria surface e é local aqui e retorna,
mas quando você retornar aqui, ele vai estar dentro do mapa do jogo,
essa variável aqui, mapa de jogo, ela pertence à instância da classe de jogo,
e está aqui, mas será, eu não sei se eu me lembro,
se a gente deu free surface no mapa de jogo, você se lembra?
Deixa eu ver aqui, porque isso é um possível memory leak, sdlsleak.
Memory leak é quando você aloca a memória, mas você se esquece de desalocar,
então você cria aquele espaço, aí sai e esquece daquele espaço de liberar a memória,
então fica aquela memória espécie de memória perdida.
Então parece que eu esqueci de fazer o free surface, nesse caso aqui.
Então vamos adicionar isso, que eu tinha esquecido muito tempo atrás,
isso vai ser o quê?
Então esse mapa de jogo a gente tem que liberar a memória,
porque a gente retornou lá do ponteiro e tal, a gente vai ter que, porque a gente usou o create surface aqui,
então a gente vai ter que liberar essa surface na hora de fechar o jogo,
então na hora de fechar o jogo, lá você se lembra que eu desligar,
eu vou pegar e também vou chamar sdlsleak, free surface, o mapa de jogo, para poder liberar a memória.
Então a memória que foi alocada para o mapa de jogo será liberada.
Tá, com isso esse sidetrack que a gente vê, vamos voltar o que a gente tinha feito,
que é conferir aqui e tal, e tal, retornar de surface, ele retorna aqui e sete o mapa de jogo,
e isso já está aqui, configurar e no main ele já chama, também então está certo aí.
Tá bom? Pouco a pouco a gente chega lá.
Tá bom?
Deixa eu dar o comete aqui que eu tinha esquecido.
Então vamos continuar aqui.
Então a próxima coisa tem um game loop aqui, né? Tem um game loop e finalmente o de ligar.
Então o que vai acontecer agora?
Bem, vamos ver aqui.
Estou pensando aqui para acessar a entrada do jogador e tal, e tal, e tal.
Pensando nesse...
O que a gente já fez no constructor aqui?
A gente definiu a posição do jogador, certo?
Ok, tá bom.
Então vamos fazer uma função para o game loop que vai incorporar esses elementos aqui do loop inteiro.
Então vamos lá.
Eu vou recortar da linha 88 até a linha 104.
Eu vou chamar essa função de rodar, tá?
Roda o game loop e o loop do jogo.
Vamos lá para o jogo cpp. Eu vou botar no jogo .h, já vou adicionar aqui o void rodar.
E dentro do jogo cpp deixo adicionar, deixo colar, né?
Opa, eu esqueci de declarar aqui.
Então a função vai ser rodar.
Abre as chaves, cola o código, vai ser void, pertença o jogo, 2 pontos, 2 pontos.
Então o bool vai ser uma variável aqui que é local.
Eu acho que a gente não usa essa variável em outro local, deixa eu ver aqui.
Como a gente não usa o saí, eu posso deixar como variável local,
mas se você precisar modificar o saí de outro local, de outro método,
então você pode torná-la um membro privado da classe.
Com isso a saí pode ser ofereceada ou modificada em qualquer lugar.
O sdl e event aqui também está local.
Não sei se é usado em outro local, deixa eu ver.
O event, processa entrada do jogador.
Então processa entrada do jogador, leve o event, mas é só aí mesmo.
Se você quiser, você pode tornar essa variável um membro da instância,
em vez de ser local aqui, de ser alocada toda vez que na hora de chamar o rodar.
Então pode fazer qualquer um, né?
Se você precisar, sei lá, de alguma maneira,
no futuro usar a variável event de outro local que não seja essa função.
Então a gente talvez, a gente vai ter que torná-la um membro privado.
Então deixa eu fazer isso só para deixar lá mesmo,
então eu vou recortar e do jogo .h vou botar aqui como membro privado.
O sdl e event, event.
E dessa maneira não vai precisar declarar aqui na linha 171 da função rodar.
Então o event vai ser referenciado aqui, sdl e event, event type, event type,
para acessar a entrada do jogador.
A gente vai passar o event, não precisa mais porque a gente já tornou uma variável
que é acessível de cada método, posição de jogador também acessível
e azul leite também acessível porque são membros privados.
Para acessar a entrada do jogador a gente tem que ir mover, né?
Então vou copiar essa função para torná-la também uma função membro da classe jogo.
Então o jogo .h de baixo de polo que vai acessar a entrada do jogador
e vou adicionar aqui o tipo, né?
E lá do mem.cpp eu vou recortar a linha 34 até a linha 73 que é a definição da função.
Então no arquivo jogo.cpp eu vou colar aqui e vou adicionar o jogo 2 pontos 2 pontos
antes do nome da função.
Então temos aqui void jogo para acessar a entrada do jogador, deixa eu fechar isso aqui.
Não precisa mais dos parâmetros.
Então essa é a regna da posição e tal.
Windows if também está acessível, mapear coordenada, essa função a gente não tem.
Então também temos que voltar para o mem, recortar o mapear e decordenar para o id do azul leite.
Voltando ao jogo.cpp eu vou colar antes da processar a entrada do jogador, o int mapear coordenada para id do azul leite.
Adicione o jogo 2 pontos 2 pontos.
A posição aqui você pode deixar o parâmetro, mas o segundo parâmetro não precisa, só o primeiro mesmo.
Então azul leite já acessível, na chamada aqui na linha 190, 199, 208, 217, tá?
Você remove aquele segundo argumento, o mapear coordenada para o id do azul leite.
Voltando para o mapear id do azul leite, tenho que copiar isso aqui, assinatura da função, adicionar o jogo.h na nova linha 28 de baixo do public.
Vou remover esse jogo 2 pontos 2 pontos e vou deixar o int mapear coordenada para id do azul leite como um parâmetro só, que é o sdli rec posição.
Com isso eu volto ao jogo.cpp, deixa eu só conferir a função, mapear coordenada para id do azul leite.
Não tem nenhum problema, tamanho do azul leite variável local, azul leite variável mesmo privado, atributo da instância, sem problemas.
Voltando aqui para a chamada que foi da linha 190, tá tudo certo, agora vamos para a próxima linha que é 191.
Na linha 191 tem também a chamada do azul leite por atravessável, então temos que trazer essa função também para o jogo, ponto classe de jogo.
Então volta também, você recorta a implementação do azul leite por atravessável, vai lá para o jogo.cpp, deixa eu adicionar aqui antes da função para acessar a entrada do jogador.
Adicione o jogo 2 pontos 2 pontos e o parâmetro está certo, id do azul leite é chão, o muro.
Agora tem a referência para essa inam, que a gente vai precisar lidar com isso.
A maneira que eu quero lidar com esse inam, é o seguinte, eu quero fazer um arquivo dedicado ao inam, então eu vou fazer o seguinte,
no final também nós temos o inam tipo de azul leite, vou recortar isso, eu vou adicionar um novo arquivo e vou fazer tipo de azul leite ponto h, essa maneira aqui.
Então o nome do arquivo ponto h é o mesmo nome da classe, do inam, quer dizer.
Aí quando eu precisar usar esse cara é só dar o include, tá bom?
Agora tem um detalhe na hora do include para não poder incluir um negócio, tem que dar o guard que a gente vai fazer já já.
Ah, então deixa eu voltar aqui para o main, deixa eu ver as linhas, as bases do main.
Volta para o jogo, então como a gente usa chão e muro na linha 135, 138, dentro do corpo da função azul leite, por atravessar, a gente precisa importar,
né, nesse caso não sei mais mais, vai ser o include, então lá em cima a gente vai fazer o include do tipo de azul leite ponto h para poder ter acesso a esses caras.
Agora uma coisa que eu quero adicionar o arquivo tipo de azul leite é o guard para prevenir a inclusão, se tiver vários arquivos incluindo esse mesmo tipo de azul leite ponto h não dá problema,
então eu vou adicionar if, any def, se não for depenido, if not defined, eu gosto de adicionar um toque, um nome único, normalmente eu faço assim, eu boto dois underscores,
e boto um número capitalizado em maiusco, tipo underscore de underscore azul leite e underscore underscore, é só uma convenção que eu peguei de outras pessoas, então o hash define o mesmo tipo de azul leite,
aí lá no final depois de todo o código você fala end, então recapitulando, você adiciona a primeira linha, o jogo da vera, if, any, def, espaço, o nome que você quer,
e se caso botei underscore underscore chip underscore de underscore azul leite underscore, todos os leites maiuscos que correspondem ao nome do arquivo, aí você fala na próxima linha, jogo da vera define, define, e o mesmo nome que você pôs no if, any, def na linha anterior,
e depois de todo o código que você quer escrever, você tem que adicionar o jogo da vera, end, if, na última linha,
a essa h também a gente tem que fazer para o jogo.h, então pão para aproveitar e fazer isso também para prevenir a problema de inclusão múltipla algum dia,
então adicionar, sempre é bom adicionar esses if, def para cada arquivo separado que você tem, então vai adicionar aqui no jogo.h, if, any, def, underscore underscore, jogo, underscore underscore,
próxima linha, jogo da vera define, underscore underscore, jogo underscore, depois de todo o código na última linha, o debo da vera end, if,
pronto, agora vai proteger,
tá bom, então vamos voltar o que a gente está fazendo, aproveitar aqui na linha 31, esquecido ponto e vila, vai adicionar,
então a gente está fazendo lá o processar entrada do jogador, a gente atinou tipo de azulejo, novo arquivo, cadê aqui, então,
criasse o perfil mapa de jogador, a gente, vamos voltar onde a gente estava, a gente tinha, na verdade era a entrada, a entrada, processar a entrada do jogador,
a gente tinha um mapiaco ordinado, o azul leite foi atravessado, já adicionamos aqui, vamos conferir aqui, eu não adicionei o azul leite foi atravessado no jogo.h,
eu também vou adicionar, vou copiar a linha C35 do arquivo jogo.cpp e vou adicionar no jogo.h, debaixo de public, na classe jogo, o blue, azul leite foi atravessado,
parâmetro int e dedo azul leite, ponto e vivo, voltando às jogo.cpp, isso já está aqui, já temos os inams na linha C36, C19, já incluído,
vamos prosseguir, de volta a linha C203, está certo, agora eu conferi o outro, que a mesma, é o mesmo padrão, tudo certo então,
voltando à main, ponto e cpp, o que é que tem agora, não precisamos mais dessas funções aqui na linha C7, C9, então vou remover essas linhas,
não tem mais o uso de IOStreem, não tem mais o uso de fstream, não tem mais nem o uso do SDL, então vou remover,
só é o incluído do jogo.h no arquivo main, ponto cpp, então no int main temos a nova objeto, jogo, a jogo iniciar,
chamada do jogo criar jonela, chamada do jogo configurar codos jogador, jogo carregar mapa, jogo enfriar mapa,
jogo configurar as flefices do mapa de jogo, jogo.rodar, que é o game loop, e finalmente depois que game loop sai,
vai o jogo onde é ligado para fazer aquela limpeza, certo, então isso é bem simples, bem limpo, main, ponto cpp, agora vamos lá para o
jogo.cpp para ver um negócio aqui, adicionamos tudo aqui e tal, eu quero fazer um negócio aqui dos includes, deixa lá ver o jogo.h,
eu quero mover esses includes aqui para o jogo.h, na verdade, deixa eu ver aqui, será que é bom eu incluir ou não,
ou deixa assim mesmo, deixa eu ver, vamos compilar e ver o que dá, agora na hora da compilação aqui,
eu vou ter que adicionar o jogo.cpp, não precisa adicionar o tipo de azulejo porque já é incluído pelo jogo cpp,
então é cheio de erro agora, vamos lá para o primeiro, o que é que deu, tanto erro e,
então primeiro erro, vamos conferir, problema de include talvez, no jogo.h erro, linha 5, coluna 3,
sdliwindow não nomeia um tipo, então acho que o problema aqui é que ele não reconhece sdliwindowstar,
porque não tem um include, então do jogo.cpp eu vou recortar o include do sdli daqui e vou colar no jogo.h,
vamos recompilar e ver no que dá, agora diminuiu, muito, então o maior dos problemas é o de include,
ele não reconheceu esses símbolos aqui no jogo.h,
então vamos ver aqui, linha 155, eu não sabe, jogo.cpp, tem a chamada de criar superfície de mapa de jogo com argumento azulejo,
então vamos ter mais argumento, então remota, vamos recompilar, agora primeiro erro, não existe função para chamar,
pintar entrada, mapa de jogo e posição entrada, porque a posição entrada a gente removeu,
então não precisa desses dois argumentos aqui, que já é mesmo privado, se lembra, está no jogo.h,
acho implícito, private, agora tenho que linha 156, no matching function, deixa eu conferir o primeiro,
primeiro implementar o h, vamos no jogo.h, pintar, entrar, pintar, sair, então não precisa também no mapa de jogo,
já é membro privado aqui na linha 17 da classe jogo, do arquivo, o jogo.h, então está aí, deu certo,
vamos ver se está funcionando no jogo, estou apertando as setas para mover no labirinho e o collision está funcionando,
não move para os muros, e entrada foi pintada de verde, saída pintada de vermelho e o jogador como cinza está funcionando direitinho,
então com isso a gente termina esse aprimaramento de corre, ufa, outra coisa, certo, então, vou isso,
vou ver se isso inclui, se você quiser, poderia incluir algumas coisas do include mover para cá, mas não precisa,
está tudo certo assim, deixa assim que está funcionando, está bom, então por essa aula é só, muito obrigado por assistir e até a próxima.
A gente vai ver o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o que é o
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: