Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 2D графика, Нарисовать точки при клике мышью 
V
    Опции темы
nblxA
Дата 3.8.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Здравствуйте. Только начал изучать c#. 
Стоит задача: при клике мышкой закрашивается пиксель (черным цветом). При повторном нажатии пиксель снова становится прежнего цвета (к примеру белого). Т.е. можно нарисовать точками какую нибудь примитивную картинку. Так же нужно чтобы координаты закрашенных пикселей куда-либо сохранялись, т.к. потом с ними буду дальше "играться". 
Все это мне нужно чтобы реализовать игру "Жизнь". Код алгоритма жизни то я сам напишу, а вот с графикой пока проблемно.
Помогите, пожалуйсто. 
PM MAIL   Вверх
Ruzl
Дата 4.8.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 9.2.2008

Репутация: 1
Всего: 1



http://www.codeproject.com/KB/WPF/WPF_DrawTools.aspx  
вот интересный пример, сам по нему делал в свое время.
PM MAIL   Вверх
nblxA
Дата 4.8.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



А как мне сделать большой масштаб, чтобы точки были видны? А то там рисуются линии, окружности. А мне нужно чтобы при клике мышью закрашивался пиксель. И чтобы его можно было разглядеть невооруженым глазом. Мне не требуется рисовать геометрические фигуры. Мне нужно подобие клетчатой таблицы для игры в крестики-нолики. Но вместо построения такой таблицы я решил просто увеличить масшат изображения чтобы пиксель и был как ячейка таблицы.
PM MAIL   Вверх
Ruzl
Дата 4.8.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 9.2.2008

Репутация: 1
Всего: 1



как вариант - рисуй круг заданного радиуса (например в зависимости от разрешения).
PM MAIL   Вверх
nblxA
Дата 4.8.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Рисовать круги - не вариант: 1) ненужные затраты на код для прориисовки круга, 2) с кгурами будет сложнее оперировать чем с точками.
Нашел я как узнать координаты пикселя в который мышкой ткнул на pictureBox, теперь такие вопросы:
1) Возможно ли простым способом изменить цвет данного пикселя? Имею ввиду следуйщее: 
Код

public void pictureBox1_Click(object sender, EventArgs e)
        {
            Point p = pictureBox1.PointToClient(System.Windows.Forms.Cursor.Position);
            Pixel.Color = Black;
        }

Вместо Pixel.Color = Black существует какой-либо простой метод изменения цвета пикселя?

2) Как изменить масштаб картинки? А то эти пиксели и с лупой не разглядеть. А я хочу чтобы каждый был размером с пол сантиметра на экране.

Это сообщение отредактировал(а) nblxA - 4.8.2009, 13:56
PM MAIL   Вверх
diadiavova
Дата 4.8.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Выкладываю пример(это как вариант), размер квадрата зависит от значения свойства CellSize (у меня там 5 пикселей)

Присоединённый файл ( Кол-во скачиваний: 21 )
Присоединённый файл  Clicker.rar 35,18 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nblxA
Дата 4.8.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



diadiavova огромное спасибо!  smile 
А как мне увеличить масшабы pictureBox, чтобы размеры таких квадратов уменьшить с 5 пикселей до одного? И эти квадраты были четко видны?
PM MAIL   Вверх
diadiavova
Дата 4.8.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nblxA
Дата 4.8.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Ну мне сейчас нужно код написать, чтобы к примеру, если рядом с белым квадратом стоят 3 черных квадрата, то этот белый закрышивается черным цветом. Я пишу игру Жизнь Конвея. Если бы с пикселями работать, то по их координатам легро смотреть рядом стоящие пиксели черного или белого цвета. А вот как о квадратах узнать рядом стоящих, если каждый из них размером 5 на 5. 
PM MAIL   Вверх
diadiavova
Дата 4.8.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



nblxA, я предложил вариант не зная условий. Вариантов реализации может быть много, не зная суть игры,  вряд ли можно подобрать оптимальный.

Добавлено через 1 минуту и 39 секунд
кстати, вычислить то, о чём ты пишешь и так не сложно, но возможно это не лучшее решение. Просто сначала ты говорил о пикселях, а теперь выясняется, что пиксели тут вообще не при чём.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nblxA
Дата 4.8.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Ну с пикселями работать проще - 1 пиксель - 2 координаты x и y. А вот с квадратами не знаю как реализовать данное.
PM MAIL   Вверх
diadiavova
Дата 4.8.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Ещё раз повторюсь: не зная сути игры, посоветовать что-то дельное вряд ли возможно. Опиши хотя бы какие операции там понадобятся, а то я сейчас начну распинаться, а потом выяснятся такие детали, что окажется, что этот способ вообще не подходит.

Добавлено через 2 минуты и 26 секунд
кстати квадрат тоже можно определить двумя координатами , а в случае, если все они имеют одинаковые размеры, то это могут быть не координаты угла например, а порядковый номер квадрата в строке и столбце.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nblxA
Дата 4.8.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Игра́ «Жизнь» (англ. Conway's Game of Life) — клеточный автомат, придуманный английским математиком Джоном Конвеем (англ.) в 1970 году.
Выживание. Каждая фишка, имеющая вокруг себя две или три соседние фишки, выживает и переходит в следующее поколение.
Гибель. Каждая фишка, у которой больше трёх соседей, погибает, то есть снимается с доски из-за перенаселённости. Каждая фишка, вокруг которой свободны все соседние клетки или же занята всего одна клетка, погибает от одиночества.
Рождение. Если число фишек, с которыми граничат какая-нибудь пустая клетка, в точности равно трём (не больше и не меньше), то на этой клетке происходит рождение нового «организма», то есть следующим ходом на неё ставится одна фишка.

Алгоритм я хочу написать сам. А вот что ты сказал:
квадрат тоже можно определить двумя координатами , а в случае, если все они имеют одинаковые размеры, то это могут быть не координаты угла например, а порядковый номер квадрата в строке и столбце.
Вот по порядковые номера. Это же получается как матрица со столбцами и строчками. Вот как эти порядковые номера запомнить, чтобы игру написать?
Т.е. я мышкой тыкаю на pictureBox и каки-то клетки закрашиваются. Потом нажму кнопку старт и игра сама будет закрашивать квадраты в белый или черный цвет согласно выше описанным правилам игры.
PM MAIL   Вверх
diadiavova
Дата 4.8.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



При таких делах я бы всё переделал, правила не до конца понял, но тут лучше TableLayoutPanel, а в качестве квадратиков использовать какой-нибудь контрол(ту же кнопку), тогда можно будет и клики контролировать и наведение мыши, и стили менять и вычисления упростятся.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nblxA
Дата 4.8.2009, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Если использовать pictureBox, то размеры поля можно будет менять. А если вместо квадратиков использовать кнопки, то для увеличения поля придется новые кнопки на форму переносить.
Спасибо за наводку! Попробую повозится с TableLayoutPanel.

Это сообщение отредактировал(а) nblxA - 4.8.2009, 20:00
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0642 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.