Игра "Викторина"

Здесь содержатся плагины, графические оболочки, наборы смайлов и другие дополнения к CommFort.
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

Re: Игра "Викторина"

Сообщение ОреЛ »

У меня катастрофически не хватает времени пока что. Всё это есть в планах, чтобы сделать.
Система бонусов включается, если ты не больше 2 вопросов простаивал. Больше поставить? (ответил, прошло 2 вопроса, и счетчик опять сбивается)
И еще, у spermet сделан такой симпатичный механизм, что на разное время ответа выдается разная фраза (особенно скрипя мозгами), некоторым это не нравится и хотят, чтобы просто одна фраза была ;(
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
Аватара пользователя
yagrik
Сообщения: 116
Зарегистрирован: 17:45, 01.09.2009
Откуда: Санкт-Петербург
Контактная информация:

Re: Игра "Викторина"

Сообщение yagrik »

ОреЛ писал(а):У меня катастрофически не хватает времени пока что. Всё это есть в планах, чтобы сделать.
Система бонусов включается, если ты не больше 2 вопросов простаивал. Больше поставить? (ответил, прошло 2 вопроса, и счетчик опять сбивается)
И еще, у spermet сделан такой симпатичный механизм, что на разное время ответа выдается разная фраза (особенно скрипя мозгами), некоторым это не нравится и хотят, чтобы просто одна фраза была ;(
Нет уж, тогда сделайте выбор: или одна фраза, или много, я наоборот приветствую много разных фраз, чтобы веселее было. Многие по ночам играют, и так скучно. А еще лучше, чтобы фразу можно было вбивать свои и сколько угодно.
Последний раз редактировалось yagrik 02:29, 12.02.2011, всего редактировалось 1 раз.
CommFort (г. Санкт-Петербург)

commfort.spb.ru - самый демократичный сервер - выборы админа раз в 3 месяца!
Osgald
Сообщения: 9
Зарегистрирован: 22:33, 05.02.2011

Re: Игра "Викторина"

Сообщение Osgald »

yagrik писал(а): А еще лучше, чтобы фразу можно было вбивать свои и сколько угодно.
Ну, это уже перебор :) Нескольких стандартных вполне хватит. По-моему, гораздо важнее избавиться от угадал(а) и балл(а, ов).
Кто установил последнюю версию - отпишитесь как включается бонусная система.
Osgald
Сообщения: 9
Зарегистрирован: 22:33, 05.02.2011

Re: Игра "Викторина"

Сообщение Osgald »

Поясните вы мне Христа ради, как эта бонусная система включается и выключается. Я пока логических объяснений не нахожу. Цитирую:
Фрукт с женским именем. (букв: 5)

[15:42:14] Viktor&Ina: Подсказка №1: г****
[15:42:19] maken: груша
[15:42:20] Viktor&Ina: Система бонусов включена
[15:42:20] Viktor&Ina: maken ответил(а) правильно и заработал(а) 8 (4 бонусных балл(а, ов)) балл(а,ов), У maken 877 балл(а,ов), 1-е место.
[15:42:25] Viktor&Ina: Следующий вопрос №50:

Что обычно делает кошка, увидев перед собой злую собаку? (букв: 7)

[15:42:25] Viktor&Ina: Система бонусов отключена
Вот почему она включилась? И главное, почему опять выключилась?
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

Re: Игра "Викторина"

Сообщение ОреЛ »

viktorina_vc.rar
(105.51 КБ) 335 скачиваний
Ладно, мне будет сложно объяснить вам, чтобы вы поняли. Система бонусов включается, если играет количество человек, указанное в настройках. Количество человек подсчитывается из того расчета, чтобы каждый из "играющих" ответил последний раз (или попытался ответить) не раньше, чем 3 вопроса назад. Намереваюсь исправить эту цифру до 5, может так будет проще включить систему бонусов. Если нет, то поставлю цифру 10.
Приложенный файл - викторина с цифрой 5

То, что добавил ниже, там все конфиги тянутся при включении плагина, обращений к файлу больше не идёт во время работы и перезагрузка настроек осуществляется перезапуском плагина.
viktorina_vc.rar
(107.7 КБ) 341 скачивание
Supermet, тебе подарочек! Я не могу понять "принцип экранирования". Да и тем более при выводе в чат придется "разэкранировать", не так ли? Хорошая тебе задача.
viktorina_vc_source.rar
(342.38 КБ) 303 скачивания
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Игра "Викторина"

Сообщение supermet »

Просто в sqlite символы одинарной кавычки нужно экранировать.
Тоесть заменить все вхождения ' на '' (2 кавычки.)
Я проверю как это работает и напишу.
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Игра "Викторина"

Сообщение supermet »

Орел, в функции

Код: Выделить всё

void Register_user(string user){
	int count= getcount("users", "name", user);
	if (count==0){
		sqlite->execDML("insert into users(name, igraet) values ('"+chcp(user, CP_ACP, CP_UTF8)+"', 1)");
		UserList * TempUsers = new UserList[PlayersInBase + 1];
		Users[PlayersInBase].Name = user;	
		Users[PlayersInBase].LastAnswer = 0;
		PlayersInBase++;
		Users = TempUsers;
//...
Здесь ошибка. Зачем переменной Users присваивается сначала объект с именем и ответом, а потом обнуляется присваивается ссылка на новый объект TempUsers.Мне кажется лучше использовать глобальную переменную map<string, string> Users http://www.cplusplus.com/reference/stl/map/
Последний раз редактировалось supermet 21:37, 13.02.2011, всего редактировалось 1 раз.
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

Re: Игра "Викторина"

Сообщение ОреЛ »

Возможно, я неправильно понял, для чего предназначена эта функция, но всё же, у меня массив Users типа UserList - это массив записей, поэтому мне приходится создавать временный массив с размером на 1 больше, дозаписать еще одну запись и присвоить старому массиву этот временный... Я понял в чем ошибка. Только что. Исправь примерно на такое

Код: Выделить всё

		UserList * TempUsers = new UserList[PlayersInBase + 1];
		for (int i = 0; i < PlayersInBase; i++){
			TempUsers[i].InGame = Users[i].InGame;
			TempUsers[i].Name = Users[i].Name;
			TempUsers[i].LastAnswer = Users[i].LastAnswer;
			}
		PlayersInBase++;
		TempUsers[PlayersInBase].Name = user;   
		TempUsers[PlayersInBase].LastAnswer = 0;
		Users = TempUsers;
из-за этой ошибки происходило следующее: если человек ни разу не играл, то сбрасывался весь массив играющих...надо выложить исправленный?
Вложения
viktorina_vc.rar
(108.15 КБ) 293 скачивания
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Игра "Викторина"

Сообщение supermet »

тогда в предпоследней строчке перед Users = TempUsers; наверно нужно написать delete[] Users; чтобы утечки памяти не было. И все таки с vector или map было бы легче. Вспомогательную переменную TempUsers не нужно было бы вводить и указатели можно не использовать.
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

Re: Игра "Викторина"

Сообщение ОреЛ »

то есть сначала удалить массив Users, а потом присвоить ему другой массив? да, надо бы так сделать, но всё же, я хотел сделать массив записей, потому что по-другому у меня в голове не укладывалась реализация. для каждого пользователя нужно хранить имя, булиновую переменную и номер, а 3 слова в 2 не запихнешь
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Игра "Викторина"

Сообщение supermet »

Ну вот например так можно без указателей:

Код: Выделить всё

  UserList user;
    vector<UserList> Users;

    user.Name = "User1";
    user.LastAnswer = 0;
    user.InGame = true;
    Users.push_back (user);
    user.Name = "User2";
    user.LastAnswer = 0;
    user.InGame = true;
    Users.push_back (user);
    // вывод
    for (int i=0; i<Users.size(); i++)
        cout << " " << Users.at(i).Name << endl;
    // удалить второго пользователя
    Users.erase (Users.begin()+1);
    for (int i=0; i<Users.size(); i++)
        cout << " " << Users.at(i).Name;
//...
    Users.clear();
В этой функции если кол-во пользователей будет > 255 то произойдет переполнение (byte).
Хотя, наверно так много никогда ни играют.

Код: Выделить всё

int NumOfUser(string User){
	byte num;
	for (int i = 0; i < PlayersInBase; i++){
		if (Users[i].Name == User) num = i;
		}
	return num;
	}
Аватара пользователя
sasha
Сообщения: 817
Зарегистрирован: 20:16, 27.07.2009
Откуда: Усть-Илимск

Re: Игра "Викторина"

Сообщение sasha »

Что то я запутался! Какая версия щас для клиента с супер игрой?
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

Re: Игра "Викторина"

Сообщение ОреЛ »

Начиная с 1.016 совмещенная версия с хорошей супер-игрой
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
Аватара пользователя
sasha
Сообщения: 817
Зарегистрирован: 20:16, 27.07.2009
Откуда: Усть-Илимск

Re: Игра "Викторина"

Сообщение sasha »

запускаю плагин, и у меня сразу вырубается клиент. Что надо сделать чтобы все работало хорошо?
Плагин стоял от supermet
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

Re: Игра "Викторина"

Сообщение ОреЛ »

Какой вы поставили плагин и что и как вы делали? Не люблю на форуме обсуждать одну проблему, лучше это обсуждать лично.
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
Ответить