Установка слова в кроссворде

Тема в разделе ".NET", создана пользователем -, 14 апр 2007.

  1. Гость

    Итак, кроссворд нарисован, объектом является Rectangle (клетка кроссворда).

    Первый вопрос:

    Как сделать массив моих клеточек (элементов кроссворда), если эти объекты у меня создаются примерно так:

    Код (Text):
    if (array[i,j]>48 && array[i,j]<58){
    Number n = new Number (...);
    n.Drawing (...);  //рисуется клетка с цифрой
    }
    if (array[i,j]=='*'){
    Letter l = new Letter (...);
    l.Drawing (...); //клетка, в которой потом надо писать букву
    }
    в array хранится образ кроссворда.
    С учетом, что я работаю на 2003 вижале, т.е. например, в 2005 я просто могла бы создать шаблонный List, и вызывать ф-ию Add. А в 2003 как сделать?

    И второй вопрос:
    Как обработать событие MouseDown and MouseUp таким образом, чтобы в нужной клетке замигал курсор (типа для ввода буквы)? А то обычно все примеры сходятся к отрисовке каких-то линий и подобного. А блин еще привыкла c текстом работать в консоле в С++. Блин взял и написал сout для вывода и cin для ввода.
     
  2. Гость

    Пробовала. Но может подскажете, как правильно им пользоваться? я делаю так:
    Код (Text):
    public ArrayList knumber = new ArrayList();
    public ArrayList kletter = new ArrayList();
    потом в условиях добавляю туда элементы.
    теперь как их эти ArrayList вывести?

    Код (Text):
    int myFixedSize = (int)ArrayList.FixedSize( kletter );
    for (int i = 0; i<myFixedSize; i++)
    kletter[i].Drawing(e, xbaseOffset, ybaseOffset);
    ошибка про kletter, такая: 'object' does not contain a definition for 'Drawing'
    ну и конвертировать в int не может 'System.Collections.ArrayList'
     
  3. NikSoft

    NikSoft Гость

    Для: госик
    Необходимо делать кастинг типов:
    ((name of your type)kletter).Drawing(e, xbaseOffset, ybaseOffset);
     
  4. Гость

    теперь делаю так:

    Код (Text):
    for (int i = 0; i<kletter.Count; i++)
    (KLetter)kletter[i].Drawing(e, xbaseOffset, ybaseOffset);
    ошибка такая:'object' does not contain a definition for 'Drawing'
     
  5. Гость

    Так про скобочки поняла, только теперь ничего не рисуется. Привожу пример, не судите строго впервые программирую на Сишарп и в визуале, да и программист я плохой

    Код (Text):
    public class KNumber : System.Windows.Forms.Form
    {
    int number;
    int height, wight;
    Color clr;
    Pen pen;
    public KNumber (int height, int wight, Color clr, Pen pen)
    {
    this.height = height; this.wight = wight;
    this.clr = clr;
    this.pen = new Pen(clr, 0.5f);
    }
    public void Drawing(PaintEventArgs e, int xOffset, int yOffset, char num)
    {
    Graphics g = e.Graphics;
    Color color = Color.Green;
    Brush brush = new SolidBrush(color);
    Pen pen = new Pen(this.clr, 3f);
    g.FillRectangle(Brushes.Yellow, xOffset, yOffset, height, wight);
    g.DrawRectangle(pen, xOffset, yOffset, height, wight);
    g.DrawString((num).ToString(), new Font(Font, FontStyle.Bold), brush, xOffset + 10, yOffset + 10);
    }
    public class KLetter : System.Windows.Forms.Form
    {
    int height, wight;
    Color clr;
    Pen pen;
    public KLetter (int height, int wight, Color clr, Pen pen)
    {
    this.height = height;
    this.wight = wight;
    this.clr = clr;
    this.pen = new Pen(clr, 0.25f);
    }
    public void Drawing(PaintEventArgs e, int xOffset, int yOffset)
    {
    Graphics g = e.Graphics;
    Pen pen = new Pen(Color.Red, 0.5f);
    Pen line = new Pen(Color.Black, 10f);
    g.FillRectangle(Brushes.White, xOffset + 1, yOffset + 1, height, wight);
    g.DrawRectangle(pen, xOffset + 1, yOffset + 1, height, wight);
    }
    А в главном классе Form1 (который создается автоматически):

    Код (Text):
    protected override void OnPaint(PaintEventArgs e)
    {
    Pen fornumber = new Pen(Color.Blue, 0.5f);
    Pen penColor = new Pen(Color.Red, 0.5f);
    Pen penEmpty = new Pen(Color.White);
    int xbaseOffset = 20, ybaseOffset = 20;
    char num;
    for (int i = 0; i<n1; i++)
    {
    for (int j = 0; j<n2; j++)
    {
    if (j != (n2 - 1))
    {
    if (array[i,j]==' ')
    {
    xbaseOffset += 40;
    }
    if (array[i,j]=='*')
    {
    KLetter kl = new KLetter(40, 40, Color.Red, penColor);
    //          kl.Drawing(e, xbaseOffset, ybaseOffset);
    kletter.Add(kl);
    xbaseOffset += 40;
    }
    if (array[i,j]>48 && array[i,j]<58)
    {
    num = array[i,j];
    KNumber kn = new KNumber(40, 40, Color.Blue, fornumber);
    knumber.Add(kn);
    //          kn.Drawing(e, xbaseOffset, ybaseOffset, num);
    xbaseOffset += 40;                         
    }
    }
    if (j == (n2 - 1))
    {
    ybaseOffset += 40;
    xbaseOffset = 20;
    }
    }
    }
    base.OnPaint (e);
    }

    public void print (PaintEventArgs e, ArrayList kletter, ArrayList knumber, int xbaseOffset, int ybaseOffset, char num)
    {
    for (int i = 0; i<kletter.Count; i++)
    ((KLetter)kletter[i]).Drawing(e, xbaseOffset, ybaseOffset);
    for (int j = 0; j<knumber.Count; j++)
    ((KNumber)knumber[j]).Drawing(e, xbaseOffset, ybaseOffset, num);
    }
    Названия функций придется переделывать потом, наверное.
     
  6. Гость

    А все... вроде бы сделала.
     
Загрузка...
Похожие Темы - Установка слова кроссворде
  1. Zloikaktus
    Ответов:
    8
    Просмотров:
    71
  2. Serj100500
    Ответов:
    4
    Просмотров:
    64
  3. geliz
    Ответов:
    1
    Просмотров:
    697
  4. Vander
    Ответов:
    14
    Просмотров:
    2.562
  5. lionk
    Ответов:
    4
    Просмотров:
    758

Поделиться этой страницей