Uploaded by Augusto

SOLUCION DIANA CON DARDOS

advertisement
SOLUCION DIANA CON DARDOS
OBJETIVO: GENERAR LA DIANA, GENERAR LOS TIROS Y CONTAR LOS DARDOS QUE CAEN EN EL
CENTRO.
FORMULARIO
IMPLEMENTACIÓN PARA QUE INICIE EL PROGRAMA:
#include "TIROS.h"
using namespace SOLUCION;
int main() {
Application::EnableVisualStyles();
Application::Run(gcnew TIROS);
return 0;
}
IMPLEMENTACIÓN DE LA CLASE Y SUS MÉTODOS:
#pragma once
#include <iostream>
#include <ctime>
using namespace System::Drawing;
class diana
{
private:
int cant_tiros, posx, posy, dx, dy, radio_interno_bull,
radio_interno_dardo; //RADIO INTERNO PARA EL BULL'S EYE
int* tiros_x, * tiros_y; //PARA GUARDAR LOS TIROS;
public:
diana() {
posx = 90;
posy = 90;
dx = 195;
dy = 195;
radio_interno_bull = 10;
radio_interno_dardo = 4;
srand(time(NULL));
}
~diana() {}
void set_cant_tiros(int _cant_tiros) {
cant_tiros = _cant_tiros;
tiros_x = new int[cant_tiros];
tiros_y = new int[cant_tiros];
}
void generar_tiros() {
for (int i = 0; i <= cant_tiros; i++) {
tiros_x[i] = rand() % (dx) + posx;
tiros_y[i] = rand() % (dy) + posy;
}
}
void dibujar(Graphics^ g, Graphics^ h, Graphics^ j, Graphics^ k) {
SolidBrush^ pintura_para_el_centro = gcnew SolidBrush(Color::Red);
Pen^ lineas = gcnew Pen(Color::Black);
g->DrawEllipse(lineas, posx, posy, dx, dy);
h->DrawLine(lineas, posx + (dx / 2), posy, posx + (dx / 2), posy + dy);
j->DrawLine(lineas, posx, posy + (dy / 2), posx + dx, posy + (dy / 2));
k->FillEllipse(pintura_para_el_centro, posx + (dx / 2) radio_interno_bull, posy + (dy / 2) - radio_interno_bull,
radio_interno_bull * 2, radio_interno_bull * 2);
SolidBrush^ pintura_para_dardo = gcnew SolidBrush(Color::Blue);
for (int i = 0; i < cant_tiros; i++) {
int x = tiros_x[i];
int y = tiros_y[i];
g->FillEllipse(pintura_para_dardo, x - radio_interno_dardo, y radio_interno_dardo, radio_interno_dardo * 2, radio_interno_dardo * 2);
}
}
int contar_cantidad_dardos_centro() {
int cantidadDardosCentro = 0;
int centroX = posx + dx / 2;
int centroY = posy + dy / 2;
for (int i = 0; i < cant_tiros; i++) {
int x = tiros_x[i];
int y = tiros_y[i];
int distanciaAlCentro= sqrt(pow(x-centroX, 2) + pow(y - centroY,
2));
if (distanciaAlCentro <= radio_interno_bull) {
cantidadDardosCentro++;
}
}
return cantidadDardosCentro;
}
};
IMPLEMENTACION PARA LOS BOTONES:
private: System::Void timer1_Tick(System::Object^ sender,
System::EventArgs^ e) {
Graphics^ grafico = this->CreateGraphics();
BufferedGraphicsContext^ espacio =
BufferedGraphicsManager::Current;
BufferedGraphics^ Buffer = espacio->Allocate(grafico, this>ClientRectangle);
Buffer->Graphics->Clear(Color::White);
objdardo->dibujar(Buffer->Graphics, Buffer->Graphics, Buffer>Graphics, Buffer->Graphics);
Buffer->Render(grafico);
}
private: System::Void btn_tirar_Click(System::Object^ sender,
System::EventArgs^ e) {
int xcant_tiros=0;
int dardos_centro;
xcant_tiros = Convert::ToInt32(txt_cantidad_tiros->Text);
objdardo->set_cant_tiros(xcant_tiros);
objdardo->generar_tiros();
lst_centro->Items->Clear();
dardos_centro = objdardo->contar_cantidad_dardos_centro();
lst_centro->Items->Add(dardos_centro);
// Llama al método dibujar para actualizar la ventana con los tiros
generados
Refresh();
}
CORRIDA:
Download