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
0 opiniones:
Publicar un comentario