Пилипчук О.П., вчитель інформатики Гаврилівської ЗОШ Теофіпольського району Хмельницької областіПроект "Каток" (С#) Ідея цього проекту запозичена з відомої заставки ОС Windows "Геометричний вальс" Скачати програмний код Завдання. Розробити програму, після запуску якої на формі з’являється анімоване зображення замкнутої ламаної: вершини рухаються під кутом в різних напрямках і відбиваються від меж форми. Базовий матеріал- Створення нового компоненту - нащадка UserControl.
- Генерування випадкових чисел.
- Використання таймера.
- Метод DrawPolygon.
Детальний опис функціонування проекту- Зовнішній вигляд вікна програми під час виконання показаний на малюнку:
- Кількість вершин обирається випадково при запуску програми в межах від 3 до 7.
- При зміні розмірів вікна програми положення вершин ламаної повинне коректно змінюватись.
План розробки- Створити клас Katok, нащадок UserControl.
- З його використанням побудувати програму.
Приклад програмного коду 1. Основна програма /* * Created by SharpDevelop. * Date: 27.11.2007 */ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace Geometry { public partial class MainForm : Form { Katok K; // опис класу Katok див. далі public MainForm() { InitializeComponent();
Random R=new Random(); K=new Katok(R.Next(3,8)); // створюємо примірник класу Katok K.Parent=this; K.Size=ClientSize;
//Якорі (Anchor) забезпечать коректне масштабування при зміні розміру вікна K.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top); } } } 2. Модуль з класом Katok /* * Created by SharpDevelop. * Date: 28.11.2007 */ using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; namespace Geometry { public partial class Katok : UserControl { public Point[] P; int[] dx; int[] dy; Random R = new Random(); int n; //Для створення примірника класу в конструктор передається кількість вершин N: public Katok(int N) { InitializeComponent(); n=N; P = new Point[N]; dx = new int[N]; dy = new int[N]; // Генеруємо ламану for (int i=0; i<N; i++) { P[i].X=R.Next(Width); P[i].Y=R.Next(Height); do {dx[i]=R.Next(6)-3;} while (dx[i]==0); do {dy[i]=R.Next(6)-3;} while (dy[i]==0); } timer1.Start(); } void Timer1Tick(object sender, EventArgs e) { //Обчислюємо нові координати і, за потреби, //змінюємо напрями for (int i=0; i<n; i++) { P[i].X+=dx[i]; P[i].Y+=dy[i]; if ((P[i].X<3)||(P[i].X>Width-3)) dx[i]=-dx[i]; if ((P[i].Y<3)||(P[i].Y>Height-3)) dy[i]=-dy[i]; if (P[i].X>Width-3) P[i].X=Width-3; if (P[i].Y>Height-3) P[i].Y=Height-3; } Invalidate(); } void KatokPaint(object sender, PaintEventArgs e) { e.Graphics.DrawPolygon(Pens.DeepPink, P); } } } Завдання для вдосконалення проекту- Доповнити компонент Katok встановленням випадкових кольорів фону та ліній, причому кольори мають відрізнятися так, щоб лінії було добре видно.
- Забезпечити відображення одночасно п’ятьох послідовних фаз руху. При цьому малюється 1-ше, 2-е, 3-є, 4-е, 5-те положення многокутника. Потім стирається 1-е і домальовується 6-те, стирається 2-е і домальовується 7-е і т.п.
Завдання для самостійної розробки- Створити проект, у якому було б одночасно декілька рухомих многокутників:
a. в різних частинах екрану (декілька компонентів Katok); b. в одному прямокутнику (змінений компонент Katok).
Интернет реклама
|