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

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

16.05.2012, 10:12. Показов 4971. Ответов 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
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru