Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2012, 20:32   #1
vlasevich
 
Регистрация: 22.04.2012
Сообщений: 3
По умолчанию программа которая рисует и двигает фигуры C# VS2010

Здравствуйте, прошу помощи в написании программы на C# в VS2010.
Задача несложная: форма, на форме или на панельке при клике появляется круг случайного радиуса и цвета (или была возможность выбрать пользователю), который начинает двигаться в случайную сторону и отбиваться от стенок.

Чтобы была возможность накликать много таких кругов (или других фигурок, если это будет проще) и они летали на панельке или на форме в разные стороны.

Друг от друга чтобы они отбивались не обязательно, если это сложно. Еще хотелось бы чтобы была использована хотя бы простая многопоточность. Реально такое кому то сделать? Буду сильно благодарен и в долгу не останусь за помощь!
vlasevich вне форума Ответить с цитированием
Старый 22.04.2012, 22:56   #2
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

Цитата:
Задача несложная: форма, на форме или на панельке...
если задача несложная почему сам не сделаешь ?

вот небольшой примерчик тебе с одним летающим шариком. дальше как душе угодно можешь извращаться. добавлять кликанье мышки, еще шарики и т.п.
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        int width_of_rectangle = 1000;

        int height_of_rectangle = 500;

        int boundary_of_rectangle_x = 15;

        int boundary_of_rectangle_у = 15;

        int size_of_ball = 20;

        int size_of_move_of_ball = 5;

        private Bitmap myBitmap;

        int position_of_ball_x, position_of_ball_y, radius_of_ball_x, radius_of_ball_y, move_of_ball_x, move_of_ball_y, width_of_bitmap_of_ball, height_of_bitmap_of_ball, width_of_margin_of_bitmap, height_of_margin_of_bitmap;


        public Form1()
        {

            InitializeComponent();

            timer1.Interval = 10;

            timer1.Enabled = true;

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
            Graphics myGraphics = CreateGraphics();

            myGraphics.Clear(BackColor);
            
            double radius_of_ball = Math.Min(width_of_rectangle / myGraphics.DpiX, height_of_rectangle / myGraphics.DpiY) / size_of_ball;

           radius_of_ball_x = Convert.ToInt32(radius_of_ball * myGraphics.DpiX);

            radius_of_ball_y = Convert.ToInt32(radius_of_ball * myGraphics.DpiY);
            
            myGraphics.Dispose();

            move_of_ball_x = Convert.ToInt32(Math.Max(1, radius_of_ball_x / size_of_move_of_ball));

            move_of_ball_y = Convert.ToInt32(Math.Max(1, radius_of_ball_y / size_of_move_of_ball));

            width_of_margin_of_bitmap = move_of_ball_x;

            height_of_margin_of_bitmap = move_of_ball_y;

            width_of_bitmap_of_ball = 2 * (radius_of_ball_x + width_of_margin_of_bitmap);

            height_of_bitmap_of_ball = 2 * (radius_of_ball_y + height_of_margin_of_bitmap);
                      
            myBitmap = new Bitmap(width_of_bitmap_of_ball, height_of_bitmap_of_ball);

            myGraphics = Graphics.FromImage(myBitmap);

            myGraphics.Clear(BackColor);

            myGraphics.FillEllipse(Brushes.Black, new  Rectangle(move_of_ball_x, move_of_ball_y, 2 * radius_of_ball_x, 2 * radius_of_ball_y));

            myGraphics.Dispose();

            position_of_ball_x = Convert.ToInt32(width_of_rectangle / 2);

            position_of_ball_y = Convert.ToInt32(height_of_rectangle / 2);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {

            
            Graphics myGraphics = CreateGraphics();

           
            myGraphics.DrawLine(new Pen(Color.Red, 3), boundary_of_rectangle_x, boundary_of_rectangle_у, width_of_rectangle, boundary_of_rectangle_у);

            myGraphics.DrawLine(new Pen(Color.Red, 3), boundary_of_rectangle_x, boundary_of_rectangle_у, boundary_of_rectangle_x, height_of_rectangle);

            myGraphics.DrawLine(new Pen(Color.Red, 3), boundary_of_rectangle_x, height_of_rectangle, width_of_rectangle, height_of_rectangle);

            myGraphics.DrawLine(new Pen(Color.Red, 3), width_of_rectangle, boundary_of_rectangle_у, width_of_rectangle, height_of_rectangle);

          
            myGraphics.DrawImage(myBitmap, Convert.ToInt32(position_of_ball_x - width_of_bitmap_of_ball / 2),

            Convert.ToInt32(position_of_ball_y - height_of_bitmap_of_ball / 2), width_of_bitmap_of_ball, height_of_bitmap_of_ball);

            myGraphics.Dispose();

            position_of_ball_x = position_of_ball_x + move_of_ball_x;

            position_of_ball_y = position_of_ball_y + move_of_ball_y;

            
            if (position_of_ball_x + radius_of_ball_x >= width_of_rectangle)
            {

                move_of_ball_x = -move_of_ball_x;

            }

            if (position_of_ball_x - radius_of_ball_x <= boundary_of_rectangle_x)
            {

                move_of_ball_x = -move_of_ball_x;

            }

            
            if (position_of_ball_y + radius_of_ball_y >= height_of_rectangle)
            {

                move_of_ball_y = -move_of_ball_y;

            }

            if (position_of_ball_y - radius_of_ball_y <= boundary_of_rectangle_у)
            {

                move_of_ball_y = -move_of_ball_y;

            }

        }
    }
}
wm_leviathan вне форума Ответить с цитированием
Старый 23.04.2012, 00:03   #3
vlasevich
 
Регистрация: 22.04.2012
Сообщений: 3
По умолчанию

спасибо большое, похимичу с кодом, если что обращусь за помощью
vlasevich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#.Определить функцию, которая выясняет, пересекаются ли две фигуры Tomogochi Общие вопросы .NET 12 26.10.2015 00:30
Движение одной фигуры,вслед изменения высоты другой фигуры. 7vlad37 Microsoft Office Excel 3 21.07.2011 18:01
Можно ли программно определить, что мышь двигает не человек, а бот? amakl Софт 4 11.01.2011 02:18
есть ли в Делфи процедура, которая рисует на форме круг заданого радиуса? vedro-compota Общие вопросы Delphi 2 08.05.2010 18:38