Ir ao conteúdo
  • Cadastre-se

1freakday

Membro Pleno
  • Posts

    667
  • Cadastrado em

  • Última visita

Tudo que 1freakday postou

  1. Se você está com dificuldade em terminar, poderia postar o que você já começou, para o pessoal lhe ajudar melhor. Dica: use rand para sortear os números, e sleep para tempo de exposição da sequência a ser memorizada.
  2. @Antônio_Lima De fato, o C++ Builder vai facilitar demais, enfim, use ele ja que seu professor recomendou...Em questão a sua lógica, é só por em prática agora...
  3. Mas isso só no caso de ser um que rotacione os led's em vez de um estático: Imagine que você acenda um led em (3,1) sendo (x,y), eventualmente o local do led ira mudar com a rotação, mesmo que a coordenada não mude, então você precisa mapear cada coordenada dos led's a fim de que a mensagem continue no mesmo lugar , sendo que o led em (4,1) será o novo (3,1). . Delphi é uma IDE, Pascal é a linguagem usada pela IDE... Desculpe, achei que ainda iria escolher a linguagem, quando citou como criar uma GUI redonda. Agora no caso do relógio estático, é só você agrupar uma quantidade de led, tal que forme o circulo, e na linguagem C, você cria um código que mapeia esses led's com uma matriz e acenda os necessários para que apareça a mensagem que está na interface. Porém lembra-se C é diferente de C++, apenas C++ trabalha com GUI... Exemplo simples de um relógio digital ( 0 led desligado, 1 led ligado ) int mapa relogio[4][29] = { 0 0 1 0 0 1 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 }, 0 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 }, 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 0 1 0 1 0 1 1 1 0 1 0 0 1 0 }, 0 0 1 0 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 0 0 1 1 0 0 }}; Texto: 10 : 15 : 20 P.S: não coloquei virgula para ver melhor
  4. @Antônio_Lima No caso, para manter o local correto, a ser exibido, calcule o tempo de giro, e a cada giro, você diminui a coordenada x, dependendo da direção do relógio, para a mensagem não rotacionar com a 'hélice'. E no caso da GUI redonda, a IDE Delphi é bem útil nessa questão.
  5. Boa noite, então você cometeu dois erros: Usou 'dois' SDL_Init(), sendo que o primeiro estava certo em ser antes do 'SetVideoMode', porém a função: SDL_INIT(SDL_INIT_VIDEO); é na verdade assim: SDL_Init(SDL_INIT_EVERYTHING); e troque SDL_WSURFACE por SDL_HWSURFACE P.S: SDL_INIT_EVERYTHING pode ser trocada por SDL_INIT_VIDEO, sendo que a única diferença é que a primeira inicia audio, video, etc...
  6. @Wnivan Albuquerque DM Provavelmente da BAD VERSION por que os arquivos não são listados de acordo com a lista do servidor, dando a impressão de ser uma versão antiga ou alterada. Eu dei uma olhada na imagem que você mandou, e percebi que o arquivo tem apenas 206 bytes, no caso 206 letras, provavelmente ele está usando apenas alguns comandos básicos para tal "launcher". Seria bom você verificar qual os parâmetros são usado pelo ARENA.exe e os demais .ini, talvez alguns deles deem uma pista de como iniciar o jogo, e verificar os arquivos.
  7. Provavelmente está em #include <allegro/allegro.h> , mas tente usar esse: http://www.mediafire.com/file/471dzl0gfdj103w/allegro-5.0.4-1mpx.DevPak
  8. @Osadrac Analisa o código e procura onde é feito a criptografia do packet.
  9. @Wnivan Albuquerque DM Um launcher não executa os arquivos de um jogo, geralmente, ele apenas verifica se tais arquivos estão atualizados e são iguais ao do servidor, menos os .exe. O máximo que você pode fazer é verificar se os arquivos existem, e depois enviar para o client.bin para iniciar o jogo, nos parametros que você deseja que ele inicie. O client.bin é quem usa os arquivos do jogo.
  10. @Ayumu Aoyagi Acredito que se você interpretar a pergunta vai entender, que o problema faz parte.
  11. //Codigo dando erro ?? Qual erro? Ajudar muito quando você posta o erro...no caso o output do debug/compilador :s Vendo seu código, percebi os seguintes problemas: Cadastro=EfetuaCadastro(&Cadastro,n);//ERRO Sabendo que Cadastro é um ponteiro, então ele não possui um endereço próprio, ele apenas aponta para outro endereço, portanto não use & para um objeto que foi declarado como ponteiro. R: Cadastro=EfetuaCadastro(Cadastro,n); Já na função EfetuaCadastro, veja que você declarou uma função que retorna uma estrutura inteira, sem ser ponteiro. TipoCadastro EfetuaCadastro(...){ return (TipoCadastro); } é diferente de: //Use esse TipoCadastro *EfetuaCadastro(...){ return (TipoCadastro*); } ----- Na função ExibeCadastro: Quando usamos um ponteiro, temos um problema, não podemos acessar seu endereço próprio, por que como dito, ele não possui, ele apenas aponta para um endereço já alocado, e isso implica em usar "->" em vez de ".", como: TipoCadastro blabla; TipoCadastro *Cad = &blabla; Cad.nome; (incorreto) Cad->nome; (correto) --- Espero ter ajudado.
  12. Um menu interessante e bem usado, seria com botões(imagem)/texto e identificar quando o usuário clica na área de cada objeto, assim é possível determinar qual ação será feita a partir do evento executado pelo usuário, assim é possível usar try catch e throw. A questão de imagens, texto, etc., no meu variam muito com a história do jogo, tenha em mente qual seu usuário alvo.
  13. Então, como eu disse, isso aqui: while(!key[key_esc]) { desenha_mapa(); pantalla(); } é o seu problema, pois um loop sem delay nem contexto não tem sentido. Portanto, coloque o desenha_mapa(); e pantalla(); ( esse pantalla seria a atualização da tela ), antes de while(!key[key_esc]). Caso você deseja trocar mapas no meio da execução ou mover um sprite (imagem 2d do player), sempre pinte a tela de preto e redesenhe o mapa, enfim use clear_to_color(bmp, makecol(0, 0, 0)); antes dos blit's em pantalla();
  14. @erique Acredito que você deva separar o que é menu, jogo e gráfico, assim vai ter uma visão mais panorâmica e ao mesmo tempo fica tudo organizado.
  15. Boa noite, isso aqui é sinistro: while(!key[KEY_ESC]) { desenha_mapa(); pantalla(); } melhor colocar um delay ou sleep...ou implemente a logica de fps. Interessante o código, @Benjamin Breeg Da para continuar dai, na função draw_sprite, é possível relacionar com essa minha parte do código: switch(map[y][x]){ case 'X': imprimir_imagem(arquivo, x, y); //aqui seria a blit do tile break; //tile não encontrado... default: break; } @erique Aquele código la em cima não está pronto, é apenas para você se baser, mas se uma hora precisar eu mostro um exemplo mais proveitoso.
  16. @erique Beleza, qualquer coisa pode perguntar, muitos aqui vão lhe ajudar. Na verdade era apenas para informar aos moderadores que não estou dando código, já que pensei ser um trabalho acadêmico.
  17. Boa noite, então antes de mais nada, queria aconselhar a usar "using namespace std;" depois dos includes, assim você não precisa usar "std::" . Ao ver seu código, não creio que há muitos erros. Na questão de usar banco de dados ou txt - a minha opinião é que o txt é mais rápido e prático -, porém o banco de dados possui uma estrutura pronta e estável, assim como também possui suporte considerável. Essa escolha é sua, acredito que seria bom tentar com arquivos primeiro. Lembrando que QT é sim compatível com qualquer manipulação de arquivo assim como de banco de dados, já que é apenas c++. Observando seu código, acredito que você precisa determinar primeiro como ira armazenar os dados antes de começar a fazer as funções inserir, remover, etc... Após escolher um deles, e pesquisar um pouco sobre, mostre seu código/dúvidas/erros que todos aqui irão lhe ajudar melhor. Qualquer coisa, estamos aqui.
  18. Boa noite, então essa função é uma função recursiva, ou seja, ela faz a sua própria chamada, até que haja uma condição que impeça a sua próxima chamada. Tal condição é: if(No != NULL) No seguinte caso: chegamos ao No esquerdo, final da arvore, já que todos: CoutArvore(No->GetEsq()); são executados antes de cout << No->GetNum() << " "; CoutArvore(No->GetDir()); e então encontramos um No que é NULL, a função retorna para ultima chamada, sendo a anterior dessa No que é NULL. E quando ela retorna, ela executa o resto da sua função, sendo imprimir o numero: cout << No->GetNum() << " "; ai depois é a vez da chamada recursiva da direita a partir do ultimo No esquerdo. E assim sucessivamente, até terminar nas ultimas linhas da primeira chamada: cout << No->GetNum() << " "; CoutArvore(No->GetDir());
  19. P.S: Antes de um moderador apagar, entenda que o código abaixo NÃO é REAL, apenas ilustrativo... Saudades de criar tileset's para o The Mana World, um dos jogos que influenciou muito na minha vontade de programar, tal qual, faz parte da história de muitos jogadores. Esse jogo se tornou base de muitos desenvolvedores, por ser simples e lógico. Enfim, voltando a suas duvidas, você diz: "gostaria de transformar essa matriz em c..." porém, a matriz informada ja está em C, SENDO que o correto seria (tanto faz o tamanho): char matriz[Y_MAX][X_MAX] = {{'m','m','m','m'}, {'m','t','t','m'}, {'m','t','t','m'}, {'m','m','m','m'}}; Seguindo...Vou dar uma "breve" introdução lógica na questão de mapa de tiles, tal qual eu mesmo experienciei: O @vangodp mencionou tile maps, algo muito importante, pois sem essa "teoria lógica", não teríamos muitos jogos 2d. Enfim, um tile map, nada mais é que um conjunto de imagens, ocupando a main screen, seja considerado o mapa ou apenas uma tela com imagens.Podendo ser usado em um tiled editor ou apenas no allegro, como você quer. Uma pergunta que vem a mente, como é desenhado um tile map? Temos várias etapas, como: construção de mapa, importação de imagens, identificação de imagens, e desenho final. Construção de mapa: Em um código simples, temos aquela sua matriz, a mesma podemos considerar o mapa, cada mapa tem sua matriz. Depois de construirmos o mapa, precisamos identificar cada código do mapa, como você quer é assim: T = Trilha M = Muro Em um mapa como: MMMTM MMTTM MMTMM Então, já temos dois tiles a serem identificados no mapa(matriz), agora precisamos finalizar esse código com a importação de imagens, identificação de imagens, e enfim o método de desenho. Importação de imagens: As imagens podem ser importadas normalmente com o allegro, considerando que você ja sabe como, use uma função qualquer e armazene elas em uma variável global para facilitar as coisas. Recomendo a usar imagens no tamanho de 32x32, existem milhares de tiles nesse tamanho. Identificação de imagens: Nessa etapa precisamos saber o que é cada tile, sendo feito em código. Pode ser feito uma struct, tal qual informa o que é tal tile, qual seu tamanho, o que tem nele, e se ele pode ser trilha, muro etc. Enfim, assim pode abrir espaço para varias futuras implementações. Porém quando há muitos tiles, é importante deixar essa identificação para um editor externo de mapas, pois ocupa muita memória.Exemplo: struct Tile { int tipo; // 1 trilha, 2 muro int acao1; // 1 normal, 2 teleporta, etc... int evento1; // 0 sem evento, 1 ... Imagem *ptr; // ponteiro para imagem carregada }; Tile trilha(1,1,0,IMG_TRILHA); Tile muro(2,1,0,IMG_MURO); ... São variadas funcionalidades... Desenho de mapa: Por fim, precisamos de uma função que interprete o mapa(matriz), igual a uma leitura comum de uma matriz multidimensional, usando for com coordenadas y e x. Sendo que cada tile deve ser relacionados com os tiles identificados na etapa 2, para podermos encontrar o arquivo de imagem. E por fim, poderemos mostrar corretamente na tela. Exemplo de código simples, sem allegro nem sdl, apenas lógica, COMECE DE BAIXO PARA CIMA: #include <stdio.h> #define tile_rua '1' #define tile_muro '2' //mapa da cidade #define map1_w 5 //20px #define map1_h 5 //20px struct Tile { int codigo_unico;//quando existem muitos tiles, use um código para cada tile int tipo; const char *arquivo; } struct Tileset { int count; Tile **tiles;//array de Tile Tileset(): count(0){} void novo_tile(int tipo, const char *arq_imagem){ //aloca memoria em tiles e armazena os dados tipo e arq_imagem - count é incrementado } const char *procurar_tile(int tipo){ //retorna o arquivo do tipo encontrado } } bool carrega_imagem(const char *file){ //se encontrou/carregou a imagem, retorna true, etc... } //Etapa 3 - Desenhar mapa int desenha_mapa(char *map[5], struct *Tset, int h, int w){ if(Tset){ //Esses 2 for são padrões para 2D for(int y = 0; y < h; y++){ for(int x = 0; x < w; x++){ //Aqui vamos relacionar o tile no mapa com os tiles identificados na struct Tset(Tileset, conjunto de tiles) switch(map[y][x]){ case tile_rua: //procurar o tile de rua e desenhar carregar_imagem(Tset->procurar_tile(tile_rua)); break; case tile_muro: //procurar o tile de muro e desenhar carregar_imagem(Tset->procurar_tile(tile_muro)); break; //tile não encontrado... default: break; } } } } } //Etapa 1 - construção do mapa char mapa_cidade[map1_h][map1_w]= {{'2','1','1','1','2'} {'2','1','1','1','2'}, {'2','1','1','2','2'}, {'2','1','1','1','2'}, {'2','1','1','2','2'}}; int main(){ //Etapa 2 - Identificar tiles Tileset tset; tset.novo_tile(tile_rua, "tile_rua.bmp"); tset.novo_tile(tile_muro, "tile_muro.bmp"); //Etapa 3 desenhar_mapa(&mapa_cidade, &tset, map1_h, map1_w); } Além disso tudo que eu informei, vem o controle de frame, interface, e lógica do jogo(npcs, monstros, pvp, etc)
  20. Bom dia, então vamos por partes. Ao criar uma struct fora/acima de main, sabemos que qualquer função posterior poderá usa-la.Então quando criamos assim: struct Lista { int tamanho; int tamanho2; int item [MAX]; int item2 [MAX]; int opcLista ; }lista; int main(){ ... } A struct 'lista' se torna global e pode ser acessada em qualquer função, tal qual, é declarada após a struct Lista {...} lista; Se você usar um argumento assim: void blabla(Fila fila) //Os dados são copiados - chamada: blabla(fila); void blabla(Fila *fila) //fila aponta para um endereço criado - chamada: blabla(&fila); ou pode ser blabla(fila) contanto que fila seja ptr void blabla(Fila &fila) //eu nunca tentei, mas acredito que receba um ponteiro ou endereço de struct
  21. Certo, então mantenha como estava, e antes de dar fclose você pula uma linha com: fprintf(arq_saida,"\n");
  22. Acredito que seja apenas fazer um line break, na função ordenar, assim: fprintf(arq_saida,"%s\n", agen[i].linha);
  23. @Xaws Realmente, o correto seria importar o arquivo, e apenas alterar o registro.
  24. Boa noite, Seguindo essa logica, em um quadro 8x8 de 0 a 7, temos as seguintes possibilidades D para C: Segue a resolução do cavalo em 3x3, com as seguintes definições Origem:3,3 Temos as linhas possíveis: 1,2,4,5 Sendo dois valores abaixo e dois acima. E temos as colunas por linhas possíveis, coluna: linhas possiveis 1: 2,4 2: 1,5 4: 1,5 5: 2,4 Ou seja, so pode ser 1x2, 5x2, 2x1, 4x1 etc..., (linha, coluna) Segue um pedaço do código: // ld = linha destino // lo = linha origem // - // cd = coluna destino // co = coluna origem switch(peca){ //cavalinho case 'c':{ //removendo as impossibilidades if(ld == lo || cd == co)// mesmo linha ou coluna = impossivel(imp) break; else if(ld > lo+3 || ld < lo -3)// linha maior que 3(caso esteja em 3xcoluna) break; else if(cd > co+3 || cd < co -3)// coluna maior que 3(caso esteja em linhax3) break; //removendo as possibilidades // se estiver 3,3 - so pode ser colunha 1, com linhas 2 e 4 if(cd == (co-2) && ((ld != lo -1) && (ld != lo + 1))) break; // se estiver 3,3 - so pode ser colunha 2, com linhas 1 e 5 else if (cd == (co-1) && ((ld != (lo - 2)) && (ld != (lo + 2)))) break; // se estiver 3,3 - so pode ser colunha 4, com linhas 1 e 5 else if (cd == (co+1) && ((ld != (lo - 2)) && (ld != (lo + 2)))) break; // se estiver 3,3 - so pode ser colunha 5, com linhas 2 e 4 else if (cd == (co+2) && ((ld != (lo - 1)) && (ld != (lo + 1)))) break; mover = 1; } default: break; } if(mover == 1) { xadrez[ld][cd] = xadrez[lo][co]; xadrez[lo][co] = ' '; return 1; } else { return 2; } Qualquer duvida já sabe
  25. Boa noite, toda vez que postar um código, poste a mensagem de erro, estamos aqui para ajudar quem realmente precisa, e quando alguém vem com um código sem informar nada, achando que somos videntes da uma certa preguiça de responder, tal qual somos obrigados a denunciar o post... P.S: meu tom de voz esta normal, não estou esculachando nem nada, apenas passando a informação para frente. é claro que você não sabia, por ser novato. Enfim, seu erro ta na ultima linha do código, onde você trocou } por {

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!