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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Проблема с передачей параметра, функция
klem4
сообщение 31.05.2005 18:50
Сообщение #1


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Я всетаки оказался прав, игра крестики нолики,процедура CanWin проверяет нельзя ли завершить игру победой, параметр процедуры - символ, в 1-ом случае - ChAi - проверяет не может ли комп завершить игру победой, во втором случае ChHum - проверка тойже ситуации для человека, в случае

x x o
- o x
- - -

считает что он выиграл (первая строка) не различает крестик и нолик sad.gif

эти переменные глобальные :

const
n=3; {размер поля 3х3}

var
x:array[1..n,1..n] of char; {поле}
Gstop:boolean;
chAi,chHum:char;
goi,goj:integer;



процедура выбора символа :

procedure CaseCh; {Выбор символа игрока и AI}
var
choice:char;
flag:boolean;
begin
flag:=True;
repeat
clrscr;
writeln('Если вы хотите играть крестиком, нажмите 1');
writeln('Если вы хотите играть ноликом, нажмите 2');
readln(choice);
case choice of
'1': begin
chAi:='o';
chHum:='x';
end;
'2': begin
chAi:='x';
chHum:='o';
end
else flag:=false;
end;
until flag;
clrscr;
end;{CaseCh}



сама ф-я проверки :
function CanWin(ch:char):boolean; {можно ли завершить игру победой}
var
countCh,NullPos:integer;
Win:boolean;
i,j:integer;

begin
{Проверка горизонталей}
Win:=false;
i:=1;
countCh:=0;
NullPos:=0;
while (i<=n)and(not(Win)) do
Begin
j:=1;
while (j<=n) do
begin
if x[i,j]=ch then
inc(countCh)
else
if x[i,j]='-' then
begin
inc(NullPos);
goi:=i;
goj:=j;
end;
inc(j);
end;

if (countCh=2)and(NullPos>0) then
Win:=True;

if not(Win) then inc(i);
end;{горизонтали}

{Проверка вертикалей}

if not(Win) then
begin
countCh:=0;
NullPos:=0;
j:=1;
while (j<=n)and(not(Win)) do
begin
i:=1;
while (i<=n) do
begin
if x[i,j]=ch then
inc(countCh)
else
if x[i,j]='-' then
begin
inc(NullPos);
goi:=i;
goj:=j;
end;
inc(i);
end;

if (countCh=2)and(NullPos>0) then
Win:=True;

if not(Win) then
inc(j);
end;

end;{вертикали}

if not(Win) then
{Проверка главной диагонали}
begin
i:=1;
countCh:=0;
NullPos:=0;
while(i<=n) do
begin
if x[i,i]=ch then
inc(countCh)
else
if x[i,i]='-' then
begin
inc(NullPos);
goi:=i;
goj:=j;
end;
inc(i);
end;

if (countCh=2)and(NullPos>0) then
Win:=true;

end;{Диагональ}

if not(Win) then
{Проверка побочной диагонали}
begin
countCh:=0;
NullPos:=0;
i:=1;
while (i<=n) do
begin
if x[i,n-i+1]=ch then
inc(countCh)
else
if x[i,n-i+i]='-' then
begin
inc(NullPos);
goi:=i;
goj:=n-i+1;
end;
inc(i);
end;

if countCh=2 then
Win:=True;

end;{побочная}

CanWin:=Win;

end;{CanWin}






использование в основной программе :
if CanWin(ChAi) then
begin
x[goi,goj]:=chAi;
Gstop:=True;
end
else
if CanWin(ChHum) then
x[goi,goj]:=chAi
else
AiGo;


помогите с передачей параметров :p2:

Сообщение отредактировано: klem4 - 31.05.2005 18:52


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 1.06.2005 10:23
Сообщение #2


Профи
****

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

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


Я не разбирался с передачей параметров, но я бы проверку AI smile.gif изменил бы в таком духе:
   {Проверка горизонталей}
Win:=false;
i:=1;
countCh:=0;
NullPos:=0;
while (i<=n)and(not(Win)) do
Begin
j:=1;
while (j<=n)and(not(Win)) do {}
begin
if x[i,j]=ch then
inc(countCh);
else
if x[i,j]='-' then
begin
inc(NullPos);
goi:=i;
goj:=j;
end
else
begin
countCh:=0; {это когда противник помешал }
NullPos:=0;
end;
Win:=(countCh=2)and(NullPos>0); {сразу проверяем победу}
inc(j);
end;
if not(Win) then inc(i);
end;{горизонтали}

и остальные проверки ты бы поправил в том же духе...
ЗЫ: Код свой я не проверял, только идею подкинул.

Сообщение отредактировано: hiv - 1.06.2005 10:27


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 1.06.2005 16:28
Сообщение #3


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


спасибо, попробую.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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