Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Шашечная партия (http://forum.oszone.net/showthread.php?t=139125)

.::.DIMA.::. 02-05-2009 01:23 1108933

Шашечная партия
 
решено

pva 04-05-2009 06:54 1110153

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

pva 05-05-2009 07:24 1110954

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

pva 05-05-2009 11:57 1111123

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

pva 07-05-2009 08:13 1112566

Код:

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]);
    }
  }

  ...
}


pva 08-05-2009 07:17 1113466

попробуй в файле 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 одинаковые)

pva 12-05-2009 06:56 1115975

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

pva 13-05-2009 06:54 1117026

Цитата:

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

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

pva 14-05-2009 07:15 1117921

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


Время: 03:27.

Время: 03:27.
© OSzone.net 2001-