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: