Скачать андре ламота программирование игр для windows

About the CD-ROM

The CD-ROM that comes with this book contains key software that you need to follow the
examples in the book and even develop your own games.

System Requirements

Make sure that your computer meets the minimum system requirements listed here. If your
computer doesn’t match up to most of these requirements, you may have problems using the
contents of the CDs:

For Windows 9x, Windows 2000, Windows NT4 (with SP 4 or later), Windows Me, or Windows XP:

*    PC with a Pentium processor running at 120 Mhz or faster

*    At least 32 MB of total RAM installed on your computer; for best performance, we
    recommend at least 64 MB

*    Ethernet network interface card (NIC) or modem with a speed of at least 28,800 bps

*    A CD-ROM drive

Using the CD with Windows

To install the items from the CD to your hard drive, follow these steps:

        1.    Insert the CD into your computer’s CD-ROM drive.

    2.    A window will appear with the following options: Install, Browse,
        eChapters, and Exit.

Install: Gives you the option to install the supplied software and/or the author-created
samples on the CD-ROM.

Explore: Allows you to view the contents of the CD-ROM in its directory structure.

eChapters: Allows you to view an electronic version of the bonus Chapters.

Exit: Closes the autorun window.

If you do not have autorun enabled or if the autorun window does not appear, follow the
steps below to access the CD.

1.    Click Start —> Run.

2.    In the dialog box that appears, type d:\setup.exe, where d is the letter of your
    CD-ROM drive. This will bring up the autorun window described above.

3.    Choose the Install, Browse, eBook, Links, or Exit option from the menu. (See Step
    2 in the preceding list for a description of these options.)

When you Browse the CD you will find it is organized with a general directory structure.
Each directory has a Read Me file with specific instructions to install its contents.

To work through the demonstrations in the book, follow these steps to install DirectX and
the Windows Game Programming For Dummies source code:

    1.    Place the CD in your computer’s CD-ROM drive and open it with either
        Windows Explorer or My Computer.

    2.    Install the DirectX SDK and run-time, if they aren’t already installed on
        your computer.

        DirectX is on the CD-ROM in the \DirectX SDK folder. Follow the Read Me
        file instructions to install DirectX and the run-time.

    3.    Copy the code and executables for each chapter to your hard drive. The
        easiest way to copy these is to drag the \Source folder from the CD to
        your hard drive.

    4.    Install specific applications and games from the \Source folder on your
        hard drive as needed. (Even if you aren’t following the chapter examples
        step by step, you will need the Direct X run-time to use the finished
        demos.) Details on these procedures are in the \Software and \Games
        subfolders. Depending on the file, files must be either

    *    Installed by an install application

    *    Installed by a setup application

    *    Decompressed

CD Contents

The CD-ROM contains applications for game programming, cool shareware games, the DirectX
SDK, stock artwork, and sound effects you can use in your games, and the source code from
all the programs and demos in the book. There are also two extra chapters (Chapter 23 and
Chapter 24) in Adobe Acrobat format, plus the Adobe Acrobat reader.

Software

You’ll find these valuable applications on the CD:

    *    Paint Shop Pro. This JASC, Inc. product is a shareware graphics viewing
        and editing tool.

    *    DirectX. This book is focuses on DirectX game programming, so you can save
        about two days of downloading (if you’re stuck with a modem connection to
        the Internet) by simply installing DirectX from the CD!

        Be sure to read the Read Me files. They inform you of the installation
        details and the latest DirectX system changes.

    *    Sound Forge. This is the premiere sound processing application for game
        programmers and musicians around the world. SoundForge has more features
        than any other program — I still haven’t needed half of them!

    *    Adobe Acrobat Reader. Install this to read the Bonus Chapters from the CD,
        if you haven’t already installed Acrobat on your PC.

    *    WinACE. One of the best compression programs around.

Artwork

The \Artwork directory has lots of graphics you can use or modify, royalty-free: textures,
monsters, explosions, mechanisms, backgrounds, and more.

DirectX

To save you about two days of downloading by modem, the DirectX SDK and run-time are on
the CD in the \DirectX SDK folder. (When you install it, be sure to read the Read Me files
for instructions and updates).

Games

The \Games subfolder has some really cool examples for you to try. (If someone sees you
playing them, say it’s «research.») They’re great examples of what other programmers are
doing, and you’ll get some terrific ideas. Each game has its own installation method; the
Read Me file in the \Games will save you time when you install them.

Source code

All the source code for the book, along with all the executables and data, are inside the
\Source folder of the CD. Each chapter of Windows Game Programming For Dummies is
represented by a folder inside the \Source folder. For example, the source code for
Chapter 12 is in the subfolder GPCHAP12\.

Bonus chapters

Chapter 23, «The Lowdown on Artificial Intelligence,» and Chapter 24, «Game Programming
Potpourri,» are on the CD as Adobe Acrobat files in \Source subfolders GPCHAP23\ and
GPCHAP24\. If your computer doesn’t have Adobe Acrobat Reader installed, you’ll need to
install it from the CD.

If You Have Problems (Of the CD Kind)

I tested all the software and programs for this book on many machines, and everything
worked fine. But the complex universe of hardware, games, and DirectX means that some
installations may not work properly. If you have such problems, check the following lists
for some solutions.

Installation

The likeliest installation problems are

    *    Not enough memory (RAM)

    *    Other running programs keep your program from installing or running

If you get such error messages as Not enough memory and Setup cannot continue, try some of
the following solutions and rerun your software:

    *    Turn off antivirus software

    *    Close all running programs (including instant messaging)

    *    Add more RAM to your computer (yes, this is more complicated and
        expensive)

General execution problems

Some DirectX problems can occur after you start your program:

    *    DirectX driver problems may occur if there isn’t a DirectX driver for your
        sound card or video card. (DirectX will warn you when you install
        DirectX.) Check the card manufacturer’s Web site and the Microsoft DirectX
        site for driver updates. DirectX will work without a specific driver, but
        not as well.

    *    Compilation problems may result if you don’t correctly set up your
        compiler and environment. Make sure you can compile a simple program
        successfully before you compile your complex game. Be sure to take the
        following compilation steps:

    *    Set up the DirectX library and your header paths in the compiler.

    *    Verify that you are creating a standard Win32 .EXE if you’re making a
        DirectX app.

    *    Video cards may need setup changes, even if you have a DirectX driver. If
        you see a sudden flash of black or white video when you run some of the
        demos, click the Display Properties icon in the Control Panel and change
        your video settings to 640 X 480 and 256 colors. This setting may solve
        your problem.

    *    Read-only protection errors appear if you try to edit a file that has its
        Read-only flag enabled. This often happens after copying files from CD-ROM
        to your hard drive. You can clear the Read-only flag on files you want to
        modify with one of these methods:

    *    Change one file in Windows Explorer or My Computer. To do so, right-click
        the file in Windows Explorer or My Computer, then select Properties in the
        pop-up list, clear the Read-only check box in the Attributes section, and
        click the apply button. (If you want to change several files at once,
        select all the files before you right click.)

    *    Change all the files in a directory and its subdirectories by using the
        ATTRIB command at a DOS prompt. The command takes this form:

     ATTRIB — R C:\dir\dir\*.* /S

        For example, if you want to clear the Read-only flag for all the files in
        the hard-drive directory C:\SOURCE\APPS and all of its subdirectories,
        enter this ATTRIB command at a DOS prompt:

     ATTRIB — R C:\SOURCE\APPS\*.* /S

If you still have trouble with the CD, please call the Customer Care phone number: (800)
762-2974. Outside the United States, call 1 (317) 572-3994. You can also contact Customer
Service by e-mail at techsupdum@wiley.com. Wiley Publishing, Inc. will provide technical
support only for installation and other general quality control items; for technical
support on the applications themselves, consult the program’s vendor or author.

Содержание

  1. Андре Ламот: Программирование игр для Windows
  2. Комментарии
  3. Андре Ламот «Программирование игр для Windows» (примеры)
  4. Программирование игр. Сборник (4 книги+ 4 CD)

216

booksСкачать книгу

greenb

commentsКомментарии

Fiw, 10.11.2010 21:25

Большое спасибо от студента!

Toster, 15.05.2011 06:24

Полезная книжка для начинающих, очень не плохие примеры

Batonsu, 09.10.2011 12:01

А есть у кого-нибудь содержимое CD примерами из этой книги?

Timur, 17.11.2012 12:19

u, 24.10.2013 18:15

Artem, 25.04.2015 05:10

Год оригинального издания — 1999. Вообще-то в сети уже не первый год гуляет второе издание (оригинал — 2002, перевод — 2003).

Евгений Москва 1974, 12.04.2016 03:59

У меня была эта книга и компакт диск, но потерял CD, если найду напишу, если кто-нибудь найдёт раньше, напишите пожалуйста [email protected]

Сергей, 18.01.2022 14:33

Книга не скачивается. После нажатия меня перенаправляет на эту же страницу без загрузки книги.

Источник

Андре Ламот «Программирование игр для Windows» (примеры)

Компилятор: Visual Studio 2008

Решил откомпилировать код примера из книги Андре Ламот «Программирование игр для Windows». После исправления мелких ошибок с приведением типа получил код(см. ниже). Смысл в том что отображается bmp файл. При запуске выскакивает ошибка. Вопрос такой, я считаю проблема с загрузкой bmp, должен ли он быть явно включён в проект ( в source files), нужно ли файлы дублировать в соответствующие папки debug/release?
заранее спасибо, только начинаю изучать DDraw.

Открою жуткую правду ты начал изучат DirectDraw а не DX и даже не D3D

Спасибо за мою опечатку, буду рад, если поможешь с проблемой

Lazer
пройдись пошагово по програме(в дебаге) F5 и посмотри что у тебя в переменных.
F9 брейкпоинт
F10/F11 шаг.

А Novartis Games таки прав Лямота можно читать в обучающих целях )

>А Novartis Games таки прав Лямота можно читать в обучающих целях )
имхо в обучающих целях лучше почитать теорию по комп графике, и подучить геометрию)))
directidraw уже сто лет как деприкейтед))) нада брать литературу посвежее)

ну во всяком случае, не стоит сильно парится с этими примерами, главное понять суть, ковырять лучше уже d3d

а чем DirectDraw так плох? по-мойму для 2D-игр достаточно функционален.

Frank D. Luna
Introduction to 3D Game Programming with DirectX 9.0

Снука лучше читать после этих книг.

Novartis Games
Direct-мамонт-Draw. мммм, вкуснятина! 🙂 чуствую себя в ДОС-е 🙂

Lazer
Попробую помочь, если надо помощь. Ламот у меня кстати бумажный есть.

Судя по
>OpenFile(filename,&file_data,OF_READ))
и
>if (!Load_Bitmap_File(&bitmap,»bitmap24.bmp»))
файл-картинка читается не из ресурсов, а с диска. Может попробуй задать полный путь, типа «c:\folder\bitmap24.bmp», хотя это скорее всего не причина ошибки.

soflot, огромное спасибо за отзыв. Спустя долгое время пока я покопался в поисках ответа по интернету и нашёл топик в зарубежном форуме.
Как я понял суть в том, что надо заменить OpenFile, _lread, _lclose, and _lseek на fopen, fread, fclose and fseek. А также «write to a back buffer and then flip it». В этом посте есть собственно отредактированные исходники
(ссылка топика на форуме: http://www.xgamestation.com/phpbb/viewtopic.php?p=6616&sid=457ce2… 097830ca35f94).

WhiteWolf, спасибо за перечень книг, обязательно куплю при возможности. Начинать что-то новое всегда сложно, особенно когда не знаешь что именно при таком быстром развитии технологий.

на на счет ошибки ищи ее в файле lseek.c на строке 66 =))

Ооо), спасибо что не смотря на то, что тема была создана давно и затерялась среди других, пишите.
Да. Смогли меня отговорить начать с неё начинать осваивать DirectX 🙂

concialed
надо же, не знал.

kloun Полностью с тобой согласен. Сам начинал программировать игры вместе с этой книгой. В действительности автор книги охватывает множество важных вещей связаных с разработкой игр и принципах работы. Первое и самое главное, он даёт понять устройство игр, конструкцию, скелет. В книге затрагиваются основы физического моделирования, искусственного интеллекта.

В D3D намного проще реализовать различные эффекты с цветом, поворот картинки, масштабирование с интерполяцией. Но книга «Программирование игр для Windows» не только про DDraw, хотя он занимает в ней солидную часть.
Итог: книгу читать обязательно!

Источник

Программирование игр. Сборник (4 книги+ 4 CD)

1470244523 bez imeni 2.jpg9
Название: Программирование игр. Сборник (4 книги+ 4 CD)
Издательство: Вильямс, Питер
Автор: Андрэ Ламот
Год: 1995-2007
Количество страниц:498+1424+718+877
Язык:русский
Формат:pdf+CD
Размер:1,2 Gb

Эти книги написаны выдающимся специалистом в области программирования игр с многолетним стажем, и полезны как начинающим, так и профессиональным разработчикам игр.

Секреты программирования игр

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

Программирование игр для Windows. Советы профессионала

Книга представляет собой введение в DirectX для разработчиков игр для
Windows. Определенные знания в области программирования (в частности, языка программирования C или C++), математики и физики облегчат изучение материала.

Программирование трехмерных игр для Windows

Книга написана выдающимся специалистом в области программирования игр с многолетним стажем, и полезна как начинающим, так и профессиональным разработчикам игр.
Книга рассчитана на опытного специалиста, владеющего языком программирования C++, и имеющего определенную математическую подготовку. Желательно приступать к ней после ознакомления с упомянутыми ранее книгами.
В книге освещены различные аспекты разработки трехмерных игр, однако основное внимание уделяется вопросам представления трехмерных объектов, их визуализации с учетом свойств материала объектов, освещения, перспективы.

Источник

Скриншот одного из портированных примеров

Скриншот одного из портированных примеров

Мотивация к написанию статьи

Уважаемые коллеги, доброго времени суток!

Этой статьей я хочу показать приёмы портирования программ между аппаратно-программными платформами, и привлечь внимание к книге «Секреты программирования игр» Андрэ Ламота, 1995, которую вспомнят добрым словом многие разработчики компьютерных игр, и другим не менее полезным книгам этого автора.

Нам интересны приёмы портации, но мы также проведём ревью, проверим насколько долговечен код 25-тилетней давности, и насколько сложно его портировать на любые современные платформы.

Я обосную и некоторые случаи примененного «ненормального программирования», а изложенный план, как и полученный микро-движок, вы можете использовать при создании своих портов.

Мотивация к созданию порта

В 1996 году, когда с массовыми компьютерами всё только начиналось, мне в руки попала книга «Секреты программирования игр» Андре Ламота. Ему было 22 года, а мне 20. Я был студентом и изучал в университете физику и компьютерные науки, а также плотно «висел» с 14 лет на программировании на всевозможных языках и математике.

Книга меня впечатлила, она была понятна. Это книга о складывании высоконагруженных движков, выжимающих всё, что можно, из математики, алгоритмов и железа, и я рекомендую её к прочтению и пониманию всем инженерам, причастным к сфере разработки программ.

Книга учит «с нуля» писать такие движки и игры

Книга учит «с нуля» писать такие движки и игры

Когда спустя почти 20 лет, мне понадобился учебный материал для моих студентов, я вновь обратился к данной книге. Однако, возникли проблемы – её примеры разработаны под DOS, и они не работали под Windows либо Linux.

Кто такой Андре Ламот и почему вам следует прочесть его книги?

Андре Ламот – культовая фигура в мире разработки игр. Им созданы и портированы сотни видеоигр под всевозможные платформы.

Андре работал с idSoftware в момент создания ими Wolfenstein и Doom. Чтобы оценить влияние книг Андре на мир разработки, достаточно прочесть отзывы под его постами в Linkedin

Первоначально, я рекомендую к чтению «Секреты программирования игр» от 1995 г., как фундаментальную, но простую для понимания книгу, охватывающую полноту разработки 2D и 3D игровых движков и игр на их базе. Эту книгу осилят и новички, и школьники, а изложенные там методы оптимизации, к примеру, позволили мне снизить время выполнения вычислений при моделировании физических процессов – с часов и дней – до реалтайма!

Но главное, книга учить грамотно структурировать код, и прививает функциональный стиль в проектировании и оформлении алгоритмов, чего не хватает многим разработчикам.

Легкий путь не сработал

Конечно, я не искал трудных путей, и попробовал обойтись без порта, ограничившись DOSBox и Borland C++ 3.1 от 1992 года. Но отладчик в DOS неудобен, а сам DOSBox часто закрывался с ошибками. Watcom C/C++ (Open Watcom 1.9) слёг с теми же симптомами.

Тогда я решил портировать примеры из книги в Windows. Порт занял неделю (в свободное от работы свободы время). Все примеры из книги работают, все проверены.

Постановка задачи

  1. Примеры включают в себя 45 программ: от простейших – до полноценного 3D движка вроде Doom-а.

  2. Необходимо внести минимальные изменения в исходный код, а лучше – не вносить вообще – ведь примеры привязаны к тексту и листингам книги.

  3. Хотелось бы автоматизировать внесение изменений в 62 .c и 12 .h файлов и отделаться минимальным программированием.

  4. Основная цель: программы должны работать; у студентов должна быть возможность их отладки и модификации.

Идея

  1. Сделать аналоги (обёртки) функций DOS и микродвижок-прослойку между OS Windows и портируемыми программами.

  2. Микродвижок выполнить на WinAPI и разместить в двух файлах: DOSEmu.cpp и DOSEmu.h. Последний содержит «подменённые» функции DOS, и при подключении к собираемым программам, они «подхватят» эти функции.

  3. Требуемые куски кода стараться вырезать из кодовой базы эмуляторов DOS и программ с Github.

  4. Максимально избавится от ручного труда, для чего вносить изменения в исходники всех портируемых программ автоматически и одновременно, инструментом «Search->Replace in files» в IDE Code::Blocks.

Первичная оценка

Следовало оценить сработает ли идея, и стоит ли браться за работу вообще.
Листинги программ показали, что идея реализуема – код включает математику, функции C standard library (libc), немногие ассемблерные вставки и немногие вызовы DOS API.
Главное же – кода мало. Ибо когда вы видите многотомную кодовую «лапшу», это верный признак того, что нужно бежать: и от этого кода и от его создателей.

План реализации

Особенность книги в том, что примеры идут «от малого к большому»: по мере прохождения глав, к существующим алгоритмам добавляются новые.
Отсюда решено портировать программы подряд, обогащая функционал движка и добавляя лишь задействованные функции DOS, что исключит любые кодовые «излишества».

Демонстрация алгоритма трассировки лучей ближе к концу книги

Демонстрация алгоритма трассировки лучей ближе к концу книги

Реализация

Я не буду приводить подробный листинг, а остановлюсь на некоторых интересных деталях DOS и моментах, связанных с портированием.

Шаг 1. Унифицируем грамматику С

В программах есть ключевые слова «доисторической» грамматики С: _far, __far, __huge, итд., специфичные для модели памяти ранних процессоров Intel с 16 битной адресацией, и не поддерживаемые современными компиляторами. Они исключены так:

//------------------------------------------
// OBSOLETE COMPILER DIRECTIVES
//------------------------------------------
#define _far
#define __far
#define __huge
#define __near
#define _interrupt
//------------------------------------------

Шаг 2. Унифицируем библиотеки С

Часть задействованных в портируемых программах функций имеет прямые аналоги в современных библиотеках, что дало такой код:

//------------------------------------------
// MEMORY FUNC ALIASES
//------------------------------------------
#define _fmalloc		malloc
#define _ffree			free
#define _fmemcpy		memcpy
#define _fmemset		memset
#define _fmemmove		memmove
//------------------------------------------

Так же везде закомментированы два устаревших заголовочных файла:

// #include <graph.h>
// #include <bios.h>

Шаг 3. Избавляемся от несовместимых ассемблерных вставок

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

Шаг 4. Эмулируем «программные прерывания» OS DOS

В DOS нет многопоточности, и в каждый момент времени выполняется единственный процесс. Нет в DOS и «подгружаемых библиотек», но есть весьма неглупый механизм «прерываний» для «межпроцессного» взаимодействия программ.

Чтобы вызвать функцию другого процесса, необходимо установить в регистрах микропроцессора передаваемые ей аргументы, и вызвать команду процессора «прерывание». Тогда процесс, установивший функцию-«обработчик» данного «прерывания», получит выполнение, и вернёт в регистрах результат своего выполнения тому процессу, который его вызвал. То есть «перывание» – это аналог «межпроцессной» ассемблерной инструкции call.

Значительную часть функционала DOS инкапсулируют несколько прерываний, закрепленных за функциями процессов DOS.

Свою функцию за «прерыванием» закрепляют через:

void _dos_setvect(int interrupt_id, void* fn)

А для вызова «прерывания» служит:

int int86(int interrupt_id, union REGS *r_in, union REGS *r_out)

где поля структуры REGS содержат данные, помещаемые в (из) регистры микропроцессора:

Структура REGS

//------------------------------------------
// <dos.h> <i86.h> STRUCTS AND STUBES
//------------------------------------------
// INTERRUTPS HANDING

/* word registers */

struct WORDREGS {
        unsigned short ax;
        unsigned short bx;
        unsigned short cx;
        unsigned short dx;
        unsigned short si;
        unsigned short di;
        unsigned short cflag;
};
struct BYTEREGS {
        unsigned char al, ah;
        unsigned char bl, bh;
        unsigned char cl, ch;
        unsigned char dl, dh;
};

union REGS {
        struct WORDREGS  x;
        struct WORDREGS  w;
        struct BYTEREGS  h;
};

Поэтому достаточно написать такую «подмену» функции int86(), чтобы эмулировать большую часть специфичного функционала DOS (изменение видеорежима, чтение состояния мыши, клавиатуры, итд.).

Функция int86()

int int86(int interrupt_id, union REGS *r, union REGS *r_out)
{
	switch(interrupt_id)
	{
	case VIDEOBIOS_INT__:
		{
			switch(r->w.ax)
			{
			case VGA_VIDEOMODE_13h__:
				_setvideomode(_MRES256COLOR);
				break;
			case VIDEOBIOS_FUNC_SETPALETTE__:
				{
					BYTE* raw_palette = (BYTE*)MK_FP(s->es, r->w.dx);
					_setpalette(raw_palette);
				}
				break;
			}
		}
		break;

	case KEYBOARD_INT_16h__:
		{
			switch(r->h.ah)
			{
			case KEYBOARD_INT_16h_AH_01:
				r_out->w.cflag = (PRESSED_RAW_DOS_KEY == 0) ? I386_FLAG_ZF : 0;
				break;
			case KEYBOARD_INT_16h_AH_00:
				r->h.ah = PRESSED_RAW_DOS_KEY;
				break;
			}
		}
		break;

	case MOUSE_INT__:
		{
			switch(r->h.al)
			{
			case MOUSE_SHOW__:
				ShowCursor(TRUE);
				break;
			case MOUSE_HIDE__:
				ShowCursor(FALSE);//hides the cursor
				break;
		}
		break;

		// …
		// …
		// …
	}

}

Казалось бы, чем в 2022 году интересен механизм прерываний 1980-х? Обоснованно полагаю, что разработчикам многотомных API следует брать на вооружение приёмы, укладывающие API в 2-3 функции.

Шаг 5. Эмулируем «порты ввода-вывода»

«Порты ввода-вывода» – это разновидность HAL (Hardware Abstraction Level), механизм пользуемый для унификации работы с оборудованием.

Запись последовательности байт в закрепленный за устройством «порт», – это команда, которую следует выполнить устройству.

Для программы «порт» – это ячейка, куда (откуда) можно писать (читать) данные (обычно байты).

В DOS для записи и чтения данных в «порт» служат функции:

void _outp(int port, int value);
unsigned char _inp(int port);

В портируемых программах они использованы для изменения цветовой палитры экрана, пересылки данных по сети и чтения состояния клавиатуры.

Вот моя эмуляция функции _inp() (функция _outp() выглядит похоже):

_inp()

unsigned char _inp(int port)
{
	AUTOLOCK(*vgaScreenPrimary);
	VGAScreen* scr = vgaScreenPrimary;

	unsigned char ret = 0;

	switch(port)
	{
	case PALETTE_DATA__:
		{
			ret = vgaScreenPrimary->m_screen->m_surfacePalette[scr->INOUT_palette_offset*3 + scr->INOUT_palette_write_count];
			scr->INOUT_palette_write_count++;

			if(vgaScreenPrimary->m_VGA_RENDER_state & RENDER_CORRECT_PALETTE)
			{
				ret = ((unsigned int)ret) >> 2;
			}
		}
		break;
	case VGA_INPUT_STATUS_1__:
		{
			static unsigned int state = 0;
			ret = (state++ % 2) ? VGA_VSYNC_MASK__ : 0;
		}
		break;
	case KEY_BUFFER__:
		{ // LOCK START
			AUTOLOCK(emuKernel);
			ret = PRESSED_RAW_DOS_KEY;
		} // LOCK END
		break;

	//------------------------------------------
	// SERIAL WORK
	//------------------------------------------
	case COM_1__SER_LSR:
	case COM_2__SER_LSR:
		ret = 0x20; // TELL COM WRITE READY
		break;
	case COM_1__SER_RBF:
	case COM_2__SER_RBF:
		ret = m_curr_income_serial_port_byte;
		break;
	//------------------------------------------

	default:
		ret = 0;
	}

	return ret;
}

Шаг 6. Эмулируем сеть

В книге есть единственная сетевая игра «Танки». Обмен состояниями между экземплярами игры идёт через устройство «COM порт» по API «порты ввода-вывода». Можно эмулировать эту связь через TCP/IP, но это займёт время и не повлияет на основную цель проекта (дать учебный материал студентам). Поэтому я использовал «ненормальное программирование»: «сетевой трафик» между экземплярами игры идёт через WinAPI функцию SendMessage(), и их следует запускать на одном компьютере.

Вы будете писать сетевую игру «Танки»

Вы будете писать сетевую игру «Танки»

Шаг 7. Эмулируем видео субсистемы

В портируемых программах задействованы все основные виды вывода изображений DOS:

  1. Символьный вывод в консоль функциями из <stdio.h> (print(), _settextposition(), …).

  2. Вывод графических примитивов (точка, линия, эллипс, прямоугольник …) функциями из <graph.h>.

  3. Запись массивов пикселей в видеопамять напрямую, для чего видеоадаптер переводят в «графический режим».

Возиться совмещением консоли и графики в едином окне не хотелось, поэтому опять трюк из «ненормального программирования»: программа начинает работу в консольном режиме, а при попытке перевода видеоадаптера в «графический режим» открывается дополнительное окно. Таким образом, консольный вывод идёт в окно консоли, а графика выводится в окно графики.

Алгоритмы для графических примитивов (_rectangle(), _ellipse(),_lineto() …) найдены и взяты с Github.

Видеопамять в DOS находится в ОЗУ, начиная с адреса 0xA0000000. Поэтому в исходниках программ встречается запись

unsigned char far *video_buffer = 0xA0000000;

Я выделил буфер unsigned char* MEMORY_0xA0000000 = malloc(…) и заменил в исходниках 0xA0000000 на MEMORY_0xA0000000

unsigned char far *video_buffer = MEMORY_0xA0000000;

После записи в такую «видеопамять» необходимо вызвать _redraw_screen(), для переноса изменений буфера на реальный экран. К слову, это 1-2 места на портируемую программу.

Шаг 8. BIOS

По мере портирования выяснилось, что алгоритмы программ используют фрагменты BIOS, а именно шрифты, «зашитые» по адресу 0xF000FA6E. Поэтому я заменил в исходниках адрес 0xF000FA6E на глобальную переменную MEMORY_0xF000FA6E, которую определил так:

unsigned char far *MEMORY_0xF000FA6E = VGA_FONT_8X8;

А сам шрифт позаимствовал (конечно, с указанием авторства) из библиотеки SDL (Simple DirectMedia Layer):

Цифры 5, 6, 7 шрифта (заданы битовой маской)

unsigned char VGA_FONT_8X8[8*256] = {

// …
// …
// …

    /*
    * 53 0x35 '5'
    */
    0xfe,           /* 11111110 */
    0xc0,           /* 11000000 */
    0xc0,           /* 11000000 */
    0xfc,           /* 11111100 */
    0x06,           /* 00000110 */
    0xc6,           /* 11000110 */
    0x7c,           /* 01111100 */
    0x00,           /* 00000000 */

    /*
    * 54 0x36 '6'
    */
    0x38,           /* 00111000 */
    0x60,           /* 01100000 */
    0xc0,           /* 11000000 */
    0xfc,           /* 11111100 */
    0xc6,           /* 11000110 */
    0xc6,           /* 11000110 */
    0x7c,           /* 01111100 */
    0x00,           /* 00000000 */

    /*
    * 55 0x37 '7'
    */
    0xfe,           /* 11111110 */
    0xc6,           /* 11000110 */
    0x0c,           /* 00001100 */
    0x18,           /* 00011000 */
    0x30,           /* 00110000 */
    0x30,           /* 00110000 */
    0x30,           /* 00110000 */
    0x00,           /* 00000000 */

// …
// …
// …

}

Шаг 9. Немного фетиша

В ОЗУ DOS по адресу 0x0000046C расположена ячейка счётчика (таймера), инкрементируемого 18.2 раз в секунду. Он используется в вычислениях интервалов времени, например, так:

unsigned int far *clock = (unsigned int far *)0x0000046C; // pointer, 18.2 clicks/sec

while(abs(*clock - now) < clicks){} }

Логично создать переменную PMEM_0x0000046C, и обновлять её в отдельном потоке с частотой 18.2 раз в секунду, но тут возникают коллизии при доступе к ней из разных потоков.

Поэтому я добавил потокобезопасную функцию с именем ULONG PMEM_0x0000046C(), возвращающую значение таймера, и заменил в исходниках строку

 unsigned int far *clock = (unsigned int far )0x0000046C;

на

ULONG (*_clock)() = PMEM_0x0000046C;

Дальнейшее «переписывание» исходников свелось к автоматической замене *clock на обрамленную в скобки *_clock:

while(abs((*_clock)() - now) < clicks){} }

Шаг 10. Звук

Со звуком в DOS дела обстоят так: в начале 1990-х было несколько основных звуковых карт со специфическими, достаточно корявыми API. Поэтому уже авторами портируемых программ была написана микро-библиотека из функций-обёрток (wrappers), инкапсулирующих работу со звуком.

Сюрпризом оказались и сами звуковые файлы – формат VOC ушёл в небытие уже к концу 1990-х.

Поэтому с кодом звуковой библиотеки я обошёлся наиболее жестоко – я удалил всё содержимое функций-обёрток, превратив их в заглушки, всегда возвращающие статус «выполнено успешно» (кстати, подобным образом я «заглушил» и часть функций DOS в эмуляции COM порта и клавиатуры), сконвертировал VOC файлы в WAV-формат и свёл всю эмуляцию звуковой субсистемы DOS к вызову единственной функции WinAPI – PlaySound(). Всё это заняло, наверное, ~20 минут работы.

Движок

Получившийся микро-движок «заводит» в среде Windows программы DOS с минимальным изменением кода последних (вам будет интересно сравнить исходный и портированный код, например, в Total Commander).

Посчитаем основные WinAPI функции, задействованные в движке, и посмотрим на их применение.

  1. CreateThread – для запуска потока, эмулирующего таймер DOS и потока обновляющего графическое окно.

  2. EnterCriticalSection, LeaveCriticalSection – для синхронизации потоков.

  3. MapVirtualKey, GetAsyncKeyState – для работы с клавиатурой и мышью.

  4. StretchDIBits, SetDIBitsToDevice – для, говоря математическим языком, «отображения множества» из буфера видеопамяти DOS в «множество» в видеопамяти графического окна Windows. Менее поэтическим языком, это значит, что эти функции масштабируют изображение и отрисовывают видеобуфер DOS на экране.

  5. PlaySound – для эмуляции звука.

С полтора десятка оставшихся WinAPI функций, впрочем, как и бОльшая часть кода микро-движка, – это «накладные» расходы для запуска оконного приложения в Windows. За что следует поблагодарить, как гласят слухи и легенды, наших собратьев из Мексики, приложивших усилия к разработке WinAPI в 1990-х.

«Помарки» в исходниках или несколько слов в рубрику «Хозяйке на заметку»

На все портируемые исходники было лишь несколько незначительных «помарок» с поучительным разбором вызванных ими происшествий.

  1. С ошибкой «нарушение доступа к памяти» падала процедура трассировки лучей. Полагаю, причина в разной реализации арифметики с плавающей запятой в старых и новых процессорах (см., например, Floating-point migration issues). Казалось бы, незначительные погрешности в точности из-за различий в операциях над float приводят к некорректной работе математических алгоритмов и падению программ!
    Глубоко вникать в процедуру трассировки лучей я не стал, а доработал алгортим в месте падения «напильником»:

     	//------------------------------------------
     	// ALGORITHM ERRORS FIXING
     	//------------------------------------------
     	if(cell_y > (WORLD_ROWS-1)) cell_y = (WORLD_ROWS-1);
     	if(cell_y < 0) cell_y = 0;
     	if(cell_x > (WORLD_COLUMNS-1)) cell_x = (WORLD_COLUMNS-1);
     	if(cell_x < 0) cell_x = 0;
     	//------------------------------------------
  2. В зависимости от опций компиляторы или присваивают не инициализированным контейнерам типа int нулевые значения, или нет. Несколько программ падали именно из-за этого. Установите правилом инициализировать переменные при их объявлении!

  3. Корректная работа при компиляции в Debug и «зависания» в Release.
    Компиляторы при оптимизации (и не только), способны привнести ошибки в алгоритмы. И GCC, и Clang при оптимизации -O2 делают непредсказуемым поведение функции, если в её сигнатуре указано, что функция возвращает значение, но в реализации она ничего не возвращает.

Рассмотрим функцию:

Render_Sliver_32()
{
	Render_Sliver(sliver_object, sliver_scale, sliver_column);
}

По правилам С, если не указан тип возвращаемого значения функции, то таковым считается int, однако Render_Sliver_32() ничего не возвращает.
Поэтому вызов Render_Sliver_32() – намертво повесит программу, скомпилированную GCC или Clang с опцией –O2. А если сделать объявление так:

void Render_Sliver_32()
{
	Render_Sliver(sliver_object, sliver_scale, sliver_column);
}

то всё заработает корректно.

Как вы узнаете из книг Андре Ламота, при создании критически важных программ, оптимизацию отключают, но данном случае я добавил void в сигнатуры немногих «недообъявленных» функций.

Выводы и впечатления от работы

Портация шла легко и быстро: программы «заводились» мгновенно – стоило добавить в движок обёртки для задействованных функций DOS. Изменения в коде программ почти не требовались, за исключением упомянутых мелких правок. (Например, сетевая игра «Танки» «завелась» сразу, как только была добавлена нехитрая эмуляция COM порта.)
Реализация этого проекта ещё раз подтвердила известное правило: хорошие инженеры пишут краткий, внятный, кросплатформенный код, а их работы не устаревают. Чего желаю всем!

Исходники

Исходники портированных программ и движок можно взять с Github. Возможно, это пригодится тем, кому требуется с минимальными тратами времени и сил «заводить» DOS программы.

Продолжая добрую традицию, заданную @8street в статье «Как я портировал DOS игру», оставляю следующий постскриптум:

P.S. Джун нужен кому? Просьба в личку.

АвторАвтор: bustbomer
|Голосов: 0
ДатаДата: 10.10.2023, 18:03



Анонс подборки книг по программированию игр в 7 — ми томах на русском языке.

Книги
1. Андре Ламот — Программирование игр для Windows. Советы профессионала, 2-е издание. pdf
2. Андре Ламот — Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации. pdf
3. Джим Адамс — DirectX — продвинутая анимация. pdf
4. Мейсон МакКаски — Звук в играх. Технологии программирования. pdf
5. Михаил Фленов — DirectX и C++ Искусство программирования. djvu
6. Н. Секунов — Обработка звука на РС. djvu
7. Станислав Горнаков — DX9 уроки программирования на С++. djvu

Название: Программирование. графика , звук и игры
Автор: Разные
Издательство: Разные
Год выпуска: Разные
Жанр: Компьютерная литература
Формат: PDF, DJVU
Качество: eBook (изначально компьютерное)
Страниц: Много (7 томов)
Язык: Русский
Размер: 311.3 Mb

Скачать Программирование: графика , звук и игры (7 томов)

Книги для создания своего игрового движка?

Посоветуйте пожалуйста книги о создании своего игрового движка с нуля, или же посоветуйте книгу для создания графической библиотеки, или же подобные к нему литературу.

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


  • Вопрос задан

  • 808 просмотров

Андре Ламот программирование игр для windows

lodev.org/cgtutor/raycasting.html

Потом смотри статьи, курсы, туториалы, доки, книги, посвященные OpenGL, OpenAL, разработки многопоточных приложений, открытые репозитории движков на Github, вот здесь хороший по компьютерной графике https://www.scratchapixel.com, про ai книга Ian Mullington, вообще, списку конца нет, движок — это программная система из ряда программных продуктов, поэтому либо строишь свой в основном из открытых библиотек, либо умираешь от старости не доделав до конца.

www.amazon.com/Game-Engine-Black-Book-Doom/dp/1987418433

А еще Фень Юань — программирование графики под windows

Пригласить эксперта

Бесперепестивняк. Может и слова такого не существует, поэтому 20 ошибок там простительны)

Игровой движок это сотня программистов с вышкой в математике. Никак не парень с тостера с банальными вопросами. Простите.


  • Показать ещё
    Загружается…

10 окт. 2023, в 14:35

5000 руб./за проект

03 окт. 2023, в 18:01

100000 руб./за проект

10 окт. 2023, в 14:18

70000 руб./за проект

Минуточку внимания

Андре Ламот   (перевод: Р. Г. Имамутдинова)

Windows   Программирование графики  

 Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации  60.16 Мб, 1422с. скачать: (pdf) — (pdf+fbd)  читать: (полностью) — (постранично)

Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации (pdf) Добавлена: 25.09.2023 Версия: 1.0.
PDF Версия: 1.2
Дата создания файла: 2023-09-25
ISBN: 58459062710 ББК: 32.973.26-018.2.75 УДК: 681.3.07
Издательство: Вильямс
Город: Москва

Поделиться:

  (ссылка для форума)  
  (ссылка для блога)  
  (QR-код книги)  

Аннотация

Данная книга предстаатяет собой продолжение книги Андре Ламота Программирование игр для Windows. Советы профессионала и посвящена созданию трехмерных игр. В книге освещены различные аспекты разработки трехмерных игр, однако основное внимание уделяется вопросам программирования трехмерных игр — в частности, предстаазения трехмерных объектов, их визуализации с учетом свойств материала объектов, освещения, перспективы, а также таким специфическим вопросам трехмерной визуализации, как создание различных визуальных спецэффектов и т. п. В книге также рассматриваются многие сопутствующие вопросы — создание и применение звуковых эффектов и музыкального сопровождения, использование различных форматов файлов и соответствующего инструментария. 
Книга написана выдающимся специалистом в области программирования игр с многолетним стажем, и полезна как начинающим, так и профессиональным разработчикам игр для Windows. Однако следует учесть, что она рассчитана в первую очередь на опытного специалиста, владеющего языком программирования C++, а также имеющего определенную математическую подготовку. Хотя данная книга может рассматриваться как отдельное издание, желательно приступать к ней после ознакомления с упомянутой ранее книгой. 

Рекомендации:

эту книгу рекомендовали 0 пользователей.
Прежде чем рекомендовать книгу, хорошо подумайте. Рекомендация — это высшая оценка, которую вы можете выставить книге. 10 по 5-балльной шкале.

  • Скачать англо русский переводчик для windows 10
  • Скачать аваст на год бесплатно и без регистрации на русском языке для windows 7
  • Скачать аваст для windows 10 бесплатно на русском языке с активацией
  • Скачать аварийный диск восстановления windows 10 скачать
  • Скачать аварийный диск windows 10 на флешку