Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MFC - Шашечная партия

Ответить
Настройки темы
MFC - Шашечная партия

Новый участник


Сообщения: 21
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: .::.DIMA.::.
Дата: 16-03-2013
решено

Отправлено: 01:23, 02-05-2009

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Ея бы посоветовал сделать не так:
1. хранить не координаты фигур, а доску 8x8 с элементами: белый, чёрный или пустой.
2. отрисовывать шашки копированием картинки. В рисовании поможет ImageList из 2-х картинок. Доску так же можно отображать картинкой. Если дома есть шахматная доска и шашки, можно сфоткать картинки хоть на сотовый телефон.
Функция floodFill на мой взгляд вообще сомнительна для применения. Она выполняет заливку кистью, а не цветом. Вместо неё лучше использовать заливку региона (FillRgn), а регион отрисовать нужной формы
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:54, 04-05-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


может в синтаксисе? а можно файлы *.h и список ошибок?

Отправлено: 07:24, 05-05-2009 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


а ошибки, которые компилятор выдаёт?

Отправлено: 11:57, 05-05-2009 | #4

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
class Chess
{
public:
	void Chess::SetCoordinates (int x, int y, int color, CPaintDC & dc)
	{
		itsX1 = x - 25;
		itsX2 = x + 25;
		itsY1 = y - 25;
		itsY2 = y + 25;
		itsColor = color;
		Paint (itsColor, dc);
	}
	
      ...
}
Chess:: здесь лишнее (возможно на это и ругается)

Создание кисти - довольно трудоёмкий процесс, я бы рекомендовал держать 2 кисти одновременно (чёрную и белую) на всю отрисовку:
Код: Выделить весь код
class CChildView { CBrush brBlack, brWhite; ... };

CChildView::fPen(...)
{
  ...

  // кисти реально хранятся всё время существования CChildView
  // делаем индексированный массив и индекс, который будет постоянно меняться
  // операцией xor.
  CBrush* brush_set[2] = {&brBlack, &brWhite};
  unsigned brush_n = 0;
  // но можно было бы сделать хитрее: посчитать сколько будет
  // addr_xor = reinterpret_cast<unsigned>(&brBlack) ^ reinterpret_cast<unsigned>(&brWhite);
  // а потом в цикле addr_brush ^= addr_xor
  // это бы съэкономило около 30 байт памяти и 4 тактов процессора, но запутало бы код.

  CRect  draw_area(31, 31, 31+8*50, 31+8*50);  // диапазон доски, полезно иметь вообще
  CRect  rect; // клетка, которую будем в цикле перемещать

  for(rect.bottom=draw_area.top; rect.bottom<draw_area.bottom; brush_n^=1)
  {
    rect.top = rect.bottom;
    rect.bottom += 50;

    for(rect.right=draw_area.left; rect.right<draw_area.right;  brush_n^=1)
    {
      rect.left = rect.right;
      rect.right += 50;
      dc.FillRect (rect, brush_set[brush_n]);
    }
  }

  ...
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:13, 07-05-2009 | #5

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


попробуй в файле CChess.h после #pragma once вставить #include <mfc.h>
Возможно не собирает из-за того, что cchess.h ни на что не ссылается, поэтому компилится первым, но содержит void SetCoordinates (int x, int y, int color, CPaintDC & dc), причём CPaintDC на этот момент неизвестен.
Цитата .::.DIMA.::.:
много кисть занимает места, сколько памяти уходит на создание кисти »
Просто так будет один раз в жизни создано 2 кисти, которые займут байт 200 памяти, вместо того, чтобы создавать 64 кисти на каждый цикл прорисовки (из них по 32 одинаковые)

Отправлено: 07:17, 08-05-2009 | #6

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


а, значит afx.h. короче тот, который у них самый главный, в котором всё описано

Отправлено: 06:56, 12-05-2009 | #7

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата pva:
а, значит afx.h. короче тот, который у них самый главный, в котором всё описано »
В общем этим главным файлом оказался "afxwin.h". Его нужно подключить раньше всех, во все файлы (для надёжности). После этого (и после замены &class::mem_fun на class::mem_fun, dc.TextOutW на dc.TextOut и L".." на ".." - необходимо чтоб собралось в ансишной библиотеке билдером) всё удачно скомпилировалось при помощи Borland C++ Builder. Всё же я считаю проблема в недостяющих инклюдах.

Отправлено: 06:54, 13-05-2009 | #8

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


попробуй собрать другим компилятором, может ошибки перефразирует на более понятном языке. А если всё-же соберёт (как у меня получилось) - то проблема скорее всего в компиляторе и его библиотеках. Возможно к слишком новому компилятору забыли подточить слишком старую библиотеку. Такое было с билдером 4, когда не собирался пример кода STL из его же хелпа.

Отправлено: 07:15, 14-05-2009 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MFC - Шашечная партия

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено




 
Переход