rfgecnf
Гость
|
|
« : 06-10-2006 10:42 » |
|
Завожу тему) )
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #1 : 06-10-2006 10:44 » |
|
ну, давайте писать. только по-быстрому что-то простое, типа тетриса, сапёра, линий и прочей лабуды. что именно?
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #2 : 06-10-2006 10:47 » |
|
есть, кстати, тема интересная. можно наваять что-то по мотивам King's Bounty под винду.
|
|
« Последнее редактирование: 07-12-2007 19:24 от Алексей1153++ »
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #3 : 06-10-2006 10:49 » |
|
ну...простая_текстовая_так)_или_сложно_будет_а?(ссори_пробел_барахлит) мм_в_King's_Bounty_не_играл_давай_попробуем)
|
|
« Последнее редактирование: 07-12-2007 19:25 от Алексей1153++ »
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #4 : 06-10-2006 11:02 » |
|
Капустник, человек, не игравший в King's Bounty, не имеет морального права называться программером http://dosgames.ru/index.php?action=game&act=sub&id=114можно и текстовую. что-то типа рпг или квеста, но без графики. типа, настольный mud
|
|
« Последнее редактирование: 07-12-2007 19:26 от Алексей1153++ »
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #5 : 06-10-2006 11:04 » |
|
всё, клаву почистил пробел работает, када эта игра вышла меня на свете не было!)
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #6 : 06-10-2006 11:06 » |
|
Капустник, ну, игра культовая. комменты почитай куче народа она нравится больше героев и прочего в принципе, можно сделать что-то аналогичное на дельфе. чтобы безо всяких досбоксов тихо-скромно оно жило в окошке где-нить. в разгар напряжённого рабочего дня
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #7 : 06-10-2006 11:07 » |
|
но по времени это где-то с месяц займёт. недели две - минимум. если не пугает и других предложений нет - то можно попробовать.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #8 : 06-10-2006 11:10 » |
|
ну вот King's Bounty не качаеться! блин хостинг у них отключён(, а немного информации про mud можно? Я думаю не стоить начинаь сразу и игр с графикой(или стоит?) а так пожалуй начнём, спешить некуда)
|
|
« Последнее редактирование: 07-12-2007 19:29 от Алексей1153++ »
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #9 : 06-10-2006 11:16 » |
|
Капустник, мады - это текстовые игры. нагугли Dungeon And Dragons, или просто DnD. c них все рпг и начинались, когда-то. ещё безо всяких компьютеров, на бумажке с кубиками. рассказывать это - нереально долго, на диссертацию потянет свободно другой вариант. были (да и есть ещё наверное где-то) такие штуки, назывались "книжка-игра". на первой странице читаешь вводную, типа где ты оказался и зачем, дальше у тебя начинается выбор. например, открыть дверь налево - стр. 10, посмотреть в шкафу - страница 50. а на странице 50 будет написано - проверьте удачу (т.е. киньте кубик), если выпало чётное число - вы нашли лом. ну и т.д. при желании можно наворочать достаточно нелинейный сюжет, с развитием параметров, и пр.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #10 : 06-10-2006 11:16 » |
|
ты расскажи, что ты сам хочешь.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #11 : 06-10-2006 11:20 » |
|
ура я её скачал! ну попробуем давай чтонить вроде мада
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #12 : 06-10-2006 11:22 » |
|
хых. ну, давай. в какой области? фантастика, фэнтэзи, ещё что-нибудь? тебе что больше нравится, "постаппокалиптический мир", или полуголые девки с арбалетами?
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #13 : 06-10-2006 11:30 » |
|
Star Wars-наверн это)
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #14 : 06-10-2006 11:32 » |
|
а ты уверен, что хочешь именно mud? Multi User Dungeon? это подразумевает несколько игроков, т.е. в том или ином виде игра должна быть сетевой.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #15 : 06-10-2006 11:38 » |
|
сетевой.. всё, окончательно запутался))) ладно ладно)) Знаешь так) Пусть это будет текстовая игрушка для одного игрока в духе Star Wars)
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #16 : 06-10-2006 11:44 » |
|
пусть будет. какой жанр? текстовый шутер, я думаю, писать смысла нет, значит это будет что? стратегия? квест?
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #17 : 06-10-2006 11:49 » |
|
мм 4й эпизод смотрел? вот квестик по мотивам 4го эпизода
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #18 : 06-10-2006 11:50 » |
|
Капустник, не помню напиши сюжет вкратце, всё равно будет нужен.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #19 : 06-10-2006 12:02 » |
|
ок! Значит так Корелийская канарейка(кажись так) на которой летит принцесса Лея попадает в захватывающий луч Имперского корабля, после удачного штурма Дарт Вейдер не находит планов Звезды Смерти, От корабля отстыковывается спасательняа капсула, на борту которой находятся 2джоида: С3РО и R2D2, после этого они попадают на планету Татуин где их хватают джавы(а кстать вот мульт можна быстренько всё вспомнить) http://umora.ru/dl.cgi?file=115056909269123.swf уу еле нашёл) еси не вспомнишь, буду продолжать)
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #20 : 06-10-2006 12:10 » |
|
ыыыыыыыыыыыыыыы..... я не могу............ "Use the Force, Dude!"............ ыыыыыыыыыыыыы
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #21 : 06-10-2006 12:11 » |
|
аццкий мульт ладно, вспомнил. квест от имени Люка, я так понимаю?
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #22 : 06-10-2006 12:16 » |
|
гыыыыы, да, от Люка), потом сделаем за Империю)
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #23 : 06-10-2006 12:21 » |
|
и так обязательно будет use the Force,Dude!)))
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #24 : 06-10-2006 12:23 » |
|
значит, начинается на Татуине. с того, что он идёт покупать роботов. я правильно понимаю?
10. Покупка роботов 20. Починка Р2Д2 30. Робот сваливает - поиски робота 40. Перестрелка с этими дебилами в рояле на колёсах 50. Разговор с Оби Ван Кеноби 60. Сбегание на корабле с тем придуром и волосатым. 70. Спасение принцессы из звезды смерти 80. Штурм звезды смерти.
так, примерно? тут квестов не особо много получается, и непонятно, как в тексте перестрелки и пр. изображать.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #25 : 06-10-2006 12:26 » |
|
мм да, но обязательно надо бы рисунок поставить как Алдераан(кажись так) Звезда Смерти взрывает)
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #26 : 06-10-2006 12:30 » |
|
тока бы Джордж Лукас в суд не подал)
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #27 : 06-10-2006 12:35 » |
|
я себе так представляю, что есть просто текст на экране и в зависимости от возможных действий - набор кнопок. по нажатию на кнопку - следующее действие. возникает вопрос, а чём будут заключаться квесты. ну, пошёл он, купил робота, и что? где тут думать? и о чём, главное?
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #28 : 06-10-2006 12:37 » |
|
а обязательно должен быть смысл? ну а в чём смысл фильма? победить империю, муками, старанием, шаг в неправильную сторону-труп
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #29 : 06-10-2006 12:40 » |
|
Капустник, а мы своё сценарий сделаем. StarWars за ганьджубас. Империя запретила курить марихуанну. Звезда смерти - имперская секретная плантация. Оби-Ван-Кеноби - главный растаман, активист движения Legalize It, по суровой укурке собравший стебанутого робота, в которого зашил технологию производства бульбуляторов, пытающийся втянуть в растаманство юного Люка Скайвокера. Лия - глава звёздной системы, специализировавшейся на выращивании конопли в галактических масштабах. Борется с имперской монополией. Лукас у нас на коленях будет лицензию просить. ладно, это неважно.
ты мне лучше скажи, в чём квесты будут заключатся.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #30 : 06-10-2006 12:41 » |
|
Капустник, ну, хотелось бы, чтобы юзер не тупо жал кнопки "Дальше", "Дальше", "Дальше", а иногда юзал моск.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #31 : 06-10-2006 12:45 » |
|
......да уж, вопрос)) ну скажем например идёшь по планете там отряд штурмовиков, что делать? спрататься или попереть в лоб? или скажем космос, летит ракета, как увернуться или увеличить скорость? что то вробе этого лан я оффлайн до 19поем и уроки(
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #32 : 06-10-2006 12:52 » |
|
угу....
ну, можно так. сценарий хранить, как xml-файл. "игра" - по сути, просто плеер сценариев - будет подгружать этот файл и воспроизводить. можно будет небольшой редактор сценариев потом прикрутить. т.е. задачу решить в общем виде. а потом писать любые сценарии и "играть" в них в плеере.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #33 : 06-10-2006 14:33 » |
|
с чего начнём?
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #34 : 06-10-2006 14:52 » |
|
я сейчас сбегаю, и до понедельника уже не появлюсь. нужно следующее.
1. определиться с набором характеристик персонажа. 2. определиться с набором доступных ему действий.
после этого можно написать простенький xml, из двух локаций всего, и начинать ваять интерфейс.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #35 : 06-10-2006 14:56 » |
|
мм впринципе думаю характеристики ненужны... а нобер доступных дейтвий, даж незнаю
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #36 : 06-10-2006 14:58 » |
|
Капустник, с характеристиками интереснее. на успешные действия можно вешать увеличение какого-то навыка. сами действия:
1. переход в другую локацию 2. бой 3. взять 4. оглядеться
и т.д. много не надо, основные хотя бы.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #37 : 06-10-2006 15:12 » |
|
ну впринципе это же будет квест ебз графики, а чё писать просто в текстовом документе характеристики, иль где?
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #38 : 06-10-2006 15:30 » |
|
Капустник, характеристики будут определять возможность совершить то или иное действие. например, можно гонки прикрутить. если этот ёжик летать не научится - не сможет потом звезду взорвать. ну и т.д.
а писать просто в отдельном окне где-нить, типа
Сила Ловкость Выносливость Накуренность
и т.д.
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #39 : 06-10-2006 15:39 » |
|
лан, подождём до понедельника, там посмотрим
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #40 : 06-10-2006 15:46 » |
|
знаешь ,давай начнём лучьше с тетриса)
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #41 : 06-10-2006 17:47 » |
|
Капустник, характеристики будут определять возможность
.... ....
Сила Ловкость Выносливость Накуренность
и т.д.
напоминает "гопника " ) скинуть программку?
|
|
« Последнее редактирование: 06-10-2006 17:49 от Алексей1153 »
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #42 : 07-10-2006 05:25 » |
|
гы, а я для тетриса сюжет придумал: мы жители нижниго народа! и однажды какой та казёл с неба начал кидать на нас фсякими фигурками! а еси будет полный экранчик появиться надпись: GAME OVER! вот такие дела а еси собирать их всести в одну линию они ищёзнут!
нда гнопик игра-жесть
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #43 : 07-10-2006 06:51 » |
|
Капустник, хе хе хе... тетрис - игра бесконечная и без сюжета. Истинно русская игра )) , изобретённая русским ))
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #44 : 07-10-2006 09:29 » |
|
ну да изобрёл её русский человек) но сюжет есть даже в тетрисе(см журнал "Игромания") ыыы
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #45 : 07-10-2006 10:58 » |
|
игромания - отстой дремучий
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #46 : 07-10-2006 11:13 » |
|
ну незнаю, незнаю , чатию больше года, меня устраивает
|
|
|
Записан
|
|
|
|
MS
|
|
« Ответ #47 : 07-10-2006 17:19 » |
|
Игромания - журнал для геймеров от 14 до 16, из программирования там только примеры в 2 строки
|
|
|
Записан
|
Ничто так не ограничивает полёт мысли программиста, как компилятор
|
|
|
rfgecnf
Гость
|
|
« Ответ #48 : 08-10-2006 06:24 » |
|
2страницы)
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #49 : 09-10-2006 08:38 » |
|
Капустник, ну фто? тетрис?
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #50 : 09-10-2006 15:17 » |
|
ДА!
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #51 : 10-10-2006 09:13 » |
|
тогда последний вопрос. насколько подробно описывать процесс? стоит ли, например, размусоливать про то же ООП, что-то объяснять, или просто приводить код?
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #52 : 10-10-2006 11:01 » |
|
просо, сделать тетрис,без мусолиней
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #53 : 10-10-2006 11:31 » |
|
ладно, поехали. боевая задача:
1. написать унаследованный от TStringGrid класс, скажем, TGameGrid, который будет предком для любой игры клеточной типа, вроде тетриса, сапёра, или, там, крестиков - ноликов.
2. написать класс TTetris, унаследованный от TGameGrid, который и будет, собственно, игрой.
3. сделать интерфейс, в котором будет юзаться этот класс (TTetris).
для простоты пункты 2 и 3 имеет смысл совместить. щас перекурю и будем ваять.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #54 : 10-10-2006 11:55 » |
|
примерный код для TGameGrid: unit GameGridClass;
interface
uses Windows, Classes, Forms, Grids;
type TGameState = (gsNone, gsPlaying, gsUserWon, gsUserLoose);
TGameGrid = class (TStringGrid) private fScore: integer; fState: TGameState; fSpeed: integer; fUseSpeed: boolean; procedure Wait (Ms: Cardinal); public property Score: integer read fScore write fScore default 0; property Speed: integer read fSpeed write fSpeed default 1000; property State: TGameState read fState default gsNone; property UseSpeed: boolean read fUseSpeed write fUseSpeed default TRUE; constructor Create (AOwner: TComponent); override; procedure Move; virtual; abstract; procedure Play; virtual; procedure Prepare; virtual; abstract; end;
implementation
{ TGameGrid }
constructor TGameGrid.Create(AOwner: TComponent); begin inherited; fScore := 0; fSpeed := 1000; fState := gsNone; fUseSpeed := TRUE; end;
procedure TGameGrid.Play; begin while TRUE do begin if fState <> gsPlaying then Break; Move; if fUseSpeed then Wait (fSpeed); end; end;
procedure TGameGrid.Wait(Ms: Cardinal); var OldTickCount: Cardinal; begin OldTickCount := GetTickCount; while GetTickCount - OldTickCount < Ms do Application.ProcessMessages; end;
end.
пока никуда не прикручивал его, просто набросал логику любой "тетрисоподобной" игрушки. если есть вопросы - спрашивайте, я пока остальным займусь.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #55 : 10-10-2006 15:25 » |
|
шота молчать все, как рыбы об танк.... ладно, продолжим из любви к исскуству. модуль TetrisGameClass: unit TetrisGameClass;
interface
uses Classes, Graphics, SysUtils, Types, StdCtrls, Grids, GameGridClass, ExtCtrls;
const clFixed = clBtnFace; clEmpty = clWhite; clFigure = clBlue; clDropped = clGreen;
type TTetrisGame = class (TGameGrid) private procedure Freeze; procedure NewFigure; function CheckSpace (dx, dy: integer): boolean; procedure CheckState; protected procedure DeleteRow (ARow: integer); override; public constructor Create (AComponent: TComponent); override; procedure DrawCell (ACol, ARow: integer; ARect: TRect; AState: TGridDrawState); override; procedure FigureLeft; procedure FigureRight; procedure Move; override; procedure MoveFigure (dx, dy: integer); procedure Prepare; override; end;
implementation
{ TTetrisGame }
function TTetrisGame.CheckSpace(dx, dy: integer): boolean; var i, j: integer; begin Result := TRUE; for j := RowCount - dy - 1 downto 0 do begin for i := 1 to ColCount - 2 do begin if Cells [i, j] = '1' then begin if (Cells [i + dx, j + dy] = '0') or (Cells [i + dx, j + dy] = '2') then Result := FALSE; end; end; end; end;
procedure TTetrisGame.CheckState; var i, j: integer; AGameOver, AFilledRow: boolean; begin j := RowCount - 2; while j >= 0 do begin AFilledRow := TRUE; for i := 1 to ColCount - 2 do if Cells [i, j] <> '2' then AFilledRow := FALSE; if AFilledRow then DeleteRow (j) else Dec (j); end;
AGameOver := FALSE; for j := RowCount - 1 downto 0 do for i := 1 to ColCount - 2 do if (Cells [i, j] = '2') and (j < 4) then AGameOver := TRUE; if AGameOver then State := gsUserLoose; end;
constructor TTetrisGame.Create(AComponent: TComponent); begin inherited; FixedCols := 0; FixedRows := 0; ColCount := 11; RowCount := 21; DefaultColWidth := 16; DefaultRowHeight := 16; DefaultDrawing := FALSE; GridLineWidth := 0; ScrollBars := ssNone; Options := []; Width := (DefaultColWidth + GridLineWidth) * ColCount + 4; Height := (DefaultRowHeight + GridLineWidth) * RowCount + 4; Randomize; end;
procedure TTetrisGame.DeleteRow(ARow: integer); var i, j: integer; begin for j := ARow downto 1 do for i := 1 to ColCount - 2 do Cells [i, j] := Cells [i, j - 1]; for i := 1 to ColCount - 2 do Cells [i, 0] := ''; end;
procedure TTetrisGame.DrawCell(ACol, ARow: integer; ARect: TRect; AState: TGridDrawState); var AValue: integer; begin inherited; with Canvas do begin if Cells [ACol, ARow] <> '' then begin AValue := StrToInt (Cells [ACol, ARow]); case AValue of 0: begin Brush.Color := clFixed; FillRect (ARect); Frame3D (Canvas, ARect, clWhite, clGray, 1); end; 1: begin Brush.Color := clFigure; FillRect (ARect); Frame3D (Canvas, ARect, clAqua, clNavy, 1); end; 2: begin Brush.Color := clDropped; FillRect (ARect); Frame3D (Canvas, ARect, clLime, clTeal, 1); end; end; end else begin Brush.Color := clEmpty; FillRect (ARect); end; end;
end;
procedure TTetrisGame.FigureLeft; begin if CheckSpace (-1, 0) then MoveFigure (-1, 0); end;
procedure TTetrisGame.FigureRight; begin if CheckSpace (1, 0) then MoveFigure (1, 0); end;
procedure TTetrisGame.Freeze; var i, j: integer; begin for j := 0 to RowCount - 1 do for i := 1 to ColCount - 2 do if Cells [i, j] = '1' then Cells [i, j] := '2'; end;
procedure TTetrisGame.Move; begin if CheckSpace (0, 1) then MoveFigure (0, 1) else begin Freeze; CheckState; if State = gsPlaying then NewFigure; end; end;
procedure TTetrisGame.MoveFigure(dx, dy: integer); var i, j: integer; begin for j := RowCount - 2 downto 0 do if dx < 0 then begin for i := 1 to ColCount - 2 do if Cells [i, j] = '1' then if Cells [i + dx, j + dy] = '' then begin Cells [i + dx, j + dy] := Cells [i, j]; Cells [i, j] := ''; end; end else begin for i := ColCount - 2 downto 1 do if Cells [i, j] = '1' then if Cells [i + dx, j + dy] = '' then begin Cells [i + dx, j + dy] := Cells [i, j]; Cells [i, j] := ''; end; end; end;
procedure TTetrisGame.NewFigure; var AFigure, ARotation, fLeft, fTop: integer; begin AFigure := Random (8); ARotation := Random (4); fLeft := ColCount div 2 - 2; fTop := 0; case AFigure of 0, 5..7: begin Cells [fLeft + 2, fTop] := '1'; Cells [fLeft + 2, fTop + 1] := '1'; Cells [fLeft + 2, fTop + 2] := '1'; Cells [fLeft + 2, fTop + 3] := '1'; end; 1: begin Cells [fLeft + 1, fTop] := '1'; Cells [fLeft + 2, fTop] := '1'; Cells [fLeft + 1, fTop + 1] := '1'; Cells [fLeft + 2, fTop + 1] := '1'; end; 2: begin Cells [fLeft + 1, fTop] := '1'; Cells [fLeft + 2, fTop] := '1'; Cells [fLeft + 2, fTop + 1] := '1'; Cells [fLeft + 3, fTop + 1] := '1'; end; 3: begin Cells [fLeft + 2, fTop] := '1'; Cells [fLeft + 3, fTop] := '1'; Cells [fLeft + 1, fTop + 1] := '1'; Cells [fLeft + 2, fTop + 1] := '1'; end; 4: begin Cells [fLeft + 1, fTop] := '1'; Cells [fLeft + 2, fTop] := '1'; Cells [fLeft + 3, fTop] := '1'; Cells [fLeft + 2, fTop + 1] := '1'; end; end; end;
procedure TTetrisGame.Prepare; var i, j: integer; begin for i := 1 to ColCount - 2 do for j := 0 to RowCount - 2 do Cells [i, j] := ''; for i := 0 to RowCount - 1 do begin Cells [0, i] := '0'; Cells [ColCount - 1, i] := '0'; end; for i := 1 to ColCount - 2 do Cells [i, RowCount - 1] := '0'; NewFigure; end;
end.
куча недоделок. например, генерится только 4 фигуры вместо 7 (лениво дописывать однотипные вещи), фигуры не умеют переворачиваться и "падать" вниз до конца по нажатию кнопки, не увеличивается скорость, ну и ещё парочка мелочей. но в целом фигуры генерятся, падают, двигаются вправо/влево, и при заполнении ряда он стирается. о, ещё подсчёт очков тоже лень писать. сама программа выглядит так: unit UnitMain;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, GameGridClass, TetrisGameClass, StdCtrls;
type TFormMain = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } fTetris: TTetrisGame; public { Public declarations } end;
var FormMain: TFormMain;
implementation
{$R *.dfm}
procedure TFormMain.FormCreate(Sender: TObject); begin fTetris := TTetrisGame.Create (Self); fTetris.Parent := Self; fTetris.Speed := 500; fTetris.Prepare; end;
procedure TFormMain.Button1Click(Sender: TObject); begin if fTetris.State <> gsPaused then fTetris.Prepare; fTetris.Play; end;
procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction); begin fTetris.Stop; Action := caFree; end;
procedure TFormMain.Button2Click(Sender: TObject); begin fTetris.Pause; end;
procedure TFormMain.Button3Click(Sender: TObject); begin fTetris.FigureLeft; end;
procedure TFormMain.Button4Click(Sender: TObject); begin fTetris.FigureRight; end;
end.
будет нечего делать - допишу остальное.
|
|
« Последнее редактирование: 07-12-2007 19:31 от Алексей1153++ »
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #56 : 10-10-2006 18:50 » |
|
ну и дабы закрыть тему... готовый проект (сделано всё, кроме вращения - поставил заглушку, кому интересно - дописывайте ) ну и скриншот.
|
|
« Последнее редактирование: 10-10-2006 18:53 от x77 »
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #57 : 11-10-2006 16:06 » |
|
ы
|
|
|
Записан
|
|
|
|
rfgecnf
Гость
|
|
« Ответ #58 : 11-10-2006 16:20 » |
|
слух ,а ты можешь мне объяснить как чиловеку каторый васче ничё нипанимает а? создай то создай это я думаешь знаю чё это?))
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #59 : 11-10-2006 19:47 » |
|
Капустник, я же спрашивал - надо объяснять? завтра будут комментарии
|
|
|
Записан
|
|
|
|
_MK
Гость
|
|
« Ответ #60 : 19-10-2006 18:49 » |
|
Простенькую? Эх. Давно это было. Вот. Простейшая игруша. Все на Api. Написал где-то за 1 час. program Project;
{$R 'resourse\project.res' 'resourse\project.rc'}
uses Windows, Messages;
Const ClassName = 'GameClass'; Const IconName = 'ID_ICON'; Const TitleName = 'Пятнашки 15 vs 15'; Const MenuName = 'programMenuName'; Const ButtonClass = 'BUTTON'; Const VictoryMessage = 'Поздравляем! Вы победили!'+ #13 + 'Хотите ли вы повторить?'; Const VictoryTitle = 'Ура!'; Const BueBueMessage = 'До свидания!'; Const BueBueTitle = 'Вот и все..';
Const ButtonSize = 100; Const GameSize = 15;
Type TGameObject = record Gamehandle : HWND; Xpos,Ypos : WORD; End;
Var GameFirst : Boolean = TRUE; Var GamePlay : array [0..GameSize] of TGameObject;
Procedure InitGameObject(hwndparent : HWND); Const ButtonsName : array [0..14] of PAnsiChar = ('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'); Var X : Byte; Begin For X := 0 to 14 do With GamePlay[X] do Begin Xpos := (X mod 4) * ButtonSize; Ypos := (X div 4) * ButtonSize; End; If GameFirst then Begin For X := 0 to 14 do With GamePlay[X] do Begin Gamehandle := CreateWindow(ButtonClass,ButtonsName[X],WS_VISIBLE or WS_CHILD,Xpos,Ypos,ButtonSize,ButtonSize,hwndparent,0,hInstance,NIL); End; GameFirst := False; End; GamePlay[GameSize].Xpos := (GameSize mod 4) * ButtonSize; GamePlay[GameSize].Ypos := (GameSize div 4) * ButtonSize; End;
Procedure Swap(a,b : byte); var XX,YY : WORD; Begin XX := GamePlay[a].Xpos; GamePlay[a].Xpos := GamePlay[b].Xpos; GamePlay[b].Xpos := XX; YY := GamePlay[a].Ypos; GamePlay[a].yPos := GamePlay[b].YPos; GamePlay[b].YPos := YY; End;
Procedure RandomizeGame; Var A,B,C : Byte; Begin randomize; For A := 1 to random(50) do Begin b := random(GameSize+1); c := random(GameSize+1); swap(c,b); With GamePlay[B] do MoveWindow(GameHandle,Xpos,Ypos,ButtonSize,ButtonSize,true); With GamePlay[C] do MoveWindow(GameHandle,Xpos,Ypos,ButtonSize,ButtonSize,true); End; End;
Function CanDoIt(x,y : word) : Byte; Begin If (x-ButtonSize = GamePlay[GameSize].Xpos) and (y = GamePlay[GameSize].YPos) then begin Result := 1; exit end; If (x+ButtonSize = GamePlay[GameSize].Xpos) and (y = GamePlay[GameSize].YPos) then begin Result := 2; exit end; If (y-ButtonSize = GamePlay[GameSize].Ypos) and (x = GamePlay[GameSize].XPos) then begin Result := 3; exit end; If (y+ButtonSize = GamePlay[GameSize].Ypos) and (x = GamePlay[GameSize].XPos) then begin Result := 4; exit end; Result := 255; End;
Procedure CheckGameVictory(hwndParent : HWND); Var X : Byte; Begin For X := 0 to GameSize do With GamePlay[x] do If (Xpos <> (X mod 4) * ButtonSize) or (YPos <> (X div 4)*ButtonSize) then exit;
If MessageBox(0,VictoryMessage,VictoryTitle,MB_YESNO) = IDYES then Begin InitGameObject(hwndParent); End else Begin MessageBox(0,BueBueMessage,BueBueTitle,MB_OK); SendMessage(hwndParent,WM_DESTROY,0,0); End; End;
Procedure NewStep(SendHandle : HWND); Var X : byte; Begin For X := 0 to GameSize do If GamePlay[X].GameHandle = SendHandle then begin SendHandle := X; break end; Case CanDoIt(GamePlay[SendHandle].Xpos,GamePlay[SendHandle].Ypos) of 1..4 : swap(SendHandle,GameSize); else exit; End; With GamePlay[GameSize] do MoveWindow(GameHandle,XPos,YPos,ButtonSize,ButtonSize,TRUE); With GamePlay[SendHandle] do MoveWindow(GameHandle,XPos,YPos,ButtonSize,ButtonSize,TRUE); End;
function MainWndProc(handle : HWND; uMsg : UINT; wparam : WPARAM; lparam : LPARAM) : LRESULT; WinApi; const ID_EXIT = 2; const ID_HELP = 3; const ID_ABOUT = 4; Begin case uMsg of WM_CREATE: Begin ZeroMemory(addr(GamePlay),SizeOf(GamePlay)); InitGameObject(handle); RandomizeGame; End; WM_COMMAND: begin If lparam = 0 then case loword(wparam) of ID_ABOUT: ; ID_HELP: ; ID_EXIT: SendMessage(handle,WM_CLOSE,0,0); end else begin NewStep(lparam); CheckGameVictory(handle); end end; WM_DESTROY: PostQuitMessage(0); else begin MainWndProc := DefWindowProc(handle, uMsg, wparam, lparam); exit; end; end; MainWndProc := 0; End;
Procedure RegisterWC; Var WC : WNDCLASSEX; icon : HICON; Begin WC.cbSize := SizeOf(WC); WC.style := CS_HREDRAW or CS_VREDRAW ; WC.lpfnWndProc := addr(MainWndProc); WC.cbClsExtra := 0; WC.cbWndExtra := 0; WC.hInstance := hInstance; icon := LoadIcon(hInstance,IconName); WC.hIcon := Icon; WC.hIconSm := Icon; WC.hCursor := LoadCursor(hInstance,IDC_ICON); WC.hbrBackground := COLOR_BTNHIGHLIGHT; WC.lpszMenuName := MenuName; WC.lpszClassName := ClassName; RegisterClassEx(WC); End;
Procedure CreateMyWindow; Begin CreateWindow(ClassName,TitleName, WS_VISIBLE or WS_SYSMENU, CW_USEDEFAULT,CW_USEDEFAULT,400,450, 0,0,hInstance,NIL); End;
Procedure MainProcedure; Var MyMsg : MSG; Begin while GetMessage(MyMsg,0, 0, 0) <> LongBool(0) do begin TranslateMessage(MyMsg); DispatchMessage(MyMsg); end; ExitProcess(MyMsg.wParam); End;
begin RegisterWC; CreateMyWindow; MainProcedure; end.
--------------------project.rc----------------------------------- ;This Resource Script was generated by WinAsm Studio.
#define ID_FILE 1 #define ID_EXIT 2 #define ID_HELP 3 #define ID_ICON 1000 #define ID_ABOUT 4
ID_ICON ICON DISCARDABLE "Icon.ico"
programMenuName MENUEX DISCARDABLE BEGIN POPUP "&File",ID_FILE BEGIN MENUITEM "Exit",ID_EXIT END MENUITEM "&About",ID_ABOUT MENUITEM "H&elp",ID_HELP END
|
|
« Последнее редактирование: 07-12-2007 19:33 от Алексей1153++ »
|
Записан
|
|
|
|
_MK
Гость
|
|
« Ответ #61 : 19-10-2006 18:51 » |
|
p.s Сейчас как раз пишу генератор квестов. Собираюсь прикрутить музыку. Возможность самому п-ть дввижки, вставлять картинки. etc... Напишу, думаю скину сюда.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #62 : 20-10-2006 09:17 » |
|
_MK, а генератор квестов для чего?
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #63 : 20-10-2006 09:19 » |
|
Капустник, извини, несколько раз пытался начать всё откомментить, но понял - что делое гиблое. объяснение простого ключевого слова class само по себе тянет на небольшой реферат. будет проще, если ты задашь конкретные вопросы, если они у тебя есть. а я, в свою очередь, постараюсь ответить.
|
|
|
Записан
|
|
|
|
_MK
Гость
|
|
« Ответ #64 : 20-10-2006 10:23 » |
|
x77 Для создания текстовых квестов. Сама по себе идея не новая, но в реализации есть довольно интересные моменты, так к примеру, я собираюсь дать пользвателю возможность самому распологать кнопки, поля ввода-вывода, вводить новые характеристики (допустим силу ) описывающие персонажей, работать с этими характеристиками. По сути дела это то же программирование, но уже на сверхвысоком уровне (и в переделах игры).
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #65 : 07-12-2007 19:36 » |
|
Offtopic: в посте #56 - Игоревский проект и скрин тетриса на Дельфи - может тоже в файлы пора ? )
Поставлю в угол.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #66 : 10-12-2007 08:37 » |
|
Алексей1153++, можно.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|
RXL
|
|
« Ответ #68 : 09-09-2011 19:26 » |
|
rfgecnf, с возвращением!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #70 : 09-09-2011 20:00 » |
|
Спасибо) А вот "Гопника", которого выкладывали тут когда-то я до сих пор не могу пройти ну да, там рулетка ) Я прошёл как-то. В конце этого крутого-прекрутого декана надо запинать, а уже ближе к концу запина тебя ждёт большой сюрприз Это чтобы раззадорить тебя )) Самое главное в игре - как можно больше бабосов заработать. Далее как лавина - прокачиваешься в тренажёрках, закупаешь побольше жратвы, крутизна прёт
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #71 : 10-09-2011 13:23 » |
|
rfgecnf, пожалуйста
|
|
|
Записан
|
|
|
|
|