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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2012, 13:39   #1
Nikitos_
Пользователь
 
Регистрация: 30.05.2012
Сообщений: 32
Восклицание Сделать, чтобы пустой квадрат был в нижнем правом углу (игра пятнашки)

Как сделать чтобы пустой квадрат был в нижнем правом углу(игра пятнашки) а то он у меня как и все чила рондомом появляется
Код:
Program fift;
uses crt,graph;
const
n=4;
type mas=array[1..n,1..n] of integer;

VAR gm,gd,ch,vx,vy,l:integer;
a:mas;

procedure  zastavka;
 begin
 end;
procedure kvadrat(x,y,c,k:integer) ;
var i,j:integer;
begin
for i:=0 to k-1 do
for j:=0 to k-1 do
rectangle(x+i*c,y+j*c,x+i*c+c,y+j*c+c);
end;



procedure massiv;
var
i,j,k: integer;
s: set of byte;
begin
s:=[];
randomize;
for i:=1 to n do   begin
for j:=1 to n do begin
repeat
k:=random(16)+1;
until not (k in s );
a[i,j]:=k; s:=s+[k];

end ;

end;
end;

procedure odin (x,y,h:integer);
var i,j,d:integer;
ds:string;
begin
for i:=0 to 4-1 do
for j:=0 to 4-1   do    begin
d:=a[i+1,j+1];
str(d,ds);
if d<>16 then
outtextXY (x+h div 2+h*j,y+h div 2+h*i, ds);
end;

end;
BEGIN
gd:=detect;
Initgraph(gm,gd,'C:\TP7.1\TP\BGI');
vx:=180;
vy:=100;
l:=60;
ch:=4;
massiv;
kvadrat(vx,vy,l,ch);
odin(vx,vy,l) ;
outtext('exit "enter"');
readln;
end.
Nikitos_ вне форума Ответить с цитированием
Старый 02.06.2012, 14:00   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Начнем с того, что у Вас реализован неоптимальный алгоритм заполнения игрового поля.
Обычно сначала заполняют массив числами по порядку, а затем при помощи ДПСЧ перемешивают. В этом случае при перемешивании просто нужно исключить из перемешивания пустую ячейку.
Если не хочется переделывать программу, то можно оставить и Ваш алгоритм, исключив из него ячейку, которую предполагается оставить пустой и число, соответствующее пустой ячейке.

Кстати, хороший тон требует откомментировать программу прежде, чем размещать ее на форуме, а также сообщить необходимые детали реализации. Например, какое число соответствует пустой ячейке.
s-andriano вне форума Ответить с цитированием
Старый 02.06.2012, 14:53   #3
Nikitos_
Пользователь
 
Регистрация: 30.05.2012
Сообщений: 32
По умолчанию

дак ты сможешь помочь?
Nikitos_ вне форума Ответить с цитированием
Старый 02.06.2012, 17:21   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А разве я еще не помог?
s-andriano вне форума Ответить с цитированием
Старый 02.06.2012, 17:48   #5
Nikitos_
Пользователь
 
Регистрация: 30.05.2012
Сообщений: 32
По умолчанию

ну сможешь написать сам код?
Nikitos_ вне форума Ответить с цитированием
Старый 02.06.2012, 21:28   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Могу.
Но тогда это уже не будет помощью.

Кстати, в своем первом ответе я высказал некоторые пожелания существенные для продуктивного обсуждения темы. Но, похоже, они проигнорированы.
s-andriano вне форума Ответить с цитированием
Старый 02.06.2012, 23:34   #7
Nikitos_
Пользователь
 
Регистрация: 30.05.2012
Сообщений: 32
По умолчанию

Код:
Program fift;
uses crt,graph;
const
n=4;
type mas=array[1..n,1..n] of integer;

VAR gm,gd,ch,vx,vy,l:integer;
a:mas;

procedure  zastavka;
 begin
 end;
procedure kvadrat(x,y,c,k:integer) {рисует таблицу 4 на 4}
var i,j:integer;
begin
for i:=0 to k-1 do
for j:=0 to k-1 do
rectangle(x+i*c,y+j*c,x+i*c+c,y+j*c+c);
end;



procedure massiv;{числа от 1 до 16 рондомом}
var
i,j,k: integer;
s: set of byte;
begin
s:=[];
randomize;
for i:=1 to n do   begin
for j:=1 to n do begin
repeat
k:=random(16)+1;
until not (k in s );
a[i,j]:=k; s:=s+[k];

end ;

end;
end;

procedure odin (x,y,h:integer);{числа рондомом заполняются в таблицу}
var i,j,d:integer;
ds:string;
begin
for i:=0 to 4-1 do
for j:=0 to 4-1   do    begin
d:=a[i+1,j+1];
str(d,ds);
if d<>16 then{не выводить 16, тоесть это и есть пустой квадрат}
outtextXY (x+h div 2+h*j,y+h div 2+h*i, ds);
end;

end;
BEGIN
gd:=detect;
Initgraph(gm,gd,'C:\TP7.1\TP\BGI');
vx:=180;
vy:=100;
l:=60;
ch:=4;
massiv;
kvadrat(vx,vy,l,ch);
odin(vx,vy,l) ;
outtext('exit "enter"');
readln;
end.
Nikitos_ вне форума Ответить с цитированием
Старый 02.06.2012, 23:49   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Код:
var a0 : array[0..15]of integer absolute a; // для наглядности делаем массив одномерным
begin
  for i := 0 to 15 do // заполняем ячейки костяшками
    a0[i] := i+1; // хотя лично мне кажется более логичным обозначать пустое место 0
  for i := 0 to 14 do begin // перемешиваем костяшки, не трогая последнюю ячейку
    j := random(15);
    tmp := a0[j];
    a0[j] := a0[i];
    a0[i] := tmp;
  end;
s-andriano вне форума Ответить с цитированием
Старый 03.06.2012, 00:30   #9
Nikitos_
Пользователь
 
Регистрация: 30.05.2012
Сообщений: 32
По умолчанию

мне то нужен двумерный массив, если можете то изменяйте в моей программе
Nikitos_ вне форума Ответить с цитированием
Старый 03.06.2012, 09:22   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

1. Посмотрите внимательно мой код. Он подходит для случая, когда массив a двумерный.
2. Если хочется производить манипуляции с самим массивом a, а не с его псевдонимом, вычисляйте индексы.
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
печать в нижнем левом углу Ципихович Эндрю Microsoft Office Word 11 25.12.2011 13:29
открытие окна в правом нижнем углу ВалекFCRK Общие вопросы Delphi 4 12.10.2011 19:23
Разместить элемент в правом нижнем углу anGeee HTML и CSS 3 02.05.2011 17:07
в браузере при выходе в интернет в правом углу появляется порнушная реклама, Как избавиться? Студент3000 Свободное общение 20 02.05.2009 00:54
Транспонировать квадрат,в нижнем левом углу которого находится минимальный элемент zidan671 Помощь студентам 14 13.03.2009 22:05