Субота, 23.11.2024
Творча лабораторія
Меню сайту
Реклама
Категорії каталогу
MS Visual C++ 2005 Express Edition [3]
Середовища програмування [8]
Особливості встановлення та використання різних середовищ програмування
MS Visual Basic 6 [1]
Microsoft Visual Basic
C# [8]
Програмування мовою C#
C++ [3]
Паскаль [5]
ЛОГО [1]
Олімпіадне програмування [0]
Python [1]
Головна » Статті » Програмування » C#

Проект "Каток"

Нові статті

[19.02.2020] [C#]
Задача про розрізання квадрата (ООП, C#)
[09.02.2020] [Python]
Задача про розрізання квадрата (ООП, Python)
[06.02.2020] [Паскаль]
Задача про розрізання квадрата (ООП, Free Pascal)

Пилипчук О.П., вчитель інформатики Гаврилівської ЗОШ Теофіпольського району Хмельницької області

Проект "Каток" (С#)

Ідея цього проекту запозичена з відомої заставки ОС Windows "Геометричний вальс"

Скачати програмний код

Завдання. Розробити програму, після запуску якої на формі з’являється анімоване зображення замкнутої ламаної: вершини рухаються під кутом в різних напрямках і відбиваються від меж форми.

Базовий матеріал

  1. Створення нового компоненту - нащадка UserControl.
  2. Генерування випадкових чисел.
  3. Використання таймера.
  4. Метод DrawPolygon.

Детальний опис функціонування проекту

  1. Зовнішній вигляд вікна програми під час виконання показаний на малюнку:

  1. Кількість вершин обирається випадково при запуску програми в межах від 3 до 7.
  2. При зміні розмірів вікна програми положення вершин ламаної повинне коректно змінюватись.

План розробки

  1. Створити клас Katok, нащадок UserControl.
  2. З його використанням побудувати програму.

Приклад програмного коду

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);
        }
    }
}

Завдання для вдосконалення проекту

  1. Доповнити компонент Katok встановленням випадкових кольорів фону та ліній, причому кольори мають відрізнятися так, щоб лінії було добре видно.
  2. Забезпечити відображення одночасно п’ятьох послідовних фаз руху. При цьому малюється 1-ше, 2-е, 3-є, 4-е, 5-те положення многокутника. Потім стирається 1-е і домальовується 6-те, стирається 2-е і домальовується 7-е і т.п.

Завдання для самостійної розробки

  1. Створити проект, у якому було б одночасно декілька рухомих многокутників:
a.    в різних частинах екрану (декілька компонентів Katok);
b.    в одному прямокутнику (змінений компонент Katok).


Интернет реклама
Категорія: C# | Додав: teachlab (07.06.2009)
Переглядів: 3202 | Рейтинг: 0.0/0
Всього коментарів: 0
Додавати коментарі можуть тільки зареєстровані користувачі.
[ Реєстрація | Вхід ]
Форма входу
Пошук
Друзі сайту

Підтримка


Статистика
Copyright Пилипчук О.П. © 2024
div id=