bsuir.info
БГУИР: Дистанционное и заочное обучение
(неофициальный форум)
Вход (быстрый)
Регистрация
[ Новые сообщения · Правила форума · Поиск · RSS ]

  • Страница 1 из 1
  • 1
Кто имел дело с АОМГ?
lizaДата: Воскресенье, 09.10.2011, 15:29 | Сообщение # 1
Группа: Удаленные





Всем привет! Кто делал лабораторные по АОМГ, прошу дать совет. Очень нужно! В какой среде делать лабы, где прорисовывать фигуры и создавать их анимацию. Пробовала в Visual Studio - там нет библиотеки <graphics.h>. Может надо где-то ещё это делать или как-то проще?
 
WasjaДата: Понедельник, 10.10.2011, 09:43 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 1446
Статус: Оффлайн
liza, graphics.h - это Borland C++ (под DOS еще).

Все вышесказанное является моим личным мнением.
 
lizaДата: Понедельник, 10.10.2011, 17:12 | Сообщение # 3
Группа: Удаленные





Спасибо за совет, но какя именно серия? я поставила 6, а там опять такой библиотеке нет!
 
WasjaДата: Понедельник, 10.10.2011, 18:01 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 1446
Статус: Оффлайн
liza, Borland C++ 3.0, Borland C++ 3.1, Borland C++ 4.0. Хотя можно попробовать и другим путем пойти - через Code::Blocks.

Все вышесказанное является моим личным мнением.
 
ky3bmaДата: Понедельник, 10.10.2011, 23:02 | Сообщение # 5
Группа: Удаленные





Писал как-то курсовой - игра Pacman в Dos. Прочитал кучу инфы, и да, как вам уже сказали выше, рисование в консоли - привилегия ранних версий Borland C++. В вижле очень мутно, но можно тоже, но я, в силу ограниченности времени решил выбрать BC. С графикой там очень чудно можно работать. не разобрался, правда, как использовать свои бмп-изображения (вроде и нужное количество бит, и файл читает правильно, заголовки там всякие, а выводит криво), в итоге забил и нарисовал на примитивах. Вот приведу вам один класс для примера.
Code
#include "pacman.h"

Pacman::Pacman() //Собственно конструктор
{
         //Тут какие-то поля, которые характеризуют персонажа, не важно
         Color = YELLOW;
         Speed = 1.5;
         Direction = 3;
         score = 0;
         lifes = 3;
         NextDirection = 3;
         RX = 14*15;
         RY = 23*15;
         curX = 14*15;
         curY = 23*15;
         anim = 0;

            //т.к игра вертится фактически в цикле while(true), то количество обновлений экрана большое,
            //поэтому вместо того, чтобы каждый раз рисовать из примитивов (будет большой фпс),
            //рисуем на экране в конструкторе, копируем рисунок с экрана в память (есть такая ф-ция)
            //и сохраняем фактически указатель на область в памяти с этим рисунком
            //Ну вот начинаем рисовать. Нам надо пакман смотрящий влево(LOp), вправо(ROp), вверх(TOp), вниз(BOp) и закрытый(CLo) будет для всех один. Тут рисуем желтые круги и вырезаем сектора. Или рисуем сектора, там как-то криво с этим делом, так что подгонял.
             setcolor(Color);
             setfillstyle(SOLID_FILL,Color);
             fillellipse(CreatureSize/2,CreatureSize/2, CreatureSize/2, CreatureSize/2); //bottom oriented
             fillellipse(CreatureSize/2, CreatureSize/2 + CreatureSize, CreatureSize/2, CreatureSize/2); //top oriented
             sector(CreatureSize/2, CreatureSize/2 + 2*CreatureSize, 315, 405, CreatureSize/2, CreatureSize/2); //right oriented
             fillellipse(CreatureSize/2, CreatureSize/2 + 3*CreatureSize, CreatureSize/2, CreatureSize/2); //left oriented
             fillellipse(CreatureSize/2, CreatureSize/2 + 4*CreatureSize, CreatureSize/2, CreatureSize/2); //closed
             setcolor(BLACK);
             setfillstyle(SOLID_FILL, BLACK);
             sector(CreatureSize/2,CreatureSize/2 + CreatureSize, 135, 45, CreatureSize/2,CreatureSize/2); //top
             sector(CreatureSize/2,CreatureSize/2, 225, 315, CreatureSize/2,CreatureSize/2); //bottom
             sector(CreatureSize/2,CreatureSize/2 + 3*CreatureSize, 135, 225, CreatureSize/2,CreatureSize/2); //left

           //выделяем память под рисунки
             CLo = malloc(imagesize(0*CreatureSize,4*CreatureSize,1*CreatureSize,5*CreatureSize));
             ROp = malloc(imagesize(0*CreatureSize,2*CreatureSize,1*CreatureSize,3*CreatureSize));
             LOp = malloc(imagesize(0*CreatureSize,3*CreatureSize,1*CreatureSize,4*CreatureSize));
             TOp = malloc(imagesize(0*CreatureSize,1*CreatureSize,1*CreatureSize,2*CreatureSize));
             BOp = malloc(imagesize(0*CreatureSize,0*CreatureSize,1*CreatureSize,1*CreatureSize));
            //Блэкскуаре - квадрат размером с пакмана, чтобы когда тот сдвигается не перерисовывать все, а зарисовывать его квадратом, а потом отображать в новой позиции
             BlackSquare = malloc(imagesize(0*CreatureSize,5*CreatureSize,1*CreatureSize,6*CreatureSize));
            //Вот тут копируем рисунки в память и передаем указатели полям класса
             getimage(0*CreatureSize,4*CreatureSize,1*CreatureSize,5*CreatureSize,CLo);
             getimage(0*CreatureSize,2*CreatureSize,1*CreatureSize,3*CreatureSize,ROp);
             getimage(0*CreatureSize,3*CreatureSize,1*CreatureSize,4*CreatureSize,LOp);
             getimage(0*CreatureSize,1*CreatureSize,1*CreatureSize,2*CreatureSize,TOp);
             getimage(0*CreatureSize,0*CreatureSize,1*CreatureSize,1*CreatureSize,BOp);
             getimage(0,300,CreatureSize,300+CreatureSize,BlackSquare);
            //и чистим что тут намалякали, это будет типа загрузка игры..
             cleardevice();
}

//реализация движения в невизуальной части (проверки всякие на столкновения со стенками, врагами, бонусами...
void Pacman::Update(int maplink[][29])  
{
         anim = (anim + 1) % 12; //150 <6*25> ms for frame
         float timeX = curX, timeY = curY;
         int can_ch_dir = 1, i, j;
         switch (NextDirection)
         {
                 case 0: { timeY -= CreatureSize/2; break; }
                 case 1: { timeX += CreatureSize/2; break; }
                 case 2: { timeY += CreatureSize/2; break; }
                 case 3: { timeX -= CreatureSize/2; break; }
         }

         for (i = (int)timeY/15; i <= ((int)(timeY+CreatureSize)/15); i++)
            for (j = (int)timeX/15; j <= ((int)(timeX+CreatureSize)/15); j++)
            {
                if (maplink[i][j] == -4)
                {
                   can_ch_dir = 0;
                   break;
                }
            }
         if (can_ch_dir) Direction = NextDirection;
         timeX = curX, timeY = curY;
         switch (Direction)
         {
                 case 0: { timeY -= Speed; break;}
                 case 1: { timeX += Speed; break;}
                 case 2: { timeY += Speed; break;}
                 case 3: { timeX -= Speed; break;}
         }
         int intersects = 0;
         for (i = (int)timeY/15; i <= ((int)(timeY+CreatureSize)/15); i++)
            for (j = (int)timeX/15; j <= ((int)(timeX+CreatureSize)/15); j++)
            {
                if (maplink[i][j] == -4)
                   intersects++;
            }
         if (!intersects)
         {
             curX = timeX;
             curY = timeY;
         }
         if (curX >=27*15) curX = 1;
         if (curX <= 0) curX = 27*15-1;
         if (maplink[(int)curY/15][(int)curX/15] == -2)//if dot
         {
                 maplink[(int)curY/15][(int)curX/15] = -1;
                 score += 10;
         }
}

//собственно функция рисования
void Pacman::Draw()
{
             putimage(RX,RY,BlackSquare,COPY_PUT); //зарисовываем с параметром COPY_PUT
             RX = (int)curX;
             RY = (int)curY;

             if (anim < 6)
             {
                 switch (Direction)
                 {
                     case 0: { putimage(RX,RY,TOp,XOR_PUT); break; } //рисуем с параметром XOR_PUT, потому как остальные вызывают какие-нибудь инверсии цветов, ну визуально можно подобрать
                     case 1: { putimage(RX,RY,ROp,XOR_PUT); break; }
                     case 2: { putimage(RX,RY,BOp,XOR_PUT); break; }
                     case 3: { putimage(RX,RY,LOp,XOR_PUT); break; }
                 }
             }
             else
                 putimage(RX,RY,CLo,XOR_PUT);
}
 
  • Страница 1 из 1
  • 1
Поиск: