PMG
https://forum.pmg.org.ru/

простенькая 2D игра
https://forum.pmg.org.ru/viewtopic.php?f=1&t=7239
Страница 1 из 1

Автор:  falconsan [ 18 ноя 2009 14:12 ]
Заголовок сообщения:  простенькая 2D игра

Вообщем задача не из простых (лично для меня) , т.к. что-то могу , а чему-то мне нужно научиться .
В институте задали курсовую работу - запрограммировать игру на C/C++
Я это сделал , правда в консольном(Win32 console appl..) приложении ... сами понимаете игра в консольном приложении - вообще без наглядности ... бредово...

Игра:
Перед вами в ряд выложены 13 монет , играют 2 игрока , первый может взять только 1 монету , следующий игрок может брать не больше удвоенного количества монет, от тех что взял предыдущий . например если я взял 2 монеты , то вы можете взять 1, 2, 3, 4 но не больше , и т д . Ход обязательно должен быть результативным.
Выигрывает тот, кто последним возьмёт 13ю монету .

примерно на экране должно быть так : зеленое поле , на нём 13 монет , 12 чёрных , 13я - красная , если ходит компьютер - его монеты сдвигаются вверх , если игрок - вниз .

Подскажите плз как это всё в графику перевести и реализовать ...

Автор:  bad_duck [ 18 ноя 2009 15:45 ]
Заголовок сообщения:  Re: простенькая 2D игра

читай http://pmg.org.ru/nehe/index.html и скачивай исходники, там всё понятно.

Автор:  MagicWolf [ 20 ноя 2009 11:51 ]
Заголовок сообщения:  Re: простенькая 2D игра

С точки зрения OpenGL у тебя есть есть несколько объектов:
1. поле
2. монеты с разной текстурой.

У каждого объекта есть координаты и форма представления, например в 3DS.

Выводишь все объекты в нужном местоположении и повороте и все.

Автор:  AlexFalcoN [ 13 апр 2010 15:06 ]
Заголовок сообщения:  Re: простенькая 2D игра

=))) спустя несколько месяцев я всё-таки решил вернуться к начатому проекту, решил делать так как могу и то что умею полагаясь на свои силы, я обошёл этот не известный до сих пор для меня момент:
когда рисую монеты слева направо и если значение ячейки z[i] = 1 я сдвигаюсь на 0.15 по оси Y , если z[i] = 2 вниз , а если z[i] = 0 то Y =0
получается картина , каждая последующая монета расположена не на 1м уровне а на 0.15 по Y выше предыдущей или ниже в зависимости от значение z[i] , ( i = 0->12);

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

кстате как поле создать я пока не понимаю .

Автор:  MagicWolf [ 13 апр 2010 19:35 ]
Заголовок сообщения:  Re: простенькая 2D игра

>кстате как поле создать я пока не понимаю .

В каком смысле. Надо где-то создать модельку поля и выводит ее.

Автор:  AlexFalcoN [ 01 июн 2010 13:58 ]
Заголовок сообщения:  Re: простенькая 2D игра

не, я имел ввиду поле как прямоугольник 3 х 13 (строка столбец) , по логике , самая центральная строка - 2я , в ней распологаются 13 монет в строчку , если игрок 1 берёт 1 монету, монета сдвигается в 1ю строчку , если вторые 2 монеты берёт 2й игрок то , 2я,3я монеты сдвигаются на строчку вниз .
это получается матрица , это я понял . Вопрос у меня был и остаётся до сих пор только , как рисовать с openGL монеты как отдельные друг от друга обьекты . А то рисую 1ю монету , затем вторую а она смещается относительно первой , 3я относительно 2й , в своей игре пришлось писать так:

Код:
glTranslated(0,0,0);   
     glColor3d(0.8,0.4,0.0);
     auxSolidSphere(7.0);

    glPopMatrix;

    glTranslated(X1,Y1,0); 
     glColor3d(0.5,0.1,0.1);
     auxSolidSphere(0.2);

    glTranslated(-X1,-Y1,0);
    glPopMatrix;

    glTranslated(X2,Y2,0); 
     glColor3d(0.4,0.2,0.2);
     auxSolidSphere(0.4);

    glTranslated(-X2,-Y2,0);
    glPopMatrix;

    glTranslated(X3,Y3,0);   
     glColor3d(0,0.1,1);
     auxSolidSphere(0.65);

    glPopMatrix;

    glTranslated(X4,Y4,0); 
     glColor3d(0.1,0.2,0.2);
     auxSolidSphere(0.1);

    glTranslated(-X4,-Y4,0);
    glPopMatrix;

    glTranslated(-X3,-Y3,0);
    glPopMatrix;

    glTranslated(X5,Y5,0); 
     glColor3d(0.8,0.5,0.1);
     auxSolidSphere(0.55);

    glTranslated(-X5,-Y5,0);
    glPopMatrix;

    glTranslated(X6,Y6,0); 
     glColor3d(0.6,0.5,0.1);
     auxSolidSphere(2.4);


мне приходилось перемещать на нулевое расстояние .

кстате у меня почему то glPopMatrix; и glPushMatrix; не пашет , как я их н ставил в какой последовательности, может я не доконца понял что эти команды делают?

Автор:  MagicWolf [ 01 июн 2010 14:11 ]
Заголовок сообщения:  Re: простенькая 2D игра

glPushMatrix - сохраняет какую-то матрицу в стеке, glPopMatrix - извлекает из стека.

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

Лучше всего почитать Эйнджела.

Автор:  bad_duck [ 01 июн 2010 19:08 ]
Заголовок сообщения:  Re: простенькая 2D игра

AlexFalcoN писал(а):
получается картина , каждая последующая монета расположена не на 1м уровне а на 0.15 по Y выше предыдущей или ниже в зависимости от значение z[i]
Это как раз и получается из-за отсутствия glPushMatrix() и glPopMatrix(), матрица для каждой следующей фигуры зависит от предыдущей фигуры, а если расставить glPushMatrix() и glPopMatrix() в нужных местах, то они будут независимыми. Расставить их нужно примерно так:
Код:
glPushMatrix();
glTranslated(0,0,0);   
glColor3d(0.8,0.4,0.0);
auxSolidSphere(7.0);
glPopMatrix;

glPushMatrix();
glTranslated(X1,Y1,0);
glColor3d(0.5,0.1,0.1);
auxSolidSphere(0.2);
glPopMatrix;

glPushMatrix();
glTranslated(X2,Y2,0);
glColor3d(0.4,0.2,0.2);
auxSolidSphere(0.4);
glPopMatrix;

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/