-
Posts
12 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Victor.main
-
-
Ah... Não sabia desse detalhe da função if() rsrs. Muito obrigado, ScreenBlack! Agora só resta um passo para o fim de meu projeto heh
Bom saber, dontpanic, facilita demais! Obrigado!
-
Boa noite!
Estou quase terminando meu trabalho: criar um jogo de senha usando cores... Como parte interativa do projeto, devo usar cores de verdade nas palavras utilizando uma biblioteca cores.h como no exemplo:
(Para cada cor que o usuário digitou, 'o' deve sair colorido. Cada cor é representada por abreviações)
Digite sua jogada: vm, vd, am, az
o o o o
Mas faço o seguinte código e aparece vários o's de cores quase aleatórias... não sei porque...
for(i=0; i<n; i++) { printf("%s, ", vs[i]); if (strcmp(jog[i], "vm")){ printf("%so ", COR_VERMELHO); } if (strcmp(jog[i], "vd")){ printf("%so ", COR_VERDE); } if (strcmp(jog[i], "am")) { printf("%so ", COR_AMARELO); } if (strcmp(jog[i], "az")) { printf("%so ", COR_AZUL); } if (strcmp(jog[i], "mg")) { printf("%so ", COR_MAGENTA); } if (strcmp(jog[i], "ci")){ printf("%so ", COR_CIANO); } }
vs é o vetor onde estou guardando as jogadas do usuario... A biblioteca cores.h é a seguinte (estou desconfiando que não estou sabendo usar...
#ifndef __CORES_TRABALHO#define COR_NORMAL "\x1B[0m"#define COR_VERMELHO "\x1B[31m"#define COR_VERDE "\x1B[32m"#define COR_AMARELO "\x1B[33m"#define COR_AZUL "\x1B[34m"#define COR_MAGENTA "\x1B[35m"#define COR_CIANO "\x1B[36m"#define COR_BRANCO "\x1B[37m"#define COR_PRETO "\x1B[30m"#define FUNDO_PRETO "\x1B[40m"#define FUNDO_VERMELHO "\x1B[41m"#define FUNDO_VERDE "\x1B[42m"#define FUNDO_AMARELO "\x1B[43m"#define FUNDO_AZUL "\x1B[44m"#define FUNDO_MAGENTA "\x1B[45m"#define FUNDO_CIANO "\x1B[46m"#define FUNDO_BRANCO "\x1B[47m"#define FUNDO_NORMAL "\x1B[49m"#define __CORES_TRABALHO#endif/********************** EXEMPLO DE UTILIZAÇÃO printf("Entre a sua jogada, composta de cinco cores separadas por vírgula, usando o código a seguir:\n%s - vm = vermelho\n%s - vd = verde\n%s - am = amarelo\n%s - az = azul\n%s - mg = magenta\n%s - cn = ciano\n\n%sEntre sua jogada: ", COR_VERMELHO, COR_VERDE, COR_AMARELO, COR_AZUL, COR_MAGENTA, COR_CIANO, COR_NORMAL); */
-
Bom dia!
Preciso fazer um jogo senha onde o usuario entre com cores e tente acertar as cores escolhidas aleatoriamente pelo computador. A entrada do usuario deve ser na seguinte forma: "vd,az,mg,vm" onde cada abreviação corresponde a uma cor (vm = vermelho, az = azul etc.)
como o usuario também estipula os parametros da partida (numero de opções de cores, numero de jogadas...) estou usando alocação dinâmica de memória. Já criei o vetor com as cores aleatorias do computador, mas agr falta armazenar em outro vetor as cores jogadas pelo usuario!
Tentei fazer um teste so com a primeira cor.. e não consigo usar strcpy ou strcat... Some help, please?
char *entrada;
entrada = (char*)malloc((n*4)-1); //aloca espaço suficiente para armazenar a senha
scanf(" %[^\n]s", entrada); //aceita entrada do usuario com espaços
//Armazenando jogada em vetor
char **vd; // vd = vetor digitado
vd = (char**)malloc(sizeof(char*) * n);
for (i=0; i<n; i++){ // alocando vetor de n posições para as n jogadas entradas
vd = (char*)malloc(3);
}
for(i=0; i<2; i++){
strcpy(vd[1], "vm");
}
PS: Sou iniciante nesse fórum.. n sei colocar o código daquela outra forma, se pudeem me explicar isso também agradeceria rsrs
-
Ah olliver.soul agora descobri o porquê do erro, simplesmente estava alocando o espaço fora do laço.. :3
Muito obrigado mesmo, cara, me salvou! ^^
-
Nesse caso você vai ter que criar uma matriz, usando ponteiro de ponteiro, para alocar a quantidade de palavras e depois a quantidade de caracteres.
Por exemplo,
char **vs;..vs = (char**)malloc(sizeof(char*) * 6));..vs[i] = (char*)malloc(3);..strcpy(vs[0], "vm");strcpy(vs[1], "vd");
Obrigado! Compilou tudo certinho mas dá uma falha de segmentação ao final... Nesse trecho de código vocÊ usa o 6 como sendo o número de palavras e o 3 comop sendo a quantidade de caracteres?
Porque troquei as variáveis para n e char * 2 (já que as abreviações das cores são todas com 2 caracteres..
char **vs;
vs = (char**)malloc(sizeof(char*) * n);
vs = (char*)malloc(sizeof(char)*2);
for (i=1; i<=n; i++) {
ran = rand()%(pc-1);
switch(ran) {
case 0:
strcpy(vs[0], "vm");
break;
case 1:
strcpy(vs[1], "vd");
break;
.
.
.
-
Bom dia pessoal.
Estou com um trabalho bem grandinho pra fazer, sobre um jogo de senhas envolvendo cores, onde o computador terá que criar uma senha e o usuário entrar com uma. Ai deverá ser mostrado os acertos e tal..
Porém, nesse jogo o usuário deverá entrar com os parâmetros, por exemplo, o número de cores disponíveis, o tamanho da senha, o limite de jogadas... E, por isso, o programa deve ser feito consumindo o minimo de memória possivel. Pra isso, malloc!
Mas me surgiu uma dúvida sobre como estou usando a função errada. Vou explicar, no jogo, as cores são representadas por abreviações (vermelho = vm, azul = az...). Ai ao criar o vetor char de duas posições para armazenar as cores.. surgiu ma dúvida: Precisarei criar um vetor contendo vetores do tipo char[2] para armazenar as jogadas???
Parte do meu código://n = tamanho de senha
//pc = posibilidade de cores
//lim = limite de jogadas
//ran = numero "randômico"
int n, pc, lim, ran, i;
char *vs; //vs = vetor sorteado
printf("Qual o Tamanho de Senha Desejado? (de 4 a 12) ");
scanf("%d\n", &n);
while ((n < 4) || (n > 12)) {
printf("Tamanho incorreto, por favor, digite um número entre 4 e 12: ");
scanf("%d\n", &n);
}
printf("Qual o Número de Possibilidades de Cores Desejado? (de 3 a 6) ");
scanf("%d\n", &pc);
while ((pc < 3) || (pc > 6)) {
printf("Número incorreto, por favor, digite um número entre 3 e 6: ");
scanf("%d\n", &pc);
}
printf("Qual o Limite de tentativas de adivinhação? (a partir de 1)");
scanf("%d\n", &lim);
while (lim < 1) {
printf("Número incorreto, por favor, digite um número acima de 1: ");
scanf("%d\n", &lim);
}
//Criando a senha sorteada pelo computador
vs = (char *)malloc(n*sizeof(2));
for (i=0; i<=(n-1); i++) {
ran = rand()%(pc-1);
switch(ran) {
case 0:
vs = "vm";
break;
case 1:
vs = "vd";
break;
case 2:
vs = "am";
break;
case 3:
vs = "az";
break;
case 4:
vs = "mg";
break;
case 5:
vs = "ci";
break;
}
}
-
Postado Hoje, 15h41min
Claro que sim, talvez so poderei a noite ja que ainda estou na faculdade..
UPDATE
Olá de novo! Surgiram mais dúvidas hehe... Nunca usei nada com arquivo texto e meu professor não explicou nada disso (queria que a gente pesquisasse e aprendesse cada um por si). Então estou meio perdido até mesmo quanto à declaração das variáveis. Bom, aí está parte do meu código:Program read_arq;var arq : text; j, j1, j2 : String; x, y: integer; v : array[1..2,1..2] of integer;function Copy(S: string; Ind: integer; Cont: integer); Begin if (ParamCount = 1) then Begin Assign(Entrada,ParamStr(1)); Reset(Entrada); while not eof(Entrada) do Begin readln(Entrada,j); for x := 1 to Lenght(j) do Begin if j[x] = '/' then Begin for y := 1 to Lenght(x-1) do jog1 := Copy(j, y); for y := Lenght(x+1) to Lenght(j) do jog2 := Copy(j, y); End; End; {Comandos para testar as entradas} End; End; End;
Não consegui "formatar" o outro texto (internet aqui está horrível)
-
Ele permitiu uso de funções sim ainda bem... Muito obRigado pela ajuda eu achei que estava fazendo tudo errado hehe
valeu
-
Olá pessoal, estou com um probleminha aqui...
Seguinte, meu professor passou um trabalho pra eu fazer: um jogo pedra-papel-tesoura-lagarto-spock (uma variante do famoso Jan Ken Po). Porém, esse jogo será dividido em duas partes: a online e a offline, a primeira já fiz já que basta os usuarios entrarem com as jogadas e eu analisar... O problema está no modo offline: ele quer que o usuário chame um arquivo texto no terminal onde estão todas as jogadas no seguinte formato:
papel/tesoura
lagarto/pedra
tesoura/spock
...{daí em diante...}
como ler o arquivo eu sei, uso um WHILE NOT EOF e tal, mas agora, como fazer o compilador analisar o texto somente até antes da barra e armazenar a jogada em uma variável? Depois continuar analisando o texto até fim da linha?
É posível usar um FOR com um LENGHT? Estava pensando em fazer algo do tipo:
if (ParamCount = 1) then Begin Assign(Entrada,ParamStr(1)); Reset(Entrada); while not eof(Entrada) do Begin readln(Entrada,j1); for x := 1 to Lenght(j1) do Begin if j1[x] = '/' then Begin for y := 1 to Lenght(x-1) do {condiçoes das jogadas} End; End; End; End;
Desde já agradeço futuras respostas
-
Putz não tinha percebido isso... Hehe valeu mesmo
-
Olá a todos, sou iniciante em pascal aí estou fazendo um programa tipo um jogo pedra papel tesoura e então eis que me surge um problema: validação de entradas tipo string.
Coloquei um while para repetir a frase 'digite uma jogada válida' toda vez que o usuario digitar uma entrada invalida. Mas ai mesmo com a entrada estando correta o programa cai no while e fica no loop...
Meu codigo ta assim:
Readln (jog1);While (jog1<>'pedra') or (jog1 <> 'papel') or (jog1 <> 'tesoura') doBeginWriteln ('Digite algo válido:');Readln (jog1);End;
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
Comparação de Strings
em C/C#/C++
Postado
Boa Noite!
Meu Deus cada coisa que aparece nesse meu trabalho! Estou fazendo um jogo-senha para o usuário adivinhar uma senha gerada pelo computador. Essa senha é composta por cores com seus nomes abreviados (vm = vermelho, az = azul..). O usuário que escolhe os parâmetros do jogo, tais como tamanho de senha (variável n) e tal... Caso o usuário acerte a cor na posição certa (mesma posição gerada pelo computador) deve ser mostrado na tela o caractere '@', se tiver acertado, mas na posição errada, deve ser mostrado '!'.
Porém, o usuario pode entrar cores repetidas, da mesma forma que o computador pode gerar senhas repetidas. Daí, por exemplo, se o computador gerar a senha vd, vm, vd, vd e o usuário entrar com vd, vm, am, vm a saída deve ser @@.
Maaas.. meu código tá dando o seguinte: @@!
Eu sei onde está o erro mas passei horas tentando resolver e não achei uma solução...
vs é onde guardo as jogadas do computador. jog onde estão as jogadas do usuário.