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

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

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

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


Пионер
**

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

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


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

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

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

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

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


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;

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


Пионер
**

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

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


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


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


Пионер
**

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

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


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

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


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






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


Пионер
**

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

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


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


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

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

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


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


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

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

 





- Текстовая версия 23.09.2020 10:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name