首页 > 代码库 > Pascal小游戏 井字棋

Pascal小游戏 井字棋

一个很经典的井字棋游戏 Pascal源码Chaobs奉上

注意:1.有的FP版本不支持汉语,将会出现乱码。2.别想赢电脑了,平手不错了。

 

 

井字过三关:

program TicTacToe;

uses crt;

var

   a:Array [1..3] of Array [1..3] of char;

   b:Array [1..3] of Array [1..3] of integer;

   i,n,g,e,p:integer;

   t:text;

   c:char;

   o:integer;

   r:integer;

   s,h:integer;

   ch,cal,ek,ck,hc:integer;

   time:integer;

label xh,exit1;

begin

    randomize;

    clrscr;

    writeln(‘1‘,chr(179),‘2‘,chr(179),‘3‘);

    writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

    writeln(‘4‘,chr(179),‘5‘,chr(179),‘6‘);

    writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

    writeln(‘7‘,chr(179),‘8‘,chr(179),‘9‘);

    writeln(‘press enter‘);

    readln;

    xh:

    ek:=0;

    repeat

    repeat

    clrscr;

    if ek=1 then writeln(‘wrong‘);

    case b[1,1] of

    0:a[1,1]:=‘ ‘;

    1:a[1,1]:=‘o‘;

    2:a[1,1]:=‘x‘;

    end;

    case b[1,2] of

    0:a[1,2]:=‘ ‘;

    1:a[1,2]:=‘o‘;

    2:a[1,2]:=‘x‘;

    end;

    case b[1,3] of

    0:a[1,3]:=‘ ‘;

    1:a[1,3]:=‘o‘;

    2:a[1,3]:=‘x‘;

    end;

    case b[2,1] of

    0:a[2,1]:=‘ ‘;

    1:a[2,1]:=‘o‘;

    2:a[2,1]:=‘x‘;

    end;

    case b[2,2] of

    0:a[2,2]:=‘ ‘;

    1:a[2,2]:=‘o‘;

    2:a[2,2]:=‘x‘;

    end;

    case b[2,3] of

    0:a[2,3]:=‘ ‘;

    1:a[2,3]:=‘o‘;

    2:a[2,3]:=‘x‘;

    end;

    case b[3,1] of

    0:a[3,1]:=‘ ‘;

    1:a[3,1]:=‘o‘;

    2:a[3,1]:=‘x‘;

    end;

    case b[3,2] of

    0:a[3,2]:=‘ ‘;

    1:a[3,2]:=‘o‘;

    2:a[3,2]:=‘x‘;

    end;

    case b[3,3] of

    0:a[3,3]:=‘ ‘;

    1:a[3,3]:=‘o‘;

    2:a[3,3]:=‘x‘;

    end;

    writeln(a[1,1],chr(179),a[1,2],chr(179),a[1,3]);

    writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

    writeln(a[2,1],chr(179),a[2,2],chr(179),a[2,3]);

    writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

    writeln(a[3,1],chr(179),a[3,2],chr(179),a[3,3]);

    write(‘press location‘);

    c:=readkey;

    if c=‘e‘ then

   

begin

      ch:=3;

      goto exit1;

     end;

    o:=ord(c);

    p:=o-48;

    case p of

    1,2,3:g:=1;

    4,5,6:g:=2;

    7,8,9:g:=3;

    end;

    e:=o mod 3;

    if e=0 then e:=3;

    writeln;

    ek:=1;

    until ((c=‘0‘) or (c=‘1‘) or (c=‘2‘) or (c=‘3‘) or (c=‘4‘)

    or (c=‘5‘) or (c=‘6‘) or (c=‘7‘) or (c=‘8‘) or (c=‘9‘));

    until (a[g,e]<>‘x‘) and (a[g,e]<>‘o‘);

    time:=time+1;

    if c=‘1‘ then b[1,1]:=1;

    if c=‘2‘ then b[1,2]:=1;

    if c=‘3‘ then b[1,3]:=1;

    if c=‘4‘ then b[2,1]:=1;

    if c=‘5‘ then b[2,2]:=1;

    if c=‘6‘ then b[2,3]:=1;

    if c=‘7‘ then b[3,1]:=1;

    if c=‘8‘ then b[3,2]:=1;

    if c=‘9‘ then b[3,3]:=1;

    clrscr;

    for s:=1 to 3 do begin

     for h:=1 to 3 do begin

      if b[s,h]=1 then write(‘o‘);

      if b[s,h]=2 then write(‘x‘);

      if (b[s,h]<>1) and (b[s,h]<>2) then write(‘ ‘);

      if h<>3 then write(chr(179));

     end;

     writeln;

     if s<>3 then writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

    end;

    if ((b[1,2]=1) and (b[2,2]=1) and (b[3,2]=1))

    or ((b[1,1]=1) and (b[1,2]=1) and (b[1,3]=1))

    or ((b[2,1]=1) and (b[2,2]=1) and (b[2,3]=1))

    or ((b[3,1]=1) and (b[3,2]=1) and (b[3,3]=1))

    or ((b[1,1]=1) and (b[2,1]=1) and (b[3,1]=1))

    or ((b[1,3]=1) and (b[2,3]=1) and (b[3,3]=1))

    or ((b[1,1]=1) and (b[2,2]=1) and (b[3,3]=1))

    or ((b[1,3]=1) and (b[2,2]=1) and (b[3,1]=1))

    then begin ch:=1; goto exit1; end;

    cal:=0;

    for s:=1 to 3 do begin

     for h:=1 to 3 do begin

      if (b[s,h]=1) or (b[s,h]=2) then cal:=cal+1;

     end;

    end;

    if cal=9 then goto exit1;

    writeln(‘press enter‘);

    readln;

 

    repeat

    hc:=0;

    ck:=0;

    if (((b[1,2]=2) and (b[1,3]=2))

    or ((b[2,1]=2) and (b[3,1]=2))

    or ((b[2,2]=2) and (b[3,3]=2)))

    and (b[1,1]<>1) then

     begin

      hc:=1;

      ck:=ck+1;

      r:=1;

     end;

    if (((b[1,1]=2) and (b[1,3]=2))

    or ((b[2,2]=2) and (b[3,2]=2)))

    and (b[1,2]<>1) then

    begin

      hc:=1;

      ck:=ck+1;

      r:=2;

    end;

    if (((b[1,1]=2) and (b[1,2]=2))

    or ((b[2,3]=2) and (b[3,3]=2))

    or ((b[2,2]=2) and (b[3,1]=2)))

    and (b[1,3]<>1) then

    begin

      hc:=1;

   

ck:=ck+1;

      r:=3;

    end;

    if (((b[1,1]=2) and (b[3,1]=2))

    or ((b[2,2]=2) and (b[2,3]=2)))

    and (b[2,1]<>1) then

    begin

      hc:=1;

      ck:=ck+1;

      r:=4;

    end;

    if (((b[1,1]=2) and (b[3,3]=2))

    or ((b[1,3]=2) and (b[3,1]=2))

    or ((b[1,2]=2) and (b[3,2]=2))

    or ((b[2,1]=2) and (b[2,3]=2)))

    and (b[2,2]<>1) then

    begin

      hc:=1;

      ck:=ck+1;

      r:=5;

    end;

    if (((b[2,1]=2) and (b[2,2]=2))

    or ((b[1,3]=2) and (b[3,3]=2)))

    and (b[2,3]<>1) then

    begin

      hc:=1;

      ck:=ck+1;

      r:=6;

    end;

    if (((b[1,1]=2) and (b[2,1]=2))

    or ((b[3,2]=2) and (b[3,3]=2))

    or ((b[1,3]=2) and (b[2,2]=2)))

    and (b[3,1]<>1) then

    begin

      hc:=1;

      ck:=ck+1;

      r:=7;

    end;

    if (((b[1,2]=2) and (b[2,2]=2))

    or ((b[3,1]=2) and (b[3,3]=2)))

    and (b[3,2]<>1) then

    begin

      hc:=1;

      ck:=ck+1;

      r:=8;

    end;

    if (((b[1,1]=2) and (b[2,2]=2))

    or ((b[1,3]=2) and (b[2,3]=2))

    or ((b[1,1]=2) and (b[2,2]=2)))

    and (b[3,3]<>1) then

    begin

      hc:=1;

      ck:=ck+1;

      r:=9;

    end;

    if hc=0 then begin

    if time=1 then begin

      if c=‘5‘ then r:=1;

      if c<>‘5‘ then r:=5;

    end

    else

    begin

    if (((b[1,2]=1) and (b[1,3]=1))

    or ((b[2,1]=1) and (b[3,1]=1))

    or ((b[2,2]=1) and (b[3,3]=1)))

    and (b[1,1]<>2) then

     begin

      ck:=ck+1;

      r:=1;

      hc:=3;

     end;

    if (((b[1,1]=1) and (b[1,3]=1))

    or ((b[2,2]=1) and (b[3,2]=1)))

    and (b[1,2]<>2) then

    begin

      ck:=ck+1;

      r:=2;

      hc:=3;

    end;

    if (((b[1,1]=1) and (b[1,2]=1))

    or ((b[2,3]=1) and (b[3,3]=1))

    or ((b[2,2]=1) and (b[3,1]=1)))

    and (b[1,3]<>2) then

    begin

      ck:=ck+1;

 

ck:=ck+1;

      r:=3;

      hc:=3;

    end;

    if (((b[1,1]=1) and (b[3,1]=1))

    or ((b[2,2]=1) and (b[2,3]=1)))

    and (b[2,1]<>2) then

    begin

      ck:=ck+1;

      r:=4;

      hc:=3;

    end;

    if (((b[1,1]=1) and (b[3,3]=1))

    or ((b[1,3]=1) and (b[3,1]=1))

    or ((b[1,2]=1) and (b[3,2]=1))

    or ((b[2,1]=1) and (b[2,3]=1)))

    and (b[2,2]<>2) then

    begin

      ck:=ck+1;

      r:=5;

      hc:=3;

    end;

    if (((b[2,1]=1) and (b[2,2]=1))

    or ((b[1,3]=1) and (b[3,3]=1)))

    and (b[2,3]<>2) then

    begin

      ck:=ck+1;

      r:=6;

      hc:=3;

    end;

    if (((b[1,1]=1) and (b[2,1]=1))

    or ((b[3,2]=1) and (b[3,3]=1))

    or ((b[1,3]=1) and (b[2,2]=1)))

    and (b[3,1]<>2) then

    begin

      ck:=ck+1;

      r:=7;

      hc:=3;

    end;

    if (((b[1,2]=1) and (b[2,2]=1))

    or ((b[3,1]=1) and (b[3,3]=1)))

    and (b[3,2]<>2) then

    begin

      ck:=ck+1;

      r:=8;

      hc:=3;

    end;

    if (((b[1,1]=1) and (b[2,2]=1))

    or ((b[1,3]=1) and (b[2,3]=1))

    or ((b[1,1]=1) and (b[2,2]=1)))

    and (b[3,3]<>2) then

    begin

      ck:=ck+1;

      r:=9;

      hc:=3;

    end;

    end;{else}

    end;{if}

    if ek>1 then writeln(‘you can be the winner‘);

    if hc=0 then r:=random(9);

    if time=1 then begin

      if c=‘5‘ then r:=1;

      if c<>‘5‘ then r:=5;

    end;

    i:=r mod 3;

    case r of

    1,2,3:n:=1;

    4,5,6:n:=2;

    7,8,9:n:=3;

    end;

    if i=0 then i:=3;

    writeln;

    until (b[n,i]<>1) and (b[n,i]<>2) and (r<>0);

    b[n,i]:=2;

    clrscr;

    case b[1,1] of

    0:a[1,1]:=‘ ‘;

    1:a[1,1]:=‘o‘;

    2:a[1,1]:=‘x‘;

    end;

    case b[1,2] of

    0:a[1,2]:=‘ ‘;

    1:a[1,2]:=‘o‘;

    2:a[1,2]:=‘x‘;

    end;

 

case b[1,3] of

    0:a[1,3]:=‘ ‘;

    1:a[1,3]:=‘o‘;

    2:a[1,3]:=‘x‘;

    end;

    case b[2,1] of

    0:a[2,1]:=‘ ‘;

    1:a[2,1]:=‘o‘;

    2:a[2,1]:=‘x‘;

    end;

    case b[2,2] of

    0:a[2,2]:=‘ ‘;

    1:a[2,2]:=‘o‘;

    2:a[2,2]:=‘x‘;

    end;

    case b[2,3] of

    0:a[2,3]:=‘ ‘;

    1:a[2,3]:=‘o‘;

    2:a[2,3]:=‘x‘;

    end;

    case b[3,1] of

    0:a[3,1]:=‘ ‘;

    1:a[3,1]:=‘o‘;

    2:a[3,1]:=‘x‘;

    end;

    case b[3,2] of

    0:a[3,2]:=‘ ‘;

    1:a[3,2]:=‘o‘;

    2:a[3,2]:=‘x‘;

    end;

    case b[3,3] of

    0:a[3,3]:=‘ ‘;

    1:a[3,3]:=‘o‘;

    2:a[3,3]:=‘x‘;

    end;

    writeln(a[1,1],chr(179),a[1,2],chr(179),a[1,3]);

    writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

    writeln(a[2,1],chr(179),a[2,2],chr(179),a[2,3]);

    writeln(chr(196),chr(197),chr(196),chr(197),chr(196));

    writeln(a[3,1],chr(179),a[3,2],chr(179),a[3,3]);

    if ((b[1,2]=2) and (b[2,2]=2) and (b[3,2]=2))

    or ((b[1,1]=2) and (b[1,2]=2) and (b[1,3]=2))

    or ((b[2,1]=2) and (b[2,2]=2) and (b[2,3]=2))

    or ((b[3,1]=2) and (b[3,2]=2) and (b[3,3]=2))

    or ((b[1,1]=2) and (b[2,1]=2) and (b[3,1]=2))

    or ((b[1,3]=2) and (b[2,3]=2) and (b[3,3]=2))

    or ((b[1,1]=2) and (b[2,2]=2) and (b[3,3]=2))

    or ((b[1,3]=2) and (b[2,2]=2) and (b[3,1]=2))

    then begin ch:=2; goto exit1; end;

    goto xh;

    exit1:

    if cal=9 then writeln(‘deuce‘);

    if ch=2 then writeln(‘lost‘);

    if ch=1 then writeln(‘win‘);

    if ch=3 then

     begin

      clrscr;

      writeln(‘exited‘);

     end;

    writeln(‘press enter‘);

    readln;

end.

 

 
 这是《Pascal程序设计》上的一道作业,不知道我是不是想复杂了?管他呢,现在谁还需要这种游戏?