Advertisement
CyberPascal

Untitled

Apr 23rd, 2014
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.63 KB | None | 0 0
  1. uses crt, graph;
  2.  
  3. Procedure DrawTable;
  4.   Var
  5.     i, DX, DY: Integer;
  6.   Begin
  7.     DX := GetMaxX Div 5;
  8.     DY := GetMaxY Div 5;
  9.  
  10.     For i := 1 To 4 Do
  11.       Line(DX, i*DY, 4*DX, i*DY);
  12.     For i := 1 To 4 Do
  13.       Line(i*DX, DY, i*DX, 4*DY);
  14.   End;
  15.  
  16. const
  17.   colors: array[boolean] Of integer =
  18.     (red, white);
  19.  
  20.  
  21. Procedure PutChar(b: boolean; x, y: Integer; Ch: Char);
  22.   var centerx, centery: integer;
  23.   begin
  24.     centerx := x*(getmaxx Div 5) + (getmaxx div 10);
  25.     centery := y*(getmaxy Div 5) + (getmaxy div 10);
  26.  
  27.     setcolor(colors[b]);
  28.     settextjustify(centertext, centertext);
  29.     outtextxy(centerx, centery, ch);
  30.     setcolor(white);
  31.   end;
  32.  
  33. var
  34.   tbl: array[1 .. 3, 1 .. 3] of integer;
  35.  
  36. function sumDiag(main: Boolean): Integer;
  37.   var i, s: integer;
  38.   begin
  39.     s := 0;
  40.     case main of
  41.       false:
  42.         for i := 1 to 3 do
  43.           s := s + tbl[i, i];
  44.       true:
  45.         for i := 1 to 3 do
  46.           s := s + tbl[i, 3 - i + 1]
  47.     end;
  48.     sumDiag := s
  49.   end;
  50.  
  51. function sumR(x: integer): integer;
  52.   var i, s: integer;
  53.   begin
  54.     s := 0;
  55.     for i := 1 to 3 do
  56.       s := s + tbl[x, i];
  57.     sumR := s
  58.   end;
  59.  
  60. function sumC(x: integer): integer;
  61.   var i, s: integer;
  62.   begin
  63.     s := 0;
  64.     for i := 1 to 3 do
  65.       s := s + tbl[i, x];
  66.     sumC := s
  67.   end;
  68.  
  69. var
  70.   grDriver: Integer;
  71.   grMode: Integer;
  72.   ErrCode: Integer;
  73.  
  74. const
  75.   prompt: array[boolean] Of String =
  76.     ('Player 2 >', 'Player 1 >');
  77.   letter: array[boolean] Of Char =
  78.     ('0', 'X');
  79.   amount: array[boolean] Of Byte =
  80.     (7, 10);
  81.   possibleLetters: set of char = ['1' .. '9'];
  82. var
  83.   imove, p: Integer;
  84.   posX, posY: integer;
  85.   curr, ch: char;
  86.   i, j: integer;
  87.   winner, ok, b, stopped: boolean;
  88.  
  89. begin
  90.   grDriver := Detect;
  91.   InitGraph(grDriver, grMode,'');
  92.   ErrCode := GraphResult;
  93.   if ErrCode <> grOk then
  94.   begin
  95.     Writeln('Graphics error:', GraphErrorMsg(ErrCode)); halt(100)
  96.   end;
  97.  
  98.   for i := 1 to 3 do
  99.     for j := 1 to 3 do
  100.       tbl[i, j] := 0;
  101.  
  102.   DrawTable;
  103.   For imove := 1 to 9 do
  104.     begin
  105.       setviewport(1, getmaxy-60, getmaxx, getmaxy, true);
  106.       clearviewport;
  107.       setviewport(1, 1, getmaxx, getmaxy, true);
  108.  
  109.       outtextxy(getmaxx div 2, getmaxy - 30, prompt[odd(imove)]);
  110.       repeat
  111.         ch := readkey;
  112.       until ch in possibleletters;
  113.       possibleletters := possibleletters - [ch];
  114.       p := Ord(ch) - Ord('0');
  115.  
  116.       posY := ((p - 1) div 3) + 1;
  117.       posX := (p mod 3);
  118.       if posX = 0 then posX := 3;
  119.       PutChar(odd(imove), posX, posY, letter[odd(imove)]);
  120.  
  121.       tbl[posX, posY] := amount[odd(imove)];
  122.  
  123.       stopped := false;
  124.       for b := false to true do
  125.         begin
  126.           for i := 1 to 3 do
  127.             if (sumR(i) = 3*amount[b]) or
  128.                (sumC(i) = 3*amount[b]) then
  129.               begin
  130.                 winner := b; stopped := true;
  131.               end;
  132.  
  133.           if not stopped then
  134.             if (sumDiag(false) = 3*amount[b]) or
  135.                (sumDiag(true) = 3*amount[b]) then
  136.               begin
  137.                   winner := b; stopped := true;
  138.               end;
  139.         end;
  140.  
  141.       if stopped then break;
  142.     end;
  143.  
  144.   setviewport(1, getmaxy-60, getmaxx, getmaxy, true);
  145.   clearviewport;
  146.   setviewport(1, 1, getmaxx, getmaxy, true);
  147.  
  148.   if stopped then
  149.     begin
  150.       setcolor(red);
  151.       outtextxy(getmaxx div 2, getmaxy - 30,
  152.                 'Winner: ' + prompt[winner]);
  153.       setcolor(white); readln
  154.     end
  155.   else
  156.     begin
  157.       setcolor(lightblue);
  158.       outtextxy(getmaxx div 2, getmaxy - 30,
  159.                 'no winner...');
  160.       setcolor(white); readln
  161.     end;
  162.  
  163.   CloseGraph
  164. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement