Министерство общего и профессионального образования Российской Федерации
Новосибирский Государственный Технический Университет
Кафедра прикладной математики
Лабораторная работа №3
“Программирование игр”
Факультет: ПМиИ
Группа: ПМ-61
Студенты: Иванов Илья Александрович
Куприянов Виктор Юрьевич
Михуля Михаил Николаевич
Преподаватели: Хабаров Валерий Иванович
Целебровская Марина Юрьевна
НОВОСИБИРСК
2000
Содержание........................................................................................................................................................... 2
Цель работы.......................................................................................................................................................... 2
Задание..................................................................................................................................................................... 2
Расширение структуры данных для представления математических выражений 3
Тестирование программы символьного интегрирования.......................................... 4
Текст программы............................................................................................................................................. 5
Изучение базовых стратегий решения задач для программирования игр двух лиц с полной информацией.
Для игры «крестики нолики» на «бесконечном поле» релизовать программу на языке Prolog с использованием алфа-бета-принципа.
/* Copyright (c) 2000 by MIK Corporation */
% Comment: MIK = Mikhulya, Ivanov, Koopriyanov
CONSTANTS
% Window descriptors
play_w = 1
move_w = 2
status_w = 3
field_w = 4
% Codes of the keyboard
left = 'K'
right = 'M'
up = 'H'
down = 'P'
home = 'G'
end = 'O'
pgup = 'I'
pgdn = 'Q'
escape = ''
enter = '\13'
% Boolean values
true = 1
false = 0
% Size of a game field ( subtract 1 )
height = 13
width = 13
DOMAINS
LOGICAL = INTEGER
DIRECTION = INTEGER
MOVE = a(INTEGER,INTEGER)
TYPE =
x;
o.
PLAYER =
comp;
user.
MOVE_LIST = MOVE*
DATABASE
x_o(TYPE,MOVE)
DATABASE - cells
cell(MOVE)
PREDICATES
init_player(PLAYER)
play(PLAYER)
alpha_beta(MOVE,INTEGER)
best_move(MOVE,INTEGER,MOVE,INTEGER,MOVE,INTEGER)
search_in_direction(TYPE,MOVE,INTEGER,DIRECTION,DIRECTION)
comp_make_moves
opponent(PLAYER,PLAYER)
five_in_line(TYPE)
make_move(PLAYER,MOVE)
weight(MOVE,INTEGER)
show_move(PLAYER,MOVE)
get_char(LOGICAL,CHAR)
check_char(CHAR,LOGICAL,CHAR)
move_cursor(LOGICAL,CHAR,INTEGER,INTEGER)
want_exit(LOGICAL,CHAR)
belong(MOVE,MOVE_LIST)
max(INTEGER,INTEGER,INTEGER)
min(INTEGER,INTEGER,INTEGER)
yes(CHAR)
add_all_near_cell(TYPE,MOVE_LIST)
add_cell(MOVE)
player_type(PLAYER,TYPE)
wf(INTEGER,TYPE,DIRECTION,DIRECTION,DIRECTION,DIRECTION,INTEGER)
wd(DIRECTION,DIRECTION,DIRECTION,DIRECTION)
CLAUSES
init_player(Player) :retractall(_),
retractall(_,cells),
makewindow(play_w,$31,$3F,"Игровое поле",0,0,18,60),
makewindow(move_w,$1F,$1F,"Ходы",0,60,18,20),
Y=round(height/2),
X=round(width/2),
Top=8-Y,
Left=29-X,
Height=3+height,
Width=3+width,
makewindow(field_w,$1F,$1F,"",Top,Left,Height,Width),
cursor(Y,X),
makewindow(status_w,$1F,$1F,"Окно статуса",18,0,7,80),
write("Рад видеть Вас, сыграем в крестики-нолики."),nl,
write("Будете ходить первым? (y/n) "),
get_char(L,C),
write(C),nl,
yes(C),
shiftwindow(status_w),
write("Ваш ход, о многоуважаемый..."),nl,
shiftwindow(move_w),
write(" User Comp "),nl,
Player=user;
shiftwindow(status_w),
write("Спасибо, Вы столь снисходительны ко мне..."),nl,
shiftwindow(move_w),
write(" Comp User "),nl,
Player=comp.
make_move(user,a(X,Y)) :shiftwindow(field_w),
get_char(L,C),
move_cursor(L,C,X,Y),
not(x_o(_,a(X,Y))).
make_move(user,a(X,Y)) :shiftwindow(status_w),
write("Wrong!!!"),
make_move(user,a(X,Y)).
make_move(comp,a(X,Y)) :Y=round(height/2),
X=round(width/2),
not(x_o(_,a(X,Y))).
make_move(comp,Best_move) :comp_make_moves,
alpha_beta(Best_move,_).
show_move(user,a(X,Y)) :shiftwindow(field_w),
cursor(Y,X),
write("X"),
shiftwindow(move_w),
writef(" (%2,%2) ",Y,X).
show_move(comp,a(X,Y)) :shiftwindow(field_w),
cursor(Y,X),
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.