justfoler, Потому что у тебя цикл генерации однопалубных кораблей вложен в цикл отрисовки карты, каждый цикл по x, y рисуется карта, и также генерируются корабли, так как цикл сокращается, уже в сгенерированных местах карты появляются корабли, и они не могут быть перезаписаны. Иначе говоря цикл создания кораблей проходит каждый раз как рисуется часть карты, всего получается 400 раз.
Сообщение отредактировал Lord_Zeon - Понедельник, 30 Июля 2012, 17:38
Жанр: Аркада. Движок: ON:E Пространство: 2D Язык Пр.: C++ Платформа: Windows. API: Directx9
Описание: Классический арканоид, думаю все играли и в описании не нуждается. У синего ряда платформ по 2 жизни, у красного последнего по 3, у остальных красных по 1. Скорость шара после столкновений выбирается случайно, поэтому возможны рывки и переходы от быстрого к медленному.
Управление: Стрелки - Для перемещения. Пробел - Запустить шарик.
Дошло у меня до изучения OpenGL, по советам пользуюсь freeglut - открытая альтернатива OpenGL Utility Toolkit (GLUT). (Как сообщает википедия.)
Из нескольких уроков прочитанных и просмотренных мной, начал делать простенький платформер, выкладываю его тут в открытом виде, пока без графики (Для краткости все написал в одном модуле. Надеюсь разберетесь.)
Что я ожидаю: Это услышать комментарии, советы, ошибки (Только без лишнего фанатизма, и не кидать тапками). Без них продвижение не возможно, поэтому буду выкладывать наработки сюда. Также хочу узнать что можно использовать для загрузки\обработки текстур.
switch(ax*size) { case 34: cout << "Hi! what are you doing ?\n"; // hi break; case 260: cout << "Hi human! I VI (Virtual Intelligence)\n"; // hello break; case 938: cout << "Fine!\n"; // how you break; default: cout << "I don't understand you.\n"; } }
int main() { string str;
start();
while(1) { getline(cin, str); for (int i = 0; i <= str.size(); i++) { str[i] = tolower(str[i]); } data(str); } }
2й Вариант, совпадения слов маловероятны, но максимальное слово может состоять из 8 букв. Как работает:
Возьмем для примера слово Hello, слово состоит из 85121215, для сокращения опускаем 1, в итоге их всего 3. Записываем в следующем порядке, 852253. Хотя если взять набор букв hebvo или hevbo, 8522215 после сокращения они не будут ничем отличаться от Hello Будут записаны также - 852253. Этим доказывается то что при сокращении, совпадения слов все же есть.
Code
#include <iostream> #include <string>
using namespace std;
void start() { cout << "Welcom to Vi Human (bot chat program)" << endl; cout << "Please print you question !" << endl; }
void data(int val) { cout << val << endl; switch(val) { case 890: cout << "Hi! what are you doing ?\n"; break; // Hi case 852253: cout << "Hi human! I VI (Virtual Intelligence)\n"; break; //Hello case 85375510: cout << "Fine\n"; break; //How you default: cout << "I don't understand you.\n"; } }
goldsphere, Для начала у тебя нет аргументов функции main.
Code
int main(int argc, char** argv)
Далее в Свойствах проекта Компоновщик\Система\Подсистема - Должна быть выставлена Windows (/SUBSYSTEM:WINDOWS). Ну и конечно же не забыть подключить либы SDLmain.lib SDL.lib Все должно заработать.
Можно сделать переменную которая будет хранить номер комбинации, а при считывании нажатия клавиш будет складываться общее значение в переменную, по нему можно будет определить какая комбинация будет выполнена. После выполнения сбрасывать переменную и считывать заново. Сам еще не пробовал так сделать, излагаю свои мысли, если пригодиться буду рад.
Добавлено (03.05.2012, 01:09) --------------------------------------------- Все исправил, почти готово, в классе graphics.cpp будут все функции которые напрямую взаимодействуют с девайсом, а для остальных подклассов буду вызывать их функции-члены через наследование, эффект почти такой же как я и хотел.
Сообщение отредактировал Lord_Zeon - Четверг, 31 Мая 2012, 02:55
Archido, Спасибо за ответ, согласен что неправильная архитектура, я даже и не пытался все осмыслить, писал как считал правильным, единственное что меня тогда беспокоило это как передавать девайс для других объектов, в скором времени перепишу.
Игрушки на сторонних движках не создавал (Не люблю разбираться в чужом, считаю что лучше пробовать написать самому). Где то валяется исходник движка GEGE, вечерком посмотрю как там устроено.
Может из литературы что-нибудь по этому есть, с удовольствием бы почитал.
Сообщение отредактировал Lord_Zeon - Понедельник, 30 Апреля 2012, 19:32
Тритон, Сам давно хотел узнать как передавать двумерный массив через аргументы функций, пробовал разные варианты, но почти всегда сталкивался с ошибкой при компиляции: cannot convert 'int (*)[10]' to 'int**' for argument '1' to 'void f(int**, int, int)'
Единственный рабочий вариант у меня передавать массив способом type function name (type array[size][size]) где size известные пределы массива.
Сообщение отредактировал Lord_Zeon - Понедельник, 30 Апреля 2012, 18:11