Войти
ПроектыФорумОцените

мариоподобная 2D-игра, пишу с 1997 года в общей сложности :)

Страницы: 1 2 310 11 Следующая »
#0
0:24, 29 авг. 2011

привет. пишу игру давно уже, вначале была версия под DOS, несколько лет назад переделал под Windows

автор графики персонажей мой одноклассник Сергей Синянский (Петрович)

условно называется Soldir of Mario

адрес загрузки

http://zx3267.dyndns.info/programms/soldirofmario/SoldirOfMario2011.rar (30 Mb)

зеркало

http://zx3267.px6.ru/programms/soldirofmario/SoldirOfMario2011.rar (30 Mb)


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

проект для среды Visual Studio 6.0 должен компилироваться без проблем

объектно-ориентированный подход

сделал ролик на ютюбе (процесс игры, вход и редактирование уровней и спрайтов):

скрины вот:

Изображение
Изображение
Изображение
Изображение
Изображение


пример кода:

//============= 'game' это, собственно, сама игра ==================
void SUPERMARIO::Game()
{
  InitForStartGame(0);
  //music(NORMAL_MUSIC);
  while (GAMECYCLE)  //цикл игры
  {
  //I. построение изображения 
  MOVEOBJ::TotalAnimatedObject=0;
  prMonetsChangePhase();
  prPuziri();
  prBuildGamePicture();
  prShowDebugInfo();
  //II. логика игры
  BirdsOtSten();      //птички отталкиваются от стен
  SkeletonCollect();    //собираем скелетов
  prCleverobjRefresh();  //обновляем все у умных объектов
  prMarioDeathOnShipah();  //марио гасится на шипах
  prForMarioProtected();  //чтобы марио был защищенным
  prPrizeCatch(Rick, Prize);//призы не проходят сквозь стенки и марио ловит призы
  prBricksNudgePrize();  //кирпичи могут подталкивать призы
  prBricksRestore();    //восстанавливаем кирпичи
  prTurtleCikAlien();    //черепаха сбивает других чужих
  prMonetsTimeEndTimeLiveAndScoreCreate();//надо создать очки когда монетка пропадает
  prIfGameOver();      //если конец игры 
  prBossSalivaDeathMario();// кегли башки гасят марио и не пролетают через стены
  prBossSendSaliveAndKeepAtMario();//башка пускает "кегли" и находится вблизи от марио
  ArmsKillAlien();    // оружие убивает чужих
  prLiftUpDown();      //меняем направление лифта и обновляем его координаты
  prMarioDeathOnFlower();//марио гасится на зубастых цветках
  prFlowersUpDown();    //поднимаем и опускаем зубастые цветки
  MindobjFunctions(Rick, Cleverobj);//различные функции
  MindobjFunctions(Rick, CleverAlien);//предусмотренные для Mindobj
  prMarioFlyDownCleverobj();  //марио слетает с клевых объектов
  prMarioPositionerOnCleverobject();//позиционируем Mario  на клевый объект
  prMarioRenewXY();//обновляем координаты Mario
  //если ноги марио близко к лифту, марио падает
  prMarioClammyToLift();  //на лифт и его ускорение приравнять к нулю
  prMarioDownsBrickDestroy();//обрушиваем кирпичи под ногами у марио
  prArmsCollisionWithWall();//оружие сталкивается со стенами *
  prRememberOldMarioCoordinates();//запоминаем старые координаты Mario
  prKeyboardProcess();    //обработка НАЖАТИЙ клавиш 
  GameModesTreat();    //обрабатываем ситуацию загрузки и рестарта уровня режимы игры
  if (DoorOpenCounter) DoorOpenCounter--;  //чтобы дверь успела открыться
  prScrollBricks();    //двигается фон (спрайты воды и огня)
  prChangeEffect();    //эффект перехода на другой экран
  prShowFPS();      //показать FPS
  prSynhronization();    //синхронизируемся (ждем когда таймер станет равным 1)
  
  ShowLevelNumberTimeCounter++;

  if (ShowLevelNumberTimeCounter<100)
  {
    
    Msg("  УРОВЕНЬ    ", 9, MSG_NOUPDATE);
    

    /*if (LevelNumber<40)
    {
      scr.putNumb(LevelNumber/4+1,1);
      scr<< '-';
      scr.putNumb(LevelNumber%4+1,1);
    }
    else
    {
      scr.putNumb(LevelNumber);
    }*/
    scr.putNumb(LevelNumber);

  }
  
  static int ShowLog=0;
  //выводим изображение на экран из DoubleBuffer
  if (Keyb[KEY_L] && Keyb[KEY_LEFTCTRL]) 
  {
    Keyb^KEY_L;
    ShowLog^=1;
  }
  
  if (ShowLog) 
  {
    //сжимаем картинку
    for(int i=0; i<100; i++)
    {
      memcpy(scr.DoubleBuffer+i*320, scr.DoubleBuffer+i*2*320,320);
    }
    
    scr.rectangle(0,100,320,100,0);
    Log.Show();
  }
  scr.update();      
  } //конец цикла while
}//конец функции game

#1
0:27, 29 авг. 2011

Мм, классно, как насчет лицензии? GPL или BSD, как можно пользоваться?

#2
0:28, 29 авг. 2011

как угодно используйте. я честно не вникал в лицензии но я поддерживаю OpenSource подход, как-то так

#3
0:43, 29 авг. 2011

GPL - Для использования в некоммерческих целях, т.е. для себя, распространять только с указанием автора.
BSD - Изменил название и мое, делаю, что хочу.
Объяснил как мог :) Лично мне как-то GPL по-душе, не люблю чужое ))

#4
1:17, 29 авг. 2011

мда ну и ООП подход.

#5
1:32, 29 авг. 2011

ну хотя бы частично ООП

все что касается звука например собрано в класс SOUND, вывода на экран класс SCREEN, и т.д.

вот картинка классов

Изображение
#6
1:50, 29 авг. 2011

1. Xbox360 Controller не увидела.
2. Слишком долго грузится. Что там грузить вообще?
3. Слишком быстро работает. Впечатление что заточено на 60 или 30 fps, кажет 100.
4. Подсказок по кнопкам (например что подтверждение выхода - Y) нет.
5. Переходы между экранами не скипаются.
Код ещё не смотрел.

#7
1:55, 29 авг. 2011

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

насчет долго грузится - самый первый раз идет распаковка трех mp3 файлов в wav формат через lame.exe, при втором и последующем запуске грузится должно все быстро

насчет FPS да, сколько не бился так ничего и не добился. заточена она под 60 или 70 FPS как раз для режима 320x200 256 color, под DOS там синхронизироваться легко было вплоть даже до идеального случая когда ждешь обратного хода луча. под
виндоусом как не бился, и с приоритетами эксперименты проводил с FPS или около 90 получается, или в два раза меньше, около 40 не знаю что там, при том что это один и тот же *.exe - ник

#8
2:03, 29 авг. 2011

Ewgeny_Lapshin
> виндоусом как не бился, и с приоритетами эксперименты проводил до FPS около 90
> то 40 не знаю что там
См. примерно так: http://www.everfall.com/paste/id.php?a434r6sa8vg9

#9
5:35, 29 авг. 2011

после увиденного в нулевом посте кода уже несколько часов не могу уснуть

#10
8:21, 29 авг. 2011

Suslik
> после увиденного в нулевом посте кода уже несколько часов не могу уснуть
А что в нем не так? нормальный анахронизм времен dos, тогда почти все одиночки так писали (автор же сказал что писал под дос)

#11
9:06, 29 авг. 2011

LuckyMan
> GPL - Для использования в некоммерческих целях, т.е. для себя, распространять
> только с указанием автора.
LuckyMan
> Объяснил как мог :) Лично мне как-то GPL по-душе, не люблю чужое ))

Не правда, GPL не запрещает коммерческое использование, - запрет есть на закрытие исходных кодов.

#12
9:14, 29 авг. 2011

warchief
> нормальный анахронизм времен dos, тогда почти все одиночки так писали (автор
> же сказал что писал под дос)
  ООП имеет некоторые недостатки, которые периодически вылазят на поверхность

#13
9:28, 29 авг. 2011

Код - видно что наследие DOS, дальние указатели, вставки на ассемблере давно ненужные. Всё написано на C с использованием синтаксиса C++ зачем то, не на C++. Редактор спрайтов тоже из тёмных времён - сейчас есть например чудесный Graphics Gale, даже анимацию можно настраивать. Редактор уровней из той же тёмной эпохи, можно легко заменить на Tiled.
Хорошо что я те времена не застал, иногда встречаю наследие.

#14
10:26, 29 авг. 2011

Народ, чего вы на код наехали, человек игру с 97 года пишет, многие из вас тогда под стол пешком ходили=) Тогда шейдеров в помине небыло, OpgnGL только изобрели.
Редактор там самописный, да и еще в игру встроенный. Да и не каждая сторонняя софтина, как бы крута она не была подойдет к проекту.
В общем 5+ я в восторге.

Страницы: 1 2 310 11 Следующая »
ПроектыФорумОцените