Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/30: Рейтинг темы: голосов - 30, средняя оценка - 4.57
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
1

Создать клеточное поле и закрасить в нем три клетки

17.05.2015, 18:11. Просмотров 5584. Ответов 13
Метки нет (Все метки)


я плохо знаком со windows forms.но дали задание:
нарисовать поле(клеточное) 3*3(как массив 3*3 ток с клетками).,клетки должны быть белого цвета.
в нем закрасить любые три клетки красным цветом.
мучаюсь не могу понять как сделать такое.обычно проги в консоли пишу.

Добавлено через 26 секунд
буду благодарен за ответы,примеры,ссылки с полезной информацией и т.д.
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2015, 18:11
Ответы с готовыми решениями:

Как создать клеточное поле для игры "Жизнь"?
Как создать клеточное поле 10 на 10, чтоб оно запускалось при нажатии кнопки старт?

Создать окошко, закрасить его, и цветным шрифтом вывести в нём сообщение
Не понимаю как использовать window(x1, y1, x2, y2) и функции для закраски тескста и фона. Дайте...

Нарисовать клеточное поле с помощью Datagridview
можно с помощью этой штуки нарисовать клеточное поле?

Дано клеточное поле, часть клеток занята препятствиями
Дано клеточное поле, часть клеток занята препятствиями. Необходимо попасть из некоторой заданной...

13
Эксперт .NETАвтор FAQ
9836 / 4795 / 1726
Регистрация: 11.01.2015
Сообщений: 5,973
Записей в блоге: 34
17.05.2015, 18:24 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

ret_st,
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
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication283
{
    public partial class Form1 : Form
    {
        private byte[,] cells;
 
        public Form1()
        {
            InitializeComponent();
 
            cells = new byte[,] {{0, 1, 0}, {1, 0, 0}, {0, 0, 1}};
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            var cellSize = new Size(20, 20);
            var location = new Point(100, 100);
 
            for(int i = 0;i<cells.GetLength(0);i++)
            for(int j = 0;j<cells.GetLength(1);j++)
            {
                var rect = new Rectangle(location.X + i*cellSize.Width , location.Y + j*cellSize.Height, cellSize.Width, cellSize.Height);
                var brush = cells[i, j] == 1 ? Brushes.Red : Brushes.White;
                e.Graphics.FillRectangle(brush, rect);
                e.Graphics.DrawRectangle(Pens.Black, rect);
            }
        }
    }
}
Название: 1.png
Просмотров: 193

Размер: 17.4 Кб
2
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
17.05.2015, 21:37  [ТС] 3
студия ругается на:
C#
1
 cells = new byte[,] {{0, 1, 0}, {1, 0, 0}, {0, 0, 1}};
Добавлено через 5 минут
пробовал:
C#
1
var  cells = new byte[,] {{0, 1, 0}, {1, 0, 0}, {0, 0, 1}};
но потом на cells ругается:
C#
1
2
      for(int i = 0;i<cells.GetLength(0);i++)
            for(int j = 0;j<cells.GetLength(1);j++)
Добавлено через 2 минуты
все разобрался

Добавлено через 34 минуты
возник еще вопрос.
как сделать событие?
нужна кнопка.
когда кнопка не нажата,то поле белое.
как только нажимаю кнопку,то поле на поле появляются красные квадраты.
так можно в c# сделать?

Добавлено через 12 минут
хотел рандом сделать для поля не получилось,все время белые клетки выдает.как его настроить?
C#
1
2
3
4
5
6
7
8
 Random rand = new Random(DateTime.Now.Millisecond);
            for (int i = 0; i < cells.GetLength(0); i++)
            {
                for (int j = 0; j < cells.GetLength(1); j++)
                {
                    cells[i, j] = rand.Next(0,1);
                }
            }
Добавлено через 51 минуту
и можно ли нажимать на квадратики?я нажал на квадратик и он получился красным,такое можно сделать на с#?
0
Эксперт .NETАвтор FAQ
9836 / 4795 / 1726
Регистрация: 11.01.2015
Сообщений: 5,973
Записей в блоге: 34
18.05.2015, 01:51 4
Цитата Сообщение от ret_st Посмотреть сообщение
как сделать событие?
нужна кнопка.
когда кнопка не нажата,то поле белое.
как только нажимаю кнопку,то поле на поле появляются красные квадраты.
так можно в c# сделать?
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
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication283
{
    public partial class Form1 : Form
    {
        private byte[,] cells;
 
        public Form1()
        {
            InitializeComponent();
 
            cells = new byte[,] {{0, 1, 0}, {1, 0, 0}, {0, 0, 1}};
 
            var grid = new MatrixGrid(){Parent = this, GridSize = new Size(3, 3), BorderStyle = BorderStyle.FixedSingle, Location = new Point(100, 100)};
            grid.CellNeeded += grid_CellNeeded;
            grid.CellClick += grid_CellClick;
        }
 
        void grid_CellClick(object sender, MatrixGrid.CellClickEventArgs e)
        {
            cells[e.Cell.X, e.Cell.Y] = (byte)(1 - cells[e.Cell.X, e.Cell.Y]);
        }
 
        void grid_CellNeeded(object sender, MatrixGrid.CellNeededEventArgs e)
        {
            e.BackColor = cells[e.Cell.X, e.Cell.Y] > 0 ? Color.Red : Color.White;
        }
    }
}
Контрол MatrixGrid брать отсюда: https://www.cyberforum.ru/blog... g3296.html
Как использовать контрол описано здесь: https://www.cyberforum.ru/blog... g3301.html

Создать клеточное поле и закрасить в нем три клетки
2
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
18.05.2015, 06:42  [ТС] 5
спасибо большое)
осталось только с рандомным заполнением разобраться.почему этот код не работает?
C#
1
2
3
4
5
6
7
8
Random rand = new Random(DateTime.Now.Millisecond);
            for (int i = 0; i < cells.GetLength(0); i++)
            {
                for (int j = 0; j < cells.GetLength(1); j++)
                {
                    cells[i, j] = rand.Next(0,1);
                }
            }
0
Эксперт .NETАвтор FAQ
9836 / 4795 / 1726
Регистрация: 11.01.2015
Сообщений: 5,973
Записей в блоге: 34
18.05.2015, 09:05 6
ret_st,
C#
1
rand.Next(0,1);
=>
C#
1
rand.Next(0,2);
1
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
18.05.2015, 17:57  [ТС] 7
остался последний вопрос:
сделал кнопку button1,не могу понять как ее настроить.
когда кнопка не нажата,то поле белое.
как только нажимаю кнопку,то поле на поле рандомно появляются красные квадраты.
прошу помогите с последним вопросом.
0
Эксперт .NETАвтор FAQ
9836 / 4795 / 1726
Регистрация: 11.01.2015
Сообщений: 5,973
Записей в блоге: 34
18.05.2015, 18:04 8
Цитата Сообщение от ret_st Посмотреть сообщение
как только нажимаю кнопку,то поле на поле рандомно появляются красные квадраты.
C#
1
2
3
4
5
6
7
8
9
10
        private Random rnd = new Random();
 
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < cells.GetLength(0); i++)
            for (int j = 0; j < cells.GetLength(1); j++)
                cells[i, j] = (byte)rnd.Next(0, 2);
 
            Invalidate(true);
        }
1
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
18.05.2015, 18:19  [ТС] 9
спасибо вам огромное вы меня выручили.

Добавлено через 8 минут
возникла новая проблема.
C#
1
2
3
4
5
for (int i = 0; i < cells.GetLength(0); i++)
            for (int j = 0; j < cells.GetLength(1); j++)
                cells[i, j] = (byte)rnd.Next(0, 2);
 
            Invalidate(true);
хотел,чтоб красные квадратики три раза менялись рандомно при нажатии button,поэтому добавил цикл:
C#
1
2
3
4
5
6
7
int k;
for(k=0;k<3;k++){
for (int i = 0; i < cells.GetLength(0); i++)
            for (int j = 0; j < cells.GetLength(1); j++)
                cells[i, j] = (byte)rnd.Next(0, 2);
 }
   Invalidate(true);
почему-то не хочет работать.
0
Модератор
Эксперт .NET
5681 / 4597 / 2900
Регистрация: 20.04.2015
Сообщений: 8,214
18.05.2015, 18:58 10
Цитата Сообщение от ret_st Посмотреть сообщение
почему-то не хочет работать.
Слишком быстро работает
0
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
18.05.2015, 21:14  [ТС] 11
юзал
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  int k = 0;
          for (k = 0; k < 3; k++){
              for (int i = 0; i < cells.GetLength(0); i++)
              {
                  for (int j = 0; j < cells.GetLength(1); j++)
                  {
                      cells[i, j] = (byte)rnd.Next(0, 2);
                  }
 
                  Thread.Sleep(100);
              }
                        }
                 Invalidate(true);
            
        }
 
        }
    } не помагает
Добавлено через 4 минуты
может юзать надо какой-то шаг?
0
Модератор
Эксперт .NET
5681 / 4597 / 2900
Регистрация: 20.04.2015
Сообщений: 8,214
18.05.2015, 21:17 12
А если паузу из цикла i вынести в цикл k. И пауза в 0,1 с не мала?
0
1 / 1 / 1
Регистрация: 17.05.2015
Сообщений: 63
18.05.2015, 21:23  [ТС] 13
хорошо,скок надо поставить,чтоб нормально работало?
0
Эксперт .NETАвтор FAQ
9836 / 4795 / 1726
Регистрация: 11.01.2015
Сообщений: 5,973
Записей в блоге: 34
18.05.2015, 21:38 14
ret_st,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        private Random rnd = new Random();
 
        private void button1_Click(object sender, EventArgs e)
        {
            for (var k = 0; k < 3; k++)
            {
                for (int i = 0; i < cells.GetLength(0); i++)
                for (int j = 0; j < cells.GetLength(1); j++)
                    cells[i, j] = (byte) rnd.Next(0, 2);
 
                Refresh();
                Thread.Sleep(200);
            }
        }
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2015, 21:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Закрасить клетки в шахматном виде с помощью циклов
Random случайноеЧисло = new Random(); редактор = new...

Закрасить все клетки доски ходами коня
Пытаюсь решить такую задачу, вот что набросал уже clear; clc; n=input('Input quad size: ');...

Клетки StringGrid, в которых четные числа закрасить красным, нечетные - синим цветами.
помогите решить) Заполнить StringGrid случайными натуральными числами. Клетки, в которых четные...

Нужно создать класс "монитор" и в нём три метода
ПОмогите с программой пожалуйста. Нужно создать класс монитор и в нём три метода. я сделала 2...

Одноклеточная амеба делится каждые три часа на 2 клетки
одноклеточная амеба делится каждые три часа на 2 клетки.Определить,сколько амеб будет через...

Закрасить экран в три цвета
Доброго времени суток! Помогите, написать программу, которая будет закрашивать экран в три цвета.


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.