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


Программа Астероиды с использованием матриц


Я уже устал от разговоров — давайте что-нибудь напишем. К примеру, перепишем нашу программу из Листинга 4.8. Вы должны ее помнить. Мы ее переделаем и используем в ней матрицы. Листинг 4.11 показывает эту программу. Она называется «Супер Астероиды».

Листинг 4.11. Супер Астероиды (FIELD.C).

// ВКЛЮЧАЕМЫЕ ФАЙЛЫ ///////////////////////////////////////////

#include <stdio.h>

#include <graph.h>

#include <math.h>

//ОПРЕДЕЛЕНИЯ ///////////////////////////////////////////////

#define NUM__ASTEROIDS 10

#define ERASE 0

#define DRAW 1

#defineX_COMP 0

#define Y_COMP 1

#define N_COMP 2

// СТРУКТУРЫ ДАННЫХ ////////////////////////////////////

// новая структура, описывающая вершину

typedef struct vertex_typ

{

float p[3]; // единичная точка в двумерном пространстве

//и фактор нормализации

} vertex, *vertex_ptr;

// общая структура матрицы

typedef struct matrix_typ

{

float elem[3] [3]; // массив для хранения элементов

// матрицы

} matrix, *matrix_ptr;

// определение структуры "объект",.

typedef struct object_typ

{    

int num_vertices;     // количество вершин в объекте

int color;            // цвет объекта

float xo,yo;          // позиция объекта

float x_velocity;     // скорости пермещения по осям Х float y_velocity;

// и Y matrix scale;         // матрица масштабирования

matrix rotation;      // матрицы поворота и перемещения

vertex vertices[16];  // 16 вершин

} object, *object_ptr;

// ГЛОБАЛЬНЫЕ.ПЕРЕМЕННЫЕ /////////////////////////////////

object asteroids [NUM_ASTEROIDS] ;

// ФУНКЦИИ ////////////////////////////////////////////

void Delay(int t)

{

// функция выполняет некоторую задержку

float x = 1;

while(t—>0)

x=cos(x) ;

} // конец функции

///////////////////////////////////////////////////////

void Make_Identity(matrix_ptr i)

{

// функция формирует единичную матрицу

i->elem[0][0] = i->elem[l][1] = i->elem[2][2] = 1;

i->elem[0][1] = i->elem[l][0] = i->elem[l][2] = 0;

i->elem[2][0] = i->elem[01[2] = i->eiem[2][1] = 0;




Начало  Назад  Вперед



Книжный магазин