Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
15 / 15 / 5
Регистрация: 06.04.2012
Сообщений: 287

Отслеживание нажатие мышки в определенной части экрана и зарисовка объекта

16.05.2012, 10:12. Показов 5049. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
на практике я пишу игру крестики нолики. Нарисовала через фотошоп клетки и вставила в программу с помощью модификатора Bitmap
C#
1
        Bitmap background = new Bitmap(Application.StartupPath + "/游戏网.png");
C#
1
2
3
4
5
        private void BackgroundPaint(PaintEventArgs e)
        {
            graphics = e.Graphics;
            graphics.DrawImage(background, new Rectangle(125, 85, 256, 256));
        }
Как теперь сделать отслеживание нажатие мышки по определенной клетке и зарисовывать с помощью bitmap крестик, либо нолик ?

Добавлено через 8 минут
Я вот подумала, можешь создать пустой Bitmap с опеределенными значениями Rectangle и находить его ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2012, 10:12
Ответы с готовыми решениями:

Блокирование определенной части экрана
Мне стало интересно, а как можно сделать такое: запускается программа, которая блокирует все нажатия мышью на правый нижний угол (ну...

Использование SetPixel - закраска определенной части экрана
Я нашёл вот такой графический код,но мне бы хотелось узнать,как сделать так чтобы эти цвета покрывали не весь экран, а только верх или...

Screenshot определенной части экрана средствами javascript
Здравствуйте, уважаемые. Стоит такая задача: Превратить содержимое div-блока в картинку и предложить пользователю скачать её. ...

13
162 / 162 / 11
Регистрация: 07.09.2011
Сообщений: 995
16.05.2012, 10:39
Насколько я помню, обычно для подобных программ используется datagrid либо разбиение поля на клетки. А там уже на каждый сектор, каждый квадрат задается действие. Возможно такой вариант будет удобнее?

Ну либо рисовать как кнопки активные элементы на битмапе и делать их невидимыми.....
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
16.05.2012, 10:56
Вам нужно обработать событие MouseClick на форме
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void Form1_MouseClick(object sender, MouseEventArgs e) {
    Pen red = new Pen(Color.Red, 3.0f);
    Pen black = new Pen(Color.Black, 3.0f);
    Graphics gfx = this.CreateGraphics();
    // ограничения зависят от координат полосок в вашем рисунке
    if ((e.X > 0 && e.X < 100) &&
        (e.Y > 0 && e.Y < 100)) {
        gfx.DrawEllipse(red, 10, 10, 60, 60); // нолик
    }
 
    if ((e.X > 100 && e.X < 200) &&
        (e.Y > 0 && e.Y < 100)) {
        gfx.DrawLine(black, 100, 10, 160, 70);  // крестик
        gfx.DrawLine(black, 160, 10, 100, 70);
    }
}
0
15 / 15 / 5
Регистрация: 06.04.2012
Сообщений: 287
16.05.2012, 11:25  [ТС]
Lovrentiy, ошибка! Может вы имели ввиду TableLayoutPanel ?
0
162 / 162 / 11
Регистрация: 07.09.2011
Сообщений: 995
16.05.2012, 12:29
Если рисовать самому, то, да - TableLayoutPanel. Но насколько я помню, некоторые в дата гриде далали, в частности такие игры как "морской бой".

На крестики-нолики думаю TableLayoutPanel за глаза, там рисовать то....
0
15 / 15 / 5
Регистрация: 06.04.2012
Сообщений: 287
16.05.2012, 12:40  [ТС]
Lovrentiy, Вот смотри, тут только отслеживание координат мыши подойдет больше всего и последующая зарисовка круга , либо креста. Всё через фотошоп сделано
Миниатюры
Отслеживание нажатие мышки в определенной части экрана и зарисовка объекта  
0
15 / 15 / 5
Регистрация: 06.04.2012
Сообщений: 287
16.05.2012, 12:55  [ТС]
Вот только один минус:

Если буду использовать метод предложенный tezaurismosis, будет очень тяжело писать интеллект компьютера, который будет играть с игроком

Добавлено через 5 минут
Может быть через цикл for нарисовать Rectangle аккуратно, чтобы пользователь это не видел ? И затем легко можно использовать их как массивы, ведь с ними легче работать...
0
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
16.05.2012, 13:15
а лучше всего создать класс игрового поля и в нём описывать все поведения
0
162 / 162 / 11
Регистрация: 07.09.2011
Сообщений: 995
16.05.2012, 14:59
Я не понимаю, что мешает СДЕЛАТЬ поле, поверх бэкграунда и поставить в свойстав invisible = false?, или цвет бэкграунда? Поля БУДУТ, но их никто не будет видеть, вместо них Пользователь увидит только картинку, и при нажатии на соответствующее поле будет выполнятся обычное действие - клик мыши.
0
15 / 15 / 5
Регистрация: 06.04.2012
Сообщений: 287
16.05.2012, 15:53  [ТС]
Lovrentiy, Я поставила tableLayoutPanel , вот теперь как отслеживать каждую ячейку на щелчок и зарисовывать ? Просто я первый раз вот пользуюсь tableLayoutPanel
0
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
16.05.2012, 18:51
Adina, вот маленький пример как можно организовать поле.
Реализация конечно не фонтан, здесь больше идея как это можно сделать...
Вложения
Тип файла: rar GameField.rar (11.5 Кб, 17 просмотров)
0
162 / 162 / 11
Регистрация: 07.09.2011
Сообщений: 995
17.05.2012, 10:05
TablLayotPanel используется для очерчения границ. Тоесть ты этим инструментом создаёшь удобное расположение других элементов.
В твоём случае, после начерчения ТаблЛоятПанел на твоём бэкграунде ты должна в каждый квадрат поместить обычную panel, её закрепляешь в родительском контейнере(тоесть в соответствующей ячейке) и присваиваешь действие mouse_click-у. Сами panel изначально не имеют цвета, прозрачны, поэтому на Бэкграунде не скажется.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void panel2_MouseClick(object sender, MouseEventArgs e)
        {
            panel2.BackColor = Color.Black;
        }
 
        private void panel1_MouseClick(object sender, MouseEventArgs e)
        {
            panel1.BackColor = Color.Red;
        }
 
        private void panel3_MouseClick(object sender, MouseEventArgs e)
        {
            panel3.BackColor = Color.Green;
        }
 
        private void panel4_MouseClick(object sender, MouseEventArgs e)
        {
            panel4.BackColor = Color.Yellow;
        }
       
    }
}
0
162 / 162 / 11
Регистрация: 07.09.2011
Сообщений: 995
17.05.2012, 10:32
Цитата Сообщение от kuroiryuu Посмотреть сообщение
Adina, вот маленький пример как можно организовать поле.
Реализация конечно не фонтан, здесь больше идея как это можно сделать...
Это хороший вариант создания равномерных ячеек(cells), но как ими манипулировать? Подскажите как назначить действие на конкретную ячейку?
0
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
18.05.2012, 13:16
Цитата Сообщение от Lovrentiy Посмотреть сообщение
Это хороший вариант создания равномерных ячеек(cells), но как ими манипулировать? Подскажите как назначить действие на конкретную ячейку?
если код смотрели, то каждая ячейка это контрол, и каждый контрол можно подписать на какое-то событие...
или прямо в классе ячейки перегрузить необходимые события, в которых будет прописана ваша логика...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.05.2012, 13:16
Помогаю со студенческими работами здесь

Нажатие определенной клавиши на клавиатуре = Запуск определенной функции
Здравствуйте. У меня такой вопрос: как при нажатии, к примеру, клавиши &quot;1&quot; на клавиатуре запустить нужную мне функцию (Окно с меню...

Отслеживание неактивности мышки
Здравствуйте, можно как то отследить не активность мышки? т.е. если мышкой не щёлкаю в течении допустим 5 минут что бы запустился мой...

Отслеживание движений мышки на форме
Нужно рисовать мышкой по пустой форме. Допустим с MFC я помню методику: 1)ПКМ нажата 2)Мышка сдвинулась - свести предыдущую точку и...

Отслеживание подключенных процессов к определенной программе
Добрый день! Возник вопрос, который достаточно давно пытаюсь решить, но без результатов. Предположим, что у меня включена игра A, к ней...

Нажатие клавиши мышки
Нужно при нажатии левой, правой или средней клавиши мышки чтобы 1) появилось окно с текстом &quot;нажато **** клавишу&quot; 2)и нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru