Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Крестики

Автор: btr86 23.05.2004 19:38

Ребята ну хотя бы с крестиками помогите:
Игра крестики - нолики: Сделать так чтобы при нажатии ALT поле смещалось в другое место. Вместе со всеми ходами которые были сделаны и при этом продолжать играть на новом месте(старый экран затирается). Блин у меня не получается чтобы курсор вверх бегал...ПОМОГИТЕ:Вот исходник моей проги

Код
program krestiki_noliki;
uses
crt;
var
m:array[1..3,1..3] of char;
c,f1,f2:char;
f,e,w:boolean;
i,j,x,y:byte;
begin
while true do
begin
c:=#0;
f1:=#0;
f2:=#0;
e:=false;
w:=false;
f:=false;
for i:=1 to 3 do
for j:=1 to 3 do
m[i,j]:=#0;
clrscr;
writeln('Choose your destiny');
writeln('Krestiki(Enter X)');
writeln('Noliki(Enter O)');
writeln('Esc - Exit');
while (c=#0)or(c<>#27)and(c<>'x')and(c<>'X')and(c<>'o')and(c<>'O') do
begin
c:=readkey;
case c of
#27: exit;
'x','X': begin
f:=true;
f1:='X';
f2:='O';
end;
'o','O': begin
f:=false;
f1:='O';
f2:='X';
end;
end;
end;
clrscr;
writeln('ЪДДДВДДДВДДДї');
writeln('і і і і');
writeln('ГДДДЕДДДЕДДДґ');
writeln('і і і і');
writeln('ГДДДЕДДДЕДДДґ');
writeln('і і і і');
writeln('АДДДБДДДБДДДЩ');
gotoXY(3,2);
while e=false do
begin
if f=true then
begin
c:=readkey;
if c=#0 then
c:=readkey;
end
else
c:=#32;
case c of
#27: exit;
#32: begin
case whereX of
3: x:=1;
7: x:=2;
11: x:=3;
end;
case whereY of
2: y:=1;
4: y:=2;
6: y:=3;
end;
if m[x,y]=#0 then
begin
if (f=true)and(w=false)and(e=false) then
begin
write(f1);
gotoXY(whereX-1,whereY);
m[x,y]:=f1;
end;
if
(m[1,1]=f1)and(m[2,1]=f1)and(m[3,1]=f1)or
(m[1,2]=f1)and(m[2,2]=f1)and(m[3,2]=f1)or
(m[1,3]=f1)and(m[2,3]=f1)and(m[3,3]=f1)or
(m[1,1]=f1)and(m[1,2]=f1)and(m[1,3]=f1)or
(m[2,1]=f1)and(m[2,2]=f1)and(m[2,3]=f1)or
(m[3,1]=f1)and(m[3,2]=f1)and(m[3,3]=f1)or
(m[1,3]=f1)and(m[2,2]=f1)and(m[3,1]=f1)or
(m[1,1]=f1)and(m[2,2]=f1)and(m[3,3]=f1) then
begin
gotoXY(1,8);
writeln('Крестики выйграли');
readln;
w:=true;
e:=true;
end;
f:=true;
if (w=false)and(e=false) then
begin
while m[x,y]<>#0 do
begin
x:=1+random(3);
y:=1+random(3);
end;
case x of
1: gotoXY( 3,whereY);
2: gotoXY( 7,whereY);
3: gotoXY(11,whereY);
end;
case y of
1: gotoXY(whereX, 2);
2: gotoXY(whereX, 4);
3: gotoXY(whereX, 6);
end;
write(f2);
gotoXY(whereX-1,whereY);
m[x,y]:=f2;
if
(m[1,1]=f2)and(m[2,1]=f2)and(m[3,1]=f2)or
(m[1,2]=f2)and(m[2,2]=f2)and(m[3,2]=f2)or
(m[1,3]=f2)and(m[2,3]=f2)and(m[3,3]=f2)or
(m[1,1]=f2)and(m[1,2]=f2)and(m[1,3]=f2)or
(m[2,1]=f2)and(m[2,2]=f2)and(m[2,3]=f2)or
(m[3,1]=f2)and(m[3,2]=f2)and(m[3,3]=f2)or
(m[1,3]=f2)and(m[2,2]=f2)and(m[3,1]=f2)or
(m[1,1]=f2)and(m[2,2]=f2)and(m[3,3]=f2) then
begin
gotoXY(1,8);
writeln(Нолики - выйграли);
readln;
w:=true;
e:=true;
end;
end;
if
(w=false)and(e=false)and
(m[1,1]<>#0)and(m[2,1]<>#0)and(m[3,1]<>#0)and
(m[2,1]<>#0)and(m[2,2]<>#0)and(m[3,2]<>#0)and
(m[3,1]<>#0)and(m[2,3]<>#0)and(m[3,3]<>#0) then
begin
gotoXY(1,8);
writeln('­Ничья');
readln;
e:=true;
end;
end;
end;
#72: if (whereX<=11) and (whereY-2<=6) then
gotoXY(whereX,whereY-2);
#75: if (whereX-4<=11) and (whereY<=6) then
gotoXY(whereX-4,whereY);
#77: if (whereX+4<=11) and (whereY<=6) then
gotoXY(whereX+4,whereY);
#80: if (whereX<=11) and (whereY+2<=6) then
gotoXY(whereX,whereY+2);
end;
end;
end;
end.

Автор: Catty 23.05.2004 20:12

Когда прочитаешь внимательно правила раздела тогда поможем!! angry.gif

Автор: virt 23.05.2004 21:09

да мы и так поможем :

Код
program krestiki_noliki;
uses crt;
var m:array[1..3,1..3] of char;
   c,ch,f1,f2:char;
   f,e,w:boolean;
   i,j,x,y:byte;
   lx,ly:integer;

procedure outp;
var x,y:integer;
begin
  clrscr;
  gotoXY(lx,ly);
  writeln('ЪДДДВДДДВДДДї');gotoXY(lx,ly+1);
  writeln('і   і   і   і');gotoXY(lx,ly+2);
  writeln('ГДДДЕДДДЕДДДґ');gotoXY(lx,ly+3);
  writeln('і   і   і   і');gotoXY(lx,ly+4);
  writeln('ГДДДЕДДДЕДДДґ');gotoXY(lx,ly+5);
  writeln('і   і   і   і');gotoXY(lx,ly+6);
  writeln('АДДДБДДДБДДДЩ');
  for y:=1 to 3 do
  for x:=1 to 3 do
  begin
     case x of
      1: gotoXY(lx+2,whereY);
      2: gotoXY(lx+6,whereY);
      3: gotoXY(lx+10,whereY);
     end;
     case y of
      1: gotoXY(whereX,ly+1);
      2: gotoXY(whereX,ly+3);
      3: gotoXY(whereX,ly+5);
     end;
     if m[x,y]<>#0 then write(m[x,y]);
  end;
end;

begin
  lx:=1;ly:=1;
  while true do
  begin
     c:=#0;
     f1:=#0;
     f2:=#0;
     e:=false;
     w:=false;
     f:=false;
     for i:=1 to 3 do
        for j:=1 to 3 do
           m[i,j]:=#0;
     clrscr;
     writeln('Choose your destiny');
     writeln('Krestiki(Enter X)');
     writeln('Noliki(Enter O)');
     writeln('Esc - Exit');
     while (c=#0)or(c<>#27)and(c<>'x')and(c<>'X')and(c<>'o')and(c<>'O') do
        begin
           c:=readkey;
           case c of
            #27: exit;
            'x','X': begin
                        f:=true;
                        f1:='X';
                        f2:='O';
                     end;
            'o','O': begin
                        f:=false;
                        f1:='O';
                        f2:='X';
                     end;
           end;
        end;
clrscr;
writeln('ЪДДДВДДДВДДДї');
writeln('і   і   і   і');
writeln('ГДДДЕДДДЕДДДґ');
writeln('і   і   і   і');
writeln('ГДДДЕДДДЕДДДґ');
writeln('і   і   і   і');
writeln('АДДДБДДДБДДДЩ');
gotoXY(3,2);
  while e=false do
  begin
     if f=true then
     begin
        c:=readkey;
        if c=#0 then
        c:=readkey;
     end else
         c:=#32;
     case c of
      #27: exit;
      #32: begin
              case (whereX-lx+1) of
               3: x:=1;
               7: x:=2;
               11: x:=3;
              end;
              case (whereY-ly+1) of
               2: y:=1;
               4: y:=2;
               6: y:=3;
              end;
              if m[x,y]=#0 then
              begin
                 if (f=true)and(w=false)and(e=false) then
                 begin
                    write(f1);
                    gotoXY(whereX-1,whereY);
                    m[x,y]:=f1;
                 end;
                 if (m[1,1]=f1)and(m[2,1]=f1)and(m[3,1]=f1)or
                    (m[1,2]=f1)and(m[2,2]=f1)and(m[3,2]=f1)or
                    (m[1,3]=f1)and(m[2,3]=f1)and(m[3,3]=f1)or
                    (m[1,1]=f1)and(m[1,2]=f1)and(m[1,3]=f1)or
                    (m[2,1]=f1)and(m[2,2]=f1)and(m[2,3]=f1)or
                    (m[3,1]=f1)and(m[3,2]=f1)and(m[3,3]=f1)or
                    (m[1,3]=f1)and(m[2,2]=f1)and(m[3,1]=f1)or
                    (m[1,1]=f1)and(m[2,2]=f1)and(m[3,3]=f1) then
                       begin
                          gotoXY(1,30);
                          writeln('Крестики выйграли');
                          readln;
                          w:=true;
                          e:=true;
                       end;
                 f:=true;
                 if (w=false)and(e=false) then
                    begin
                       while m[x,y]<>#0 do
                       begin
                          x:=random(3)+1;
                          y:=random(3)+1;
                       end;
                       case x of
                        1: gotoXY(lx+2,whereY);
                        2: gotoXY(lx+6,whereY);
                        3: gotoXY(lx+10,whereY);
                       end;
                       case y of
                        1: gotoXY(whereX,ly+1);
                        2: gotoXY(whereX,ly+3);
                        3: gotoXY(whereX,ly+5);
                       end;
                       write(f2);
                       gotoXY(whereX-1,whereY);
                       m[x,y]:=f2;
                       if (m[1,1]=f2)and(m[2,1]=f2)and(m[3,1]=f2)or
                          (m[1,2]=f2)and(m[2,2]=f2)and(m[3,2]=f2)or
                          (m[1,3]=f2)and(m[2,3]=f2)and(m[3,3]=f2)or
                          (m[1,1]=f2)and(m[1,2]=f2)and(m[1,3]=f2)or
                          (m[2,1]=f2)and(m[2,2]=f2)and(m[2,3]=f2)or
                          (m[3,1]=f2)and(m[3,2]=f2)and(m[3,3]=f2)or
                          (m[1,3]=f2)and(m[2,2]=f2)and(m[3,1]=f2)or
                          (m[1,1]=f2)and(m[2,2]=f2)and(m[3,3]=f2) then
                             begin
                                gotoXY(1,30);
                                writeln('Нолики - выйграли');
                                readln;
                                w:=true;
                                e:=true;
                             end;
                    end;
                    if (w=false)and(e=false)and
                       (m[1,1]<>#0)and(m[2,1]<>#0)and(m[3,1]<>#0)and
                       (m[2,1]<>#0)and(m[2,2]<>#0)and(m[3,2]<>#0)and
                       (m[3,1]<>#0)and(m[2,3]<>#0)and(m[3,3]<>#0) then
                          begin
                             gotoXY(1,30);
                             writeln('Ничья');
                             readln;
                             e:=true;
                          end;
              end;
           end;
      #72: if whereY>ly+1 then gotoXY(whereX,whereY-2);
      #75: if whereX>lx+3 then gotoXY(whereX-4,whereY);
      #77: if whereX<lx+8 then gotoXY(whereX+4,whereY);
      #80: if whereY<ly+5 then gotoXY(whereX,whereY+2);
      'a','A':begin
                 ch:=readkey;
                 if ch=#0 then ch:=readkey;
                 while not (ch in ['a','A']) do
                 begin
                    case ch of
                     #72:if ly>1 then dec(ly);
                     #75:if lx>1 then dec(lx);
                     #77:if lx<60 then inc(lx);
                     #80:if ly<15 then inc(ly);
                    end;
                    outp;
                    ch:=readkey;
                    if ch=#0 then ch:=readkey;
                 end;
              end;
     end;
  end;
  end;
end.