Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2007, 19:44   #1
Achtung-Partizanen
Пользователь
 
Аватар для Achtung-Partizanen
 
Регистрация: 04.05.2007
Сообщений: 14
По умолчанию Курсовая - пасьянс

Вот сегодня дали наконец задание на курсовую: в Делфе написать пасьянс. Пасьянсы у всех разные, по 1 на двоих. Если интересно, то мне достался Can-Can. Так вот, я прошу совета: как делать? Насколько я понял, есть два пути. Первый - это насоздавать энное количество динамических списков, и в процессе игры просто перемещать карты-записи из одного в другой, ну а на игровом поле рисовать карту в зависимости от того, на какой элемент указывает старт списка. Но в этом случае я понятия не имею, как сделать перетаскивание карт... Ну а второй - сразу создавать список из графических объектов. Но опять же я не знаю, как выполнить перетаскивание, и к тому же с динамическим списком из графических объектов в прошлый раз у меня как-то не заладилось...
Achtung-Partizanen вне форума Ответить с цитированием
Старый 19.09.2007, 19:51   #2
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Исользуйте image и пользуйтесь процедурами draganddrop и dragover- перетаскивание. Это легче чем заново все рисовать.
С записью примерно тоже самое.
bill вне форума Ответить с цитированием
Старый 19.09.2007, 23:47   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Лучше условно поделить код на логику и графику не зависящие друг от друга. В любой момент можно будет изменить графику не испортив всю программу.
Цитата:
Но в этом случае я понятия не имею, как сделать перетаскивание карт...
обрабатывая события мыши - Move, Down, Up.
держи пример
Вложения
Тип файла: rar drag_sample.rar (5.6 Кб, 63 просмотров)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 20.09.2007 в 00:20.
mutabor вне форума Ответить с цитированием
Старый 22.09.2007, 12:31   #4
Achtung-Partizanen
Пользователь
 
Аватар для Achtung-Partizanen
 
Регистрация: 04.05.2007
Сообщений: 14
По умолчанию

Тут еще какая-то фигня фозникла... Я даже список оформить не успел...
В разделе Type:
Цитата:
type
TForm1 = class(TForm)


ukz=^card;
card=record
{ color:[red,black];
colour:[tref,pik,cherv,buben];}
next:ukz;
end;}
private
{ Private declarations }
public
{ Public declarations }
end;
Вот между двумя выделенными символами зачем-то двоеточие просит...
Изображения
Тип файла: jpg Делфа_глюк.JPG (40.7 Кб, 160 просмотров)
Achtung-Partizanen вне форума Ответить с цитированием
Старый 22.09.2007, 12:44   #5
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

Просто поставь перед объявлением формы

type
ukz=^card;
card=record
{ color:[red,black];
colour:[tref,pik,cherv,buben];}
next:ukz;
end;
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
Until The End Of Time
Showy вне форума Ответить с цитированием
Старый 22.09.2007, 16:54   #6
Achtung-Partizanen
Пользователь
 
Аватар для Achtung-Partizanen
 
Регистрация: 04.05.2007
Сообщений: 14
По умолчанию

О, точно!
Спасибо! Пойду дальше писать
Achtung-Partizanen вне форума Ответить с цитированием
Старый 22.09.2007, 19:50   #7
Achtung-Partizanen
Пользователь
 
Аватар для Achtung-Partizanen
 
Регистрация: 04.05.2007
Сообщений: 14
По умолчанию

Опять проблема:
В строке if xcard=nullcard then continue; пишет: Incompatible types, хотя xcard и nullcard - объекты одного типа card - записи, при этом xcard'у присваивается значение элемента массива (того же типа), а у nullcard все поля пустые, я ее использую для случайного заполнения списков из массива (на место уже взятой карты ставится nullcard, и при следующем шаге цикла при попадании на nullcard шаг прерывается)
Achtung-Partizanen вне форума Ответить с цитированием
Старый 03.10.2007, 19:01   #8
Achtung-Partizanen
Пользователь
 
Аватар для Achtung-Partizanen
 
Регистрация: 04.05.2007
Сообщений: 14
По умолчанию

Забудьте пару моих предыдущих постов.

Вопрос: как реализовать стопки - списком лучше или массивом? Какие потребуются методы и как их описывать?
Вот часть кода (с классами ТКарта и ТКолода, сейчас пытаюсь реализовать ТСписок):
Код:
type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TCardNames = (CA,C2,C3,C4,C5,C6,C7,C8,C9,C10,CJ,CQ,CK); // номиналы
  TCardSuits = (Clubs,Spades,Diamonds,Hearts);            // масти (трефы, пики, бубны, червы)

const
  CardNamesCount = Ord(High(TCardNames))+1;       // количество карт в масти
  CardSuitsCount = Ord(High(TCardSuits))+1;       // количество мастей
  CardsCount     = CardNamesCount*CardSuitsCount; // количество карт в колоде

type
  TCard = class // тип данных для карты
  private
    FData : Integer; // идентификатор карты
    function GetName : TCardNames;
    function GetSuit : TCardSuits;
    function GetIsBlack : Boolean;
  public
    constructor Create(AData : Integer);
    property Name : TCardNames read GetName;    // возвращает номинал карты
    property Suit : TCardSuits read GetSuit;    // возвращает масть карты
    property IsBlack : Boolean read GetIsBlack; // возвращает true для черной карты
  end;

  TDeck = class // тип данных для колоды карт
  private
    FCards : array[0..(CardsCount-1)] of TCard; // массив карт
    function GetCards(Index : Integer) : TCard;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Shuffle;             // перемешивает колоду
    property Cards[Index : Integer] : TCard read GetCards; // возвращает карту, по порядковому номеру в колоде
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TCard }

constructor TCard.Create(AData : Integer);
begin
  FData:=AData;
end;

function TCard.GetName : TCardNames;
begin
  Result:=TCardNames(FData MOD CardNamesCount);
end;

function TCard.GetSuit : TCardSuits;
begin
  Result:=TCardSuits(FData DIV CardNamesCount);
end;

function TCard.GetIsBlack : Boolean;
begin
  Result:=(FData < (CardsCount DIV 2));
end;

{ TDeck }

constructor TDeck.Create;
var
  i : Integer;
begin
  for i:=0 to (CardsCount-1) do
    FCards[i]:=TCard.Create(i);
end;

destructor TDeck.Destroy;
var
  i : Integer;
begin
  for i:=0 to (CardsCount-1) do
    FCards[i].Free;
end;

function TDeck.GetCards(Index : Integer) : TCard;
begin
  Result:=FCards[Index];
end;

procedure TDeck.Shuffle;
var
  Rest : Integer; // количество еще не перемешанных карт
  i : Integer;
  Card : TCard;
begin
  Randomize;
  Rest:=CardsCount; // инициализируем суммарным количеством карт в колоде
  repeat
    i:=Random(Rest); // выбираем случайную карту из неперемешанных
    if i < (Rest-1)  // если это последняя карта из неперемешанных, то пропускаем
    then
      begin
      Card:=FCards[i]; // вытаскиваем выбранную карту
      Move(FCards[i+1],FCards[i],SizeOf(TCard)*(Rest-i-1)); // сдвигаем оставшиеся
      FCards[Rest-1]:=Card; // помещаем вытащенную карту после свдинутых
      end;
    Dec(Rest); // уменьшаем количество неперемешанных карт
  until Rest < 2; // если осталась последняя карта, выходим из цикла
end;
Класс списка пока предположительно выглядит вот так:
Код:

 TList = class //тип данных для списка
  type
   ukz=^zap;
   zap=record
    int: TCard;
    next: ukz;
   end;
  private

    function GetCards(Index : Integer) : TCard;
  public
   constructor Create;
   destructor Destroy; override;
   property Cards[Index : Integer] : TCard read GetCards;

 end;
Achtung-Partizanen вне форума Ответить с цитированием
Старый 04.10.2007, 01:40   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
TList = class //тип данных для списка
в Дельфи уже есть класс TList
Цитата:
Вопрос: как реализовать стопки - списком лучше или массивом?
не вижу разницы, список это тоже массив
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 04.10.2007, 07:58   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
не вижу разницы, список это тоже массив
если не видишь разницы, то учи мат. часть

А вот уважаемый автор вам виднее подойдет ли список и какой именно список или всеже массив нужен. Все зависит от того, что вы со стопками делать будете.
Допустим, если местами надо элементы менять, то массив ф топку
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Курсовая работа deadh5n1 Помощь студентам 3 05.11.2008 20:05
курсовая lacost Фриланс 2 03.06.2008 21:26
Курсовая. Файлы Sid maksim Паскаль, Turbo Pascal, PascalABC.NET 6 13.05.2008 20:19
help! курсовая Nurik Фриланс 2 02.04.2007 11:57