Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2] 3  Все   Вниз
  Печать  
Автор Тема: Рисование на формах  (Прочитано 66082 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
гайка
Гость
« Ответ #30 : 15-03-2012 18:35 » 

RXL, ну ладно. Спасибо и на этом. Неизвестная ошибка - тоже ошибка!
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 15-03-2012 18:36 » 

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

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
гайка
Гость
« Ответ #32 : 15-03-2012 18:41 » 

RXL, по шахматным координатам А1 - это ведь в левом нижнем углу?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #33 : 15-03-2012 18:44 » 

Не важно. Я выразился в таких координатах, чтобы показать отношения позиций. Т.е. рассматривай это как относительные координаты.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
гайка
Гость
« Ответ #34 : 15-03-2012 18:51 » 

Не получается у меня эту ошибку вызвать...  А черт его знает...
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #35 : 15-03-2012 20:20 » 

Не отчаивайся. Напишешь новую...  Ага
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #36 : 15-03-2012 21:09 » 

Чёт не то:

* ss1.gif (14.73 Кб - загружено 1428 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
гайка
Гость
« Ответ #37 : 16-03-2012 19:46 » 

Джон, обещала тебе переделанный код показать. сделала набросок:

Код: (C#)
    enum CellState { Empty, Ship, Wounded, Missed };

    class Cell
    {
        public int X { get; private set; }
        public int Y { get; private set; }
        public CellState State { get; private set; }

        public Cell(int x, int y)
        {
            X = x;
            Y = y;
            State = CellState.Empty;
        }

        public void ChangeState(CellState newState)
        {
            State = newState;
        }
    }
Код: (C#)
    enum SubmarineState { Normal, Wounded, Killed };
   
    class Submarine
    {
        public List<Cell> Cells { get; private set; }
        public SubmarineState State { get; private set; }

        public Submarine(List<Cell> cellList)
        {
            Cells = cellList;
            foreach (Cell c in Cells)
                c.ChangeState(CellState.Ship);
            State = SubmarineState.Normal;
        }

        public void ChangeState(SubmarineState newState)
        {
            State = newState;
        }

        public void ChangeCells(List<Cell> cellList)
        {
            foreach (Cell c in Cells)
                c.ChangeState(CellState.Empty);
            Cells = cellList;
            foreach (Cell c in Cells)
                c.ChangeState(CellState.Ship);
        }
    }
Код: (C#)
    class Field
    {
        public List<Cell> Cells { get; private set; }
        public List<Submarine> Subs { get; private set; }
        public int FieldSize { get; private set; }
       

        public Field(int size)
        {
            Cells = new List<Cell>();
            FieldSize=size;
            for (int i = 0; i < FieldSize; i++)
                for (int j = 0; j < FieldSize; j++)
                    Cells.Add(new Cell(i, j));
            Subs = new List<Submarine>();
        }

        public void AddSubmarine(List<Point> points)
        {
            List<Cell> list =new List<Cell>();
            foreach(Point p in points)
                list.Add(Cells[p.X+p.Y*10]);
            Submarine sub=new Submarine(list);
            Subs.Add(sub);
        }
    }
Код: (C#)
    class Painter
    {
        public static void Draw(Graphics g, Field field, Point locatoin, int rectSize)
        {
            int x = locatoin.X;
            int y = locatoin.Y;
            int size = rectSize * field.FieldSize;

            g.DrawRectangle(Pens.Black, x, y, size, size);
            foreach (Cell c in field.Cells)
                DrawCell(g, c, locatoin ,rectSize);
        }

        static void DrawCell(Graphics g, Cell c, Point location, int size)
        {
            int x = location.X + size * c.X;
            int y = location.Y + size * c.Y;

            g.DrawRectangle(Pens.Black, x, y, size, size);
            switch (c.State)
            {
                case CellState.Empty:                  
                    g.FillRectangle(SystemBrushes.Control, x + 1, y + 1, size - 1, size - 1);
                    break;
                case CellState.Ship:
                    g.FillRectangle(Brushes.Green, x + 1, y + 1, size - 1, size - 1);
                    break;
                case CellState.Wounded:
                    g.FillRectangle(Brushes.Red, x + 1, y + 1, size - 1, size - 1);
                    break;
                case CellState.Missed:
                    g.FillEllipse(Brushes.White, x + size / 4, y + size / 4, size / 4, size / 4);
                    break;
            }
        }
    }
Код: (C#)
    class SeaWar//пока не дописан
    {
        Field field1;
        Field field2;

        public SeaWar()
        {
            field1 = new Field(10);
            field2 = new Field(10);
        }
    }
Код: (C#)
    public partial class Form1 : Form
    {
        SeaWar seaWar;
       
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            seaWar = new SeaWar();
        }
    }

Добавлено через 3 минуты и 41 секунду:
теперь надо откуда-то вызывать отрисовщика. вот только хрен знает откуда
« Последнее редактирование: 16-03-2012 19:50 от гайка » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #38 : 16-03-2012 19:53 » 

Ща подожди.

1. ChangeState(CellState newState) выбрасывай, она не нужна, у тебя уже есть public State только убери private от set

Добавлено через 22 секунды:
а есть у тебя этот код в файле каком-нить?
« Последнее редактирование: 16-03-2012 19:54 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
гайка
Гость
« Ответ #39 : 16-03-2012 19:55 » 

конечно.

Добавлено через 1 минуту и 14 секунд:
1. ChangeState(CellState newState) выбрасывай, она не нужна, у тебя уже есть public State только убери private от set
думала, так нежелательно делать

* Sea_war.rar (24.37 Кб - загружено 764 раз.)
« Последнее редактирование: 16-03-2012 19:56 от гайка » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #40 : 16-03-2012 20:04 » 

Не всё, стоп. Отставить. Ты просто переформатировала немного код. А по сути всё те же ф-ции упакованные в классы. Просто их больше стало.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
гайка
Гость
« Ответ #41 : 16-03-2012 20:06 » 

Джон, вот теперь я окончательно перестала понимать, что от меня требуется!

Добавлено через 13 дней, 48 минут и 45 секунд:
Код: (C#)
    class Field
    {
        public List<Cell> Cells { get; private set; }
        public List<Ship> Ships { get; private set; }

        public Field()
        {
            Cells = new List<Cell>();
            Ships = new List<Ship>();
        }

        public void AddShip(List<Point> points_)
        {
            List<Cell> list_ = new List<Cell>();
            foreach (Point p in points_)
            {
                list_.Add(Cells.Find(o => (o.X == p.X) && (o.Y == p.Y)));
            }
            switch (list_.Count)
            {
                case 1:
                    OneDeck ship1_ = new OneDeck(list_[0]);
                    Ships.Add(ship1_);
                    break;
                case 2:
                    TwoDeck ship2_ = new TwoDeck(list_);
                    Ships.Add(ship2_);
                    break;
                case 3:
                    ThreeDeck ship3_ = new ThreeDeck(list_);
                    Ships.Add(ship3_);
                    break;
                case 4:
                    FourDeck ship4_ = new FourDeck(list_);
                    Ships.Add(ship4_);
                    break;
            }
        }

        public void Draw()
        {
            foreach (Cell c in Cells)
                c.Draw();
        }
    }

Код: (C#)
    enum ShipState { normal, wounded, killed }
    abstract class Ship
    {
        public ShipState State;

        public abstract void Draw();
    }

Код: (C#)
    class OneDeck: Ship
    {
        public Cell CEll { get; private set; }
       
        public OneDeck(Cell cell_)
        {
            CEll = cell_;
        }

        public override void Draw()
        {

        }
    }

Код: (C#)
    class TwoDeck:Ship
    {
        public List<Cell> Cells { get; private set; }

        public TwoDeck(List<Cell> cells_)
        {
            Cells = cells_;
        }
       
        public override void Draw()
        {
           
        }
    }
аналогично class ThreeDeck: Ship и class FourDeck: Ship

Код: (C#)
    enum CellState { fill, free, wounded, missed }
   
    class Cell
    {
        public int X { get; private set; }
        public int Y { get; private set; }
        public CellState State { get; private set; }

        public void Draw()
        {

        }
    }
« Последнее редактирование: 29-03-2012 20:54 от гайка » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #42 : 29-03-2012 21:10 » 

Ф-я AddShip должна добалять корабль, а не список точек. У тебя есть объект Ship, он должен передаваться в ф-ю. А инече эта ф-я  делает не то, на что указывает её имя. Она ещё что-то ищет... А почему?

2. Чем у тебя классы OneDeck, TwoDeck отличаются? Тем что у первого просто Cell, а у остальных List<Cell>? А если в списке только одна ячейка? Можно же так сделать, тогда List<Cell> можно поместить в базовый класс.
« Последнее редактирование: 29-03-2012 21:21 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
гайка
Гость
« Ответ #43 : 01-04-2012 11:28 » 

2. Чем у тебя классы OneDeck, TwoDeck отличаются? Тем что у первого просто Cell, а у остальных List<Cell>? А если в списке только одна ячейка? Можно же так сделать, тогда List<Cell> можно поместить в базовый класс.
1) они будут отличаться отрисовкой
2) что-то кардинально изменится от этого?

Добавлено через 4 часа, 5 минут и 14 секунд:
В общем, у меня выходит так: я перемещаю список ячеек в базовый класс и все корабли становятся по сути одинаковыми (т.к. в ф-ции Draw они все делают одно и то же: перебирают все ячейки из своего списка и для каждой ячейки вызывают метод Draw)
В итоге, я могу просто удалить все корабли кроме базового и переместить весь функционал в него. Прощай полиморфизм, до встречи, наследование. Фак.
« Последнее редактирование: 01-04-2012 15:33 от гайка » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #44 : 01-04-2012 15:33 » 

Собственно я бы не разбивал бы на 4 класса разновидности кораблей. Это все одна сушность. А если скажем бужет 5 палубный корабль, это добавлять еше 1 класс?

PS. На кораблях полиморфизм как бы не нужен. У них одно и тоже поведение и сушность.
« Последнее редактирование: 01-04-2012 15:35 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
гайка
Гость
« Ответ #45 : 01-04-2012 18:46 » 

это была Женина идея, она вроде бы действительно логично звучала: изначально рассчитывалось, что они будут иметь разные методы отрисовки, но когда дошло до практики, оказалось, что все они, заразо, одинаковые.
Кстати в той монстро-функции свич выглядит немного не так как должен: можно было создать одну переменную типа Ship и в зависимости от количества клеток инициализировать ее как объект n-палубного корабля. ну да ладно, уже не важно....
Пожалуй, я не буду прикручивать сюда то, что никак не лепится. у меня уже созрел новый коварный план  :Улыбаюсь
« Последнее редактирование: 01-04-2012 19:19 от Гайка » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #46 : 01-04-2012 19:07 » 

 С ума сойти... Коварная ты наша Улыбаюсь
« Последнее редактирование: 01-04-2012 19:17 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
гайка
Гость
« Ответ #47 : 01-04-2012 21:21 » 

У меня есть класс Game, его экземпляр хранит в себе очередь из игроков.
Экземпляр Player хранит интовое количество баллов и игровое поле.
Field хранит список кораблей и список ячеек.
Каждый корабль также имеет список ячеек и показатель состояния корабля (нормальный, подстреленный убитый).
Ячейка, последняя в этой пищевой цепочке, хранит 2 координаты и индикатор состояния (пустая, заполненная, подстреленная и missed - мимо).
еще есть класс-отрисовщик Painter, который пока не умеет рисовать.
Так вот... в чем соль. когда я перетаскиваю мышкой корабль в поле, к кому из них мне в первую очередь обращаться?
нужно:
1) переконвертировать координаты мышки в обычные координаты ячейки (какой класс по логике должен этим заниматься?)
2) послать эти координаты куда-то (видимо в класс Game, а там сказать, что в поле текущего игрока поступил новый корабль)

Добавлено через 2 минуты и 35 секунд:
Finch, у нас есть 20 минут на решение этой задачи. я знаю, что ты здесь :Улыбаюсь
« Последнее редактирование: 01-04-2012 21:24 от гайка » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #48 : 01-04-2012 21:36 » 

Field по идее говоря должно хранить только состояние поля Улыбаюсь Т.е. матрица ячеек.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
гайка
Гость
« Ответ #49 : 01-04-2012 21:37 » 

ну а кто тогда будет хранить корабли?

Добавлено через 42 секунды:
ну список ячеек у меня это и есть матрица
« Последнее редактирование: 01-04-2012 21:38 от гайка » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #50 : 02-04-2012 06:00 » 

В рамках MVC можно представить клетку 2-3 классами. Один - собственно клетка с её логическими координатами и состоянием (модель). Другой (или два) - отображение клетки на экране (с экранными координатами), отрисовкой (представление) и обработкой событий мыши в соответствующей экранной области (контроллер).

Активизированная мышью "текущая" клетка может уведомлять об этом Field, а Field будет предоставлять пользователям "текущую" клетку и событие её замены на другую клетку. Эту инфраструктуру можно нагружать разной логикой. В частности размещение корабля: при смене текущей клетки пересобрать список клеток корабля. После этого отрисовка перемещённого корабля произойдёт сама собой.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
гайка
Гость
« Ответ #51 : 02-04-2012 16:56 » 

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

Добавлено через 6 минут и 38 секунд:
Ладно ребят, я почитала все ваши рекомендации (все что тут и все, что в чате) и решила, что больше вас мучить морским боем не буду. Иначе дружной семьей мы будем делать его вечно Улыбаюсь всегда найдется тот, кому что-то не понравится.
« Последнее редактирование: 02-04-2012 17:03 от гайка » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #52 : 02-04-2012 17:11 » 

Гайка, сделай так, как понравится тебе! Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
гайка
Гость
« Ответ #53 : 02-04-2012 17:17 » 

Меня Джон вызвался проверять Улыбаюсь так что надо так, чтоб еще понравилось ему Отлично

Добавлено через 1 минуту и 38 секунд:
Блинский, курсовой проект по ООП, а концепции ООП продемонстрировать не получается!
« Последнее редактирование: 02-04-2012 17:19 от гайка » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #54 : 02-04-2012 19:39 » 

Ну почему же? С кораблями ООП вписать вполне можно. К примеру, базовый класс корабля задает интерфейс и основные алгоритмы, а дочерние классы реализуют детали, характерные для корабля конкретной конфигурации. Так можно, имея общую логику, создавать корабли хоть буквой зю.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
гайка
Гость
« Ответ #55 : 02-04-2012 19:42 » 

ты когда-нибудь играл в морской бой? Улыбаюсь там по правилам только прямые корабли. а вариант с базовым классом кораблей и дочерними n-палубниками я уже проехала, вон там чуть ниже всё написано, обсужно, отшлепано и выгнано Улыбаюсь
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #56 : 02-04-2012 19:43 » new

Цитата: Гайка
а концепции ООП продемонстрировать не получается
Это которые?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #57 : 02-04-2012 19:45 » 

Гайка, где написано, что морской бой имеет только одну форму и никак не может быть изменен? Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
гайка
Гость
« Ответ #58 : 02-04-2012 19:47 » 

вот тут  Что, съел?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #59 : 02-04-2012 19:50 » 

варианты игры
Цитата
Размер поля можно увеличить — например, размер 16×16 или 18×18 позволяет с удобством использовать весь размер одинарного тетрадного листа. В этом случае количество фигур можно увеличить — например, как предлагал Я. И. Перельман, добавить изогнутые четырёхклеточные фигуры (по одной штуке каждого из четырёх вариантов изогнутости: квадрат 2×2, Г-образная, Т-образная и четвёртый вариант изогнутости). Тогда, в связи с увеличением численности армий и размера поля, можно увеличить количество мин (например, до трёх) и добавить в игру минный тральщик (скажем, один у каждого игрока). Минный тральщик обозначается равнобедренным треугольничком, вписанным в одну клетку, так, что основание равнобедренного треугольника совпадает с нижней стороной клетки, а противоположная основанию вершина лежит на верхней стороне клетки, деля верхнюю сторону пополам.

Фантазия не имеет границ.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: 1 [2] 3  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines