Páginas

NIMADRES

Hacer una suma orientada a objetos en C++

Esta vez veremos como hacer una sencilla suma en C++ hecha en clases. Lo primero que necesitamos para hacer esto mas sencillo (opcional) es hacerlo en Dev-Cpp, donde podemos crear nuestro proyecto nuevo y partir desde tres archivos ("main.cpp, suma.cpp y suma.h").
Comenzaremos con el primero "suma.h", donde necesitamos hacer un #ifndef que significa "si no esta definido" y pones lo que quieres definir en mi caso utilice #ifndef SUMA. entonces, lo que esta preguntando es que si no esta definido SUMA, lo defina mas abajo para que no aya errores al querer mandar llamar un archivo.


#ifndef SUMA
#define SUMA
#include <iostream>

class Suma{
      public:
             void suma(double numero, double numero2);
             void imprime();
      private:
             double resultado;
};
#endif
este archivo lo terminamos con un #endif que significa "fin del if" o sea de la condición con la que comenzamos.


después seguimos con el archivo para los métodos donde mandamos llamar el archivo "suma.h" para poder ligarlos. para hacer los métodos solo mandamos llamar el tipo de función o variable que anteriormente fueron declarados comenzando con el tipo y la clase a la cual nos referimos, como se observa en la siguiente:

#include "suma.h"

void Suma::suma(double numero, double numero2){
    resultado = numero + numero2;
    imprime();
}

 void Suma::imprime(){
    std::cout<<"El resultado es: "<<resultado;
}
esto se guarda en el archivo "suma.cpp", donde notamos que mandamos llamar a la clase Suma seguido de dos puntos y cual fuincion utilizaremos con sus parámetros (si es que los tiene).


Al final solo necesitaremos el archivo main.cpp en el cual ara lo escencial, declarr variables e instanciar el objeto de la clase Suma, ahi mismo podemos guardar los datos:

#include "suma.h"
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    Suma suma;
    double numero;
    double numero2;
    
    cout<<"\t\tHacer una suma Orientada a Objetos\n";
    cout<<"\nIngresa el primer numero: ";
    cin>>numero;
    cout<<"ingresa el segundo numero :";
    cin>>numero2;
    
    suma.suma(numero,numero2);
    
    cin.get();
    cin.get();
    return EXIT_SUCCESS;
}
 y con esto finalizamos nuestra suma orientada a objetos, ahora solo es cuestión de agregarle las otras mas funciones para una mejor comprensión.

HACER UN BREAK BALL EN JAVA



En este pequeño programa se muestra como se aproxima un juego de break ball, (la pelota que rebota en la ventana), donde se puede simular un juego, este no esta bien estructurado pero podríamos darnos cuenta de como se puede realizar uno con mayor precisión. Este esta hecho con las medidas exactas de la ventana, pero se puede modificar al gusto y ponerle las barras para que el juego se torne mas entretenido.



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Rebote extends JFrame implements KeyListener{
    
    private JPanel panel = new JPanel();
    private JLabel pelota = new JLabel("");
    private JLabel barra = new JLabel("");
    private ImageIcon iPelota = new ImageIcon(getClass().getResource("bola.gif"));
    private ImageIcon iBarra = new ImageIcon(getClass().getResource("barra.gif"));
    
    private int posX = 150;
    private int pelX = 180;
    private int pelY = 357;
    private int dir = 0;
    private int cont = 0;
    
    private void Model(){
        pelota.setIcon(iPelota);
        barra.setIcon(iBarra);
    }
    
    private void Bounds(){
        pelota.setBounds(pelX,pelY,50,50);
        barra.setBounds(posX,400,100,24);
    }
        
    public Rebote(){
        setTitle("NIMADRES");
        Thread r = new Thread(new Rebotar());
        //setLayout(null);
        setBounds(200,100,400,500);
        setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        panel.setBounds(0,0,400,500);
        panel.setBackground(Color.black);
        panel.add(pelota);
        panel.add(barra);
        add(panel);
        Model();
        Bounds();
        add(new Paint(), java.awt.BorderLayout.CENTER);
        r.start();
        addKeyListener(this);
        setResizable(false);
        
    }
    
    class Rebotar implements Runnable{
        @Override
        public void run(){
            int nivel = 10;
            int dificultad = 1;
            int contador = 0;
            while(true){
                try {
                    if(nivel < 1)
                        nivel = 1;
                    Thread.sleep(nivel);
                    if(dir == 1){
                        pelX--;
                        pelY--;
                        if(pelX == 0)
                            dir = 2;
                        if(pelY == 0)
                            dir = 4;
                    }
                    if (dir == 2){
                        pelX++;
                        pelY--;
                        if (pelX == 350)
                            dir = 1;
                        if (pelY == 0)
                            dir = 3;
                    }
                    if (dir == 3){
                        //cuando va de derecha a izquierda
                        pelX++;
                        pelY++;
                        if (pelX == 350)
                            dir = 4;
                        if ((pelY == barra.getY()-40)){
                            if((pelX >= posX - 25)&&(pelX <= posX + 100) ){
                                contador++;
                                if (contador == 3){
                                    dificultad++;
                                    nivel --;
                                }
                                if((pelX > posX + 25) && (pelX <= pelX + 100))
                                    dir = 2;
                                else
                                    dir = 1;
                            }
                        }
                        if(pelY == 425){
                            gameOver(dificultad);
                        }
                    }
                    if (dir == 4){
                        //cuando va callendo de izquierda a derecha
                        pelX--;
                        pelY++;    
                        if (pelX == 0)
                            dir = 3;
                        if ((pelY == barra.getY()-40)){
                            if((pelX >= posX - 50)&&(pelX <= posX + 100)){
                                contador++;
                                if (contador == 3){
                                    dificultad++;
                                    nivel --;
                                }
                                if(pelX >= posX - 50 && pelX <=posX + 50)
                                    dir = 1;
                                else
                                    dir = 2;
                            }
                        }
                        if(pelY == 425){
                            gameOver(dificultad);
                        }
                    }
                } 
                catch (InterruptedException ex) {
                }
                Bounds();
                if(contador == 3)
                    contador = 0;
            }
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        cont++;
        switch (e.getKeyCode()) {
            case 32:
                if(cont == 1)
                    dir = 1;
                break;
            case 37:
                if(posX > 0)
                    posX -= 10;
                if(cont == 1)
                    dir = 1;
                break;
            case 39:
                if(posX < 290)
                    posX += 10;
                if(cont == 1)
                    dir = 2;
                break;
        }
        Bounds();
        //e.getKeyCode();
        //System.out.println(posX);
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
    public void gameOver(int dificultad){
        panel.setVisible(false);
        repaint();
        if (dificultad > 10)
            dificultad = 10;
        System.out.println("Mierda Tio llegaste al nivel: "+ dificultad);
        //System.exit(0);
    }
    class Paint extends JPanel {
        public Paint(){
            setBackground(Color.black);
        }
        public void paint(Graphics g) {
            Dimension d = this.getPreferredSize();
            int fontSize = 40;
            g.setFont(new Font("TimesRoman", Font.PLAIN, fontSize));
            g.setColor(Color.red);
            g.drawString("GAME OVER",80,200);
        }
    }
}
Después tenemos el archivo Main.java, que nos ayudara a ejecutar nuestra aplicacion, nota al empezar el juego, la pelota avanzara muy lento, ya que se supone que tiene 10 niveles de dificultad, en el cual por cada tres toques a la barra, aunmentara a 1 nivel. int nivel = 10; si quiern que empiece mas rapido, solo cambia de 10 a 1 y listo,
public class Main{
    public static void main(String args[]){
        java.awt.EventQueue.invokeLater(new Runnable(){
                    @Override
            public void run(){
                new Rebote().setVisible(true);
            }
        });
    }
}

Aquí les dejo las imágenes que yo utilice, de igual manera pueden utilizar otras, solo es necesario guardarlas en la misma carpeta para que todo funcione bien