Carregamento de Mapa do Jogo de Arquivo de Texto Plano e Pintura dos Tijolos na Tela
Video Transcript
Olá pessoal, estamos de volta com mais uma aula de SDL.
Nesta aula, nós vamos desenhar um mapa na tela do jogo.
Nós vamos definir nosso objetivo, que é fazer um jogo labirinto.
Então, vamos começar.
Aqui está o programa que já nós temos.
Tem um quadradinho cinza que você pode movimentar com as setas do teclado,
e ele move nesta tela.
E nós desenhamos três étangulos na tela.
Azul, vermelho e verde.
Então, para esta aula, vamos fazer o seguinte.
Vamos fazer um mapa de jogo com tijolos chamados tiles.
Então, cada quadradinho da tela será um tijolo,
que será uma unidade que o jogador pode mover.
Ele se move, cada quadradinho é um tijolo tile.
E nós vamos desenhar este mapa de tiles.
Mas, como o mapa vai aparecer,
vai ser definido por um arquivo de mapa, um arquivo de texto plano.
Então, depois, o nosso objetivo é este aqui.
Olha só nesta tela.
Vamos fazer este jogo de labirinto.
Vamos supor que você pode...
que a gente tenha os muros.
O muro é de uma certa cor, neste caso, vou usar a cor branca.
E estes muros você não pode atravessar.
Isto é, são as quadradinhas que vão bloquear o jogador.
O jogador só pode andar nos tijolos, que têm cor preta.
Então, o jogador começa, por exemplo, de uma posição,
certa posição, neste caso, no topo à esquerda, um quadradinho verde,
é a posição inicial do jogador.
O jogador tem que atravessar pelo labirinto e achar uma saída
definida, que é definida, até designada pelo tijolo vermelho.
Quando bater no vermelho, você vence este nível do jogo.
Tá bom, então, vamos começar aqui.
O formato do mapa vai ser o seguinte.
Note que a tela tem 640 pixels de largura e 480 de altura.
Nós vamos dividir isso em tijolos de valor 32.
Se eu abrir a nova tela aqui,
eu tenho 640 dividido por 32.
Isso vai dar o que?
O 10 320, então, vai ter 20 tijolos na horizontal
e serão 480 dividido por 32.
15 tijolos na vertical.
Esse vai ser o mapa, 20 por 15.
Vamos representar da seguinte maneira.
Vou ter um arquivo de testa e cada tijolo,
cada linha vai ser uma linha do arquivo de testa.
Vamos separar cada tijolo por um espaço.
Para poder representar o tijolo, vou usar o número inteiro.
Se for número zero, significa que é um tijolo que você pode andar.
Se for um serão tijolo de muro, você não pode atravessar.
Vamos deixar assim, por exemplo.
Vamos definir 20.
Então, 1, 2, 3, 4, 5.
Deixa eu pegar esse 5 aqui, vou copiar mais 5, mais 5.
5 vezes 4 é 20.
Então, a primeira linha daqui que vai aparecer no programa
será uma tijolo de andar, muro, andar, muro, muro, andar e se pôr diante.
Aí você faz, vou copiar 15 vezes, porque é 15 linhas.
Deixa eu pegar aqui 5.
15, tá?
Eu vou salvar isso.
Deixa eu chamar mapa do jogo.txt.
Tá bom? Esse vai ser o formato.
Arquivo de texto plano, bem simples e essa vai ser a representação.
A gente vai pegar esses números e vamos mapear para a tela aqui.
Vamos desenhar quadradinhos com tijolo.
Vamos usar o 0 para tijolo preto, 1 para o tijolo branco.
Então, vamos começar.
Vamos aqui devoltar o código.
E a gente vai fazer o seguinte, a gente tem a superfície da tela.
Aí ele pega, faz o input aqui, tem um loop, dá de...
Faz a entrada, não precisa de isso.
Vamos remover esses étangulos que não precisam mais.
E a gente vai salvar aqui.
Tem mais aqui.
Então, tem a superfície da tela, que a gente chama getwindowsurface.
E a gente tinha pintado nessa superfície da tela.
O que a gente vai fazer é o seguinte, a gente vai criar uma superfície para o mapa.
E vamos pegar a superfície e pintar na superfície da tela.
E só precisa fazer isso uma vez.
E você pode pintar a própria superfície da tela várias vezes.
Então, vamos lá.
Eu vou fazer uma função aqui para poder criar essa superfície do mapa.
Mas isso vai ser em duas.
Vamos ver aqui.
Duas etapas. Primeiro, nós temos que carregar o mapa.
E a segunda, temos que criar a superfície do mapa baseado nos idês do tijou.
Então, voltando aqui a este aqui txt do mapa, eu vou chamar cada número do idê do tijou.
Então, cada tipo de tijou terá um número.
E esse número aqui, zero, significa tijou que pode atravessar.
Número um, o idê do tijou e é o muro.
Idês dos tijolos.
Então, vamos fazer uma função para carregar o mapa.
Então, vamos armazenar o mapa, esses idês, numa array.
Essa array, você pode fazer tanto de uma dimensão como duas.
Então, será um quantos elementos?
Bem, temos 20 na horizontal, vezes 15 na vertical.
Isso vai ser o quê? 2 vezes 15, 30 mais vezes 10, 300.
Então, temos que armazenar 300 elementos.
Idês dos tijolos.
Certo? Se você fizer uma array de uma dimensão, você vai pôr 300 elementos.
Se você quiser fazer de duas dimensões, que é o que eu vou fazer,
é só usar 20 para o número de linhas e 15 para o número de colunas.
Vamos fazer a função aqui.
Eu vou fazer void, carregar o mapa, abre 40.
Bem, como eu vou fazer uma array, a entrada para essa função,
eu vou pegar, a entrada será uma array.
E dessa array, a gente vai modificar e carregar o mapa.
Então, vai ser de inteiros. Vou usar int, vou chamar tijolos.
E vou...
Tenho que dizer quantos tijolos.
Se você quiser começar por linhas, vai ser 15, na verdade.
Se você quiser começar por colunas, será 20.
Então, vou botar 15 aqui, número de linhas da tela.
Note que esse número, eu vou pôr na constante aqui,
mas vai depender da altura da tela.
Como eu usei esses dois aqui, talvez se você quisesse,
depois, depois, quando a gente talvez fizer uma classe para organizar melhor esse código,
eu seria derivar esse número do 480 aqui.
Mas só por agora eu vou deixar fixo.
Se quiser especificar o segundo, pode, mas não é necessário.
Então, a gente vai fazer o seguinte.
A gente primeiro tem que ler o arquivo.
Como ler o arquivo, vamos usar o stream, né? fstream.
Então, deixa eu importar aqui, incluir fstream, file stream, né?
E vou criar primeiro um std, 2 pontos, 2 pontos.
E fstream para poder ler o arquivo.
E vou chamar isso de mapa do jogo.
E vou dar o nome do arquimapa do jogo, ponto txt.
A gente primeiro tem que ver se ele abriu mesmo.
Então, você chama essa função mapa do jogo, ponto isopen.
Se estiver aberto, deu certo.
Nós vamos fazer o quê?
Ler o id do tijolo, do próximo tijolo.
E depois, vamos prosseguir, né?
Depois de tudo está terminado, só fecha o arquivo.
Então, para poder fechar o arquivo, bem simples, no final,
depois de ler todas as ideias, você fala mapadojogo.close.
E depois aqui, para poder ler o id, nós fazemos um loop, o while.
Aí você faz o mapa do jogo e põe esses símbolos aqui.
Maior que maior que.
E vai bater uma variável que eu tenho que criar para poder maisenar o id do tijolo.
Vou chamar de, sei lá, tijolo id, tile id, qualquer coisa.
id do tijolo.
Então, enquanto isso der certo, enquanto ele ler o próximo id,
nós vamos pegar e vamos atribuir a variável tijolos, tá?
Então, temos tijolos.
Agora, qual vai ser a linha que você vai ler?
Então, para poder determinar isso, vamos fazer o seguinte aqui.
Vamos fazer uns variáveis.
Linha 0, coluna 0.
Então, a gente vai começar de 0, 0, né?
Então, vamos fazer um loop, vamos fazer um loop,
coluna 0.
Então, a gente vai começar de 0, 0, né?
Bate aqui essa primeira linha 0, coluna 0 vai ser essa primeira aqui.
Começa do 0 porque a array os elementos, a gente começa a contar do 0.
Então, vamos usar a linha aqui como primeiro valor para referenciar e coluna como segundo valor.
Então, bater na linha e na coluna.
Então, a gente vai dar igual id do tijolo.
Mas, a gente, depois de fazer isso, tem que atualizar a linha e a coluna, né?
Então, se a linha agora for a última linha que é a linha, o quê?
Temos 15 linhas, então, 15 menos...
15, vamos ver, 15.
Se eu tiver na última linha, será 14, né? 15 menos 1 é 14.
Se for 14, 15 menos 1.
Eu vou deixar assim porque talvez você, depois queira, substituir isso por uma variável qualquer, tá?
Em vez de botar 14 aqui.
Se for o caso, a gente tem que fazer o quê?
Bem, isso vai terminar o loop, na verdade.
Se o mapa realmente estiver configurado corretamente e a gente só pegar um número fixo de linhas,
a gente pode dar o break do loop.
Ei, pera aí, pera aí.
É não.
Vamos começar a coluna, na verdade.
Vamos pensar em coluna.
Então, a gente está na linha zero.
Vamos supor coluna zero.
Então, tem duas maneiras de você pintar, desenha.
Você pode começar por linha toda, da esquerda para a direita e proceder para a próxima linha.
Então, você pode fazer por coluna.
Primeira coluna de cima para baixo, segunda coluna de cima para baixo.
Eu vou fazer do seguinte, eu vou fazer de cada linha da esquerda para a direita.
Então, para poder fazer isso, eu começo da linha zero.
E depois que setar o tijolo, eu tenho que incrementar a coluna para a próxima, né?
Coluna a direita.
Então, eu tenho que dizer coluna mais, mais.
Tá bom?
Então, você vai bater até que ele chega na coluna, na última coluna.
Em vez de linha aqui, eu vou por coluna.
Aí, temos 20 colunas.
Então, quando bater em 20 menos 1, é a última coluna.
Eu tenho que fazer o seguinte, tenho que recertar o número de coluna, que vai ser para zero.
E tenho que incrementar a linha para a próxima linha.
Então, a linha vai ser mais, mais.
Isso tudo supondo que o mapa tem exatamente 20 linhas e estão todas acertadas corretamente.
Isso é, não há uma infração na integridade dos dados.
Então, você tem que fazer...
Supô que tudo está certo, configurado corretamente.
Se não vai dar problema a algum bug que você não sabe o que vai acontecer.
Então, vamos ver aqui.
Com isso e tal, vai carregar o mapa.
Temos essa função.
Vamos ver se só compila, né?
Não vai fazer nada ainda, mas...
Pensei que eu não tenho nenhum erro de sintax e tal.
Vou dar g mais, mais.
Main.cpp, traço l, sdl2.
A relação de tijolos com multidimensional tem que ter bounds para ser.
Entendi.
Então, na verdade, eu me enganei na coisa lá.
Só o último que tem que ter o número não é o primeiro.
Então, em vez de...
Se você quiser, você pode deixar 15, 20.
Ou você pode omitir o primeiro aqui.
E ele vai consertar esse erro, né?
Primeiro.
Tá bom?
Então, não deu nenhum problema.
Ainda está rodando certo.
Se lembra que a gente removeu os retângulos?
Note que agora ele está pintando o meu caminho na tela.
É bem interessante, né?
Ok.
Então, estamos fazendo um arte.
Tá bom, então vamos continuar.
Vamos aqui chamar essa função para poder carregar o mapa
e fazer um debug e mostrar o mapa representado na tela.
Se carregou, para ver se realmente carregou.
Vamos aqui na hora de...
Então, para carregar o mapa,
nós só vamos carregar uma vez.
Não precisa ficar...
Pô isso dentro do loop principal, porque...
Se você ficar carregando o mapa o tempo todo,
ele vai consumir recursos.
Não precisa, precisa carregar uma vez.
Então, vou fazer fora do I-Lok.
Tá bom?
Então, vamos ver.
Depois do Windows Surface sair e tal.
Eu posso pô aqui...
Vamos fazer carregar o mapa.
Temos que passar uma array de tijolos.
Eu vou criar aqui em cima essa variável.
Eu vou chamar int tijolos de quantas linhas?
Bem, como tem aqui em cima o window with?
Desculpa, não é with, tem que ser height, que é a altura.
Altura.
Dividido por 32, eu posso até pô a variável aqui para o tamanho do tijolo.
Tamanho do tijolo 32.
Eu pego essa constante e ponho aqui.
E esse vai dar 480 dividido por 32.
Vai dar 15.
E como segundo...
Segundo dimensão, né?
Vai ser as colunas.
Vai ser 640, que é o window with.
E você divide para o tamanho do tijolo.
E é isso.
Deixa eu dar o cabra de linha.
Temos as suas variáveis aí.
Aí passa o variável para cá.
Aí eu quero dar o debug.
Eu quero fazer essa função imprimir mapa do jogo.
E vou passar os tijolos.
Eu esse imprimir vai imprimir no console o mesmo conteúdo do arquivo de texto.
Nós vamos usar isso para ver se carregou corretamente.
Então vamos criar essa função bem simples.
Vamos fazer o loop de duas dimensões nesse mapa.
Pode imprimir mapa int tijolos.
Primeiro dimensão, segundo vai ser 20.
Então vamos dar o loop.
Vou dar o for aqui.
For int.
Se o popolinha voltar i igual a zero.
I menos que o que...
Tem 15, né?
Eu estou usando as constantes aqui tudo exatamente.
Depois você pode definir o for num variável e tal.
Enquanto o menor que 15, aumenta o i.
Eu vou até mudar essa variável aqui.
Eu vou chamar de linha, em vez...
Melhor para você entender.
E você pode fazer outro for, em dentro.
Int coluna zero, começa a dar zero.
E coluna menor que 20.
Coluna mais mais.
Então vai começar a linha zero, coluna zero e tal.
A gente vai fazer o que?
Vamos dar std, cout,
tijolos na linha e coluna.
Aí eu vou dar um...
Eu tenho que ver se vai dar o espaço
ou se vai dar uma quebra de linha.
Se for a última coluna,
se for a coluna, a última que vai ser 19,
eu tenho que quebrar a linha.
Eu vou dar std e rln.
Se não, não for a última coluna,
eu só adiciono o espaço entre esses caras.
Vamos chamar aqui a função e tal e tal.
Vamos ver se funciona.
Vou compilar.
Tem um erro que eu fiz, não vou dar para converter.
Int, o que eu fiz de errado aqui?
Vamos ver int tijolos.
Provavelmente porque é o cálculo.
Será que é o cálculo que eu fiz?
Não dá para converter int.
Para int 20.
Provavelmente por causa dessa cálculo que eu fiz,
eu não sei se ele pega variável dinamicamente
em vez de ser na hora da compilação.
Deixa eu ver...
Linhas entre colunas.
Acho que não vai funcionar porque ele está fazendo cálculo na hora de execução,
em vez da compilação.
Então talvez eu tenho que definir um macro.
Isso não vai dar.
Deixa eu pôr linhas aqui.
Exatamente 15 e colunas 20 para poder funcionar.
Deixa a gente ver como fazer isso de outra maneira.
Vamos deixar aqui para pesquisa.
Vamos rodar.
Veremos aqui, vou olhar o mapa do jogo.
E temos 0, 1, 0.
E o final é 0, 1, 1, mas deu pau aqui.
Algo de errado aconteceu na última.
Temos 5 aqui.
5, 5, 5.
A última coluna está errada.
Toda última coluna é 1.
Apareceu esses negócios.
Houve um erro de 1 por 1.
Esses erros normalmente acontecem e a gente tem que consertar através da interação.
Vê o erro, ve o problema e vai corrigir.
Vamos ver se foi erro de imprimir.
O imprimir parece que está certo.
Vamos ver se foi imprimir ou se foi carregar.
Vamos dar um olhado no carregar.
Você começa de linha 0, colina 0 enquanto o mapa foi D e tal.
Jolulinha, ID do tijolo.
Deixa eu ver coluna mais mais, próxima coluna.
Se coluna for igual a...
Está certo.
Você incrementa a coluna e acho que isso foi errado aqui.
Porque tinha incrementado antes de checar.
Se eu tiver na última coluna, que é a 19,
eu incremento e ele vai para 20.
Por causa disso, tenho que recertar quando for 20, em vez de 20 menos 1.
Isso estava errado.
Isso só iria funcionar e fosse invertido.
Se o coluna mais estivesse depois do E.
Corretamente é assim.
Vamos lá.
Testar novamente.
Agora você vê que a última coluna é 1.
Então, corretamente.
Carregamos o mapa corretamente.
A próxima etapa é desenhar o mapa na tela.
Para poder fazer isso, primeiro temos que criar uma superfície.
Vamos criar essa superfície e pintar os cadradinhos na tela.
Depois disso, vamos pegar a superfície e pintar sobre a superfície da tela.
Da própria tela.
Vamos lá.
Criar a superfície do mapa baseado no ID do jogo.
Vamos fazer a função que retorna um ponteiro para a superfície surface.
Essa função vai ser criar superfície do mapa de jogo.
Vai retornar essa superfície.
Vamos criar as delas surface, ponteiro, superfície.
Vai ser igual à função que a gente vai chamar aqui.
Essa função, vamos ver aqui.
Criate surface.
Vou dar uma busca aqui.
Tu sei em internet.
Espera aí um pouco.
Estamos de volta aqui.
Eu vou certar nesse problema aqui.
Espera aí um pouquinho.
Essa função vai ser create as delas surface de RGB.
Vamos chamar aqui as delas create RGB surface.
Eu acho que o nome está certo.
Vamos ver.
Confirmado depois.
Tem vários argumentos aqui.
Eu não lembro de cara.
Vai ser vários.
Mas a maioria vai ser zero.
Vamos ver aqui.
Um deles vai ser 32, porque estamos usando 32.
Espera um pouquinho aqui que vai conectar já.
Enquanto isso, a gente vai criar superfície.
Aí a gente vai pintar nessa superfície.
A gente vai usar o SDL, fail rack.
Vamos pintar na superfície.
Isso a gente vai usar, pode fazer o loop.
Dá a mesma maneira que a gente fail e imprimir.
Vou dar aqui a função.
Create RGB surface.
Ela tem 4, 8 argumentos.
Ital, ital, ital.
Então flags, primeiro argumento é bandeiras.
Tem que ser zero.
Segundo vai ser a largura da superfície.
Você pode pôr 640.
E depois a altura, 480.
E a depth.
Depois disso tem a mask ali.
Eu acho que pode até usar zero, não me engano.
Vamos ver se por zero se acontece.
Zero, zero, zero.
E zero, alfa.
Vamos ver só assim, depois a gente vê.
Vamos pintar nesses superfícies quadradinhos.
Vamos primeiro precisar delinear uma área da superfície inteira.
Para poder...
Pintar.
Então a primeira área da superfície vai ser no topo.
Acima esses 32 por 32.
E depois a próxima, depois a próxima e assim por diante.
Então vai precisar do SDL e rect.
Retangulo.
Para poder definir a área específica que a gente vai pintar o digiolo.
Então retangulo.w, largura 32.
Que é o tamanho de digiolo, tem essa variável aqui, mas não está no escopo.
Então vou deixar assim mesmo.
A altura 32.
Agora o x e o y.
O que vai mudar?
A gente tem que indicar a posição.
Aonde vai pintar, né?
Porque a gente vai começar...
Vamos pensar como se fosse uma câmera de 32 por 32.
Você começa a câmera no topo, acima.
Aí você vai...
Eu vou fazer de esquerda para direita, acima para baixo.
Então você vai...
É como se fosse o próprio jogo que a gente tem.
Eu vou começar primeiro, depois a segunda, depois a terceira, quarta e assim por diante.
Aí depois quando estiver no final, ele vai zero a coluna, vai para o zero.
Aí você começa aqui a segunda linha e começa de novo.
Essa vai ser a pintura que eu vou fazer.
Isso em por diante.
Então vamos ver aqui.
O que vai ser o x e o y.
Então for...
50 linhas zero.
Linha menor que 15.
Linha mais mais.
Foi int coluna zero igual a zero.
Coluna menos que 20, coluna mais mais.
Temos agora a linha, temos a coluna.
Podemos usar isso para poder calcular a coordenada x e y do retângulo.
Quem é que vai terminar se o retângulo está na horizontal?
Vai ser o x, né?
Retângulo x vai ser o quê?
Começa do zero, coluna zero.
E quando a coluna vai ser o quê?
Começa do 32, porque a largura do tijolo é 32.
E depois vai ser a terceira coluna, começa o x do 32 mais 32, que é o certo, 100 e 4.
E depois vai o quê?
100 e 4 mais 32.
E assim por diante.
Então você vai pegar a linha vezes o tamanho do tijolo 32.
Então o zero vai ser o quê? Zero.
Zero, segunda linha, linha 1.
Vai ser o quê?
1 vezes 32, 32, isso é importante.
Agora o x, vamos pensar no x.
Retângulo... Desculpa disso, vamos pensar no y.
Pro y vai ser de cima pra baixo, quem é que está determinando isso?
Ah, na verdade, esse x vai ser coluna, desculpa aqui.
Eu tinha investido.
O x vai ser pra coluna e y vai ser linha.
Agora pro y vai ser de cima pra baixo, que determina isso é a linha.
A linha começa do zero.
Então vai ser linha vezes 32, vamos ver se é correto.
Linha zero, vai ser zero vezes 32, zero, correto.
Linha 1, vamos ver se 32.
32 lá de cima pra baixo, vai bater a posição aqui.
No começo está a segunda linha, tá bom?
Pra coluna é a mesma coisa.
Então com isso temos a posição, podemos definirmos a posição.
Agora podemos pintar o SDL, fail rect.
Se a gente vai usar, se lembra, fail rect, olha aqui no wick.
Então o qual vai ser o destino?
O destino vai ser a superfície que a gente criou.
Agora qual é a área, qual é a parte daquela superfície?
Vai ser a parte que está delineada pelo retorno.
O qual vai ser a cor?
Agora a cor vai ser um negócio aqui.
Vai ser, tem duas cores agora, tem a preta e tem o branco.
O branco é o muro.
Então a gente tem que criar essas duas cores baseado em quê?
Baseado no tijolo.
Se fosse mais na frente, fosse uns tijolos de grama, de água, de não sei o quê,
você faria quase a mesma coisa.
Só que você, em vez de desenhar um quadradinho, você pegava a imagem
e recortava daquela imagem do quadradinho e pegava aquela imagem que colava em cima desse superfície.
Mas aqui é bem simples, é só com quadrado.
Então vai ser só na cor mesmo.
Para criar uma cor a gente pode usar a map RGB.
CDL map RGB.
Se lembra aqui, CDL map RGB.
Então o formato, tem que dar o formato da superfície, format, superfície, seta format, vírgula.
RGB vermelho, verde e azul.
Então se o...
A gente precisa do ID do tijolo, tá? Qual o ID do tijolo?
ID do tijolo.
Vai ser o quê? Bem, isso tá no mapa.
O mapa tá dentro do quê?
Tá dentro da array de tijolos.
Lembra? Então para poder a gente passar isso para criar superfície do mapa de jogo, a gente precisa passar como argumento.
Ah, então vou chamar aqui, criar superfície do mapa de jogo.
Mapa.
De jogo.
Eu tenho que passar os tijolos.
Para poder receber os tijolos, vamos atualizar, modificar essa função para receber int tijolos com 20 colunas.
Com isso a gente pode acessar aqui tijolos na linha e na coluna que vai dar o quê?
Vai dar o ID daquela... ponto, naquela linha daquela coluna.
Então já que vem a linha, já que vem a coluna, tá bom?
Das variáveis aqui de interação do para.
Então se o ID do tijolo for zero, significa o tijolo de andar, pode andar.
Se é o cftd do tijolo, porra.
Um muro bloqueado.
O jogador é bloqueado.
Então eu tenho esses dois casos da maneira que eu escrevi aqui.
Se não for nenhum desses dois, então não vai desenhar nada.
Normalmente no jogo tem vários, vários, vários tipos de tijolos.
Então vamos supor que o mapa está corretamente escrito, então só vai ter zero ou um.
Vamos lá.
Então vamos criar a cor, vamos fazer a cor que o int tijolo de ter dois é o valor que é retornado para a cor.
É o tipo, olha aqui.
Então por isso que eu vou fazer isso.
Então cor do tijolo.
E essa variável vai ser acertada aqui.
Se pode andar, eu vou botar preto.
Zero, zero, zero.
Como não dá para a superfície já começar preto, eu vou botar quarenta e quatro para você ver que realmente ele pintou aquela coisa.
Então vai ser meio cinza.
Depois eu vou mandar de volta para preto.
Se o ID do tijolo for um, vai ser o muro bloqueado.
Vou fazer a minha coisa.
Aí eu esqueci de setar a cor do tijolo igual a essa cor e pô, ponto i vírgula no final.
Mesma coisa aqui.
Cor do tijolo igual.
Ponto i vírgula no final.
O argumento vai ser branco.
Branco e RGB é duzentos quarenta cinco, duzentos quarenta cinco, duzentos quarenta cinco.
Valou o máximo, todas as cores.
Finalmente,
nós vamos dar aqui o
Fuel React.
Se lembra a última, vai ser a cor do tijolo.
Com isso ele vai criar a superfície e vai mandar de volta o ponteiro.
E nós temos essa aqui.
Mas agora temos que pintar a superfície sobre a superfície da tela, que é Windows Service.
Para poder fazer isso, a gente vai dar o Sdl Blitz Service.
Essa função aqui.
Sdl Blitz Service.
Então essa função leva aqui quatro argumentos.
Primeiro vai ser a fonte, né?
Da onde que vem?
Então vou pegar o que? Vou pegar o mapa do jogo e vou colar sobre a superfície da tela.
Então o destino é a superfície da tela, a fonte é o mapa de jogo.
Então vou mandar a superfície mapa de jogo.
E tem o retângulo aqui que vai ser tudo.
Eu quero usar, eu quero pintar na tela inteira, então vou botar no para copiar a superfície inteira.
A destino é o Windows Service.
Eu quero colar na... Então esse aqui pega a tela inteira do mapa, a superfície inteira, cola na superfície inteira do Windows.
Vamos testar.
Recompilar.
Deu erro porque...
Eu esqueci o... Linha 56.
É que eu esqueci...
Pontei o superfície...
Esperou a extração primária antes de fechar.
Será que eu esqueci...
Não, não dá para converter a tela direct.
A segunda é fácil de fazer, porque eu esqueci de passar o endereço do retângulo.
A segunda argumenta é ponteiro para retângulo.
Vou passar referência ali.
Agora o primeiro aqui eu acho que talvez o create.rgb eu chamei errado.
Sdl, create, rgb, surface...
Então tem um 4.
Vamos ver que o exemplo que eles têm, eles chamam com wave height, 32, rmask, gmask e amask.
Então se eu usar essa masque aqui, que eles fizeram...
Mas tem também os defaults que eu fiz.
Create, surface, 0, 640, 480, 32, 0, 0, 0...
Ah, é mania de programação em outros linguagens que você pode pôr a vígula.
Estou definindo objetos, o racho ou qualquer coisa.
Então remove a vígula para consertar.
Tá bom?
Vamos ver se corresponde ao mapa do lado esquerdo no terminal.
Então, nós temos 0, 1, 0, 1.
Então, o note que todas as linhas são iguais.
Então temos o assinzado, branco, assinzado, branco, branco, assinzado, muro,
muro, muro, muro e assim por diante.
Então tá certo.
Vamos mudar o mapa para ver se realmente está funcionando.
Então vamos supor que eu queira fazer esse caminho aqui.
Vamos ver esse caminho aqui que eu quero fazer.
Vamos fazer esse caminho aqui.
Começa a exercício.
Então como é que eu faço esse caminho assim?
Vou começar do topo esquerdo.
Pode andar aqui, pode andar aqui também.
Pode andar aqui, vai para baixo.
Aqui pode andar, vai para baixo, pode andar.
Então vai para a direita, pode andar.
Vai para a direita de novo.
Já estou me perdendo aqui enquanto você tem 1, 2, 3, 4.
Vamos lá.
1, 2, 3, 4.
Aí ele vai lá para cima, pode andar.
Aí ele vai para a direita, 0.
Vai direita, 0.
Então vai para baixo.
1, 2, 3, 4.
Vamos salvar aí.
Vamos ver se realmente fez esse caminho aqui.
Então ele fez o caminho.
Obviamente não tem colisão ainda,
então você pode andar em qualquer lugar.
Tá bom?
Agora a razão de ele sempre está...
O jogador está pintando e não está atualizando.
Hebe então na tela anterior,
porque...
Vamos ver o código aqui.
Nós criamos a superfície da tela,
superfície do mapa, pintamos nossa,
superfície do mapa sobre a tela.
Aí ele pega e faz o loop do jogo
e dá o fill-rex sempre na posição do jogador presente.
Ele atualiza a superfície da tela.
O problema é que ele não pinta.
Ele não pinta a superfície do mapa sobre a tela de novo.
Então talvez vamos tentar o seguinte.
Eu vou fazer o blade surface do mapa.
Então eu vou pintar o mapa atual,
depois de o jogador se movimentar.
E quando a gente for pintar de novo,
eu vou pintar o mapa sobre a tela de novo.
Qualquer coisa que tiver na tela,
eu vou pintar sobre para poder esconder
tudo aquilo que já tinha sido feito.
Ele começar tudo do zero em termos de...
onde o mapa está.
Depois disso ele pinta o jogador.
Então eu vou botar aqui
o blade surface, mapa e fill-rex com o jogador.
Então agora ele consertou esse problema.
Tá bom?
E aquele negócio foi legal para a gente poder fazer
esse mapeamento.
Se fosse o editor, o caminho que a gente olhou
para poder escrever o mapa.
Obviamente você teria que fazer uma ferramenta
para fazer o editor de mapa para ficar melhor o negócio.
Mas por enquanto a gente faz o mapa só no texto.
Então vamos revisar o que a gente fez.
Então nós aprendemos a fazer esse mapa de t-jogos.
Tiles.
E jogador pode se movimentar.
O objetivo é fazer um jogo do labirinto.
O jogador se movimenta nessas tiles aqui pretas.
E o muro será essas brancas e não pode atravessar o muro.
Então você tem que ir de um local A para um local B no mapa
para poder vencer o jogo.
Começamos criando esse formato de mapa.
Arquivo de texto, plano bem simples.
Então é um número inteiro separado por um espaço
separado por uma linha.
Isso corresponde ao mapa da tela.
Cada linha do mapa do arquivo corresponde a linha da tela.
Cada coluna do arquivo corresponde a coluna da tela.
O id de t-jogos zero é o que pode andar.
E o id de t-jogos um é o muro.
Nós pegamos isso, fizemos o debug para ver se realmente carregou o mapa
que a gente fez aquela função.
Carrega o mapa, né?
E usa o e-f-stream para poder abrir o arquivo.
Você vê se está open, se deu certo.
Faz esse loop usando o maior que, maior que,
numa variável para armazenar o id do t-jogos.
Fizemos o loop e tal e tal.
Fechamos o arquivo depois disso.
E primimos para debug.
Aí criamos o superfície do mapa de jogo.
Usamos essa ideia e criamos a RGBSuffers.
Nessa maneira aqui, cria superfície.
Aí a gente vai pegar, de acordo com o id dos t-jogos,
a gente vai pintar o t-jogos que podem andar da terra
ou do muro.
Aí tem cores diferentes dependendo do id do t-jogos.
Certamos muito importante o retango,
o x e o y baseados na coluna e na linha.
32 é o tamanho do t-jogos, tile.
Usamos a sdl-fill-rect, com superfície como primeiro argumento.
O endereço do retango e terceiro,
o acordo de jogo que foi definido aqui pelo id do t-jogos.
Retono essas superfícies, que é um mapa já, né?
Pintado, né?
Aí, gerado, na verdade.
Aí a gente pega e pinta o mapa sobre o...
a tela, né?
Então, toda vez a gente vai primir o mapa sobre a tela
e o jogador, no loop do jogo.
Pinto o mapa de novo, pinto o jogador.
Pinto o mapa de novo, pinto o jogador.
E atualiza a tela, obviamente, né?
Então, por essa aula só,
espero que tenham gostado e até a próxima.
Não se esqueça de se inscrever no canal,
deixar seu apoio,
nos ajuda muito.
É mais.