NastyaSu
1

Крестики-нолики NxN

19.11.2014, 14:23. Показов 1764. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Друзья, написала программу крестиков-ноликов 3х3, преподаватель просит переделать под NxN(размеры поля задаются в начале игры). Как безболезненно переделать существующую прогу? Возможно где-то есть готовый вариант? заранее спасибо!
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
{$APPTYPE CONSOLE}
 
uses
   SysUtils;
TYPE
  SquareType = (
                EMPTY  ,
                CROSS ,
                NULL
                );
  PosType = array[0..8] of SquareType;
 
const pos: PosType =
(
  EMPTY , EMPTY ,EMPTY ,
  EMPTY , EMPTY ,EMPTY ,
  EMPTY , EMPTY ,EMPTY 
);
 
function EndGame (z:SquareType): Boolean;
  begin
 
 {
 0,1,2,
 3,4,5,
 6,7,8
 }
 EndGame:= true;
 if (pos[0]=z) and (pos[1]=z) and (pos[2]=z) then exit;
 if (pos[3]=z) and (pos[4]=z) and (pos[5]=z) then exit;
 if (pos[6]=z) and (pos[7]=z) and (pos[8]=z) then exit;
 if (pos[0]=z) and (pos[3]=z) and (pos[6]=z) then exit;
 if (pos[1]=z) and (pos[4]=z) and (pos[7]=z) then exit;
 if (pos[2]=z) and (pos[5]=z) and (pos[8]=z) then exit;
 if (pos[0]=z) and (pos[4]=z) and (pos[8]=z) then exit;
 if (pos[6]=z) and (pos[4]=z) and (pos[2]=z) then exit;
 EndGame:=False;
 end;
 
var retPos:PosType;
 
function Search(s:SquareType; min, max, deep :integer) :integer;
 var
 n, tmp: integer;
 f, opS: SquareType;
 findMove: boolean;
 begin
  if s=NULL then opS:=CROSS
    else opS:=NULL;
  if EndGame(opS) then begin
   Search:= -1;
   exit;
  end;
 findMove:=false;
 for n:=0 to 8 do begin
   f:=pos[n];
   if f=EMPTY then begin
    findMove:=true;
    pos[n]:=s;
    tmp:= -Search(opS,-max,-min,deep+1);
    if tmp > min then begin
       min:=tmp;
       if deep = 0 then
         Move(pos, retPos, sizeof(PosType));
    end;
    pos[n]:=EMPTY;
    if min >= max then break;
  end;
 end;
 if not FindMove then   Search:=0
  else Search:= min;
end;
 
procedure ShowPos;
  function Ch(n:integer):char;
  begin
  if pos[n] = CROSS then  Ch:='*'
    else if pos[n] = NULL then Ch:='0'
    else Ch:=' ';
  end;
 begin
  Writeln('   -------');
  Write('   |', Ch(0), '|', Ch(1), '|', Ch(2), '|'); Writeln;
  Writeln('   -------');
  Write('   |', Ch(3), '|', Ch(4), '|', Ch(5), '|'); Writeln;
  Writeln('   -------');
  Write('   |', Ch(6), '|', Ch(7), '|', Ch(8), '|'); Writeln;
 end;
 
function GameOver:boolean;
var
  n:integer;
begin
  GameOver:=false;
  if not (EndGame(CROSS) or EndGame(NULL)) then begin
    for n := 0 to 8 do
      if pos[n] = EMPTY then  exit;
  end;
  GameOver := true;
end;
 
var
 ch, tmp, n: integer;
begin
  
  repeat
    Writeln;
    Writeln('/////////////////////////////////');
    ShowPos;
    Writeln;
    if GameOver then  begin
      for n := 0 to 8 do pos[n]:= EMPTY;
      Writeln;
      Writeln('Game Over!');
      ShowPos;
      Writeln;
    end;
    repeat
      Write ('Enter move number [0..8] or -1 to exit:');
      Read(ch);
    until (ch = -1) or
           ((ch >= 0) and (ch <= 8) and (pos[ch] = EMPTY)) ;
    if ch = -1 then   break;
    pos[ch] := CROSS;
    if not GameOver then begin
     tmp := Search(NULL,-2,2,0);
     pos := retPos;
    end;
  until ch = -1;
  
  Writeln('done')
end.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2014, 14:23
Ответы с готовыми решениями:

Крестики-нолики
Нужно реализовать в Pascal. Что бы были входные(1.in) и выходные(1.out) данные. ) создать .ехе файл...

Крестики нолики
Здравствуйте, в данное программе нужно заменить символы &quot;крестики и нолики&quot; на картинку, чтобы было...

Крестики-нолики
11. Квадраты при игре в крестики-нолики занумерованы, как показано на рисунке. Заданы номера трех...

крестики нолики помагите с ними
нужен код проги на языке паскаль, крестики нолики полем 3на3 и вариантами игра- человек с человеком...

1
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
19.11.2014, 16:52 2
объявлять массив без размера и устанавливать оный в процессе
Pascal
1
2
3
4
PosType = array of SquareType;
 
 
SetLength(pos, sqr(n-1));
и ещё: делайте мб лучше двумерным массивом, ибо неудобно будет вводить координаты.
0
19.11.2014, 16:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2014, 16:52
Помогаю со студенческими работами здесь

Крестики нолики на Pascal, помогите.
помагите сделать игру составить алгоритм

Крестики-нолики: плохо прорисовываются "нолики"
Я, наверное, всех уже достал своей игрой, но я опять напоролся на подводный камень. Игра -...

Крестики-нолики
Как сделать игру крестик и нолик в паскале

Крестики-Нолики
Программисты, помогите пожалуйста!:) Пытаюсь сделать крестики - нолики на PascalABC.NET, но...

Крестики-нолики
Написал крестики-нолики. Критику пожалуйста) uses GraphABC; var pole:array of integer; ...

Крестики и нолики
Ребят, нужно сделать чтобы крестики и нолики нажимались мышкой и в конце было кто победил и кто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru