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

> Попытка написать игру ханойские башни
Zveruga
сообщение 20.11.2007 3:48
Сообщение #1





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

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


Привет, Всем smile.gif
Пытаюсь написать игру ханойские башни для сдачи курсовой (заочник) sad.gif знаний пока не хватает, но тем что есть пытаюсь воспользоваться smile.gif

Алгоритм такой:
Все пастроенно на массиве N строк и 3 столбца, далее этот массив заполняется так:
1 0 0
2 0 0
.......
N 0 0

далее нажатиями клавиш я перезаполняю массив по принципу ханойской башни. В результате добавлю гафическое отображение всех этих действий.
диски будут привязаны к элементам массива, строкам и столбцам. Вообщем пока не доработанно из за ожного сбоя.
Внимание вопрос: smile.gif

вот исходник алгоритма заполнения матрици.

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.


Как сделю все полностью закончу вывложу полный исходник может кому пригодится wink.gif

М
При выкладывании кода, пожалуйста, используй теги. Лопарь

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Zveruga
сообщение 21.11.2007 3:23
Сообщение #2





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

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


Спасибо за ответы smile.gif
Все замечания учел smile.gif Вроде стало получаться. Действительно промаргал момент в цикле выбора значения при нажатии клавиши вверх sad.gif
По поводу case, я так понял этот оператор можно использовать только для значищих клавиш на клавиатуре, а для клавиш управления его использовать нельзя.
Работаю дальше над программой smile.gif

З.Ы. Прошу прощения за долгие ответы. Из за разници во времяни не могу быстро отвечать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 21.11.2007 5:12
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Zveruga @ 21.11.2007 3:23) *
а для клавиш управления его использовать нельзя
Почему же? Вот, например, самый простой вариант обработчика нажатий клавиш..
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;


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 

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