Игра "Морской Бой" - Prolog
Формулировка задачи:
Здравствуйте. Мне необходимо написать игру Морской Бой с использованием dll, написанного на прологе. На текущем этапе я сделал генерацию кораблей компьютера и перешел к ходу машины.
Есть следующий код:
Это фрагмент кода, есть еще база выстрелов, база кораблей компа, есть генерация кораблей. Причем генерация по рандому, используя get_rand. Проблема в том, что когда я запускаю программу, выстрелы генерируются не совсем по рандому, а через один. причем через 1 и по горизонтали и по вертикали. Отдельно функцию рандома проверил - работает. А вот с остальной частью кода не работает.
Листинг программы
- global database - userDB
- u_ship(int, int, int, int, int). %Корабли пользователя
- global predicates
- procedure geter_shot(int, int, int) - (o, o, o) language stdcall .%õîä êîìïГ*.
- %%%
- %генерим выстрел
- geter_shot(X,Y,K):-get_rand(X),get_rand(Y),shot_comp(X,Y,K),!.
- geter_shot(X,Y,K):-geter_shot(X,Y,K).
- %определяем попадание
- shot_comp(X,Y,K):-u_ship(T, Y, N, 1, _), T<=X, X<=T+N-1,u_dec_hp(T,Y,K),!.
- shot_comp(X,Y,K):-u_ship(X, T, N, -1, _), T<=Y, Y<=T+N-1,u_dec_hp(X,T,K),!.
- shot_comp(X,Y,0).
- %уменьшаем ХП корабля при попадании
- u_dec_hp(X,Y,1):-u_ship(X, Y, N, R, T), T-1>0, retract(u_ship(X,Y,_,_,_),userDB) , K=T-1, assertz(u_ship(X,Y,N,R,K),userDB),!.
- u_dec_hp(X,Y,2):-retract(u_ship(X, Y, N, R, _),userDB), assertz(u_ship(X,Y,N,R,0),userDB),!.
- %получаем случайное число
- get_rand(F):-random(10,B),!,F=B.
- get_rand(F):-get_rand(F).
Решение задачи: «Игра "Морской Бой"»
textual
Листинг программы
- get_rand2(F):-random(51,B),!,B<10,F=B.
- get_rand2(F):-get_rand2(F).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д