IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Пасьянс, Randomize
Anastacia Adesso
сообщение 7.12.2006 12:28
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


И вот ещё такой вопрос.

Есть программа. Суть-Пасьянс Free Cell. Задача- всего лишь раскинуть карты перед началом игры.

Хмм эта всего лишь выдаёт карты (постоянно одинаковые), попросту записано в теле программы, что где стоит.

А как можно написать, чтоб всегда всё было разное?
То есть чтоб были реально только, наверное в массиве, карты. Рандомизировать.. Но, чтоб не было повторов карт..
Я wacko.gif

Прикрепленный файл  UZD5.PAS ( 1.89 килобайт ) Кол-во скачиваний: 337


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.12.2006 12:38
Сообщение #2


Гость






Ну, наверное,
for i:=2 to 14 do zn[i]:=i;
for j:=1 to 4 do m[j]:=j;

заменить на:
var
  X: byte;
  S: set of byte;
...

randomize;
S := [];
for i := 2 to 14 do begin
  repeat
    X := random(13) + 2;
  until not (X in S);

  S := S + [X];
  zn[i]:=X;
end;

S := [];
for i := 1 to 4 do begin
  repeat
    X := random(4) + 1;
  until not (X in S);

  S := S + [X];
  m[i]:=X;
end;

?
 К началу страницы 
+ Ответить 
Anastacia Adesso
сообщение 7.12.2006 12:48
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


Урррра!!
Заработало!!! rolleyes.gif lol.gif


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Anastacia Adesso
сообщение 7.12.2006 13:06
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


Только теперь вот трудность появилась с выводом этих карт.

Тот жуткий кусок просто не нужен получается


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.12.2006 13:37
Сообщение #5


Гость






Ты знаешь, я бы на твоем месте сделал что-то вот такого типа все-таки:
uses crt;


var
  cards: array[1 .. 52] of record
    z, m: byte;
  end;
  i,j: integer;


    procedure pech1(i:integer);
    begin
     case i of
       2..10:write(i:5);
       11:write('    J');
       12:write('    Q');
       13:write('    K');
       14:write('    A');
     end;
    end;

    procedure pech2(j:integer);
    begin
     case j of
       1:write(chr(3));
       2:write(chr(4));
       3:write(chr(5));
       4:write(chr(6));
     end;
    end;

    procedure pech(i,j:integer);
    begin
      pech1(i);
      pech2(j);
    end;

var
  X: byte;
  S: set of byte;
begin
clrscr;

for i := 1 to 52 do
  with cards[i] do begin
    z := (pred(i) mod 13) + 2;
    m := (pred(i) div 13) + 1;
  end;

s := [];
for i := 1 to 52 do begin

  repeat
    X := random(52) + 1;
  until not (X in S);
  s := S + [X];
  pech(cards[X].z, cards[X].m);
  if i mod 4  = 0 then writeln;

end;

end.
 К началу страницы 
+ Ответить 
Anastacia Adesso
сообщение 7.12.2006 16:05
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


Коротко, красиво...Но...

Почему-то у меня всё работает как надо (само расположение карт в два блока), только в случае когда я делаю подобный ужас

writeln('            0(1)                      0(13) ');writeln;
i:=0;
for i:=1 to 6 do begin  randomize;
pech(zn[13],m[2]);pech(zn[4],m[4]);pech(zn[11],m[3]);pech(zn[8],m[2]);
write('   ');
pech(zn[5],m[2]);pech(zn[13],m[4]);pech(zn[14],m[1]);pech(zn[3],m[4]);
writeln; writeln;   
end;
pech(zn[13],m[2]);pech(zn[4],m[4]);pech(zn[11],m[3]);pech(zn[8],m[2]);
write('   ');
readkey;
end.


Но это же грубо unsure.gif
При том что все столбики одинаковы


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.12.2006 16:25
Сообщение #7


Гость






Ты бы еще рассказала, КАКИМ образом ты выбираешь то, что должно быть в левом блоке, а каким - то, что должно быть в правом? Случайно? Зависимость левого от правого? Правого от левого?
 К началу страницы 
+ Ответить 
Anastacia Adesso
сообщение 7.12.2006 16:45
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


На самом деле это простая колода карт.
Разбросана один раз.
Например таким образом.
Прикрепленное изображение
Прикол в том,что надо визуально отделить эти два столба, естественно, чтоб все карты были разные


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.12.2006 16:52
Сообщение #9


Гость






Цикл вывода (в сообщении №5) чуть подправь:
...
s := [];
for i := 1 to 52 do begin

  repeat
    X := random(52) + 1;
  until not (X in S);
  s := S + [X];
  pech(cards[X].z, cards[X].m);

  if i mod 8  = 0 then writeln  { <--- Вот это добавить и ниже }
  else if i mod 4 = 0 then write('   ');

end;
...
 К началу страницы 
+ Ответить 
Anastacia Adesso
сообщение 7.12.2006 17:05
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


Урааааа!!!!
Теперь да, работает!!!
lol.gif yes2.gif


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 28.07.2025 8:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"