Ir ao conteúdo

Posts recomendados

Postado

Bom, é o seguinte, como faço para gerar caracteres aleatorios a partir de um vetor existente... O que quero dizer é: eu tenho um vetor de 4 espaços, cada espaço ocupado por uma letra 'p' 'c' 'o' 'e', tendo isto em vista, quero fazer com que em uma estrutura de repetição, aleatoriamente eu escolha uma dessas letras e armazene e determinada variavel, eu sei que devo usar o rand e srand, mas como? assim está meu codigo:

 

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<locale.h>
using namespace std;

int main(){
	setlocale(LC_ALL,"Portuguese");
	
	srand(time(0)); //A CADA SEGUNDO GERAR UMA SEQUENCIA ALEATORIA NOVA E DIFERENTE 
	
	char tipos_card[] = {'p', 'c', 'o', 'e'}; //CHAR COM AS INICIAIS DO TIPO DAS CARTAS ARMAZENADO
	
	int player_1_valores[5], player_1_tipo_card[5];
	int player_2_valores[5], player_2_tipo_card[5];
	
	//JOGADOR 1 
	for(int i = 0; i < 5; i++){
		
		player_1_tipo_card[i] = tipos_card[i] + (rand() % 5);
		
		player_1_valores[i] = (rand() % 10);
	}
	//JOGADOR 2
	for(int i = 0; i < 5; i++){
		
		player_2_tipo_card[i] = tipos_card[i] + (rand() % 5);
		
		player_2_valores[i] = (rand() % 10);
	}
	//IMPRESSÃO MÃO JOGADOR 1
	for(int i = 0; i < 5; i++){
		
		cout<<"JOGADOR 1 - carta tipo: "<<player_1_tipo_card[i]<<" ";
		cout<<"JOGADOR 1 - VALORES : "<<player_1_valores[i];
		cout<<"\n\n";
	}
	cout<<"\n\n\n";
	
	//IMPRESSÃO MÃO JOGADOR 2
	for(int i = 0; i < 5; i++){
		
		cout<<"JOGADOR 2 - carta tipo: "<<player_2_tipo_card[i]<<" ";
		cout<<"JOGADOR 2 - VALORES : "<<player_2_valores[i];
		cout<<"\n\n";
	}
}

 

  • Obrigado 1
Postado

@RockMagicRevived

@RockMagicRevived       o que você quer é escolher o caractere que está em determinada posição do vetor ,  então você pode colocar o rand dentro dos colchetes do vetor , assim a posição do vetor será escolhida aleatoriamente , e como são apenas 4 posições deste vetor então o rand precisa ser de valor 4 ,  pois o rand gera um número de zero até o valor colocado menos hum , assim ele vai gerar números de zero até três ,  então seu código com algumas modificações poderia ser assim    :

 

#include<iostream>
#include <cmath>
#include <conio.h>
#include<cstdlib>
#include<ctime>
#include<locale.h>
#include <windows.h>
#define pi 3.141592
/*             0     1    2     3   4      5      6      7         8  */
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,   /* nome das cores */
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = LIGHTGRAY;

void textcolor2(int letras, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}
                  /* y = linha de 0 a 24 , x = coluna de 0 a 80 */
void gotoxy2(int x, int y){/*imprimir na linha e coluna desejada */
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
using namespace std;
void apaga_bola(int ax, int ay);
void desenha_bola(int x, int y);
void circle();
int bola[3]={6,9,6},ant_cs,ant_sn;
float circulo,cs[3],sn[3];
int caract[70]={
    124,130,130,126,  2,130,124,/* Digito  9 */   //  01111100 --|
    124,130,124,130,130,130,124,/* Digito  8 */   //  10000010   |
    254,  2, 12, 16, 96, 64, 64,/* Digito  7 */   //  10000010   |
    124,128,188,194,130,130,124,/* Digito  6 */   //  01111110   |-- Digito Nove
    252,128,252,  2,  2,130,124,/* Digito  5 */   //  00000010   |
     28, 36, 68,132,252,  4, 62,/* Digito  4 */   //  10000010   |
    124,130,  2, 28,  2,130,124,/* Digito  3 */   //  01111100 --|
    124,130,  2, 28, 96,128,252,/* Digito  2 */
     16, 112, 16, 16,16, 16,124,/* Digito  1 */
     56, 68,138,146,162, 68, 56 /* Digito  0 */
};
int main(){
	setlocale(LC_ALL,"Portuguese");

	srand(time(0)); //A CADA SEGUNDO GERAR UMA SEQUENCIA ALEATORIA NOVA E DIFERENTE

	char tipos_card[] = {'p', 'c', 'o', 'e'}; //CHAR COM AS INICIAIS DO TIPO DAS CARTAS ARMAZENADO

	int  player_1_valores[  5],player_2_valores[  5];
	char player_1_tipo_card[5],player_2_tipo_card[5];

	//JOGADOR 1
	for(int i = 0; i < 5; i++){

		player_1_tipo_card[i] = tipos_card[rand() % 4];/* a posição randomica contém o caractere de zero até três */

		player_1_valores[i] = rand() % 10;
	}
	//JOGADOR 2
	for(int i = 0; i < 5; i++){

		player_2_tipo_card[i] = tipos_card[rand() % 4];/* a posição randomica contém o caractere de zero até três */

		player_2_valores[i] = rand() % 10;
	}
	//IMPRESSÃO MÃO JOGADOR 1
	for(int i = 0; i < 5; i++){

	    textcolor2(7,0);
		cout<<"JOGADOR 1 - carta tipo --: ";
		textcolor2(11,0);
		cout<<player_1_tipo_card[i]<<      endl;
		textcolor2(7,0);
		cout<<"JOGADOR 1 - VALORES -----: ";
		textcolor2(14,0);
		cout<<player_1_valores[  i]<<"\n"<<endl;

		/*cout<<"\n\n";*/
	}
	cout<<"\n\n"<<endl;

	//IMPRESSÃO MÃO JOGADOR 2
	for(int i = 0; i < 5; i++){

	    textcolor2(7,0);
		cout<<"JOGADOR 2 - carta tipo --: ";
		textcolor2(11,0);
		cout<<player_2_tipo_card[i]<<      endl;
		textcolor2(7,0);
		cout<<"JOGADOR 2 - VALORES -----: ";
		textcolor2(14,0);
		cout<<player_2_valores[  i]<<"\n"<<endl;
		/*cout<<"\n\n";*/
	}
	textcolor2(14,12);
	cout<<"     Tecle !"<<endl;
    getch();
    textcolor2(7,0);
	system("cls");
	int w,x,y,q,co,li,b=0,yt;
	for(w=0;w<10;w++){
        li=10;
        for(x=0;x<7;x++){                  /* linhas */
            co=40;
            q=caract[x+(w*7)];
            /*circle();*/
            for(y=0;y<8;y++){              /* colunas */
                gotoxy2(co,li);
                textcolor2(14,0);
                if(q % 2==0)printf(" ");
                else   printf("%c",219);
                co--;
                q/=2;
                /*if(b==0){
                    circle();
                    b=1000;
                }
                b--;*/
            }
            li++;
        }
        /*Sleep(40);*/
        for(yt=0;yt<200000000;yt++){
            if(b==0){
                circle();
                b=10000000;
            }
            b--;
        }
	}
	gotoxy2(ant_cs,ant_sn);
    apaga_bola(ant_cs,ant_sn);
	gotoxy2(0,23);
    cout<<"\n\n"<<endl;
}
void apaga_bola(int ax, int ay){
    int j,y;
    for(j=0;j<3;j++){
        for(y=0;y<4;y++){
            gotoxy2(ax+y,ay+j);
            printf(" ");
        }
    }
    gotoxy2(59,1);
}
void desenha_bola(int x, int y){
    int j,m,s,n=0;
    for(j=0;j<3;j++){
        s=bola[n];
        for(m=0;m<4;m++){
            gotoxy2(x+m,y+j);
            if(s%2==0)printf(" ");
            else printf("%c",219);
            s/=2;
        }
        n++;
    }
}
void circle(){
    int x1,grau=0;
    textcolor2(11,0);
    for(x1=0;x1<3;x1++){
        if(sn[x1]==0 && cs[x1]==0){
            ant_sn=12;
            ant_cs=22;
        }
        else{
            ant_cs=cs[x1];
            ant_sn=sn[x1];
        }
        gotoxy2(ant_cs,ant_sn);
        apaga_bola(ant_cs,ant_sn);
        sn[x1]=(float)sin((circulo+grau)*pi/180)*11+13;
        cs[x1]=(float)cos((circulo+grau)*pi/180)*13+34;
        gotoxy2(cs[x1],sn[x1]);
        desenha_bola(cs[x1],sn[x1]);
        grau+=120;
    }
    circulo+=8;
    if(circulo>360)circulo=0;
    gotoxy2(59,1);
}

 

  • Confuso 1
Postado

@devair1010 Olá, fiquei muito confuso agora, não entendi muito bem o código, mas eu ontem, enquanto não recebia uma resposta fiz o seguinte: ao invés de gerar o caractere, fiz um rand de 4 numeros, de 1 a 4, cada numero se refere a um naipe da carta, e pus uma serie de regras para você conseguir identifica-la, ja que é o jogo, mas agora me veio a ideia de tentar converter esses numeros em caracteres, tipo: 

 

se for o numero 1 , numero 1 será igual a 'e' ou pode ser 'espada'

  • Amei 1
Postado
for(int i = 0; i < 4; i++){ //MENOR QUE 4!!
		
		

Ao invés de de 1 a 4, use de 0 a 3 e use o array com caracteres que deseja escolher;

char tipos_card[] = {'p', 'c', 'o', 'e'};
//escolher um aleatoriante
int index = rand()%4;
char card = tipos_card[index];
//imprime na tela
printf ("%c", card);

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!