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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2010, 17:07   #1
Warfvare
Пользователь
 
Регистрация: 17.06.2010
Сообщений: 33
По умолчанию Пасьянс prisoner!

У меня курсач на тему пасьянс присонер! Думал скачаю из интернета любой исходник и переделаю но не тут уж было разобратся там ни в чем несмог! Решил делать сам. Вывел карты а дальше че делать невъежяю! Да и вывод карт - мне сказали что у меня "какой-то корявый". Посмотрите пожалуйста чем сможете помогите очень буду благодарен! Хотябы намекните что и в какой последовательности делать? Заранее огромное спасибо!

Вот собственно и правило игры:

Колода тщательно тасуется, снимается и выкладываются открытыми 2 ряда из 9 карт. Следующие 3 карты по одной выкладываются сверху тоже картинкой вверх. Если в нижних рядах встретятся карты того же достоинства, что и средняя карта верхнего ряда, то их снимают и кладут только на среднюю карту. Так, например, если средняя карта верхнего ряда - девятка, то на нее необходимо положить все девятки из двух нижних рядов. После этого (в том случае, если на среднюю карту положить нечего) открываются по одной следующие 3 карты из колоды и вновь собирают на среднюю карту карты того же достоинства нижних рядов. Колода раскладывается 2 раза. Пасьянс сошелся, если все 9 карт удалось переложить указанным порядком на средние карты верхнего ряда.

Если вопрос сформулирован неправильно или вызывает у тебя "нервоЗ" прошу сильно неругать т.к на форуме я собственно недавно!

карты на форме должны распологаются так:
****
****
****
****
колода
**** **** ****
**** **** ****
**** **** ****
**** **** ****

**** **** **** **** ****
**** **** **** **** ****
**** **** **** **** ****
**** **** **** **** ****

**** **** **** ****
**** **** **** ****
**** **** **** ****
**** **** **** ****
карты лежат в папке Card с раширением bmp а вот и номера карт:
Крести:
туз - 1
2-ка - 2
4-ка - 4
5-ка - 5
6-ка - 6
7-ка - 7
8-ка - 8
9-ка - 9
10-ка - 10
валет - 11
дама - 12
король- 13

буби:
туз - 14
2-ка - 15
3-ка - 16
4-ка - 17
5-ка - 18
6-ка - 19
7-ка - 20
8-ка - 21
9-ка - 22
10-ка - 23
валет - 24
дама - 25
король- 26

черви:
туз -27
2-ка - 28
3-ка - 29
4-ка - 30
5-ка - 31
6-ка - 32
7-ка - 33
8-ка - 34
9-ка - 35
10-ка - 36
валет - 37
дама - 38
король- 39

пики:
туз - 40
2-ка - 41
3-ка - 42
4-ка - 43
5-ка - 44
6-ка - 45
7-ка - 46
8-ка - 47
9-ка - 48
10-ка - 49
валет - 50
дама - 51
король- 52

А вот и код вывода карт а дальше что делать непредставляю.

Код:
var
  Form1: TForm1;
  koloda,card:TBitmap;
  i,j,kx,ky,cn,cx,cy,CardType:integer;
  CardInPyramid:String;

implementation

{$R *.dfm}

procedure TForm1.N1Click(Sender: TObject);
begin

//Рисование колоды------------------
koloda:=TBitmap.Create;
koloda.LoadFromFile('cover\66.bmp');        // картинка колоды
kx:=20;
ky:=20;
form1.Canvas.Draw(kx,ky,koloda);
//----------------------------------
//Исходные карты--------------------

//выводим первую строчку карт их три карты 
    cy:=50;
    cx:=500;
    for j:=1 to 3 do
    begin
      randomize;
      //------------------------
        repeat  // перебирать карты чтобы небыло одинаковых
        CardType:=Random(52)+1;
        until pos(IntToStr(CardType),CardInPyramid)=0;
      //------------------------
      card:=Tbitmap.Create;
      card.LoadFromFile('card\'+IntToStr(CardType)+'.bmp');
      form1.Canvas.Draw(cx,cy,card);
      cx:=cx-90;
     
    end;
//выводим вторую строчку карт их пять карт
  cy:=180;
  cx:=600;
  for j:=1 to 5 do
    begin
      randomize;
      //------------------------
        repeat  //перебирать карты чтобы небыло одинаковых
        CardType:=Random(52)+1;
        until pos(IntToStr(CardType),CardInPyramid)=0;
      //------------------------
      card:=Tbitmap.Create;
      card.LoadFromFile('card\'+IntToStr(CardType)+'.bmp');
      form1.Canvas.Draw(cx,cy,card);
      cx:=cx-90;
       end;

//выводим третью строчку карт их четыре карты 
  cy:=300;
  cx:=550;
  for j:=1 to 4 do
    begin
      randomize;
      //------------------------
        repeat  //перебирать карты чтобы небыло одинаковых
        CardType:=Random(52)+1;
        until pos(IntToStr(CardType),CardInPyramid)=0;
      //------------------------
      card:=Tbitmap.Create;
      card.LoadFromFile('card\'+IntToStr(CardType)+'.bmp');
      form1.Canvas.Draw(cx,cy,card);
      cx:=cx-90;
    end;

  end;
//----------------------------------
end.

Последний раз редактировалось Stilet; 25.06.2010 в 08:21.
Warfvare вне форума Ответить с цитированием
Старый 25.06.2010, 03:33   #2
Warfvare
Пользователь
 
Регистрация: 17.06.2010
Сообщений: 33
По умолчанию

Теперь вроде нужно сделать так в конце каждого цикла:

CardInPyramid:=CardInPyramid+IntToS tr(CardType)+' ';//сохранение номеров карт в пирамиде

а дальше надо как то захватить карту и тащить ее ....

Последний раз редактировалось Warfvare; 25.06.2010 в 03:48.
Warfvare вне форума Ответить с цитированием
Старый 25.06.2010, 07:07   #3
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Ну я бы сделал карту отдельным элементом у которого есть характеристики: что это за карта(туз пики скажем), ее координаты, и фокус.
При нажатии на карту(сравниваем координаты карт и координаты мышки) и если мышка нажата то фокус правда и если фокус правда то меняем координаты карты в соответствии с мышкой...
кнопка отпущена, то фокус фальшь(перестаем двигать)
dampirik вне форума Ответить с цитированием
Старый 25.06.2010, 07:43   #4
Warfvare
Пользователь
 
Регистрация: 17.06.2010
Сообщений: 33
По умолчанию

Это что мне надо было катрты через компонент image выводить?

Цитата:
Сообщение от dampirik Посмотреть сообщение
Ну я бы сделал карту отдельным элементом у которого есть характеристики: что это за карта(туз пики скажем), ее координаты, и фокус.
При нажатии на карту(сравниваем координаты карт и координаты мышки) и если мышка нажата то фокус правда и если фокус правда то меняем координаты карты в соответствии с мышкой...
кнопка отпущена, то фокус фальшь(перестаем двигать)
Координаты мышки вроде находятся так но в какую переменную мне эти координаты запомнить в данном случае у меня прога незапускается ошбка! помойму дело тут в типе переменной kursor? Подскажите пожалуйсто! Или я вообще тут чето прогнал?

Код:
procedure tForm1.Button1Click(Sender: TObject);
var
  foo: TPoint;
  kursor:integer;
begin
  GetCursorPos(foo);
   kursor:=((  IntToStr(foo.X) + IntToStr(foo.Y)  );
end;

Последний раз редактировалось Stilet; 25.06.2010 в 08:51.
Warfvare вне форума Ответить с цитированием
Старый 25.06.2010, 08:27   #5
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Ну у меня это выглядело как-то так:
карта
Код:
public class karta
{
    public bool fockus = false;
    public Rectangle pozition = new Rectangle(0, 0, 0, 0);
    Texture2D imgKarta;
    public karta()
    {
    }
    public void Load(ContentManager content, string img)
    {
        imgKarta = content.Load<Texture2D>(img);
    }
    public void Update()
    {
    }
    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(imgKarta, pozition, Color.White);
    }
}
движение:
Код:
MouseState m_State = Mouse.GetState();
if (m_State.X > pozition.X && m_State.X < pozition.X + pozition.Width &&
                m_State.Y > pozition.Y && m_State.Y < pozition.Y + pozition.Height&&m_State.LeftButton == ButtonState.Pressed && m_lastState.LeftButton != ButtonState.Pressed)
            {
                    fockus = true;
            }
            else
            {
fockus = false;
}
if(fockus)
{
    pozition.Offset(m_State-lastState);
}
m_lastState = m_State;
dampirik вне форума Ответить с цитированием
Старый 25.06.2010, 08:40   #6
Warfvare
Пользователь
 
Регистрация: 17.06.2010
Сообщений: 33
По умолчанию

а это Delphi? чет я тут неразберусь!


Что касается параметовы курсора я вроде нашел

procedure TForm1.FormClick(Sender: TObject);
var
MyMouse: TMouse;
begin
Form1.Caption := inttostr(MyMouse.CursorPos.x)+
inttostr(MyMouse.CursorPos.y);
end;

а что дальше может поподробнее раскажете а то я в програмировании не очень!

Последний раз редактировалось Warfvare; 25.06.2010 в 09:39.
Warfvare вне форума Ответить с цитированием
Старый 25.06.2010, 23:37   #7
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Нет это не делфи) C# + XNA
Но я думаю в делфи можно чтото подобное организовать...
Цитата:
а что дальше может поподробнее раскажете а то я в програмировании не очень!
Я делфи не изучал....чтобы код дать...но идейку дал(см. выше)
dampirik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Курсовой проект tatishka Помощь студентам 1 19.01.2011 10:33
Задание на курсовой проект Siluet Помощь студентам 0 31.05.2010 22:03
Курсовой проект (антивирус) Kazik Помощь студентам 0 29.05.2010 23:32
Курсовой проект по Delphi 7 Agent[PNZ] Помощь студентам 9 14.11.2008 13:25
Нужен курсовой проект фамил Помощь студентам 2 13.05.2008 17:58