Ajuda: C/C++ [RESOLVIDO]

13. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/07/2014 - 08:18h

Nossa é Verdade

Editei Aquilo e Aumentei o Tamanho do Mapa Para 400 x 400 e com mais paredes,agora vem minha duvida,teria coo você tentar aprimorar um pouco ? por que fica muito estranho o chão e a grama gerados aleatoriamente (no terminal eu colocava os 2 como "."). E Mais Uma Coisa,aonde você baixou esses bmp,pq eu to querendo ver se eu posso trocar as imagens do jogo (apenas se você deixar,por que se eu mexer e eu não tiver pedido para você é roubo),me ajuda nesse,que agora esta bem mais fácil

NOTA : NOSSA !! EU SOU UM GÊNIO (mais ou menos),eu criei um sistema que tem que pegar a chave e depois ir com ela até a porta,ficou bem da hora,só não usei o rand por enquanto,talvez mais tarde use para gerar em lugares aleatórios (a chave),só tem um pequeno problema,você precisa baixar 2 arquivos,a chave e a porta,os links :


NOTA 2 : Eu (Re)Desenvolvi o meu jogo agora a chave é gerada aleatoriamente e ao meu ver esta sem bugs (eu joguei tipo umas 50 vezes 'sem morrer'),e o único bug(não sei se posso chamar assim) é que 1 vez eu nasci em cima da chave ,só isso.

Espero Que Goste :)

Chave :
http://www.iconki.com/icons/Software-Applications/24x24-Application-Icons/Blue%20key.bmp

Porta :
http://www.iconki.com/icons/Software-Applications/24x24-Application-Icons/Door.bmp

Segue



#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>

/* Definicoes, para facilitar o uso da funcao para desenhar o mapa */
#define PAREDE 1
#define VOCE 2 /* não usado */
#define GRAMA 3
#define SAIDA 4
#define PORTA 5
#define CHAVE 6


/* Desfinicoes da configuracao do Video */
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>

/* Definicoes, para facilitar o uso da funcao para desenhar o mapa */
#define PAREDE 1
#define VOCE 2 /* não usado */
#define GRAMA 3
#define SAIDA 4
#define PORTA 5
#define CHAVE 6


/* Desfinicoes da configuracao do Video */
#define LARGURA 400 /* Numero total de colunas*largura_da_parede */
#define ALTURA 400 /* Numero total de linhas*altura_da_parede */
#define BPP 0 /* A Flag SDL_ANYFORMAT se encaregara da resolucao */

/*Outras definições para tratamento de erros*/
#define OK 1
#define ERRO 2


SDL_Surface * tela, * piso, * parede, * player, * final, * grama,*porta,*chave;

int coluna_atual = 1,linha_atual = 1,key,passos,fim=0;


int mapa[20][20] =
{{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,3,3,3,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,3,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,3,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,3,4},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};


int mapa2[20][20] =
{{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,3,3,3,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,3,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,3,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,3,4},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

void controla_fps ( int tempo_inicial )
{
int fps = 1000/60; // converte 60 FPS para milissegundos
int tempo_agora = SDL_GetTicks() - tempo_inicial;

if(tempo_agora < fps)
SDL_Delay(fps - tempo_agora);
}

int carrega_imagens ( )
{
/* Carrega as Imagens */
parede = SDL_LoadBMP("parede_muro.bmp");
if (parede == NULL)
{
printf("Não carregou parede_muro.bmp\n");
return 0;
}

player = SDL_LoadBMP("gamer.bmp");
if (player == NULL)
{
printf("Não carregou gamer.bmp\n");
return 0;
}

final = SDL_LoadBMP("fim.bmp");
if (final == NULL)
{
printf("Não carregou fim.bmp\n");
return 0;
}

grama = SDL_LoadBMP("gramado.bmp");
if (grama == NULL)
{
printf("Não carregou gramado.bmp\n");
return 0;
}

porta = SDL_LoadBMP("Door.bmp");
if(porta == NULL){
printf("Não Carregou Door.bmp");
}

chave = SDL_LoadBMP("Bluekey.bmp");
if(chave == NULL){
printf("Não Carregou Bluekey.bmp");
}

return 1;
}

int gera_chave(){
int Chave = 1,teste1,teste2;
teste1 = rand()%16;
teste2 = rand()%16;
if (((teste1 > 0 )&& (teste2 > 0) &&(mapa[teste1][teste2] != 1)))
{
if((mapa[teste1][teste2] == 0) || (mapa[teste1][teste2] == 3)){
mapa[teste1][teste2] = 6;
Chave +=1;
}else{

teste1 = rand()%16;
teste2 = rand()%16;
mapa[teste1][teste2] = 6;
Chave +=1;
}
}else {

gera_mapa();

}
}
int gera_mapa( )
{
int m, n,x,y,teste,Parede = 0,MaxParede = 70;
for (x = 0;x<20;x++)
{
for(y = 0;y<20;y++)
{
mapa[x][y] = 0;
mapa[x][y] = mapa2[x][y];
}
}


for (m = 0; m < 20;m++)
{
for (n = 0;n<20;n++)
{
teste = rand()%4;
if (((mapa[m][n] == 0)&&(teste == 1)&&(Parede < MaxParede)))
{
mapa[m][n] = teste;
Parede = Parede + 1;
}
else if ((teste == 0)&&(mapa[m][n]== 0))
{
mapa[m][n] = 3;
}
}

}
gera_chave();
}
int desenhar_mapa()
{
int linha,coluna;
SDL_Rect destino;
for (linha=0;linha<20;linha++)
{
destino.y = linha * 20;
for (coluna=0;coluna<20;coluna++)
{
destino.x = coluna * 20;

if (mapa[linha][coluna] == PAREDE)
SDL_BlitSurface(parede, NULL, tela, &destino);
if (mapa[linha][coluna] == GRAMA)
SDL_BlitSurface(grama, NULL, tela, &destino);
if (mapa[linha][coluna] == SAIDA)
SDL_BlitSurface(final, NULL, tela, &destino);
if(mapa[linha][coluna] == PORTA)
SDL_BlitSurface(porta,NULL,tela,&destino);
if(mapa[linha][coluna] == CHAVE)
SDL_BlitSurface(chave,NULL,tela,&destino);
}
printf("\n");
}

return OK;
}

void move_jogador ( SDL_Event event )
{
/*=============== Deslocamento do jogador =====================*/
switch (event.key.keysym.sym)
{
/* Na vertical */
case SDLK_UP:
/* Se o usuario aperta a seta para cima e linha_atual for maior que 0 ... */
if (linha_atual > 0) /* 0 = primeira linha */
{
/* ...subtraia 1 de linha_atual, ou seja, suba uma linha... */
linha_atual = linha_atual - 1;
/* ... e verifique a localizacao do jogador ...*/
if (mapa[linha_atual][coluna_atual] == PAREDE)
linha_atual = linha_atual + 1; /* ... Se for sobre a PAREDE volte para a posição anterior. */
}
break;

case SDLK_DOWN:
if (linha_atual < 19)
{
linha_atual = linha_atual + 1;
if (mapa[linha_atual][coluna_atual] == PAREDE)
linha_atual = linha_atual - 1;
}
break;

/* Na horizontal */
case SDLK_LEFT:
/* Se o usuario aperta a seta para esquerda e coluna_atual for maior que 0 ... */
if (coluna_atual > 0) /* 0 = primeira coluna */
{
/* ...subtraia 1 de coluna_atual, ou seja, recue uma coluna ... */
coluna_atual = coluna_atual - 1;
/* ... e verifique a localizacao do jogador ...*/
if (mapa[linha_atual][coluna_atual] == PAREDE)
coluna_atual = coluna_atual + 1; /* ... Se for sobre a PAREDE adicione 1 a coluna_atual. */
}
break;

case SDLK_RIGHT:
if (coluna_atual < 19)/* 39 = última coluna */
{
coluna_atual = coluna_atual + 1;
if (mapa[linha_atual][coluna_atual] == PAREDE)
coluna_atual = coluna_atual - 1;
}
break;

default:
break;
}
}


int main()
{
srand( (unsigned)time(NULL) );
/*inicializando a SDL e verificando possiveis erros */
_Bool JogadorChave = 0; // Se o Jogador Nao Tiver A Chave entao é false
_Bool PortaAberta = 0;
if(SDL_Init(SDL_INIT_VIDEO) != 0)
{
printf("Erro: %s\n", SDL_GetError());
exit(-1);
}

SDL_Rect destino; /* para blitar o jogador */
SDL_Event evento; /* para os eventos */

/* Carrega as imagens */
if (carrega_imagens() == 0) /* Se não carregou uma ou outra imagem */
{
return 1; /* encerre o programa */
}

/* Configura o Video */
tela = SDL_SetVideoMode(LARGURA, ALTURA, BPP, SDL_SWSURFACE | SDL_ANYFORMAT);
if(tela == NULL)
{
printf("Erro: %s\n", SDL_GetError());
return 1; /* encerre o programa */
}
SDL_WM_SetCaption("Labirinto - SDL By Thihup", NULL);
int tempo_inicial;
gera_mapa();


/* Loop principal */
while (fim == 0) /* Enquanto NÃO for verdadeiro o fim */
{
/* Para a funcao controla_fps */
tempo_inicial = SDL_GetTicks();

/* Loop de eventos */
while(SDL_PollEvent(&evento))
{
if(evento.type == SDL_QUIT)
fim = 1;

/* move o jogador */
if (evento.type == SDL_KEYDOWN)
move_jogador(evento);
}


/* Verifica se o jogador chegou ao ponto final */
if (mapa[linha_atual][coluna_atual] == SAIDA)
{
coluna_atual = 1,linha_atual =1;
destino.x = coluna_atual * 20;
destino.y = linha_atual * 20;
SDL_BlitSurface(player, NULL, tela, &destino);
JogadorChave = 0; // Se o Jogador Nao Tiver A Chave entao é false
PortaAberta = 0;
gera_mapa();
}
if(mapa[linha_atual][coluna_atual] == CHAVE)
{
JogadorChave = 1;
mapa[linha_atual][coluna_atual] = 3;
SDL_UpdateRect(tela,0,0,0,0); /* Atualiza a tela inteira */
}

if(((mapa[linha_atual][coluna_atual] == PORTA)&&(JogadorChave)&&(mapa[linha_atual][coluna_atual] == PORTA))){
PortaAberta = 1;
}

if((PortaAberta)&&(evento.type == SDL_KEYDOWN))
{
// O Jogador Pode Passar
}else if (((!PortaAberta)&&(evento.type == SDL_KEYDOWN))&&(mapa[linha_atual][coluna_atual] == PORTA)){

linha_atual = linha_atual -1;

}
/* Pinta a tela inteira de branco antes de desenhar o mapa, esse branco eh o caminho */
SDL_FillRect(tela, NULL, SDL_MapRGB(tela->format, 255, 255, 255));
/* Desenha o mapa sobre a tela */

desenhar_mapa();
/* blita o jogador na tela */
/* para o jogador: destino.x = coluna_atual*largura_da_imagem e destino.y = linha_atual*altura_da_imagem */
destino.x = coluna_atual * 20;
destino.y = linha_atual * 20;
/* pegue a imagem player completa(NULL) e jogue na tela em destino */
SDL_BlitSurface(player, NULL, tela, &destino);

SDL_UpdateRect(tela,0,0,0,0); /* Atualiza a tela inteira */
controla_fps(tempo_inicial); // controla o FPS
}

/* Finalizando o SDL */
SDL_Quit();
return 0;
}


Valeu


  


14. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/07/2014 - 14:13h

Opa Mano

Gostei da Ideia,mas voce acha que ficaria legal se quando eu passar pela porta ela abra?eu meio que entendi como fazer isso (na verdade eu fiz quando peguei a chave),voce acha que meu codigo "esta melhor que o seu",nao em nivel de beleza ,mas em nível de conteudo,
ah e se tiver como criar uns bmp legais , eu tava pensando em fazer algo do tivo o player é o tux e a saida é alguma distibuição (ex : na 1° é o ubuntu,2° debian),e fazer algo de eletronico SE VOCE QUISER,e ve se tem como fazer uma porta,chave e uma porta aberta,se fizer isso eu vou te agradeçer muito

Te +


15. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/07/2014 - 19:45h

Opa Mano

Eu Sei Que Isso é te pedir de mais , mas teria como voce fazer uma porta aberta? nao sei se voce me entendeu,é como em um rpg,que com a chave a porta se abre e nao "some" e mais uma coisa,ja que voce tem um GRANDE conhecimento em SDL,porque voce nao tenta desenvolver uma interface grafica tipo a graphics.h (que foi feita em SDL),eu tava lendo e nao é muito complicado e podemos colocar as nossas funcoes e se quise até em pt-BR,ficaria massa(va que no futuro nos nao criamos um minecraft em c)



Se Quiser Olhar Para Ver o Minecraft em Python e em C(mas é com o opengl),e ve se tem como "refazer" o mine

Python :

https://github.com/fogleman/Minecraft

(O Arquivo é o main.py)

C :

https://github.com/fogleman/Craft

(O Arquivo está em src/main.c)

Te+


16. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/07/2014 - 21:12h

Opa

Eu Tenho Alguma Espectativa de 'Nós' 'Conseguirmos' Fazer o 'Craft'??

Espero Que Sim,a intenção da biblioteca grafica (na hora tinha me fugido o nome) era para conseguir fazer com "mais facilidade",mas se voce acha que nao existe a possibilidade ... (Vou Chorar no Cantinho ...)

Te +




17. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/07/2014 - 21:35h

Mas o ruim é que em 2d nao da de fazer nenhum jogo,voce conhece algum jogo (que fez sucesso) que é em 2d ? (terraria nao vale,mas se voce me ajudar com a logica ja é de bom tamanho)

Então Vou Ficar Criando o Labirinto que é o unico jogo em 2d

...

Té Mais


18. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/07/2014 - 22:13h

Opa

Eu Vou (Tentar) Fazer um tipo remake do terraria,só pra me adaptar e dobre o 3d , vale o OpenGL ? ou apenas com o sdl ?pelo que estava lendo parece (quase) impossível
Pode Ser ?

e a propósito , vc tinha me desafiado ?


19. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 08/07/2014 - 00:11h

Opa Cara

Nao To Afim de Pesquisar e Tudo Aquilo (por que o que eu procuro eu acho),mas deixando isso de lado, voce ta afim de criar um jogo tipo um rpg ou um TIPO ,nao igual,apenas os comandos pular ir para outra level e algo assim,hj eu pluguei e configurei meu controle e tava jogando o meu labirinto, e tive essa ideia

Que que voce acha (rpg nao é em 3d , certo ?)
Vamos superar nossas diferenças e nos unir para fazer isso // SEMPRE QUIS FALAR ISSO

Por Favor ,Nao Precisa ser o melhor do mundo,e quando vc tinha dito que nao tinha como fazer o minecraft eu tinha ficado revoltado,por isso fiquei retrucando.

Se Quiser eu estarei disposto a ajuda (nao sei como , pq vc é o programador),talvez vc me de algumas metas e voce vai fazendo outras,depois nos juntamos e vamos ter um rpg (ou quase)

Por Favor !


20. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 08/07/2014 - 10:16h

Entao Para eu nao ficar revoltado,me de uma explicacao de parabola COM LINHAS,ja que nao vai dar de "fazer" um rpg,pelo menos me explique como fazer uma parabola CERTA COM LINHAS

E Sobre o Game 3d ,vale o unity 3d ? eu posso tentar o javascript,ok?

Té +


21. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 15/07/2014 - 19:54h

OPAAA

Depois de muito tempo ... O (chato) Reaparece
Enfim

Eu Comecei a Fazer um joguinho em opengl e agora queria colocar em sdl,para poder usar o mouse , por que estou (quase) limitado a usar apenas o teclado,eu sei que eu copiei de um cara,mas veja se entende,com isso eu vou (depois) mudar o cenário,habilitar o mouse e colocar um fim no jogo (e talvez um mapa para guiar a pessoa,colocar tempo,colocar chave,colocar um menu,e outras coisas ... ),sera que voce pode me ajudar ?

deixa eu postar o link pra download :

https://groups.google.com/forum/?hl=en#!topic/info-warrior/frR-_Lwka20


vai por mim,se vc (investir) acreditar em mim , um dia serie um programador (Avá),Por Favor Meu Friend &#9786;


22. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 16/07/2014 - 13:29h

Oi Denovo

Eu Nao Sei Se voce criou um gerador de labirinto parecido,eu gostei dakele pq ele mostra o mapa gerado,e eu consegui usar o glut (eu ja sabia que dava), so que a minha duvida foi se teria como colocar em modo janela pelo sdl,eu sei q nao ficou muito claro,mas foi isso que eu pedi,e eu mudei um pouco BEM POUCO,so coloquei 2 funcoes que captam o mechimento (olha a palavra que eu fiz <-) do mouse e ele agora muda o angulo,so esta um pouco fora a velocidade,eu nao sei quanto eu coloco,se tiver como dar uma olhada segue codigo :



#include <GL/gl.h>
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>

float ang = 0.0;
float ang2 = 0.0;
float tmp_ang = 0.0;
float f = -5.0;
float f2 = 0.0;
float f3 = 0.0;
int r = 1;
int maxx;
int maxz;
int tx;
int ty;
int **m;


void flo(float x1, float x2, float y1, float z1, float z2){
glBegin(GL_QUADS);

glColor3f(0.0, 0.0, 0.2);
glVertex3f(x2, y1, z1);
glVertex3f(x1, y1, z1);
glVertex3f(x1, y1, z2);
glVertex3f(x2, y1, z2);

glEnd();
}
void [*****](float x1, float x2, float y1, float y2, float z1, float z2){
glBegin(GL_QUADS);

glColor3f(8.3, 0.2, 0.0);
glVertex3f(x1, y1, z1);
glVertex3f(x2, y1, z1);
glColor3f(1.3, 7.2, 0.0);
glVertex3f(x2, y2, z1);
glVertex3f(x1, y2, z1);

glColor3f(0.3, 9.2, 2.0);
glVertex3f(x1, y1, z2);
glVertex3f(x2, y1, z2);
glColor3f(1.3, 0.2, 9.0);
glVertex3f(x2, y2, z2);
glVertex3f(x1, y2, z2);

glColor3f(0.3, 7.2, 0.0);
glVertex3f(x1, y2, z1);
glVertex3f(x2, y2, z1);
glColor3f(0.3, 0.2, 9.0);
glVertex3f(x2, y2, z2);
glVertex3f(x1, y2, z2);

glColor3f(0.3, 0.2, 8.0);
glVertex3f(x1, y1, z1);
glVertex3f(x1, y2, z1);
glColor3f(8.3, 0.2, 2.0);
glVertex3f(x1, y2, z2);
glVertex3f(x1, y1, z2);

glColor3f(0.3, 0.2, 8.0);
glVertex3f(x2, y1, z1);
glVertex3f(x2, y2, z1);
glColor3f(9.3, 0.2, 0.0);
glVertex3f(x2, y2, z2);
glVertex3f(x2, y1, z2);

glEnd();
}



void processMouseActiveMotion(int x, int y)
{
glutSetCursor(GLUT_CURSOR_NONE);
glutWarpPointer(800/2, 600/2);

// printf("Mouse premuto mosso a x=%d e y=%d\n",x,y);

if(x < 400){

ang -= .70; // Aqui Vai Para a Esquerda <-
if(ang > 360.0) ang -= 360.0;
if(ang < 0) ang += 360.0;
glutPostRedisplay();

}else if(x > 400){

ang += .70; // Aqui Vai Para a Direita <-
if(ang < 0.0) ang += 360.0;
if(ang > 360.0) ang -= 360.0;
glutPostRedisplay();

}else

return;
}

void processMousePassiveMotion(int x, int y)
{
glutSetCursor(GLUT_CURSOR_NONE);
glutWarpPointer(800/2, 600/2);

// printf("Mouse premuto mosso a x=%d e y=%d\n",x,y);

if(x < 400){

ang -= .70;
if(ang > 360.0) ang -= 360.0;
if(ang < 0) ang += 360.0;
glutPostRedisplay();

}else if(x > 400){

ang += .70;
if(ang < 0.0) ang += 360.0;
if(ang > 360.0) ang -= 360.0;
glutPostRedisplay();

}else

return;
}


void display(void)
{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity ();
glRotatef(ang,0.0,1.0,0.0);
glRotatef(ang2,1.0,0.0,0.0);

glTranslatef(f2,f3, f);
int i, j;
for(i = 0 ; i < maxx; i++){
for(j = 0 ; j < maxz; j++){
if(m[j][i] == 1) [*****](0.4*i, 0.4*(i + 1), -0.2, 0.2, -0.4*j, -0.4*(j + 1));
else flo(0.4*i, 0.4*(i + 1), -0.2, -0.4*j, -0.4*(j + 1));
}
}
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key == 27) exit(0);
else if((char)key == 'a' && r){
ang -= 1.0;
if(ang > 360.0) ang -= 360.0;
if(ang < 0) ang += 360.0;
glutPostRedisplay();
}else if((char)key == 'd' && r){
ang += 1.0;
if(ang < 0.0) ang += 360.0;
if(ang > 360.0) ang -= 360.0;
glutPostRedisplay();
}else if((char)key == 's' && r){
int x = -1*(int)((f2 + (0.1*sin(ang*(3.14/180))))/0.4);
int z = (int)((f - (0.1*cos(ang*(3.14/180))))/0.4);
if(x >= 0 && x < maxx && z >= 0 && z < maxz){
if(m[z][x] == 0)f2 += 0.1*sin(ang*(3.14/180));
if(m[z][x] == 0)f -= 0.1*cos(ang*(3.14/180));
}else{
f2 += 0.1*sin(ang*(3.14/180));
f -= 0.1*cos(ang*(3.14/180));
}
glutPostRedisplay();
}
else if((char)key == 'w' && r){
int x = -1*(int)((f2 - (0.1*sin(ang*(3.14/180))))/0.4);
int z = (int)((f + (0.1*cos(ang*(3.14/180))))/0.4);
if(x >= 0 && x < maxx && z >= 0 && z < maxz){
if(m[z][x] == 0)f2 -= 0.1*sin(ang*(3.14/180));
if(m[z][x] == 0)f += 0.1*cos(ang*(3.14/180));
}else{
f2 -= 0.1*sin(ang*(3.14/180));
f += 0.1*cos(ang*(3.14/180));
}
glutPostRedisplay();
}
else if((char)key == 'o'){
if(r == 1){
tmp_ang = ang;
ang = 0.0;
r = 0;
f3 = -5.0;
ang2 = 60.0;
glutPostRedisplay();
}
}else if((char)key == 'p'){
if(r == 0){
ang = tmp_ang;
r = 1;
f3 = 0.0;
ang2 = 0.0;
glutPostRedisplay();
}
}
}

void init()
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode (GL_PROJECTION);
glEnable(GL_DEPTH_TEST);
glLoadIdentity ();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}
void Reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, (double)w/(double)h, 0.1, 200.0);

}
int main(int argc, char** argv)
{
char res[20];
if(argc < 6){
printf("\n usage :\n\n ./maze3D length height startx starty resolution\n");
return;
}
maxx = atoi(argv[1]);
maxz = atoi(argv[2]);
f2 = -0.4*(2*atoi(argv[3]) +1)/2;
f =0.4*(2*atoi(argv[4]) + 1)/2;
m = malloc(sizeof(int *) * maxz);
sprintf(res, "%s:16@60",argv[5]);
FILE *f = fopen("ab.txt", "r");
if(f == NULL) return;
char c;
int i = 0;
int j = 0;
m[i] = malloc(sizeof(int) * maxx);
while((c = fgetc(f)) != EOF){
if(c == '\n'){
i++;
j = 0;
m[i] = malloc(sizeof(int) * maxx);
}else{
if(c == '0') m[i][j] = 0;
else m[i][j] = 1;
j++;
}
}
glutInit(&argc,argv);
glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutGameModeString(res);
glutEnterGameMode();
glutReshapeFunc(Reshape);
glutMotionFunc(processMouseActiveMotion);
glutPassiveMotionFunc(processMousePassiveMotion);
glutKeyboardFunc( keyboard );
glutDisplayFunc(display);
init();
glutMainLoop();
}




OBS !!!

Se quiser que eu teste seu gerador de labirinto,eu aceito e para compilar é assim
gcc -o TesteJogos TesteJogos.c -lglut -lGL -lGLU -lm 
e para abrir é assim
./TesteJogos 20 20 1 2 800x600 



OBS 2 : Tem que ser 800x600 , pq eu ainda nao fiz para pegar o valor da tela e fazer automatico(e tambem pq a resolucao maxima do meu pc é de 800x600)

Brigado


23. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 18/07/2014 - 14:32h

Opa Fera

Vc Tinha Achado que eu nao ia fazer um jogo,né ?

Pois Bem,agora nao é mais pelo desafio,e sim pela aventura,eu comecei a mudar um pouco o jogo,nao vou ficar mais postando os codigos para nao ficar tao poluida as paginas.

Da uma Olha no jogo,eu implementei mais algumas funcoes,eu coloquei para ficar em tela cheia se apertar o f11 e agora da de olhar para cima,mas para isso precisa apertar algum botao do mouse,eu coloquei um caminho de pedra para o chao e um tipo de tijolo como parede,ta ficando legal

Qualquer coisa me avisa

Obs: Por Enquanto ele só abre em 800x600 (em modo janela,em modo tela cheia eu nao sei,teste ai),e nao precisa mais digitar para abrir a resolucao

To Aprendendo com os erros

Te +

Obs2 : Se quiser enviar o gerador de labirinto eu aceito,por que mais a frente quero fazer um menu e colocar para gerar fazer na difulcadade escolhida

Flw Brô !

Link

http://www.mediafire.com/download/t81bpoqp0cimabl/MineC.rar 



24. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 18/07/2014 - 20:29h

Opa Brô // Ja nem sei mais como começar ...

Entao,depois de eu ter te enviado o arquivo,eu vi alguns erro e corrigi,agora apertando o 'o' aparece o mapa um pouco mais ,agora a mouse look (nao sei como é o nome,mas é o movimento do mouse) eu consertei e eu nao faço ideia de como verificar se esta na parede,eu tava pesquisando mas sem sucesso,e me diz uma coisa,acha que ficaria legal eu colocar tipo uma mira no centro da tela ?Eu nao sei o nome , mas é tipo um '+' que fica bem no meio,se sim , procura uma bacana(se conseguir tirar o fundo && ser bmp && for de potencia de 2)

Té +

Link

http://www.mediafire.com/download/ddomcmfahv6tg5a/MineC2.rar 



Obs : Se quiser mudar a parede ou o chao é so copiar o nome e trocar na funcao init



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts