Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Select_move(player)




Change_strategy_for_game(player)

Select_strategy_for_game(player)

Last_move_get_small(player)

Last_move_get_all(player)

Intermediate_move_get_small(player)

First_move_get_small(player)

Drop_this_card(player,struct_card,count, count)

Define_count_get_small(player,suit,count,count,card_player_list)

Drop_get_small(player,suit,count,card_player_list)

Set_card_get_small(suit_list,count,card_player_list,player,count)

Drop_card_get_small(player,count)

% определить карты для сброса для стратегии "взять меньше"

%suit_list - список мастей, чье кол-во карт <= 3

%count - кол-во мастей, чье кол-во карт <= 3

%card_player_list - список карт игроков

%player - игрок

%count - кол-во карт для сброса

%сбросить переданную карту длястратегии "взять меньше"

%player - игрок

%suit - масть карты

%count - кол-во карт для сброса

%card_player_list - список карт игороков

 


%определяет число карт для сброса и вызывает сброс

%player - игрок

%suit - масть, которую сбросить

%count - кол-во карт этой масти

%count - кол-во карт для сброса

%card_player_list - список карт игороков

 

%сбрасывает конкретную карту, если онаесть у игрока.

%И возвращает новое кол-во карт для сброса (уменьшает на 1, если сбросил)

%player - игрок

%struct_card - карта

%count - кол-во карт для сброса

%count - новое кол-во карт для сброса

% первый ход для стратегии "взять все"

%player - игрок

first_move_get_all(player)

% первый ход для стратегии "взять меньше"

%player - игрок

 

% промежуточный ход для стратегии "взять все"

%player - игрок

intermediate_move_get_all(player)

 

% промежуточный ход для стратегии "взять меньше"

%player - игрок

 

% последний ход для стратегии "взять все"

%player - игрок

 

% последний ход для стратегии "взять меньше"

%player - игрок

 

%выбирает стратегию для игры

%player - игрок

 

%изменяет стратегию для игры

%player - игрок

 

%выбор хода дляикомпьютерного игрока

%player - игрок


Листинг программы

 

 

/*****************************************************************************

 

Copyright (c) My Company

 

Project: HEARTS

FileName: HEARTS.PRO

Purpose: No description

Written by: Visual Prolog

Comments:

******************************************************************************/

 

include "hearts.inc"

include "hearts.con"

include "hlptopic.con"

 

%BEGIN_WIN Task Window

/***************************************************************************

Event handling for Task Window

***************************************************************************/

 

domains

rank, suit = string

player, index, count, flag = integer

 

struct_card = card(rank, suit)

cards_list = struct_card*

 

cardplayer = card_player(player, struct_card)

card_player_list = cardplayer*

 

struct_count_card = count_card(suit, count)

count_card_list = struct_count_card*

 

suit_list = suit*

 

int_list = integer*

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

filename = string

struct_card_with_file_name = card_file(struct_card,filename)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

 

database - maindb

 

%бд карт (карта)

dbcards(struct_card)

%бд карт у игроков (карта игрока)

dbcard_of_player(cardplayer)

%бд стека, куда помещаются карты при сбросе (карта игрока)

dbstack(cardplayer)

%бд длинной масти (игрок, масть)

dblong_suit(player,suit)

%игрок запомнил кому скинул даму пик (кто скинул, ому скинул)

db_who_have_queen(player,player)

……………………………………………………………………………………..

 

predicates

 

task_win_eh: EHANDLER

 

 

%связывает карту с именем файла

%struct_card_with_file_name - карта и имя файла

cards_file(struct_card_with_file_name)

 

%связывае игрока и имя файла изображения стрелки

%player - номер игрока

%filename - имя файла

pict_of_pointer(player,filename).

 

%содержит все карты

cards(struct_card)

%раздаёт карты игрокам

%player - игрок, с которогоначинать раздачу

%cards_list - список карт

%count - число карт

play_out(player, cards_list, count)

 

……………………………………………………………………………………..

 

constants

 

%BEGIN Task Window, CreateParms, 01:58:37-29.12.2008, Code automatically updated!

task_win_Flags = [wsf_SizeBorder,wsf_TitleBar,wsf_Close,wsf_Maximize,wsf_Minimize,wsf_ClipSiblings]

task_win_Menu = no_menu

task_win_Title = "hearts"

task_win_Help = idh_contents

%END Task Window, CreateParms

 

clauses

 

% факты, содержащие карты

cards(card("2","крести")).

cards(card("3","крести")).

cards(card("4","крести")).

cards(card("5","крести")).

cards(card("6","крести")).

cards(card("7","крести")).

cards(card("8","крести")).

cards(card("9","крести")).

cards(card("10","крести")).

cards(card("В","крести")).

cards(card("Д","крести")).

cards(card("К","крести")).

cards(card("Т","крести")).

……………………………………………………………………………………..

 

……………………………………………………………………………………..

 

% раздача карт

play_out(_,_,0):-!. % кончались карты для раздачи

play_out(Player, Cards_list, CountCards):-

% выбераем случайным образом номер карты

random(CountCards,Index),

IndexCard = Index + 1,

% получаем из списка карт карту по номеру

get_card(1, IndexCard, Cards_list, Card),

% удаляем эту карту из списка

del_card(1,IndexCard, Cards_list, New_Cards_list),

% вставляем карту в ДБ карт играков

assertz(dbcard_of_player(card_player(Player, Card))),

New_CountCards = CountCards - 1,

% переходим к следующему игроку

next_player(Player, NewPlayer),

play_out(NewPlayer, New_Cards_List, New_CountCards).

 

……………………………………………………………………………………..

 

%=============================================================================

%========================== ВЗЯТЬ МЕНЬШЕ =====================================

drop_card_get_small(_,CountCardForDrop):-CountCardForDrop <=0,!.

drop_card_get_small(Player,CountCardForDrop):-

CountCardForDrop > 0,

% если есть, то сбрасываем Д, К, Т пик. Каждый предикат возвращает новое кол-во карт для сброса

drop_this_card(Player,card("Д","пики"),CountCardForDrop, New_Count1),

drop_this_card(Player,card("К","пики"),New_Count1, New_Count2),

drop_this_card(Player,card("Т","пики"),New_Count2, New_Count),

 

findall(CardOfPlayer,dbcard_of_player(CardOfPlayer),CardOfPlayer_list),

% получить число карт для каждой масти

get_count_card(Player,CardOfPlayer_list, ["крести","бубны","червы","пики"], Count_card_list),

%получить масти, число карт которых <=3 и > 0

get_suit_whose_cards_small_4(Count_card_list,Suit_list),

% получить кол-во таких мастей

count_element(Suit_list, CountSuit),

% выбрать и сбросить карты

set_card_get_small(Suit_List,CountSuit,CardOfPlayer_list,Player,New_Count).

 

……………………………………………………………………………………..

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

!.

%END Task Window, idc_push_button _CtlInfo

 

 

%BEGIN Task Window, id_help_contents

task_win_eh(_Win,e_Menu(id_help_contents,_ShiftCtlAlt),0):-!,

vpi_ShowHelp("hearts.hlp"),

!.

%END Task Window, id_help_contents

 

%BEGIN Task Window, id_help_about

task_win_eh(Win,e_Menu(id_help_about,_ShiftCtlAlt),0):-!,

dlg_about_dialog_Create(Win),

!.

%END Task Window, id_help_about

 

%BEGIN Task Window, id_file_exit

task_win_eh(Win,e_Menu(id_file_exit,_ShiftCtlAlt),0):-!,

win_Destroy(Win),

!.

%END Task Window, id_file_exit

 

%BEGIN Task Window, e_Size

task_win_eh(_Win,e_Size(_Width,_Height),0):-!,

ifdef use_tbar

toolbar_Resize(_Win),

enddef

ifdef use_message

msg_Resize(_Win),

enddef

!.

%END Task Window, e_Size

 

%END_WIN Task Window

 

 

/***************************************************************************

Invoking on-line Help

***************************************************************************/

 

project_ShowHelpContext(HelpTopic):-

vpi_ShowHelpContext("hearts.hlp",HelpTopic).

 

/***************************************************************************

Main Goal

***************************************************************************/

 

goal

 

ifdef use_mdi

vpi_SetAttrVal(attr_win_mdi,b_true),

enddef

ifdef ws_win

ifdef use_3dctrl

vpi_SetAttrVal(attr_win_3dcontrols,b_true),

enddef

enddef

vpi_Init(task_win_Flags,task_win_eh,task_win_Menu,"hearts",task_win_Title).

 

%BEGIN_DLG About dialog

/**************************************************************************

Creation and event handling for dialog: About dialog

**************************************************************************/

 

constants

 

%BEGIN About dialog, CreateParms, 10:49:04-23.11.2008, Code automatically updated!

dlg_about_dialog_ResID = idd_dlg_about

dlg_about_dialog_DlgType = wd_Modal

dlg_about_dialog_Help = idh_contents

%END About dialog, CreateParms

 

predicates

 

dlg_about_dialog_eh: EHANDLER

 

clauses

 

dlg_about_dialog_Create(Parent):-

win_CreateResDialog(Parent,dlg_about_dialog_DlgType,dlg_about_dialog_ResID,dlg_about_dialog_eh,0).

 

%BEGIN About dialog, idc_ok _CtlInfo

dlg_about_dialog_eh(_Win,e_Control(idc_ok,_CtrlType,_CtrlWin,_CtrlInfo),0):-!,

win_Destroy(_Win),

!.

%END About dialog, idc_ok _CtlInfo

%MARK About dialog, new events

 

dlg_about_dialog_eh(_,_,_):-!,fail.

 

%END_DLG About dialog

 

 




Поделиться с друзьями:


Дата добавления: 2015-05-28; Просмотров: 337; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.059 сек.