Frase de la semana

El blog no debe ser un recurso vano para el ego, tiene que servir para desahogarte y para crear cosas, ya sean del gusto general o no.

‡ Alexander Strauffon ‡

Acerca de este Blog

algunos derechos reservados
Creative Commons License

Tutorial : letras que rebotan

Consideraciones:


para este pequeño tutorial considerare que usted sabe lo básico acerca de programación en c++ así como uso básico de objetos y usa un sistema Windows (lo se es malo pero aun no he portado todo el código a *nix)


 


paso 1:


primero haremos un objeto para la letra que rebotara y para esto necesitamos abstraerlo, es decir sacar sus propiedades y métodos mas importantes:


propiedades:

  • Carácter – aquí guardaremos la letra que rebotara por la pantalla
  • x – la coordenada en “X” que tendrá nuestro carácter
  • y – la coordenada en “Y” de nuestro carácter
  • movimiento en x – la dirección en la que se moverá nuestro carácter en el eje x
  • movimiento en y – la dirección en la que  se moverá nuestro carácter en el eje y

métodos:

aquí moveremos nuestro carácter en la pantalla, para hacerlo mas fácil lo dividiremos en tres partes


  • preparar movimiento – asignarlas direcciones de movimiento
  • obtener coordenadas  obtener las nuevas coordenadas del carácter
  • mover – finalmente mover el objeto

ahora que hemos finalizado la abstracción del objeto podemos escribir su código.


paso 2:


primero haremos la case y después definiremos sus métodos


Caracter.h.



class Caracter

{


public:


    Caracter(char letra ,int x, int y);//constructor


    ~Caracter(void);


    void mover();


private:


    void makeXY(); //otener as nuevas coordenadas del objeto


    void peparaMov();//no exceder 80 * 25 (TAMAÑO DE LA CONSOLA)


    int x;


    int y;


    bool movx;//true derecha; 
    bool movy;//true abajo;


    char letra;


};


básicamente lo que hemos echo hasta ahora es pasar al código nuestra abstracción , ahora lo que haremos será definir los métodos de nuestra clase:


Caracter.cpp :


#include "StdAfx.h"

#include "Caracter.h"


#include "posicion.h"


#include <iostream>


using namespace std;


Caracter::Caracter(char letra ,int x, int y)

{


    this->letra = letra;


    if(x<0) x=0; else if(x>79) x=79;//s el x pasado al constructor esta fuera de limites ponerlo en el limite mas cercano


    this->x = x-1;//poner un carácter atrás para avanzar y ponerlo en el lugar indicado por el usuario;


    if(y<0) y=0; else if(y>24) y=24;//si el x pasado al constructor esta fuera de limites ponerlo en el limite mas cercano



    this->y = y-1;

    this->movx = true;


    this->movy = true;


}


Caracter::~Caracter(void)//eliminar todos los datos

{


    this->letra = NULL;


    this->x = NULL;


    this->y = NULL;


    this->movx = NULL;


    this->movy = NULL;


    this->rastro = NULL;


}


void Caracter::mover()

{


    //eliminar el carácter antes de moverlo


     gotoxy(this->x,this->y);


     cout<<' ';


    
    this->makeXY();


    gotoxy(this->x,this->y);


    cout<<this->letra;


}


void Caracter::makeXY()

{


    this->peparaMov();


    if(this->movx) this->x++; else this->x--;


    if(this->movy) this->y++; else this->y--;


}


void Caracter::peparaMov()//si esta e el limite cambiamos la dirección del movimiento


{


    if(this->x==0) this->movx = true;


    else if(this->x==79) this->movx = false;


    if(this->y==0) this->movy = true;


    else if(this->y==24) this->movy = false;


}


ahora como gotoxy es de borland tenemos un problema para so usaremos este código que realiza lo mismo:


posicion.h :

#include <stdio.h>

#include <conio.h>


#include <windows.h>


void gotoxy( int column, int line )

  {


  COORD coord;


  coord.X = column;


  coord.Y = line;


  SetConsoleCursorPosition(


    GetStdHandle( STD_OUTPUT_HANDLE ),


    coord


    );


  }


int wherex()

  {


  CONSOLE_SCREEN_BUFFER_INFO csbi;


  COORD                      result;


  if (!GetConsoleScreenBufferInfo(


         GetStdHandle( STD_OUTPUT_HANDLE ),


         &csbi


         ))


    return -1;


  return result.X;


  }


int wherey()

  {


  CONSOLE_SCREEN_BUFFER_INFO csbi;


  COORD                      result;


  if (!GetConsoleScreenBufferInfo(


         GetStdHandle( STD_OUTPUT_HANDLE ),


         &csbi


         ))


    return -1;


  return result.Y;


  }


bien ahora que hemos hecho nuestro objeto, ahora lo implementaremos  en nuestro programa, pero además no será un solo carácter el que rebotara sino 3!

#include "stdafx.h"
#include "Caracter.h"
#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

    Caracter *a,*b,*c; //usamos punteros a los objetos para manejarlo mas fácilmente
    char aa,bb,cc,stop;
    int ax,ay,bx,by,cx,cy;

    cout<<"USO: CARACTER X Y, termine el programa pulsando cualquier tecla;"<<endl;//pedimos los datos de los tres caracteres y los inicializamos
    cin>>aa>>ax>>ay;
    cin>>bb>>bx>>by;
    cin>>cc>>cx>>cy;
    a = new Caracter(aa,ax,ay);
    b = new Caracter(bb,bx,by);
    c = new Caracter(cc,cx,cy);

    system(“cls”) //limpiar pantalla

    while(!_kbhit())
    {
        a->mover();//mover los objetos uno por uno
        b->mover();
        c->mover();
        Sleep(50);//hacer tiempo

    }
    delete a;//como creamos punteros, debemos de liberar la memoria donde se alojaron
    delete b;
    delete c;

    return 0;
}

y listo por esta semana es todo cualquier duda la pueden dejar en los comentarios o enviarla por mail a programacion@ka-plum.co.cc

no olviden darle me gusta! en facebook

0 opiniones:

Blog Widget by LinkWithin