elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Temas
Páginas: [1] 2
1  Programación / Programación General / problema de impresion printdocument y hasmorepages= windows forms c# en: 15 Julio 2021, 00:47 am
Buen dia... como siempre son mi ultimo recurso porque agoté todas las posibilidades e ideas que tengo... la cosa es asi:

Quiero imprimir un reporte de n numero de registros por edio de una pulsacion de boton (anexo codigo):
Código:
 pagina = 1; //al pulsar el boton el contador de paginas inicia siempre en 1
            vuelta = 0; //al pulsar el boton siempre establezco empezar a leer en la linea 0

            PrintDialog printdialog1 = new PrintDialog();//instancia nueva para crear un dialogo de impresion
            printdialog1.Document = printDocument1;//se asigna la relacion con el documento a imprimir
            DialogResult result = printdialog1.ShowDialog();//se asigna el resultado de la seleccion del dialogo en la variable result


            // ESTO QUE VIENE AQUI EN VERDE ES PARA OBTENER UNA VISTA PREVIA DEL DOCUMENTO A IMPRIMIR...
            PrintPreviewDialog ppd = new PrintPreviewDialog { Document = printDocument1 }; //<-------creamos un nuevo dialogo preview de impresion
            ((Form)ppd).WindowState = FormWindowState.Maximized;
            ppd.ShowDialog();     //<----------sirve para mostrar el preview de la impresion    


            if (result == DialogResult.OK)
               printDocument1.Print();

esa parte funciona a la perfeccion... ahora anexo dos codigos que tienen que ver con las impresiones en el printdocument1, el primero es con un ciclo while:
Código:
 while (vuelta < dataGridView1.RowCount)
            {
                
                
                e.Graphics.DrawString(dataGridView1.Rows[vuelta].Cells[0].Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x, y + 154);
                e.Graphics.DrawString(dataGridView1.Rows[vuelta].Cells[1].Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x + 260, y + 154);
                e.Graphics.DrawString(dataGridView1.Rows[vuelta].Cells[2].Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x + 620, y + 154);
                vuelta++;
                y += 35;
                if (y >= printDocument1.DefaultPageSettings.Bounds.Height - 300)
                {

                    y = printDocument1.DefaultPageSettings.Bounds.Y + 154;
                    e.HasMorePages = true;
                    pagina++;

                    break;
                }
            }
el cual simplemente imprime el listado de lo que hay en el reporte con el siguiente resultado:

es decir.... se obtiene lo que se busca sin problema... aparentemente, ya que cuando imprimo fisicamente las hojas... me aparece asi:

es decir.... solo me aparecen las cabeceras y pie de pagina!! (para lo cual hay un codigo tmb, pero no lo anexé porque con ese no hay problema)

despues de eso intenté hacer el mismo codigo pero evitando el uso del while,asi que puse un bucle foreach en vez de while, ya que descubri que con foreach si me lo imprime fisicamente... anexo codigo
Código:
foreach (DataGridViewRow renglon in dataGridView1.Rows)
            {
                
                if (renglon.Index == dataGridView1.RowCount)
                    break;
                if (y >= printDocument1.DefaultPageSettings.Bounds.Height - 300)
                {

                  
                    e.HasMorePages = true;
                    pagina++;

                    break;
                }

                foreach (DataGridViewCell celda in renglon.Cells)
                {
                    e.Graphics.DrawString(celda.Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x, y + 154);
                    x += 300;
                }
                x = e.MarginBounds.Left + 5;
                y += 35;

y aunque este codigo si que funciona -ignoro porque el foreach si imprime el listado y el while no, a pesar de que en la previsualizacion si se ve el listado-, el problema con este pedazo de codigo es que si el reporte es de mas de una pagina, entra en un cliclo infinito ya que cuando se dispara de nueva cuenta el printdocument debido al e.hasmorepages=true, el contador del foreach del renglon se vuelve a posicionar a 0... y nunca termina de leer todos los registros, y tengo entendido que al foreach no se le puede asignar un valor inicial a sus variables... por lo que no me sirve.....
ya intenté poner un for en vez del foreach pero sucede exactamente lo mismo que con el while...
los codigos son exactamente los mismos, aplicados a su correspondiente bucle, pero no entiendo porque el while no funciona!!! alguien me puede ayudar? se supone que si el reporte lo guardara como un pdf, se guardaria con todo y sus registros asi como en la imagen, pero yo quiero imprimirlo fisicamente :s
2  Programación / Programación General / fecha corta en bd access y datagridview c# en: 14 Abril 2021, 20:22 pm
Hola hermosos... me han sacado de muchas dudas y esta es una que a simple vista deberia de parecer sencilla pero no doy...

resulta que tengo una bd en access con una tabla en donde una columna esta definida con el formato fecha/hora, y configurada para que aparezca con fecha corta (al estilo 01/01/2021)... todo bien

luego en visual studio c# tengo un sistema visual con un datagridview enlazado a un dataset enlazado a la tabla anteriormente mencionada.
Dicho datagridview -en la columna correspondiente a fecha- esta definida como una columna con formato de fecha corta (o "d", que es como se le define a ese formato).

a la hora de guardar el registro utilizo el siguiente codigo:
Código:
inventario.registraticket(label9.Text, DateTime.Parse(DateTime.Now.ToShortDateString()),DateTime.Now.ToShortTimeString(), totalizando().ToString());
en donde el primer parametro es el numero de ticket, el segundo parametro es la fecha corta en formato string convertido a un tipo Datetime, el tercer parametro es la hora, y el ultimo parametro es un total, en su correspondiente columna cada parametro... se supone que estoy guardando todo como debe de ser, pero esta mugre columna en el datagridview se aferra a salir de la siguiente forma:
Citar
01/01/2021 12:00:00 a.m.
y no se porque rayos me sale con todo y la hora!!
la unca forma en la que pude lograrlo fue que en la bd de access la cilumna fecha era de tipo texto... pero eso me dificulta mucho hacer comparaciones de fecha en mi sistema... alguna pista?
3  Programación / .NET (C#, VB.NET, ASP) / Sobre controles creados de forma dinamica en: 25 Abril 2018, 00:28 am
Buenas gente. tengo una form donde me da la necesidad de crear controles de forma dinamica (especificamente son picture boxes que contienen datos para acomodarlos en ciertos espacios en mi form), pero son varias veces las que creo un control y lo manipulo y lo muevo. el problema es que cuando tengo uno creado y creo otro nuevo, los eventos creados de forma dinamica para el control solo se aplican al mas reciente creado, y el anterior pierde la capacidad de manejarse con los eventos creados dinamicamente... ejemplo:

crear picturebox nuevo;
crear evento dinamico mouse up; <-- Evento que me da problema


Se supone que este evento consiste simplemente en que cuando suelto el raton despues de arrastrarel objeto, me lo acomoda en cierta area del form automaticamente, y lo hace tantas veces como yo quiera... pero si lo acomodo y creo otro control igual, el evento pasa a funcionar solamente para el cntrol mas reciente que se creó, y si arrastro y suelto el boton del control creado en primer lugar, ya no funciona el evento... y creo que es porque de cierta manera "caducó", ya que existe un control creado de manera mas reciente.... como puedo arreglar esto?
4  Comunicaciones / Redes / problema de subredes que no comprendo en: 29 Enero 2018, 18:39 pm
tengo este problema que dice que hay una empresa con cuatro departamentos que son parte de la red 192.168.1.0 y a su vez, cada departamento, representado por una maquina, esta dividido en subredes (130 usuarios para uno, 15 para otro, etc etc) y tengo que comunicarlos entre si y a su vez a la pc del CEO; sin problema. pero luego me anexan esta imagen en la que tengo quer basarme para el problema y veo que en la parte encerrada con rojo hay un solo cable...


http://i63.tinypic.com/23waa1.png
y me sale la duda... digo, si voy a crear cuatro subredes, cada una tendra su mascara de red y su puerta de enlace y asi... y como rayos voy a programar en el router que haya 4 puertas de enlace si solo tiene una conexion al switch??? eso se puede acaso?
he pensado mil maneras de hacerlo, aunque no se si sea posible hacerlo porque la verdad desconozco:
- programar de alguna forma el switch para que la puerta de enlace de cada subred sea "transformada" en la del router (192.168.1.1)
- simplemente agregarle tres cables mas al router para empatarlos con cada puerta de enlace xD
- o darme cuenta tontamente que la puerta de enlace 192.168.1.1 funciona para todas las subredes (aunque no veo para que existiria la puerta de enlace de cada segmento)

que se hace en estos casos?
5  Programación / .NET (C#, VB.NET, ASP) / creacion y manipulacion dinamica de objetos en: 26 Enero 2018, 00:58 am
buen dia, yo programaba en c++ varios juegos, y creaba objetos como personajes multiples y los movia todos al mismo tempo (úsese de ejemplo los personajes del monopoly, los cuales eran creados de manera dinamica en tiempo de ejecucion dependiendo cuantos personajes se escogian al iniciar el juego, y todos eran iguales, excepto por el color), y los movia conforme al dado y así, pero en c# estoy muy confundido. ciertamente puedo crear objetos de tipo personaje pero... como hago para crear muchos en tiempo de ejecucion, o mas bien, como le hago para moverlos a todos en tiempo de ejecucion, es decir, para que con el pulso de la tecla de direccion yo asigne cual de todos los objetos creados se va a mover?
6  Programación / .NET (C#, VB.NET, ASP) / pregunta sobre ficheros en c# windows forms en: 20 Enero 2018, 00:17 am
maldita duda.... me podrian explicar porque con el primer codigo si pude hacer la apertura, escritura y cierre de un fichero en cada pulsacion del boton, mientras que en el sgundo (habia optado por usar el segundo ya que vi en algunos foros que definir las condiciones de la manipulacion del fichero con filestream era mas "limpio y buena practica"), no me dejaba hacerlo?
otra duda.- porque en el codigo no necesite hacer esto: escribir = new StreamWriter(condiciones);?


Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {

       
        StreamWriter escribir;
       
       
       
        public Form1()
        {
           
            InitializeComponent();


           
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
             
           
        }

       

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToString();


        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            escribir= File.AppendText("C:\\Users\\Constructora\\Desktop\\ANOTACIONES.txt");
            escribir.WriteLine(label1.Text);
            escribir.Close();
         

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

        }
    }
}


esto es lo que pude hacer para abrir, escribir, cerrar y volver a abrr un fichero en cada pulsacion del boton... lo que no entiendo es porque aqui no tuve que usar lo siguiente:

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {

        FileStream condiciones = new FileStream("C:\\Users\\Constructora\\Desktop\\ANOTACIONES.txt", FileMode.Open, FileAccess.Write);
        StreamWriter escribir;
       
       
       
        public Form1()
        {
           
            InitializeComponent();


           
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
               
           
        }

       

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToString();


        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            escribir = new StreamWriter(condiciones);
            escribir.WriteLine(label1.Text);
            escribir.Close();
           
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

        }
    }
}
7  Programación / Programación C/C++ / el mejor entorno para programar windows forms? en: 16 Noviembre 2015, 20:24 pm
buen dia gente :D
la cosa está asi:
Yo tengo instalado en mi pc el visual c++ express 2010, y tiene la opción de programar aplicaciones visuales en c++, pero el punto malo es que no tiene el intellisense (esa cosita que te permite autocompletar después de que pones la "->"), cosa que si bien, no necesito al 100%, era de gran ayuda cuando no sabia que comando elegir. Luego me pase al visual studio ultimate 2013 pero resulta que en c++ no trae la opción de programar en Windows forms :s.
Antes de estos dos usaba borland developer studio y ese si lo traía con intellisense incluido, pero no quiero tener tres entornos distintos de programación en la computadora.... cual es la mejor opción para aplicaciones visuales en c++ que incluya el intellisense???
8  Programación / Programación C/C++ / variable word o dword para dibujar en: 26 Julio 2015, 00:56 am
que tal gente... años sin pasarme por aquí pero sucede que acabo de tener tiempo libre y bueno... al grano:

cuando estaba en la escuela en clase de programación un dia el profe se puso a meter código como loco en su compu y al final dibujo una especie de tablero, con lineas horizontales, verticales y diagonales, y todas de diferente grosor... el caso es que no recuerdo que rayos estaba tecleando y no le puse atención sino hasta que vi el programa en ejecución y lo único que recuerdo es que usaba unas cosas que se llamaban Word o dword para hacer las lineas....

ahora diez años después quiero hacer un juego estilo "turista" y ya puedo usar colores para cada jugador, fichitas y eso pero me parece un poco rustico dibujar el tablero con asterisquitos y que las fichitas sean representadas por caracteres de arroba y asi (cosa que tmb puedo lograr). lo que quiero es ir avanzando en mi aprendizaje al mismo tiempo que me divierto asi que si alguien me pudiera explicar como se hace una línea en diagonal -ojo, una línea literal, no una hecha con muchos asteriscos- se lo agradecería bastante...

no. no tengo nada de código y no se por donde empezar ya que las referencias que encuentro en google son prácticamente nulas...
si alguien pudiera regalarme el código en consola c++ donde se imprima una línea diagonal, una horizontal y una vertical, todas en distinto grosor, me darían las bases para yo empezar a constuir con ellas y hacer mis propios "dibujos"
9  Programación / Programación C/C++ / doble duda (arreglo dinamico y funciones entre clases) en: 5 Abril 2014, 20:12 pm
buen dia... le he estado dando vueltas a este codiguito pero no le veo el error... el caso es que se me cicla la ejecucion y no me responde... codigo:

Código:
include<iostream>
using namespace std;

void main(){
int *a,*b;

a=new int;
b=new int;

for(int i=0; i<=50; i++)
{*a=i;
*b=i;
cout<<*a<<" "<<*b<<" "<<&a<<" "<<&b<<endl;
cout<<endl;

a++;b++;}

system("pause");
}


el programa funciona correctamente si el for es hasta 4 o 5 elementos... pero si son mas de diez se corta la ejecucion y me dice que desencadene un punto de interrupcion.. he probado mi codigo en visual c++ 2010 y en borland c++... en ambos sucede lo mismo, probe tmb modificandolo asi:

Código:
void main(){
int *a,*b;

a=new int;
b=new int;

for(int i=0; i<=50; i++)
{*(a+i)=i;
*(b+i)=i;
cout<<*(a+i)<<" "<<*(b+i)<<endl;
cout<<endl;

}

system("pause");}


pero es igual... en ultima instancia me vere obligado a usar la directiva <list> o bien hacerlo con listas enlazadas mediante punteros dentro de una estructura... pero he visto en varios lugares de internet que esta forma tambien es valida, y sin embargo no logro que funcione con mas de diez elementos.... estoy haciendo algo mal?



y ahora el pilon jeje. Alguien sabe si es posible que, teniendo dos clases distintas, el valor de retorno del metodo de la segunda se use como parametro en el metodo de la primera? por ejemplo algo asi:

Código:
class uno{
void recibo(int a);
};

class dos{
void paso(int a);
};

int dos::paso(int a){
return a;
}


void uno::recibo(int a){    //esta es la parte que no se como implementar
cout<<dos::paso(a);
}


me podrian ayudar??


10  Programación / Programación C/C++ / consejos con optimizacion de codigo snake en: 27 Marzo 2014, 20:57 pm
que tal amigos.... al grano:
hace poco terminé un juego snake en consola en borland c++. hice una biblioteca conio independiente del entorno (mi programa corre donde quiera). y el juego no tiene errores -que yo haya descubierto-.... el caso es que este juego es una prueba para cierto empleo y antes de enviar mi codigo y el ejecutable quise que un amigo me dijera sus opiniones...
en resumen el me dijo que la logica estaba bien, que el juego corre perfecto pero... en cuestion de optimizacion y posicion del codigo estaba horrible. coloco el codigo:

Código:
# include<iostream.h>
# include<conio1.h>
# include<windows.h>
#include<stdio.h>
#include<time.h>

#define ARRIBA 72
#define ABAJO 80
#define DERECHA 77
#define IZQUIERDA 75


void nocursor()                                     //FUNCTION TO DISSAPEARS THE CURSOR OF THE WINDOW
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
cci.dwSize=20;
cci.bVisible=FALSE;
SetConsoleCursorInfo(hStdout,&cci); }
void sicursor()                                     //FUNCTION TO APEARS THE CURSOR OF THE WINDOW
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
cci.dwSize=20;
cci.bVisible=TRUE;
SetConsoleCursorInfo(hStdout,&cci); }


class vibora{
char comptecla,tecla,comida,*head;
int x,y,cx,cy,*hx,*hy,tamano;
public:
int timer,timer1,vel;
bool perder;
vibora(int _x,int _y): x(_x),y(_y){}
void inicializar();
void mover();
void borrar();
void pintar();
void generarcomida();
void comer();
};

void vibora::inicializar()
{tamano=3;
perder=false;
comida='©';
tecla=IZQUIERDA;
comptecla=IZQUIERDA;
timer1=clock()/100;

head=(char *) malloc(tamano *sizeof(int));
head[0]='@';
for (int i = 1; i <= tamano-1; i++)
head[i]='o';

hx=(int *) malloc(tamano *sizeof(int));
hy=(int *)malloc(tamano *sizeof(int));
for(int i=0; i<=tamano-1; i++)
{hx[i]=x+i; hy[i]=y;}

borrar();
pintar();
generarcomida();
}

void vibora::pintar()
{
for (int i = 0; i <= tamano-1; i++)
{gotoxy(hx[i],hy[i]); cout<<head[i];}
}

void vibora::generarcomida()
{int i=0;
cx=2+rand()%37;
cy=2+rand()%9;

do{
   if(cx==hx[i]&&cy==hy[i])
{cx=2+rand()%39;
cy=2+rand()%9;
i=0;}
   else
i++;
}while(i<=tamano-1);

gotoxy(cx,cy); cout<<comida;
}

void vibora::comer()
{
if(hx[0]==cx&&hy[0]==cy)
  {tamano++;
  hx=(int *)realloc(hx, tamano *sizeof(int));
  hy=(int *)realloc(hy, tamano *sizeof(int));
  head=(char *)realloc(head, tamano *sizeof(int));
  head[tamano-1]='o';
  generarcomida();}
}

void vibora::mover()
{
timer=clock()/100;
if(kbhit()) tecla=getch();   //registra pulsacion
if(tecla!=ARRIBA&&tecla!=ABAJO&&tecla!=DERECHA&&tecla!=IZQUIERDA) tecla=comptecla; //si la tecla pulsada es diferente de la de direccion, copia el ultimo movimiento
if((hx[1]==x-1&&tecla==IZQUIERDA )||(hx[1]==x+1&&tecla==DERECHA)||(hy[1]==y-1&&tecla==ARRIBA)||(hy[1]==y+1&&tecla==ABAJO))tecla=comptecla;  //si quiero ir para el lado contrario al que voy, no lo dejo, sino que copio el ultimo movimiento

if((tecla==IZQUIERDA&&comptecla!=DERECHA)||(tecla==DERECHA&&comptecla!=IZQUIERDA)||(tecla==ARRIBA&&comptecla!=ABAJO)||(tecla==ABAJO&&comptecla!=ARRIBA))comptecla=tecla;  //si pulso tecla de direccion y no es contraria, copio a comptecla


if(timer1==timer)
{
if(tecla==IZQUIERDA)
x--;
if(tecla==DERECHA)
x++;
if(tecla==ARRIBA)
y--;
if(tecla==ABAJO)
y++;







if(x==1||x==40||y==1||y==12)     //si choca en la orilla pierde...
for (int i = 0; i <= 2; i++)
  {borrar();
  Sleep(500);
  pintar();
  Sleep(500);
  perder=true;}
else                             //...pero si no choca en la orilla...
{
for (int i = 1; i <= tamano-1; i++)    //...reviso eslabon por eslabon...
if(x==hx[i]&&y==hy[i])    //...y si las coordenadas estan en un eslabon
for (int i1 = 0; i1 <= 2; i1++)
{borrar();
Sleep(500);                //...pierdo...
pintar();
Sleep(500);
perder=true;}
else                         //...pero si no estan en el eslabon...
   if(i==tamano-1&&perder==false)            //...compruebo si ya reviso todos y si ya lo hizo...
   {borrar();
for(int i=tamano-1; i>=1; i--)
{hx[i]=hx[i-1];
hy[i]=hy[i-1];}                     //... se mueve
hx[0]=x;
hy[0]=y;
pintar();
timer1=timer+vel;}
}

}

}

void vibora::borrar()
{
for (int i = 0; i <= tamano-1; i++)
{gotoxy(hx[i],hy[i]); cout<<" ";}
}


void main()
{
randomize();
bool nuevamente=true;
char resp;
for (int i = 1; i <= 40; i++)  //limite superior
{gotoxy(i,1); cout<<"*";}
for (int i = 2; i <= 12; i++)  //limite izquierdo
{gotoxy(1,i);cout<<"*";}
for (int i = 2; i <= 40; i++)  //limite inferior
{gotoxy(i,12); cout<<"*";}
for (int i = 2; i <= 12; i++)  //limite derecho
{gotoxy(40,i);cout<<"*";}





do{                    //do que sirve solo para comenzar y recomenzar el juego despues de perder

 
//este do sirve para elegir nivel de cada partida
  do{ gotoxy(1,13); cout<<"Bienvenido a Snake. Selecciona un nivel para comenzar a jugar (1-5): ";
  sicursor();
  cin>>resp;
  if(resp!='1'&&resp!='2'&&resp!='3'&&resp!='4'&&resp!='5')
{cout<<"Opcion no permitida...Debes seleccionar una opcion del 1 al 5."; Sleep(2000);
gotoxy(1,13);cout<<"                                                                                                                                                     ";
}
  else
{nocursor();
cout<<"Elegiste el nivel "<<resp; Sleep(1000);
gotoxy(1,13);cout<<"                                                                                                                                                     ";
gotoxy(11,13);cout<<"EL JUEGO COMIENZA EN";
gotoxy(20,14); cout<<"3"; Sleep(1000);
gotoxy(20,14); cout<<"2"; Sleep(1000);
gotoxy(20,14); cout<<"1"; Sleep(1000);
gotoxy(19,14); cout<<"YA"; Sleep(1000);
gotoxy(1,13);cout<<"                                                                                                                                                     ";
}         
  }while(resp!='1'&&resp!='2'&&resp!='3'&&resp!='4'&&resp!='5');


  vibora n(20,6);
  n.inicializar();
  switch (resp)
{case '1': n.vel=9; break;
case '2': n.vel=7; break;
case '3': n.vel=5; break;             //switch para la velocidad elegida
case '4': n.vel=3; break;
case '5': n.vel=1; break;}



 
  do{                                //bucle del juego en proceso
n.mover();
n.comer();
}while(n.perder==false);




  gotoxy(15,13);cout<<"HAS PERDIDO"; Sleep(1500);
  gotoxy(1,15); cout<<"Si quieres jugar de nuevo presiona 's', de lo contrario, presiona cualquier otra tecla: ";
  sicursor();
  cin>>resp;
  if(resp=='s'||resp=='S')
{
nocursor();
nuevamente=true;
gotoxy(15,13); cout<<"               ";
gotoxy(1,15); cout<<"                                                                                           ";
for(int i=2; i<=39; i++)
   for(int j=2; j<=11; j++)       //for que sirve para limpiar el campo de juego al perder
   {gotoxy(i,j);cout<<" ";}
Sleep(1000);
}
  else
  nuevamente=false;
 
}while(nuevamente==true);  //do que termina cuando le respondes que ya no quieres jugar


cout<<endl<<"Has elegido salir. ";
system("pause");
}


Si se fijan tengo una clase vibora, sus metodos y la funcion main que es donde va el bucle del juego... este compañero y amigo me dijo que los metodos de la clase definen (o deberian definir) de manera muy especifica y delimitada las propiedades y parametros del objeto, pero no colocar la mayoria del flujo del programa en esas partes... es decir. el me dijo que todos los metodos deberian ser parecidos a lo que hice con el metodo inicializar() y/o borrar(), no como en el metodo de mover(), donde se supone que solo deberia recibir instrucciones y ejecutarlas, mas no tomar  valores ni procesarlos ni nada ahi mismo...
ustedes que opinan? mi codigo es optimo de la forma que está? o podria sacar muchas partes de codigo de los metodos y colocarlo en main o en alguna funcion para que los metodos solo ejecuten instrucciones y parametros recibidos de dichas funciones??
NOTA: Aclaro que este codigo es 100% mio y que en realidad la critica no fue hacia este codigo sino hacia uno mucho mas largo y engorroso (un tetris) en el que el metodo llamado eliminacion tenia aprox el 70% del codigo total del programa... pero como ese codigo no tiene sangrias ni comentarios ni nada (lo hice hace como 4 meses y ni quiero meterme al codigo del metodo eliminacion porque es un reborujo que ni yo entiendo...por culpa de no ponerle los comentarios), puse mejor el del snake, que ilustra un poco mas ordenada la logica que use para el tetris, ya que es igual en casi todo el flujo del codigo... me podrian decir si debo modificarlo o asi esta bien?
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines