16/09/2019, 11:31:48 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Homenaje a aladan
 
 
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: C++ carta a color  (Leído 4991 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Antoniio
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
México México

Mensajes: 258


Ver Perfil
« : 19/03/2015, 12:45:22 am »

Hola, debo elaborar un programa en c++ pero se me complicó y no se cómo hacerlo, colocaré las especificaciones que me piden para que tengan una mejor idea de lo que debo hacer:

Elabore un programa que, mediante una función, dibuje una carta de baraja. La función deberá imprimir la carta con la denominación, la figura (palo) y en la posición que reciba como parámetros.

Genere al azar la carta a imprimir y repita el proceso mientras el usuario lo desee (o pregunte al usuario cuantas cartas quiere imprimir).

Por ejemplo: si la denominación es 5, la figura es corazón y la posición es (5,5), la carta impresa deberá ser: 5 de corazón rojo.

NOTA:

Utilice una función para dibujar el marco de la carta, que reciba como parámetros el ancho y el alto de esta, así como la posición para impresión.
El ancho y el alto de la carta son fijos.
Corazón y diamante son rojos, espadas y tréboles son negros.
Deberá imprimir tantos símbolos como indique la denominación. A, K, Q y J deberá imprimir sólo símbolo centrado.
OJO: Pintar la carta es: pintar el marco, pintar los caracteres de las esquinas y los del centro.



Comencé a hacerlo pero fue un desastre, esta es la función que se nos brindó para mover el cursor:
Código:
#include <windows.h>

...

void gotoxy(unsigned short x,unsigned short y)
{

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord = {x-1,y-1};
SetConsoleCursorPosition(handle,coord);

}



Y esto es lo que pude hacer:
Código:
#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <ctime>
void gotoxy(unsigned short x,unsigned short y);

using namespace std;

enum {BV = 179, ESD = 191, EII, BH = 196, EID = 217, ESI};

void marco(int b, int h, int x, int y);

int main()
{
srand(time(NULL));
int ancho = 15, alto = 16, Px= rand()%65+1, Py=rand()%10+1;

for(int a=1; a<50; ++a){
Px= rand()%65+1, Py=rand()%10+1;
marco(ancho, alto, Px, Py);
Sleep(150);
system("cls");
}
gotoxy(1, 25);
system("pause");
return 0;
}

void marco(int b, int h, int x, int y){

gotoxy(x, y);
cout << (char)ESI;
for(int i=2; i<b; ++i){
cout << (char)BH;
}
cout<<(char)ESD;
gotoxy(x, y+1);

for(int j=2; j<h; ++j){
cout << (char)BV;
for(int i=2; i<b; ++i){
cout << " ";
}
cout << (char)BV;
gotoxy(x, y+j-1);
}

cout << (char)EII;
for(int i=2; i<b; ++i){
cout << (char)BH;
}
cout<<(char)EID;

}

void gotoxy(unsigned short x,unsigned short y)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord = {x-1,y-1};
SetConsoleCursorPosition(handle,coord);
}


Pero solo aparece el marco cambiando de posición continuamente...alguien que me ayude a identificar los errores y que me indique que es lo que debo hacer para llevar acabo el programa, espero hayan entendido el problema o mi intento de código para hacerlo xD

Gracias de antemano.
En línea
Antoniio
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
México México

Mensajes: 258


Ver Perfil
« Respuesta #1 : 20/03/2015, 01:42:00 pm »

Yo sigo intentándolo xD
En línea
ingmarov
Moderador Global
Pleno*
*

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Honduras Honduras

Mensajes: 4.270



Ver Perfil
« Respuesta #2 : 20/03/2015, 03:39:52 pm »

Hola Antonio

En el foro hay personas con más experiencia y yo hace años no uso C++, pero mientras ellos te ayudan,

Creo que Px y Py deben ser valores ingresados por el usuario y no generados aleatoriamente como lo tienes. por eso se mueve continuamente.

Buscar los caracteres (símbolos (palo) en ASCII para agregarlos a la carta) y crear una función que imprima una matriz del símbolo requerido centrada en el marco.

Al iniciar el programa el usuario debe ser instruido de como "pedir la carta".

Tienes mucho en que pensar, buena suerte, estaré pendiente.


En línea

No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...
Antoniio
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
México México

Mensajes: 258


Ver Perfil
« Respuesta #3 : 20/03/2015, 11:29:15 pm »

Bueno, en todo este tiempo ya logré hacer el programa pero como te indicaba en el primer post, no logro hacer que las cartas salgan seguidas, osea, de izquierda a derecha horizontalmente...
este es el código:
Código:
#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <ctime>
using namespace std;

void color(int X);

void gotoxy(unsigned short x,unsigned short y);

enum {BV = 179, ESD = 191, EII, BH = 196, EID = 217, ESI};

enum {COR=3, DIA, TRE, PIC};

void marco(int b, int h, int x, int y);

void PintaCarta(int S, int N);

int main(){

srand(time(NULL));
int Simb=rand()%3+3, Num=rand()%13+1, NumCards, opc;
do{
system("color 0F");
cout<<"Cuantas cartas quieres?"<<endl;
cin>> NumCards;

for(int a=0; a<NumCards; ++a){
Simb=rand()%3+3, Num= rand()%13+1;
PintaCarta(Simb, Num);
Sleep(250);
}
color(7);
gotoxy(1, 25);
cout<<"quieres mas cartas? 1) SI  2) NO "<<endl;
cin>>opc;
system("cls");
}while(opc==1);


    system("color 0F");
gotoxy(1, 28);
system("pause");
return 0;
}

void PintaCarta(int S, int N){

int ancho = 15, alto = 16, Px= rand()%65+1, Py=rand()%10+1;

if(S==3 || S==4) color(244);
else color(240);

marco(ancho, alto, Px, Py);

gotoxy(Px+1, Py+2);
cout<<char(S);
gotoxy(Px+13, Py+12);
cout<<char(S);

switch(N){
case 1: gotoxy(Px+1, Py+1);
cout<<"A";

gotoxy(Px+7, Py+7);
cout<<char(S);

gotoxy(Px+13, Py+13);
cout<<"A";
break;

case 10: gotoxy(Px+1, Py+1);
cout<<N;

gotoxy(Px+5, Py+4);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+5, Py+6);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+7, Py+5);
cout<<char(S);

gotoxy(Px+5, Py+8);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+7, Py+9);
cout<<char(S);

gotoxy(Px+5, Py+10);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+12, Py+13);
cout<<N;
break;

case 11: gotoxy(Px+1, Py+1);
cout<<"J";

gotoxy(Px+7, Py+7);
cout<<"J";

gotoxy(Px+13, Py+13);
cout<<"J";
break;

case 12: gotoxy(Px+1, Py+1);
cout<<"Q";

gotoxy(Px+7, Py+7);
cout<<"Q";

gotoxy(Px+13, Py+13);
cout<<"Q";
break;

case 13: gotoxy(Px+1, Py+1);
cout<<"K";

gotoxy(Px+7, Py+7);
cout<<"K";

gotoxy(Px+13, Py+13);
cout<<"K";
break;

default: gotoxy(Px+1, Py+1);
cout<<N;
gotoxy(Px+13, Py+13);
cout<<N;
break;
}

switch(N){

case 2: gotoxy(Px+7, Py+5);
cout<<char(S);

gotoxy(Px+7, Py+9);
cout<<char(S);
break;

case 3: gotoxy(Px+7, Py+5);
cout<<char(S);

gotoxy(Px+7, Py+7);
cout<<char(S);

gotoxy(Px+7, Py+9);
cout<<char(S);
break;

case 4: gotoxy(Px+5, Py+5);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+5, Py+9);
cout<<char(S)<<"   "<<char(S);
break;

case 5: gotoxy(Px+5, Py+5);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+7, Py+7);
cout<<char(S);

gotoxy(Px+5, Py+9);
cout<<char(S)<<"   "<<char(S);
break;

case 6: gotoxy(Px+5, Py+5);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+5, Py+7);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+5, Py+9);
cout<<char(S)<<"   "<<char(S);
break;

case 7: gotoxy(Px+5, Py+5);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+5, Py+7);
cout<<char(S)<<" "<<char(S)<<" "<<char(S);

gotoxy(Px+5, Py+9);
cout<<char(S)<<"   "<<char(S);
break;

case 8: gotoxy(Px+5, Py+5);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+7, Py+6);
cout<<char(S);

gotoxy(Px+5, Py+7);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+7, Py+8);
cout<<char(S);

gotoxy(Px+5, Py+9);
cout<<char(S)<<"   "<<char(S);
break;

case 9: gotoxy(Px+5, Py+4);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+5, Py+6);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+7, Py+7);
cout<<char(S);

gotoxy(Px+5, Py+8);
cout<<char(S)<<"   "<<char(S);

gotoxy(Px+5, Py+10);
cout<<char(S)<<"   "<<char(S);
break;

}

}

void marco(int b, int h, int x, int y){

gotoxy(x, y);
cout << (char)ESI;
for(int i=2; i<b; ++i){
cout << (char)BH;
}
cout<<(char)ESD;
gotoxy(x, y+1);

for(int j=2; j<h; ++j){
cout << (char)BV;
for(int i=2; i<b; ++i){
cout << " ";
}
cout << (char)BV;
gotoxy(x, y+j-1);
}

cout << (char)EII;
for(int i=2; i<b; ++i){
cout << (char)BH;
}
cout<<(char)EID;
}

void gotoxy(unsigned short x, unsigned short y)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord = {x-1,y-1};
SetConsoleCursorPosition(handle,coord);
}

void color(int X)
{
SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE),X);
}

Ahora cambio la pregunta: cómo hago para que las cartas no aparezcan de esa forma si no horizontalmente todas alineadas?, ya le he movido y movido pero no lo logro hacer :s


Pd: debe instararse conio para verse.
En línea
ingmarov
Moderador Global
Pleno*
*

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Honduras Honduras

Mensajes: 4.270



Ver Perfil
« Respuesta #4 : 20/03/2015, 11:40:34 pm »

Bueno creo que debes agregar un parámetro a la función pintacarta, este parámetro debe ser la coordenada x de la carta, este valor debe se el valor "a" del ciclo for (de la función principal) multiplicado por el ancho de una carta.

¿Porque inicias Px con un número aleatorio? Según entiendo Px es la coordenada "x" de dónde se pretente escribir, debería comenzar en cero, es decir  asignarle el valor de "a" mencionado antes a Px.
En línea

No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...
ingmarov
Moderador Global
Pleno*
*

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Honduras Honduras

Mensajes: 4.270



Ver Perfil
« Respuesta #5 : 23/03/2015, 08:21:13 pm »

Hola Antonio

¿Cómo vas con tu programa?

Yo no tengo compilador de C, por eso no he probado tu programa.

Yo estoy aprendiendo algo del lenguaje python, en este lenguaje no se tiene la función gotoxy pero he leído algo sobre una librería llamada curses, pero todavía no la sé utilizar.

Sin embargo he estado probando hacer en python algo de tu programa, mira este es el código:

Código:
#! /usr/bin/python3.2
def naipe(n,p):
       
if p=="C":
palo=chr(9829)+" "
if p=="E":
palo=chr(9824)+" "
if p=="T":
palo=chr(9827)+" "
if p=="D":
palo=chr(9830)+" "
cero=" "
uno="    "+palo+"   "
Dos=palo+"     "+palo
dos="  "+palo+" "+palo+"  "
tres=palo+"  "+palo+"  "+palo
if n==10 or n==8 or n==6 or n==5 or n==4:
print(Dos)
if n==9 or n==7:
print(tres)
if n==3:
print(uno)
if n==10:
print(dos)
if n==8 or n==2:
print(uno)
if n==9 or n-7 or n==6 or n==5 or n==4 or n==3:
print(cero)
if n==10 or n==8 or n==6:
print(Dos)
if n==5 or n==3 or n==7:
print(uno)
if n==9:
print(tres)
if n==4 or n==2:
print(cero)
if n==10:
print(dos)
if n==2 or n==8:
print(uno)
if n==10 or n==8 or n==6:
print(cero)
if n==10 or n==8 or n==6 or n==5 or n==4:
print(Dos)
if n==9 or n==7:
print(tres)
if n==3:
print(uno)

n=int(input("Introdusca un número entero del 2 al 10 -> "))
palo=input("Introdusca el palo de la carta, D=diamantes, C=Corazones, T=trebol, E=espadas -> ")
naipe(n,palo)

Al correrlo hace lo siguiente:

Código:
Introdusca un número entero del 2 al 10 -> 10
Introdusca el palo de la carta, D=diamantes, C=Corazones, T=trebol, E=espadas -> T
♣      ♣
  ♣  ♣   
 
♣      ♣
  ♣  ♣   
 
♣      ♣


Dibuja "n" símbolos en un orden adecuado. Falta hacer algunos ajustes Como generar la "J" la "Q" y la "K" pero espero te sirva.
En línea

No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...
Antoniio
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
México México

Mensajes: 258


Ver Perfil
« Respuesta #6 : 25/03/2015, 02:21:28 am »

Hola, es interesante, de hecho pronto veré algo en python, por el momento desconozco todo sobre ese lenguaje :3

Sobre el programa, ya fue terminad y entregado, no salió perfecto pero se hizo lo que se pudo.

Gracias por responder y estar al tanto, saludos!!
En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC XHTML 1.0 válido! CSS válido!