Результаты поиска
| |
TimKruz | Дата: Воскресенье, 06 Января 2013, 16:06 | Сообщение # 261 | Тема: Проблема с паскалем. |
старожил
Сейчас нет на сайте
| Я уже когда-то кому-то в какой-то теме объяснял эту проблему, можно поискать то сообщение в этом разделе. Всё просто и банально, но многие новички этого не понимают сразу. Объясню ещё раз.
ArtSvetlakov, у тебя в коде стоит read(a1,b1,a2,b2), а в конце кода стоит readln. После того, как ты ввёл эти четыре переменные, ты нажал enter, т.е. ввёл символы возврата каретки и перевода каретки на новую строку. Однако процедура read не считывает эти два символа. Зато это делает readln (расшифровка - "read line", т.е. "прочитать строку"), которая считывает всё, включая символы в конце строки. То есть, когда выполнение программы доходит до "пустого" (без аргументов) readln, идущего после (сразу или через N строк - неважно) read, она считывает оставшиеся в буфере ввода символы, которые были введены нажатием enter, но не прочитаны read. И, естественно, если после readln никакого кода больше нет - программа завершается. Так какое же решение? Решение банально - перед заключительным readln писать не read, а readln, либо в конце программы писать два пустых readln подряд. Ну и вообще, нужно смотреть, где лучше использовать read, а где readln, хотя при вводе данных вручную (из консоли MS-DOS) практической разницы между read и readln нет (всё равно ввод данных завершается нажатием enter, а это провоцирует перевод строки; чтение без перевода строки можно осуществлять функциями keypressed и readkey модуля crt и циклом, но новичку это сделать несколько сложнее, а практическая ценность сомнительна). Но, конечно, при получении данных из, например, файла разница уже есть.
Цитата (MGD-team) Delay(a) Цитата (ArtSvetlakov) Выдает ошибку "Неизвестный идентификатор". Цитата (ArtSvetlakov) задержки всё равно нет. Просто завершается и всё. Процедура delay(миллисекунды) находится в модуле crt и позволяет приостановить выполнение программы на необходимое количество миллисекунд. Однако, действительное время задержки меняется в зависимости от микропроцессора (или чего-то другого, точно не знаю), т.е. delay(1000) на одном компьютере будет давать правильную задержку в 1 секунду, на другом зависнет на 10 секунд, а на третьем задержка будет вообще незаметна для пользователя. Всё из-за того, что TurboPascal разрабатывался относительно давно, а компьютерные технологии меняются очень быстро, поэтому старые методы работают плохо или не работают совсем на современных компьютерах... Поэтому использовать delay нежелательно, если хочешь использовать программу на разных компьютерах (но чисто для своего компьютера подогнать приблизительную задержку всё-таки можно). Но делать задержку на требуемые N миллисекунд в TurboPascal всё-таки можно; для этого можно, например, с помощью функций получения времени системных часов модуля dos получать системное время в цикле, и выходить из цикла при достижении определённого времени.
Цитата (karuy) Sleep(aValue: Integer); Цитата (ArtSvetlakov) "Неизвестный идентификатор". Правильно, процедуры sleep вообще нет в Паскале, она заменила delay в Delphi.
Цитата (ArtSvetlakov) Но я решил проблему. Правда немножко забавным способом Так тоже можно, но я бы посоветовал использовать конструкцию типа такой: Код uses crt; begin repeat //полезный код writeln('Для выхода нажмите escape, для повторения нажмите любую клавишу...'); until readkey=#27; //либо так: until readkey<>#32; тогда текст меняется на //'для повтора нажмите пробел, для выхода любую другую клавишу...' end. Её можно всячески усложнять, добавляя различные условия и переходы, но общая суть одна - вместо завершения можно пройтись по программе снова, не перезапуская её (полезно при тестировании). Функция readkey считывает один символ из буфера клавиатуры, если буфер пуст - ждёт, когда пользователь нажмёт любую кнопку. Естественно, в самом коде следует использовать readln (либо очищать буфер вручную, вызовом readkey), чтобы при проверке условия until... буфер клавиатуры был пуст и, тем самым, возникло ожидание нажатия. Символ #27 - это клавиша escape, символ #32 - пробел, символ #13 - enter (именно так, это виртуальный код клавиши, помещаемый в буфер клавиатуры). Ну с остальными символами, если хочешь, сам разберёшься, на эту тему куча примеров в разных книгах по Паскалю есть.
P.S. Писать program... совсем не обязательно. Она может быть нужна, например, если программа вызывается другой программой на TurboPascal (тогда это название должно совпадать с названием файла программы).
|
|
| |
TimKruz | Дата: Воскресенье, 06 Января 2013, 03:18 | Сообщение # 262 | Тема: С чего начать? |
старожил
Сейчас нет на сайте
| Цитата (Flaut) языка легкого Лёгкость языка относительна, для каждого есть лёгкие и сложные в освоении языки, в том числе программирования... Так что лучший вариант - пробовать разные, дегустировать, книги по конкретным языкам листать, ну и, конечно, не забывать о возможностях и перспективах... Кто-то в пять лет начал свободно программировать на Ассемблере, а кто-то в тридцать пять Лого освоить никак не может...
Но лично я бы посоветовал начать с Pascal/Delphi... Тут [в Delphi] и мощность, и функционал, и лёгкость понимания, и удобство использования... Но, опять же, кому-то может показаться легче C/C++...
|
|
| |
TimKruz | Дата: Суббота, 05 Января 2013, 21:10 | Сообщение # 263 | Тема: Мои вопросы по Free Pascal |
старожил
Сейчас нет на сайте
| Цитата (Andrey_M) Я не могу изучать теорию слишком долго. После ста килограммов теории я забываю даже то, с чего начинается код проги. Я не хочу ничего грандиозного... Просто языки программирования создавались для создания программ. Ну изучать нужно поэтапно, а не прыгать от одного к другому. Ты же не собираешься делать DLL, содержащую единственную процедуру write_hello, выводящую 'Hello world!'? Я так думаю, тебе пока рано изучать DLL. Разберись сначала с обычными программами, а потом к библиотекам перейдёшь...
|
|
| |
TimKruz | Дата: Суббота, 05 Января 2013, 02:18 | Сообщение # 264 | Тема: Графика в консоли |
старожил
Сейчас нет на сайте
| Цитата (Saitei) не знаю куда смотреть Ну игры с символьной графикой делаются точно так же, как и обычные, только вывод картинки другой. В первую очередь нужно узнать и запомнить устройство видеобуфера в текстовом режиме MS-DOS. Так же, как и в графическом режиме, он видеопамять разделёна на страницы, из которых только одна выводится на экран. Какую конкретно выводить (по-умолчанию нулевая) - задаётся функцией какого-то прерывания MS-DOS (не помню номер, но список всех прерываний и их функций можно легко найти). Именно эта особенность часто использовалась для создания на экране анимации - кадр рисовался на странице, не выводящейся на экран, затем она устанавливалась выводящейся на экран, а следующий кадр рисовался на другой странице (двух страниц достаточно). Каждый символ на экране кодируется двумя байтами, один - собственно символ, второй - его атрибуты (цвет символа 4 бита, цвет фона 3 бита и бит мерцания, но он в таких играх вряд ли может понадобится). А ещё следует изучить стандартный для MS-DOS набор символов, там кроме всего прочего есть специальные символы псевдографики, правда, для игр не очень подходит, но пригодится. Ну и режим экрана можно установить не стандартный 80 столбцов 25 строк, а 80 столбцов 50 строк (если развернуть консоль на весь экран, символы получатся как бы квадратные).
Алгоритм вывода на экран примерно следующий. Всю карту хранишь в одном массиве или любой другой структуре памяти, плюс отдельно позиции персонажей и т.п. Далее нужно два массива с абсолютной адресацией на две страницы в видеопамяти (конкретные адреса памяти сам найдёшь в интернете, я не помню). Абсолютная адресация позволяет редактировать содержимое напрямую. Далее осуществляешь вписывание нужных символов с их атрибутами в массив, меняешь страницу, выводящуюся на экран, и всё.
|
|
| |
TimKruz | Дата: Суббота, 05 Января 2013, 01:37 | Сообщение # 265 | Тема: Рельефный ландшафт в 2D |
старожил
Сейчас нет на сайте
| Цитата (Нохчи) на двухмерных картах? А с чего ты взял, что они (те, что на скриншотах) именно двумерные? Цитата (Нохчи) Предпологал, что это текстура - рендер 3D ландшафта Цитата (Нохчи) можно даже редактировать карту, так что эта версия отпала Можно во время загрузки карты генерировать 3D-модель по карте высот или другой информации о карте, рендерить её с точки зрения игровой камеры и использовать как текстуру на плоском прямоугольнике, чтобы снизить потребление ресурсов на слабых компьютерах. Это если камера смотрит всегда в одну сторону (не вращается) и юниты не могут заходить за нависшие скалы (или таких скал вообще нет). Иначе придётся использовать 3D-модель (или резать текстуру на несколько слоёв по высоте и располагать на нескольких прямоугольниках, если нужен плоский ландшафт и при этом возможность юнитов уходить за выступающие части, но обычно такую возможность всё-таки исключают).
Ну ещё можно нарисовать всевозможные варианты кусков ландшафта и совмещать их в единый ландшафт по матрице с номерами кусков. Но такой вариант обычно применяют в очень простых картах, т.к. картинок-кусков потребуется много.
Сообщение отредактировал TimKruz - Суббота, 05 Января 2013, 01:42 |
|
| |
TimKruz | Дата: Суббота, 05 Января 2013, 00:46 | Сообщение # 266 | Тема: Мои вопросы по Free Pascal |
старожил
Сейчас нет на сайте
| Цитата (Andrey_M) Мне не нужно окно винды (и тем более родительское). Мне нужно открыть какое-то другое приложение (любое) средствами винды. Открыть также, как это я сделал бы двумя щелчками мыши. Мне не нужно передавать никакие сообщения приложения... Ну так просто ставь nil и 0 в ненужных тебе аргументах процедуры, которую написал karuy. Например, вот так прекрасно работает (проверял в Delphi, но это WinAPI функция, должна работать везде) и запускает калькулятор: Код ShellExecute(0,nil,'C://Windows/System32/calc.exe',nil,nil,0); Т.е. я задал только полное имя программы. Но нужно подключить специальный модуль (в Delphi это ShellAPI) или описать импорт процедуры из библиотеки shell32.dll вручную (только называется там она ShellExecuteA или ShellExecuteW, подробнее читай справку по WinAPI, например, эту). Цитата (Andrey_M) А насчёт длл как? Гуглить если, то выходят такие же, как моя, темы, а мне нужен ответ. Так как их создавать в паскале? В Delphi они создаются легко (File > New > Other... > DLL Wizard). На Lazarus тоже (Файл > Создать... > Проект > Библиотека)... Потом просто пишешь код как в обычной программе/модуле, а затем с помощью специальной директивы экспортируешь нужные (чтобы программы, подключающие эту библиотеку, могли импортировать и использовать эти процедуры/функции). А вот про FPC не знаю...
Вообще, такое ощущение, что ты хочешь что-то грандиозное соорудить, не имея достаточных знаний... Сначала изучи всё по-отдельности, почитай книги, документацию по языку, поделай примерчиков, а потом, когда почувствуешь, что готов - сможешь написать свою программу... А так ты по каждому вопросу на форум бегать будешь... Цитата (Andrey_M) такие же, как моя, темы, а мне нужен ответ Ну так почитай те темы, в них наверняка кто-то что-то отвечал... Не может быть такого, чтобы проблема существовала давно, для неё имелось решение, о ней много раз спрашивали, но при этом никто не сообщил решения. Наверное, ты плохо искал.
Сообщение отредактировал TimKruz - Суббота, 05 Января 2013, 00:56 |
|
| |
TimKruz | Дата: Четверг, 03 Января 2013, 22:45 | Сообщение # 267 | Тема: Мои вопросы по Free Pascal |
старожил
Сейчас нет на сайте
| Я так понимаю, ты используешь FPC, который в режиме DOS? Цитата (Andrey_M) 1. Можно ли реализовать проверку нажатия кнопки мыши? Для этого нужно активировать мышь через её драйвер. Я как-то списывал из книги модуль управления мышью как в текстовом, так и графическом режиме (который не поддерживается Windows Vista/7/8, только если через DOSBOX эмулировать) MS-DOS, но он был для TurboPascal и может не работать с FreePascal, тем более, что у FreePascal графика выводится не в режиме MS-DOS, а в отдельном Windows-окне, значит и функции другие. В этом модуле, если вкратце, с помощью встроенных средств TurboPascal (но можно было бы с помощью встроенного ассемблера TASM) устанавливались значения нужных регистров, вызвалось прерывание 33h (это прерывание MS-DOS для работы с драйвером мыши), и считывался результат из тех же регистров. Короче, нужно почитать официальную документацию по FreePascal, если не хочешь юзать TurboPascal. Цитата (Andrey_M) 2. Каким образом реализовать изменение строки до текущей, пример снизу: Нужно сделать перевод курсора на две строки вверх, это делается процедурой (вроде бы GotoXY) одного из основных модулей (не помню какого).
Или можно описать массив-матрицу слов (word, 2 байта, т.к. на экране 1 байт под символ, 1 байт под атрибуты символа) с абсолютной адресацией (absolute <адрес в памяти>:<сдвиг>;), задав его адрес, соответствующий адресу буфера экрана текстового режима (там какое-то число, найдёшь в интернете, лень самому вспоминать). Теперь каждая ячейка этого массива будет соответствовать знакоместу на экране, и, следовательно, ты можешь менять их как захочешь. Правда, придётся писать свою процедуру (это несложно) write (может ещё read собственный понадобится), т.к. стандартные write/read тут не подходят. Цитата (Andrey_M) 3. Как реализовать самостоятельный поиск пути к графическому драйверу (не заставлять же юзера каждый раз его писать)? Можешь просто сканировать диск C:, начиная с корня. Просто кидаешь драйвер в папку с программой и предоставляешь юзеру архив. А в процедуре инициализации графики пишешь не полный путь к файлу. а только его имя (по-умолчанию путь равен пути до папки с программой) или относительный путь к нему (например, 'drivers/superdriver.drv', если драйвер расположен в папке drivers, которая в папке с программой). Если возникают с этим проблемы, то есть какая-то функция (не помню названия), возвращающая путь до программы - попробуй с её помощью получить полный путь к драйверу. Но это вряд ли понадобится.
Сообщение отредактировал TimKruz - Четверг, 03 Января 2013, 22:54 |
|
| |
TimKruz | Дата: Четверг, 03 Января 2013, 13:16 | Сообщение # 268 | Тема: Написание ос на ассемблере |
старожил
Сейчас нет на сайте
| Цитата (taiua) вот небольшая статья по поводу создание простенькой ос , для начала как раз на сайте Статья уж слишком небольшая, и описывается там не "простенькая ос", а примитивный хэлло ворлд, запускаемый на голом железе, но и тот недостаточно объяснён. Я-то думал, что там достаточно подробная статья, хотя бы как на хабрахабре.
P.S. Пытаться заработать на книгах, заливаемых на депозитфайлс - бессмысленно. Любой здравомыслящий человек найдёт полноценную библиотеку, не использующую тупых файлообменников.
|
|
| |
TimKruz | Дата: Четверг, 03 Января 2013, 12:59 | Сообщение # 269 | Тема: PascalABC Вопрос (события клавиш) |
старожил
Сейчас нет на сайте
| Цитата (Destroy) будет несовместимость типов Что ты глупости какие-то говоришь (или никак понять не могу, что ты хочешь сказать). Ты ведь используешь этот код так: Код procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin case Key of 'w': showmessage('w'); 's': showmessage('s'); end; end; А OnKeyPress реагирует на символьные клавиши. Но для игр следует использовать OnKeyDown и OnKeyUp, которые в переменной Key дают виртуальный код клавиши, поэтому код нужно переписать так: Код procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of ord('W'): showmessage('кнопка [w]'); //именно ord('W'), а не ord('w') vk_right: showmessage('стрелка вправо'); //vk_right стандартная константа, соответствующая виртуальному коду клавиши "курсор вправо" $41: showmessage('кнопка [a]'); //$41 это то, что возвращает ord('A'), т.е. соответствует виртуальному коду кнопки [a/ф] end; end; При этом этот код не зависит от состояний клавиш Shift, Alt и Ctrl (состояния этих клавиш регистрируются в множестве Shift) и раскладки клавиатуры. Лично я для удобства описал в отдельном модуле константы от VK_A до VK_Z (которых нет в стандартных модулях).
Сообщение отредактировал TimKruz - Четверг, 03 Января 2013, 13:00 |
|
| |
TimKruz | Дата: Четверг, 03 Января 2013, 12:33 | Сообщение # 270 | Тема: Ваня Через Дорогу ч.1 |
старожил
Сейчас нет на сайте
| EHOT, хостинг YemSalat.org уже давным-давно накрылся медным тазом.
|
|
| |
TimKruz | Дата: Четверг, 03 Января 2013, 01:01 | Сообщение # 271 | Тема: PascalABC Вопрос (события клавиш) |
старожил
Сейчас нет на сайте
| Цитата (Destroy) да не бред, просили же для клавиши 'W', а не стрелочек Ещё раз. Key - это символ char. Так? Так. Ord(c:char):byte в данном случае возвращает код символа. Так? Так. Chr(x:byte):char возвращает символ по коду символа. Так? Так. Значит, chr(ord(key)) возвращает key. Следовательно, нужно было писать case key of, а не делать какую-то многоуровневую конструкцию непонятно зачем.
|
|
| |
TimKruz | Дата: Четверг, 03 Января 2013, 00:44 | Сообщение # 272 | Тема: Критика компьютерных игр от Switch |
старожил
Сейчас нет на сайте
| Цитата (Switch) так как я сюда пришел удовлетворить хоть как-то критикой пользователей, а так же разработчиков Молодец, что пришёл. А зачем рекламироваться? Можно ведь просто тихо-мирно пилить эту хоть какую-то критику. Цитата (Switch) не чего особенного нету Цитата (Switch) предать эффект в начале игре //придать эффект началу игры Цитата (Switch) хоть и были перепробованные все настройки Цитата (Switch) Проверка звука производилась на двоих компьютерах //двух Цитата (Switch) одну из двоихконцовок //двух Количество ошибок говорит либо о неграмотности пишущего (надеюсь, что это не так), либо о том, что он быстро пишет. Зачем торопиться? Лучше выдели на минуту больше времени и сделай всё правильно. Цитата (Switch) Данная игра это визуальная новелла, где рассказывается в событиях о жизни героев. В принципе, не чего особенного нету. Ты должен читать текст от каждого героя (экранные диалоги), а в конце выбрать одну из двоих концовок (нажав на одну из двоих кнопок). А что ещё можно ждать от визуальной новеллы? Ничего особенного с точки зрения геймплея тут и не может быть. Цитата (Switch) Музыка в игре отсутствует (хоть и были перепробованные все настройки со звуком.). Проверка звука производилась на двоих компьютерах, но результат отрицательный. А там музыка вообще предполагалась? Точно не помню (давно играл), но вроде бы нет. А настройки звука добавляются игровым движком автоматически, независимо от наличия звука/музыки в игре. Цитата (Switch) Хотелось бы отметить дизайн в игре. Дизайн отличный. Отлично смотрится на фоне событий и т.д. Какой дизайн может быть В ИГРЕ?! Можно говорить о дизайне коробки с диском. Но в игре никакого дизайна никогда нет. Ну, можно сказать "стиль графики", "концепция графики" (т.к. визуальная новелла), но не дизайн же. Цитата (Switch) В игре можно выбрать оконный режим или играть на весь экран. Так же можно выбрать скорость отображения текста для эффектности. Это заслуга игрового движка, не помню, какой там он использовал, но точно свободно распространяемый. Можно наштамповать тысячи таких игр на этом движке, следовательно, функции этого движка (типа разрешение окна, скорость отображения текста, настройки звука) не могут быть плюсом или минусом конечной игры, значит, отмечать в описании игры это не нужно. Цитата (Switch) - Меню в игре на разных языках. Это баг, а не минус. Баг можно и нужно исправить патчем, а "минус" чаще всего неисправим из-за своей фундаментальности. Цитата (Switch) - Играть немного скучно. Играл подпирая рукой голову уже после 3-ей минуты. Если тебе не нравится такой жанр игр - лучше в них не играть. Цитата (Switch) - Мало резких событий, что бы у игрока это оставляло впечатления. Боевики, триллеры и т.п. с бесконечным числом взрывов, убийств главных героев и т.п. не всем нравятся; это касается визуальных новелл тоже. Хочешь резкие события - играй в шутеры или гонки. Цитата (Switch) - Диалог написан довольно таки интересно. Как будто читаешь взрослую книгу. Что значит "взрослая книга"? Только для взрослых, что ли? Или имеется в виду уровень текста? Кстати, там в диалогах была знаменитая "дрчь", которая тонкой нитью пронизывает всю серию WoS. Особая фишка всей серии, да. Цитата (Switch) - Редкий жанр игры. Приятно поиграть для разнообразия. В такие игры "для разнообразия" играть вредно, в такие игры только любители жанра играют, потому что только они понимают, во что играют. Цитата (Switch) Глупые комментарии аргументировать не буду по поводу моей критики А я и не жду "аргументации" моих "глупых комментариев". Цитата (Froster) На счет разных тут TimKruzов и других троллей Информация для размышления. И где я тут агрессивно, издевательски и/или оскорбительно себя веду? Всё, что я в этой теме написал - не издевательство и не оскорбление кого-либо, а лишь желание помочь автору темы встать на путь истинный, ибо в неправильном направлении идёт он. Цитата (Froster) парень пришел помочь людям указать на недостатки в играх и т.д. Да я, между прочим, тоже помогаю людям здесь, указываю на их недостатки в играх и так далее! И много кто ещё. С какой стати он тут выделиться решил? Можно подумать, он вообще спаситель страдающих от нехватки критики разработчиков. Цитата (Froster) а вы не видели его работ, а что-то говорите Если бы я совсем не видел его "работ" - я бы прошёл мимо этой темы, честно. Но, к сожалению или к счастью, я видел и даже, насколько это возможно, тщательно изучил несколько его "работ" и, заметив эту тему, счёл необходимым помочь начинающему "критику", ибо он, по моему мнению, сильно заблуждается.
P.S. Switch, зачем вставлять картинки-заголовки? Лишнее время тратишь. Да и у некоторых может быть отключён показ картинок. Так что текст проще и надёжнее. Кстати, мы от тебя какие-нибудь игры когда-нибудь увидим? А то критиковать просто, но ты сначала сам попробуй делать игры.
Сообщение отредактировал TimKruz - Четверг, 03 Января 2013, 00:55 |
|
| |
TimKruz | Дата: Среда, 02 Января 2013, 21:25 | Сообщение # 273 | Тема: Как назвать команду? |
старожил
Сейчас нет на сайте
| Цитата (CrazyBrain) Просто название должно быть понятно не только для русской аудитории, но и для иностранной, если есть перспектива развития. Filin как раз здесь не проходит. Ну у него фамилия просто Филимошин, отсюда этот филин. Поэтому, если назвать типа "eagle-owl games", то это название будет непонятно как русской, так и иностранной аудитории, потому что непонятно, откуда этот филин взялся. А если его фамилия будет записана, например, на странице "о команде" или титрах игры, то даже иностранцу будет ясно название, потому что транслитирированная фамилия будет выглядеть как Filimoshin. Цитата (Andrey_M) Viva Games (по латыни viva - жизнь) Gvozd Games DarkLight Games Вот на счёт "Gvozd Games" сомневаюсь (ибо бессмысленное - "гвоздь. игры."), но "Viva Games" (или vita) и "DarkLight Games" наверняка есть. Да и вообще, какое отношение это имеет к этой теме? Здесь опрос с всего лишь двумя вариантами, а не просьба типа "придумайте мне какое-нибудь название, пофиг какое". Название, кроме всего прочего, должно содержать в себе смысл, как я уже чуть выше писал, поэтому придумывать должен организатор команды, а вот помочь выбрать более благозвучное и перспективное из уже придуманных можно.
Сообщение отредактировал TimKruz - Среда, 02 Января 2013, 21:27 |
|
| |
TimKruz | Дата: Среда, 02 Января 2013, 20:09 | Сообщение # 274 | Тема: PascalABC Вопрос (события клавиш) |
старожил
Сейчас нет на сайте
| Цитата (WhoAmI) ord() есть только в паскале Ord есть в любом диалекте Паскаля. Возвращает код символа. Цитата (Destroy) попробуй что то типо того Код case chr(ord(Key)) of 'W': move:=move+32; 'S': ... 'D': ... 'A': ... Во-первых, это бред, потому что chr(ord(key))=key, т.к. ord возвращает код символа, а chr возвращает символ по коду. Во-вторых, ты в этом коде предлагаешь обработку уже имеющегося значения переменной key, но WhoAmI не знает, как его получить можно. Цитата (Destroy) сам этот код в pascalABC не проверял, выполнил его в дельфи Ага, теперь понятно. Ты его вписал в обработчик события OnKeyPress формы, вот он и заработал. В PascalABC формы есть, но работа с ними другая. Цитата (Destroy) pascalABC не самый лучший выбор для написания игр, установи delphi. Какая разница, если человек хочет именно на PascalABC игру писать. На нём тоже игры делать можно. Цитата (karuy) Делфи тоже не самый лучшый)) Эй, эй, чтобы определять, что что-то лучше чего-то, нужно определиться, по какому критерию мы их сравниваем. Критериев огромная куча, и сравнивать сразу по всем бессмысленно и бесполезно. Поэтому как Delphi, так и какой-либо диалект Паскаля может быть самым лучшим выбором для написания игр с какой-то определённой точки зрения. А если смотреть совсем со стороны и в общем смысле - то самого лучшего инструмента для разработки игр нет и никогда не будет. Цитата (WhoAmI) Destroy, ещё - в паскале и делфи одинаковые языки(object pascal) Паскаль - это либо изначальный язык Pascal, либо обобщённое название всех диалектов. Object Pascal - вполне конкретный диалект Паскаля. Delphi - вообще отдельный язык программирования. Так что никакие это не одинаковые языки, хотя похожие места в них безусловно есть. Цитата (WhoAmI) как сделать событие нажатой клавиши? Всё зависит от того, как ты делаешь игру. Есть несколько способов, например, через готовые классы окон. Сейчас установлю себе PascalABC, гляну и напишу здесь...
А вообще, посмотри проекты из папки "C:\PABCWork.NET\Samples\Games", если устанавливал PascalABC вместе с примерами. Там несколько игр, посмотришь, как они устроены, некоторые алгоритмы интересные есть...
Ага, вот, нашёл. Посмотри исходник KillThem.pas (если у тебя нет его - вот он), там как раз кнопочное управление устроено. Если в двух словах, то создаётся окно, событиям окна присваиваются пользовательские процедуры-обработчики (OnKeyDown := KeyDown; OnKeyPress := KeyPress; OnKeyUp := KeyUp; в основном коде программы), в самом конце запускается таймер для анимации. Например, вот обработчики событий клавиш из этого исходника: Код /// Обработчик нажатия клавиши procedure KeyDown(Key: integer); begin case Key of vk_Left: kLeftKey := True; vk_Right: kRightKey := True; vk_Space: if kSpaceKey=2 then kSpaceKey := 1; end; end;
/// Обработчик отжатия клавиши procedure KeyUp(Key: integer); begin case Key of vk_Left: kLeftKey := False; vk_Right: kRightKey := False; vk_Space: kSpaceKey := 2; end; end;
/// Обработчик нажатия символьной клавиши procedure KeyPress(Key: char); begin if (Key in ['G','П','g','п']) and EndOfGame then begin NewGame.Visible := False; EndOfGame := False; t.Start; CreateObjects; kSpaceKey := 2; kLeftKey := False; kRightKey := False; end; end; В первых двух процедурах аргумент Key - это число, соответствующее виртуальному коду клавиши (константа vk_key, где vk - virtual key, а key - собственно название клавиши), в третьем Key - символ. Ну и обрабатываются они кейсами и ифами, тут всё просто.
Если быть более точным, то обработчики нажатий/отжатий клавиш в играх обычно не напрямую обрабатывают их, а лишь устанавливают/сбрасывают соответствующие клавишам флаги (булевы переменные) или устанавливают число в переменной-переключателе (или счётчике). А вот эффект от этих действий проявляется в обработчике события таймера, чтобы синхронизировать все действия со временем. Т.е., например, флаг kLeftKey устанавливается сразу после нажатия клавиши "курсор влево", затем его проверяет специальная конструкция в процедуре таймера (здесь - TimerProc), потом пользователь отпускает эту кнопку и соответствующая процедура сбрасывает флаг kLeftKey, из-за чего производимые действия в процедуре таймера меняются должным образом. Точно так же - для каждой другой кнопки.
P.S. Не знаю, зачем они выделили отдельную процедуру для символьных клавиш, потому что у каждой символьной клавиши есть свой виртуальный код, независящий от раскладки клавиатуры и состояния спец-клавиш типа шифта...
Сообщение отредактировал TimKruz - Среда, 02 Января 2013, 21:03 |
|
| |
TimKruz | Дата: Среда, 02 Января 2013, 19:53 | Сообщение # 275 | Тема: Как назвать команду? |
старожил
Сейчас нет на сайте
| Цитата (GameFilin) Пока я думаю Creative studio Слишком простое и распространённое название, на него 137 миллионов ответов Яндекс выдаёт. Цитата (GameFilin) GameFilin Уже лучше, название вполне оригинальное (если именно без пробела писать), Яндекс при поиске только "GameFilin" выдаёт всего немного страниц gcup.ru и badapps.ru. К тому же, домены типа GameFilin.ru/GameFilin.com сейчас, по всей видимости, свободны, поэтому можно зарегистрировать соответствующий домен без лишних проблем. Поэтому команда с таким названием сможет быстро стать популярной, т.к. любой, кто где-то слышал/читал такое название и решил его поискать в интернете, быстро попадёт на ваш официальный сайт/блог. Ну и, наконец, "GameFilin" запоминается проще и отражает оригинальность владельцев этого названия, чем банальное "Creative studio". Цитата (GameFilin) Всё решил Game creative filin studio/GCFS А вот это - чистый бред, название должно быть простым, коротким и легко запоминающимся, а если хочешь использовать аббревиатуру - она должна быть такой же запоминающейся и легко произноситься (т.е., желательно, содержать гласные, особенно если она длинная). Цитата (goldsphere) Creativ Studio я здесь вроде где-то встречал Здесь.
*** Цитата (MGD-team) А какое нам дело до твоего названия? Называйся как тебе нравится. Он просто ищет совета, какое название будет лучше для его команды. Если тебе нет дела до его названия, мог бы молча пройти мимо. Цитата (SarCasm) Вообще ввсеравно, хоть Bloody Buddha Games Название должно содержать хоть какой-то смысл, хотя бы скрытый, и, уж тем более, не казаться бредом потенциальному пользователю. Цитата (GameFilin) Сейчас какое название до 100 дойдет такое и выберу До 100 никогда не дойдёт, тут слишком мало тех, кто захочет проголосовать. К тому же, некоторые просто так голосуют, не думая. Я уж молчу про то, что тут, при сильном желании, можно накручивать счётчики опросов, т.к. голосовать могут незарегистрированные гости.
Сообщение отредактировал TimKruz - Среда, 02 Января 2013, 20:01 |
|
| |
TimKruz | Дата: Среда, 02 Января 2013, 19:18 | Сообщение # 276 | Тема: GLUT. Нужна помощь новичку :( |
старожил
Сейчас нет на сайте
| Цитата (MrAkakuy) И вообще, Saitei, переходи на GLFW - лучше, новее, быстрее, удобнее. Раз так, то стоит предоставить выбор. Инструментов много, каждый имеет свои преимущества и недостатки. Saitei, когда изучишь хотя бы основы OpenGL, выберешь подходящий инструмент для своих конкретных целей... Цитата (MrAkakuy) GLUT_DOUBLE (который и надо использовать в идеале) Ну смотря для чего используется; иногда нужно просто вывести одну статичную картинку, а двойной буфер будет лишней нагрузкой... Цитата (Saitei) То есть совсем ничего не объясняют и говорят: "Вставьте код, теперь у вас ...". Некоторые сначала предлагают код, потом разъясняют смысл новых для читателя функций. Цитата (Saitei) посоветуете книжку для чайника Я бы посоветовал одну книгу, но она для Delphi только. Но если есть хорошая книга на русском для Delphi, то для си их должна быть целая куча, ты просто искать не умеешь.
|
|
| |
TimKruz | Дата: Среда, 02 Января 2013, 01:15 | Сообщение # 277 | Тема: Беда с китайским планшетом |
старожил
Сейчас нет на сайте
| Вот, нашёл какую-то статью о прошивке, там инструкция, как прошивать, плюс во втором сообщении под спойлером написано про "смерть загрузчика". Наверное, ты как раз убил его... Цитата (1ceberg) упоротыми Детским шампанским упоролись?
|
|
| |
TimKruz | Дата: Среда, 02 Января 2013, 00:03 | Сообщение # 278 | Тема: GLUT. Нужна помощь новичку :( |
старожил
Сейчас нет на сайте
| Цитата (Saitei) обїясните мне конкретнее что делает glClear(GL_COLOR_BUFFER_BIT); glFlush(); и glClearColor(0,0,0,0);? Это функции OpenGL и к GLUT не имеют отношения; функции GLUT начинаются с префикса glut. glClear() очищает что-либо, единственный аргумент - флаги, обозначающие, что требуется очистить. В данном случае - glClear(GL_COLOR_BUFFER_BIT) очищает буфер цвета, т.е. удаляет картинку с экрана, закрашивая заранее заданным цветом. Для 3D (когда используется буфер глубины) следует использовать так: glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT), т.е. перед перерисовкой сцены очищать буферы цвета и глубины. glClearColor(Красный,Зелёный,Синий,Альфа) задаёт цвет, которым будет закрашен буфер цвета после вызова glClear(). Цвета и альфа задаются в промежутке 0..1 (вещественные), альфа не используется (я не понял, как она влияет на результирующую картинку - вроде бы никак). Что такое glFlush понятия не имею, первый раз вижу, так что вот тебе ссылка на официальную документацию OpenGL (на английском, конечно). Что-то она там со временем выполнения команд OpenGL делает. Цитата (Saitei) GLUT_SINGLE Советую сразу использовать GLUT_DOUBLE, т.е. двойной буфер. Не знаю GLUT, но, вероятно, потребуется в Render() дописать вызов SwapBuffers(указатель_окна). А, может быть, GLUT сам меняет буферы местами. Надо читать руководство по эксплуатации.
P.S. Может быть, попробуешь разобраться (хотя бы в теории) с чистым OpenGL, а потом утилиты типа GLUT начнёшь юзать?
Сообщение отредактировал TimKruz - Среда, 02 Января 2013, 00:08 |
|
| | |
TimKruz | Дата: Вторник, 01 Января 2013, 01:17 | Сообщение # 280 | Тема: Хочу сделать хадкорскую игрушку на движке cryEngine 3 |
старожил
Сейчас нет на сайте
| Цитата (EvilT) yanMedia, ГГ бегает по равнинам другой планеты и уничтожает букашек переростков(с) вот тут По равнинам, а не по платформам. Платформером тут даже не пахнет. Цитата (igorek92) Могу один. Ннно не хочу Ну сделай один что-нибудь для начала, типа первой карты, чтобы скриншоты и преальфадемо было, а там кто-нибудь да подтянется. Модели и звуки можно бесплатные в интернете найти, скриптов там минимум нужен (тоже можно найти).
Сообщение отредактировал TimKruz - Вторник, 01 Января 2013, 01:19 |
|
| |
|