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

  • Автор темы Автор темы Guest
  • Дата начала Дата начала
G

Guest

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

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

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

Код:
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 для ввода.
 
Пробовала. Но может подскажете, как правильно им пользоваться? я делаю так:
Код:
public ArrayList knumber = new ArrayList();
public ArrayList kletter = new ArrayList();

потом в условиях добавляю туда элементы.
теперь как их эти ArrayList вывести?

Код:
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'
 
Для: госик
Необходимо делать кастинг типов:
((name of your type)kletter).Drawing(e, xbaseOffset, ybaseOffset);
 
теперь делаю так:

Код:
for (int i = 0; i<kletter.Count; i++)
(KLetter)kletter[i].Drawing(e, xbaseOffset, ybaseOffset);

ошибка такая:'object' does not contain a definition for 'Drawing'
 
Так про скобочки поняла, только теперь ничего не рисуется. Привожу пример, не судите строго впервые программирую на Сишарп и в визуале, да и программист я плохой

Код:
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 (который создается автоматически):

Код:
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);
}
Названия функций придется переделывать потом, наверное.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!