Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подкорректировать игрушку, простенькая 
:(
    Опции темы
Tokagero
Дата 12.11.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Итак, с чем имеем дело. Помните игру "Балда"? Там где было поле 5х5, слово по центру из 5ти букв,
задача игрока - дописать букву в свободную клетку так, чтобы получилось новое слово, т.е. чтоб все
его буквы были поочередно соседними по горизонтали\вертикали, чем длиннее слово -
тем больше очков. Когда поле заполняется выбирается победитель по сумме очков.

Нашел в сети исходник (на популярном сайте) игрушки этой (балды), где есть опция игры с компьютером,
убрал игроку возможность ходить, добавил возможность дописывать буквы в поле просто так.
Словарь у компа обширный, ну и он придумывает самые хитрожопые слова. Т.е. при игре с игроком в сети
через браузер запускается наша программка, где нужно вручную вписывать буквы, которые вписывает 
вражеский игрок и компьютер думает лучшие слова за нас, нужно только ввести.

Появилась подобная игра - только тут уже сам с собой. Есть поле 5х5, заполненное буквами. Нужно
за определенное время как можно больше слов уже существующих показать. Буквы должны быть опять
соседние (текущая со следующей), но теперь можно еще выбирать буквы по диагонали, а это
увеличивает число возможных слов раза в 2.

Из-за совпадающих размеров поля и функции "анти-балды", словаря, разумно было бы взять старую
"балду" и переделать под новую версию.

Теперь:
Изначально можно заполнить поле буквами
Научил программу искать слова по уже заполненному полю, а не дописывать

Все бы ничего но уже второй день не могу научить ходить по диагонали. Либо Fatal Error либо ничего.
Приложу исходник, прошу соображающих людей глянуть, где я пропустил и что отвечает за поиск
следующей буквы и места самого ограничения, которое не позволяет смотреть букву по диагонали.

(компилим, там есть Memo с текстом 5 строк в каждой 5 букв - буквы поля, делал заполнение через
задницу, знаю. Заполняем поле буквами из Memo, потом клацаем Delete на клаве и комп думает. ну 
и так пока не кончатся варианты. Позже сделаю чтобы он сразу пока все не переберет не 
останавливался, а то каждый раз клацать...)

Файл прилагается

Это сообщение отредактировал(а) Tokagero - 14.11.2009, 02:31
PM MAIL   Вверх
forsage898
Дата 13.11.2009, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.11.2009

Репутация: нет
Всего: нет



интересно, а полная версия есть
PM MAIL   Вверх
amsoft
Дата 13.11.2009, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 17.10.2009
Где: KZ, Astana

Репутация: 3
Всего: 4



косяк в этом коде

 
Код

if (ExitDesk(x-1,y)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y,xl,yl,max,r);
// if (ExitDesk(x-1,y-1)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y-1,xl,yl,max,r);
 if (ExitDesk(x+1,y)=false) and (PosExists(P,x+1,y)=false) and (M[x+1,y]<>'') then FindWords(M,W,D,MP,P,x+1,y,xl,yl,max,r);
// if (ExitDesk(x-1,y+1)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y+1,xl,yl,max,r);
 if (ExitDesk(x,y-1)=false) and (PosExists(P,x,y-1)=false) and (M[x,y-1]<>'') then FindWords(M,W,D,MP,P,x,y-1,xl,yl,max,r);
// if (ExitDesk(x-1,y+1)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y+1,xl,yl,max,r);
 if (ExitDesk(x,y+1)=false) and (PosExists(P,x,y+1)=false) and (M[x,y+1]<>'') then FindWords(M,W,D,MP,P,x,y+1,xl,yl,max,r);
// if (ExitDesk(x+1,y-1)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x+1,y-1,xl,yl,max,r);




исправь на

 
Код

//ищем по прямым
 if (ExitDesk(x-1,y)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y,xl,yl,max,r);
 if (ExitDesk(x+1,y)=false) and (PosExists(P,x+1,y)=false) and (M[x+1,y]<>'') then FindWords(M,W,D,MP,P,x+1,y,xl,yl,max,r);
 if (ExitDesk(x,y-1)=false) and (PosExists(P,x,y-1)=false) and (M[x,y-1]<>'') then FindWords(M,W,D,MP,P,x,y-1,xl,yl,max,r);
 if (ExitDesk(x,y+1)=false) and (PosExists(P,x,y+1)=false) and (M[x,y+1]<>'') then FindWords(M,W,D,MP,P,x,y+1,xl,yl,max,r);
 //ищем по диагоналям
 if (ExitDesk(x-1,y-1)=false) and (PosExists(P,x-1,y-1)=false) and (M[x-1,y-1]<>'') then FindWords(M,W,D,MP,P,x-1,y-1,xl,yl,max,r);
 if (ExitDesk(x-1,y+1)=false) and (PosExists(P,x-1,y+1)=false) and (M[x-1,y+1]<>'') then FindWords(M,W,D,MP,P,x-1,y+1,xl,yl,max,r);
 if (ExitDesk(x+1,y-1)=false) and (PosExists(P,x+1,y-1)=false) and (M[x+1,y-1]<>'') then FindWords(M,W,D,MP,P,x+1,y-1,xl,yl,max,r);
 if (ExitDesk(x+1,y+1)=false) and (PosExists(P,x+1,y+1)=false) and (M[x+1,y+1]<>'') then FindWords(M,W,D,MP,P,x+1,y+1,xl,yl,max,r);


--------------------
"Кто бы ты ни был - не думай о себе слишком"Дельфин
PM   Вверх
forsage898
Дата 13.11.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.11.2009

Репутация: нет
Всего: нет



кинь братан твою прогу глянуть как получилось
PM MAIL   Вверх
Tokagero
Дата 14.11.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Цитата(amsoft @ 13.11.2009,  10:17)
косяк в этом коде

 
Код

if (ExitDesk(x-1,y)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y,xl,yl,max,r);
// if (ExitDesk(x-1,y-1)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y-1,xl,yl,max,r);
 if (ExitDesk(x+1,y)=false) and (PosExists(P,x+1,y)=false) and (M[x+1,y]<>'') then FindWords(M,W,D,MP,P,x+1,y,xl,yl,max,r);
// if (ExitDesk(x-1,y+1)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y+1,xl,yl,max,r);
 if (ExitDesk(x,y-1)=false) and (PosExists(P,x,y-1)=false) and (M[x,y-1]<>'') then FindWords(M,W,D,MP,P,x,y-1,xl,yl,max,r);
// if (ExitDesk(x-1,y+1)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y+1,xl,yl,max,r);
 if (ExitDesk(x,y+1)=false) and (PosExists(P,x,y+1)=false) and (M[x,y+1]<>'') then FindWords(M,W,D,MP,P,x,y+1,xl,yl,max,r);
// if (ExitDesk(x+1,y-1)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x+1,y-1,xl,yl,max,r);




исправь на

 
Код

//ищем по прямым
 if (ExitDesk(x-1,y)=false) and (PosExists(P,x-1,y)=false) and (M[x-1,y]<>'') then FindWords(M,W,D,MP,P,x-1,y,xl,yl,max,r);
 if (ExitDesk(x+1,y)=false) and (PosExists(P,x+1,y)=false) and (M[x+1,y]<>'') then FindWords(M,W,D,MP,P,x+1,y,xl,yl,max,r);
 if (ExitDesk(x,y-1)=false) and (PosExists(P,x,y-1)=false) and (M[x,y-1]<>'') then FindWords(M,W,D,MP,P,x,y-1,xl,yl,max,r);
 if (ExitDesk(x,y+1)=false) and (PosExists(P,x,y+1)=false) and (M[x,y+1]<>'') then FindWords(M,W,D,MP,P,x,y+1,xl,yl,max,r);
 //ищем по диагоналям
 if (ExitDesk(x-1,y-1)=false) and (PosExists(P,x-1,y-1)=false) and (M[x-1,y-1]<>'') then FindWords(M,W,D,MP,P,x-1,y-1,xl,yl,max,r);
 if (ExitDesk(x-1,y+1)=false) and (PosExists(P,x-1,y+1)=false) and (M[x-1,y+1]<>'') then FindWords(M,W,D,MP,P,x-1,y+1,xl,yl,max,r);
 if (ExitDesk(x+1,y-1)=false) and (PosExists(P,x+1,y-1)=false) and (M[x+1,y-1]<>'') then FindWords(M,W,D,MP,P,x+1,y-1,xl,yl,max,r);
 if (ExitDesk(x+1,y+1)=false) and (PosExists(P,x+1,y+1)=false) and (M[x+1,y+1]<>'') then FindWords(M,W,D,MP,P,x+1,y+1,xl,yl,max,r);

Спасибо, я так и думал. Ошибся малость, завбыв в PosExists добавить +-1 под диагонали, поэтому выдавало ошибку.
ПОшел доделывать

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.