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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Scrabble
Reflex
сообщение 31.10.2006 21:06
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


Давайте всем форумом напишем вот эту игру. Причем так, что бы в ней были режимы как одно пользовательской ( с ИИ ) так и много пользовательской игры, желательно еще и игру по локалке.
сделать все вместе согласны такой общий проект?


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vasya!
сообщение 31.10.2006 22:32
Сообщение #2


Новичок
*

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

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


Для начала что за игра опиши. Хоть в кратце. yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 31.10.2006 22:55
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


Ура smile.gif smile.gif smile.gif
Появился хоть один заинтересовавшийся
smile.gif smile.gif smile.gif

Вот! Тут почитай!!!


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vasya!
сообщение 31.10.2006 23:16
Сообщение #4


Новичок
*

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

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


Типа кроссворд?

А что делать надо а то я непонял?

С чего начнем? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 31.10.2006 23:18
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


Нет...
не кроссворд ...
Ну давай сначала обсудим интерфейс


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 1.11.2006 0:59
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


или я не то понисмаю под словом кроссворд


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.11.2006 1:32
Сообщение #7


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Reflex @ 1.11.2006 1:59) *

или я не то понисмаю под словом кроссворд

Эта игра в русском варианте называется "Эрудит". Это название мне не очень нравится, слишком претенциозное. Когда-то давно (погодите.. примерно в конце 60-х - начале 70-х) ее напечатали в журнале "Наука и жизнь" под названием "Крестословица" (это мне больше по душе). Нам с сетренкой она так понравилась, что мы сделали ее на толстой фанере, клетки прожгли выжигательным прибором (им же написали ценность снизу), раскрасили маслом, вырезали фишки с буквами из твердого картона - и все это подарили маме на 8 Марта! smile.gif) Играли всей семьей вечерами.

ИИ тут не очень сложный. Главное - иметь достаточный словарь. Интерфейс же можно постараться сделать красивенький.. Правда, красивее того, фанерного, уже ничего не будет.. smile.gif

Я согласен поучаствовать в меру сил.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 1.11.2006 13:55
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


А ты не мог бы рассказать Алгорим ИИ? а то я что-то его не представляю


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
arhimag
сообщение 1.11.2006 14:25
Сообщение #9


Знаток
****

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

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


Готов помочь, предлагаю интерфейс сделать текстовый ( временно)


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vasya!
сообщение 1.11.2006 18:12
Сообщение #10


Новичок
*

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

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


Так как я в игру не играл, то тоже не знаю алгоритма. Но я надеюсь, что Андрей расскажет.

Ну вот нас уже трое!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 2.11.2006 1:35
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


ну вот что-то такое правдо это только часть.
 program scrablet;

{$APPTYPE CONSOLE}

uses
SysUtils;
type
tfield = array [0..14,0..14] of char;
const
letter_A = 1;
letter_B = 3;
letter_V = 2;
letter_G = 3;
letter_D = 2;
letter_E = 1;
letter_ZH = 5;
letter_Z = 5;
letter_I = 1;
letter_Y = 2;
letter_K = 2;
letter_L = 2;
letter_M = 2;
letter_N = 1;
letter_O = 1;
letter_P = 2;
letter_R = 2;
letter_S = 2;
letter_T = 2;
letter_U = 3;
letter_F = 10;
letter_H = 5;
letter_TS = 10;
letter_CH = 5;
letter_SH = 10;
letter_SHSC = 10;
letter_HZ = 10;
letter_II = 5;
letter_LZ = 5;
letter_EZ = 10;
letter_YU = 10;
letter_YA = 3;

type
tplayer = record
hand : array [ 0..6 ] of char;
score : integer;
put : array [ 0..6 ] of char;
puts : integer;
end;

tbag = record
plates : array [ 0..33, 0..1 ] of integer;
inside : integer;
end;

type
tgame = record
field : tfield;
player1 : tplayer;
player2 : tplayer;
bag : tbag;
end;

procedure nill_field(var field : tfield);
var i, j : integer;
begin
for i:= 0 to 14 do
for j:= 0 to 14 do
field[i,j]:='_';
end;

procedure nill_player(var player : tplayer);
var i: integer;
begin
for i:= 0 to 7 do begin
player.hand[i]:='_';
player.put[i]:='_';
end;
player.score:=0;
player.puts:=0;
end;

procedure fill_bag(var bag : tbag);
var bag_file : text;
var i : integer;
begin
assign(bag_file,'bag.res');
reset(bag_file);
for i := 0 to 33 do begin
read(bag_file, bag.plates[i,0]);
bag.plates[i,1]:=i;
end;
close(bag_file);
end;

procedure bag_move(var bag : tbag );
var i, j : integer;
begin
for i:= 0 to 32 do
if bag.plates[i,0] = 0 then
for j:= i+1 to 33 do begin
bag.plates[j-1,0]:=bag.plates[j,0];
bag.plates[j-1,1]:=bag.plates[j,1];
end;
end;

procedure hand_move(var player : tplayer);
var i,j : integer;
begin
for i:= 0 to 5 do
if player.hand[i]= '_' then
for j:= i+1 to 6 do
player.hand[j-1]:=player.hand[j];
end;

function hand_length(var player : tplayer) : integer;
var i : integer;
begin
hand_move(player);
i:=0;
while (player.hand[i]<>'_') and not(i>=6) do
inc(i);
if player.hand[6]<>'_' then
inc(i);
result:=i;
end;

procedure init_game(var game : tgame);
begin
{ fill_bag(game.bag);}
nill_field(game.field);
nill_player(game.player1);
nill_player(game.player2);
end;

procedure show_field_in_text_mode( field : tfield );
var i, j : integer;
begin
write(' ');
for i := 0 to 14 do
if (i div 10) = 1 then
write(1,' ') else write(0,' ');
writeln;
write(' ');
for i := 0 to 14 do
write(i mod 10,' ');
writeln;
writeln;
for i := 0 to 14 do begin
if (i div 10) = 0 then
write('0',i,' ') else write(i,' ');
for j := 0 to 14 do
write(field[j,i],' ');
writeln;
end;
end;

var game : tgame;
begin
init_game(game);
show_field_in_text_mode(game.field);
readln;
end.



--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 2.11.2006 9:31
Сообщение #12


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Что касается ИИ, то мне кажется, что особых проблем нет. Если есть словарь, то нужно составить из имеющихся на руках букв всевозможные сочетания, затем приставлять их к буквам на доске и сверять со словарем, что получится. Алгоритм дубовый, и работать он будет долго, но это уже второй вопрос smile.gif.

Reflex, первое и главное замечание: при совместной работе хорошо было бы иметь словесное описание как данных, так и алгоритмов. Интерфейс не является исключением. Если в лом делать отдельное описание (что я вполне понимаю), то по крайней мере все должно быть прокомментировано, и без этого никак! Хотя, я бы все же предпочел сначала обсудить..

Например, в том коде, что ты привела, в глаза бросается набор констант. Он зачем? Мне кажется, такие вещи, как ценность буквы, нужно иметь отдельно, в файлах ресурсов. Сами же буквы естественно заменить на номера, занеся их реальные значения (типа А, Б ..) в массив (который, кстати, может зависеть от выбранной кодировки). Если следовать такому плану, то игру можно сделать многоязычной: русская, английская, украинская, французская.. - смена языка производится заменой файлов. Тогда мумба-юмбафикация игры могла бы заключатся в простом добавлении файлов (словарь можно позаимствовать у Ильфа с Петровым smile.gif).

Затем, давайте договоримся о выборе стандарта языка. Я предлагаю Object Pascal, но можно и сразу на Дельфи. Суть в том, чтобы задействовать объекты - они, как известно, хороши при совместном осуществлении пректа. Чисто процедурный подход я бы не рекомендовал.. Но можно и его, если есть возражения против объектов.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
arhimag
сообщение 2.11.2006 12:03
Сообщение #13


Знаток
****

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

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


В написании игр объектный подход очень удомен и многие кто пишут игры не в одиночку используют его.
Я предлагаю сразу Delphi взять. А по устройству хранения фишек, то согласен с lapp так будет лучше. Пока про ии не очень представляю как это оссуществить. Предлагаю сначала написать человек-человек а потом уже извращаться типа локалки и ИИ.


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 2.11.2006 12:53
Сообщение #14


Michael_Rybak
*****

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

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


Цитата
Если есть словарь, то нужно составить из имеющихся на руках букв всевозможные сочетания, затем приставлять их к буквам на доске и сверять со словарем, что получится. Алгоритм дубовый, и работать он будет долго, но это уже второй вопрос smile.gif.


Алгоритм не дубовый, и он будет летать. Только лучше, наверное, сначала смотреть, куда будем ставить, а потом уже ставить.

На поле 15х15 всего 225 клеток. От каждой клетки пытаемся проложить слово вправо, и слово вниз.

Пусть словарь у нас отсортирован лексикографически, и пусть в нем n слов. У нас есть клетка на доске, и мы идем от нее вправо. Хотим получить список всех возможных слов (учитывая, хватит ли у нас фишек, чтоб достроить недостающие буквы).

Рекурсивный перебор такой:

Сначала считаем, что нам подходят все слова: [0; n). Смотрим на первую букву (т.е. на начальную клетку). Если там уже стоит фишка с буквой, скажем, К, то нас уже устраивает не [0; n), а [x; y), где x - первое слово на букву К, а y - первое слово на букву Л. Если же там - пусто, то пытаемся туда поставить одну из букв, имеющихся на руках (всего их 7?). И опять-таки, сужаем интервал соответственно. И теперь рекурсивно переходим ко второй букве. Опять, если там не пусто, сужаем интервал однозначно, если же пусто - перебираем и сужаем, и т.д.

Поскольку на каждом шаге, решения относительно всех предыдущих букв уже приняты, то каждый раз нам всегда нужно рассматривать только слова из текущего интервала (все остальные не подходят под уже построенное).

Используя префиксное дерево, мы будем сужать интервалы за O(1), и перебор будет работать неприлично быстро smile.gif

Эту часть могу взять на себя.

Сообщение отредактировано: Michael_Rybak - 2.11.2006 12:55
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 2.11.2006 13:37
Сообщение #15


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Michael_Rybak @ 2.11.2006 13:53) *

Только лучше, наверное, сначала смотреть, куда будем ставить, а потом уже ставить.
..
Эту часть могу взять на себя.

Да, так, конечно, лучше, особенно учитывая, что возможно составление слова из нескольких частей, типа:
САМОЛЕТ
- черные буквы уже стояли, а красные мы поставили.
На руках 7 фишек, да (насколько я помню).

Можешь - хорошо. Вполне можно все делать параллельно, только нужно бы договориться о стандарте данных.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 2.11.2006 14:11
Сообщение #16


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Я тут набросал примерно костяк структуры данных, касающихся доски (игроков можно добавить потом).
У Reflex это уже было, но у меня были некоторые замечания, разбирать которые сейчас нету времени, увы. Поэтому я просто показываю свой вариант, а остальные пусть выбирают.
Я не стал вводить пока объекты, не зная отношения к ним основных участников проекта и не имея выбранного стандарта языка. Все можно будет исправить и добавить позже.
{Scrabble}
{Version Text Object Pascal 0.01}
{File Scrabble_TOP-0_01}

const
BoardSize=15; BrdSz=BoardSize; N=BoardSize; {Razmer doski}
MaxAlphaLength=100; MxAL=MaxAlphaLength; {Max dlina alfavita}

type
tLetter=word; {Nomer bukvy po poryadku, nachinaya s 1}
tCell=record {Yacheika doski}
Letter:tLetter; {bukva}
Bonus:integer; {umnozhenie ceny}
end;
tBoard=array[1..BoardSize]of tCell; {Doska}
tRate=array[1..MaxAlphaLength]of integer; {Cena kazhdoi bukvy}
tAlpha=array[1..MaxAlphaLength]of char; {Alfavit, simboly dlya vyvoda}

var
Board:tBoard;
M:word; {Dlina alfavita, schityvaem is faila}
Rate:tRate; {Schityvaem is faila}
Alpha:tAlpha; {Schityvaem is faila}

begin
end.

Хочу еще добавить, что для реальной игры нужно обеспечение тайны карточек с буквами на руках. Как это сделать на одном компе (повторяю, в реальной игре), я пока не знаю. Поэтому так или иначе надо делать либо сетевую версию, либо ИИ.

И еще одно замечание про ИИ. Судя по словам Michael_Rybak'а, у человека будет слишком мало шансов выиграть. Кроме того, Игра довольно существенно многосторонняя, то есть рассчитана на 2 и больше игроков, причем по опыту я знаю, что играть втроем интереснее, чем вдвоем, а оптимум, намерное, четыре. Так что центр тяжести следует сместить все же в сторону интерфейса для сетевой игры.
Как вы думаете?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 2.11.2006 14:45
Сообщение #17


Michael_Rybak
*****

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

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


Цитата
у человека будет слишком мало шансов выиграть.

Тут у меня есть 2 соображения. Во-первых, понятно, что можно уровни сложности ввести. А во-вторых, можно показывать игроку все возможные слова, чтоб он только выбирал. Тогда комп (с жадным алгоритмом) будет проигрывать, потому что игрок сможет хоть как-то продумывать наперед. А игра получит приципиально другой характер smile.gif

Цитата
Так что центр тяжести следует сместить все же в сторону интерфейса для сетевой игры.


*Всю* сетевую часть, мне кажется, должен делать один (опытный в этом) человек, и тогда проблем не будет. А интерфейсы, конечно, заренее надо. И без объектов, имо, жутко такое писать. И сетевую часть, и вообще всё.

Еще хорошо бы code conventions.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
arhimag
сообщение 2.11.2006 15:36
Сообщение #18


Знаток
****

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

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


как - то давно вы мне давали чат по локалке, и я от туда вынес много чего-то умного. Так вот я предлагаю взять сделать чат, потом добавить функцию перебегающего сервера, тоесть тот кто открывает комнату чата у того в тойже проге и работает сервер. И дальше передавать сообщения типа:
"Player <1> <22><in>(<0>,<12>)" и их расшифровывать пример означает: игрок 1 поставил букву 22 в клетку 0,12. впринципе я все это могу реализовать, кроме одного я не могу реализовать поиск уже созданных игр


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 2.11.2006 16:50
Сообщение #19


Michael_Rybak
*****

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

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


Еще, если уж на то пошло, то давайте кто-то начнет проект на sf, tigris или еще где. И будет принимать главные решения относительно структуры, конвенций, распределения обязанностей. Имо, без version control гиблое дело, собирать по кускам по 100 раз. А так - весело будет.

Сообщение отредактировано: Michael_Rybak - 2.11.2006 16:50
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 3.11.2006 1:30
Сообщение #20


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(arhimag @ 2.11.2006 16:36) *
я предлагаю взять сделать чат, потом добавить функцию перебегающего сервера,
...
кроме одного я не могу реализовать поиск уже созданных игр

Мое мнение, не стОит делать самостоятельный сетевой уровень, по крайней мере сейчас.
Предлагаю для начала воспользоваться web-сервером. Сделать простейший CGI..
Я готов предоставить страничку на своем сайте ради такого дела smile.gif. Правда, может возникнуть сложность с исполняемым кодом.. Не помню, Linux там или BSD.. проверю. Если не сложится там - все равно найдем, где.
Цитата(Michael_Rybak @ 2.11.2006 17:50) *

давайте кто-то начнет проект на sf, tigris или еще где.
...
- весело будет.

Ты слыхал о принципе наказуемости инициативы? smile.gif Можешь заняться..
Если серьезно, я пока не уверен, что это действительно нужно. Давай дождемся реальной необходимости. Иначе нетрудно утонуть во всем этом, не начав..
А весело и так будет! smile.gif

Reflex, ты где? что молчишь?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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