Часть 1
168
field[i, j] = rndN;
buf[rndN - 1]++;
}
nOpened = 0;
cOpened = 0;
this.drawField();
}
public Form1()
{
InitializeComponent();
try
{
// загружаем файл с картинками
pics = new Bitmap("pictures.bmp");
}
catch (Exception exc)
{
MessageBox.Show("Файл 'pictures.bmp' не найден.\n"
+
exc.ToString(), "Парные картинки",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
this.Close();
return;
}
// определяем размер картинки и устанавливаем
// размер клеток игрового поля
cw = (int)(pics.Width / np);
ch = pics.Height;
Примеры и задачи
169
// установить размер клиентской области формы
// в соответствии с размером картинок и их количеством
// (см. определения констант cw и ch)
this.ClientSize =
new System.Drawing.Size(nw * (cw + 2) + 1,
nh * (ch + 2) + 1 + menuStrip1.Height);
// рабочая графическая поверхность
g = this.CreateGraphics();
// создать объект timer1
timer1 = new Timer();
timer1.Tick +=
new System.EventHandler(this.timer1_Tick);
timer1.Interval = 200;
newGame();
}
// щелчок на игровом поле
private void Form1_MouseClick(object sender,
MouseEventArgs e)
{
{
int i,j; // индексы элемента массива fild,
// соответствующего клетке, в которой
// сделан щелчок
i = e.X / (cw +3);
j = (e.Y - menuStrip1.Height) / (ch+3);
// если таймер работает, это значит, что в данный
// момент открыты две клетки, в которых находятся
// одинаковые картинки, но они еще не "стерты".
Часть 1
170
// Если щелчок сделан в одной из этих картинок,
// то ничего делать не надо.
if ((timer1.Enabled) && (field[i,j] > 200))
{
return;
}
// щелчок на месте одной из двух уже найденных
// парных картинок
if (field[i, j] > 200) return;
// открытых клеток нет
if (cOpened == 0)
{
cOpened++;
// записываем координаты 1-й открытой клетки
open1[0] = i; open1[1] = j;
// клетка помечается как открытая
field[i, j] += 100;
// отрисовать клетку
this.cell(i, j);
return;
}
// открыта одна клетка, надо открыть вторую
if (cOpened == 1)
{
// записываем координаты 2-й открытой клетки
open2[0] = i; open2[1] = j;
Примеры и задачи
171
// если открыта одна клетка, и щелчок сделан
// в той же клетке, ничего не происходит
if ((open1[0] == open2[0]) &&
(open1[1] == open2[1]))
return;
else
{
// теперь открыты две клетки
cOpened++;
// клетка помечается как открытая
field[i, j] += 100;
// отрисовать клетку
this.cell(i, j);
// открыты 2 одинаковые картинки
if (field[open1[0], open1[1]] ==
field[open2[0], open2[1]])
{
nOpened++;
// пометим клетки как найденные
field[open1[0], open1[1]] += 100;
field[open2[0], open2[1]] += 100;
cOpened = 0;
// Запускаем таймер. Процедура обработки
// сигнала от таймера "сотрет" клетки
// с одинаковыми картинками
timer1.Enabled = true;
}
}
Do'stlaringiz bilan baham: |