![]() |
![]() |
Zveruga |
![]()
Сообщение
#1
|
|||
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
Привет, Всем
![]() Пытаюсь написать игру ханойские башни для сдачи курсовой (заочник) ![]() ![]() Алгоритм такой: Все пастроенно на массиве N строк и 3 столбца, далее этот массив заполняется так: 1 0 0 2 0 0 ....... N 0 0 далее нажатиями клавиш я перезаполняю массив по принципу ханойской башни. В результате добавлю гафическое отображение всех этих действий. диски будут привязаны к элементам массива, строкам и столбцам. Вообщем пока не доработанно из за ожного сбоя. Внимание вопрос: ![]() вот исходник алгоритма заполнения матрици.
uses crt;
var
hb:array[1..9,1..3] of integer;
stop:boolean;
key:char;
i,j,n,m,k,l,a:integer;
begin
clrscr;
write('vvedite chislo diskov ');
readln(m);
{writeln;}
l:=1;
k:=1;
n:=3;
a:=0;
for i:=1 to m do
begin
for j:=1 to n do
begin
hb[i,j]:=k;
write(hb[i,j]:3);
k:=0;
end;
l:=l+1;
k:=k+l;
writeln;
end;
writeln;
{readkey;}
writeln;
stop:=false;
while stop=false do
begin
if keypressed then
key:=readkey;
if (key='q') or (key='Q') then stop:=true;
if (key='1') then j:=1;
if (key='2') then j:=2;
if (key='3') then j:=3;
{принажамтии клавиши вверх "а" присваевается знаяение элемента матрици
вот тут то и проблема, привыборе второго столбца, в нем все элементы "0",
"а" присваевается значение 10, привыборе третьего столбца "а" присваевается
значение 3 откуда эти значения беруться я вообще понять не могу
помогите пожалуйста разобраться в принципе из за этого графическое
представление всего этого действия и остановилось}
if (ord(key)=72) then
begin
i:=0;
repeat
begin
i:=i+1;
a:=hb[i,j];
end;
until hb[i,j]>0;
hb[i,j]:=0;
end;
if (ord(key)=80) then
begin
i:=0;
repeat
begin
i:=i+1;
end;
until (hb[i,j]>0) or (i=m);
if hb[i,j]=0 then
begin
hb[i,j]:=a;
a:=0;
end
else
begin
if (a>=hb[i,j]) or (a=0) then writeln('NO') else
begin
i:=i-1;
hb[i,j]:=a;
a:=0;
end;
end;
end;
if (ord(key)=13) then
begin
for i:=1 to m do
begin
for j:=1 to n do
begin
write(hb[i,j]:3);
end;
writeln;
end;
writeln(a);
end;
key:=readkey;
end;
end.
Как сделю все полностью закончу вывложу полный исходник может кому пригодится ![]()
|
|||
![]() ![]() |
Zveruga |
![]()
Сообщение
#2
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
Спасибо за ответы
![]() Все замечания учел ![]() ![]() По поводу case, я так понял этот оператор можно использовать только для значищих клавиш на клавиатуре, а для клавиш управления его использовать нельзя. Работаю дальше над программой ![]() З.Ы. Прошу прощения за долгие ответы. Из за разници во времяни не могу быстро отвечать. |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
а для клавиш управления его использовать нельзя Почему же? Вот, например, самый простой вариант обработчика нажатий клавиш..if KeyPressed then begin
c:=ReadKey;
case c of
#0: begin
c:=ReadKey;
case c of
#71: {Home};
#72: {Up};
#73: {PgUp};
#75: {Left};
#77: {Right};
#79: {End};
#80: {Down};
#72: {PgDn};
#59: {F1};
else {wrong key};
end
end;
#27: {Esc};
#13: {Enter};
' ': {Space};
'q','Q': {Quit};
's','S': {Save};
{...something else...}
else {wrong key};
end
end;
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 0:47 |