LINUX.ORG.RU
ФорумGames

Игра «Буквоед»


0

1

Вчера был создан топик [Grammar nazi][печаль] О вреде интернета касающейся темы правописания, к сожалению у меня не достаточно score, по этому побеседовать там не удалось. Читая тот топик, возникла идея создать текстовую, консольную игру-прикол для орфографических педантов, что я незамедлительно и сделал.

Снимок: http://i5.pixs.ru/storage/0/3/1/Snimok2011_7525787_3486031.png

Код написанной мини-игры:

//VERBALIST - CONSOLE GAME
//Programm name: Verbalist
//Date: 05.12.2011
//Author: Serge (e-mail: nguieffect@gmail.com).

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main() {
    srand ( time(NULL) );

    //Description game
    string man_description = "Игра «Буквоед»\nВаша задача — правильно отвечать на задаваемые вопросы по орфографии.\n";
    cout << man_description << endl;

    //Start game or exit
    char startgame[128];
    cout << "Хотите начать игру? (да/нет): " ;
    cin.getline(startgame, sizeof(startgame));
    string enable_startgame = startgame;
    if (enable_startgame != "да") return 0;

    //Random text winner or loser
    string winner;
    string loser;
    int text_wl = random () % 3;
    switch ( text_wl ) {
        case 0 :
            winner = "Вы выиграли.\nВ школе на вас часто замечали надпись «Пени меня».";
            loser = "Вы проиграли.\nСлово «дебил», часто доносилось с уст вашего учителя.";
            break;
        case 1 :
            winner = "Вы выиграли.\nПро таких говорят: книжный дрищь.";
            loser = "Вы проиграли.\nВам везёт при заключении договоров, в них вы частенько заполняете фамилию с ошибкой.";
            break;
        case 2 :
            winner = "Вы выиграли.\n«Пивасик с поциками» — это не про вас.";
            loser = "Вы проиграли.\nНа грамоту вам монопенисуально.";
            break;
        }

    //Questions and response
    string question;
    string response;
    int questions;
    for (questions = 0; questions <= 3; questions++) {

        switch ( questions ) {
            case 0 :
                question = "\n1. Вопрос"
                           "\nСколько запятых пропущено в предложении: У человека который живет в Европе зона комфорта распространяется дальше чем его квартира.";
                response = "3";
                break;
            case 1 :
                question = "\n2. Вопрос"
                           "\nСколько ошибок допущено в предложении: Челавек, у каторого мошина за 150 тысяч доларов.";
                response = "4";
                break;
            case 2 :
                question = "\n3. Вопрос"
                           "\nСколько ошибок допущено в слове «Астралопитек».";
                response = "1";
                break;
            case 3 :
                question = "\n4. Вопрос"
                           "\nСколько знаков тире, пропущено в предложении: Во всех новых самолетах и в «Боингах», и в «Аэробусах» больше не устанавливают пепельницы в подлокотники.";
                response = "2";
                break;
            }
        cout << question << endl;

        char enter_response[128];
        cout << "Введите ответ числом: " ;
        cin.getline(enter_response, sizeof(enter_response));
        string get_response = enter_response;
        if (get_response != response) {
            cout << "\n" + loser << endl;
            return 0;
            }
        }
    cout << "\n" + winner << endl;
    return 0;
    }


Последнее исправление: ochkarik-dev (всего исправлений: 1)

Код этой мини-игры можно сократить в несколько раз, избавившись от говнокода.

Это ужасно. Ты очень, очень толстый тролль.

schizoid ★★★
()
Ответ на: комментарий от schizoid

можно сократить в несколько раз, избавившись от говнокода.

Да ну, ну-ка, сократи-ка в несколько раз, мне уж очень интересно.

ochkarik-dev
() автор топика
Ответ на: комментарий от schizoid

Код этой мини-игры можно сократить в несколько раз, избавившись от говнокода.

Не гони. В несколько раз никак не сократишь.

mopsene ★★★
()
Ответ на: комментарий от mopsene

Утрировал в порыве чувств

~$ wc -l *cpp *py
  82 verbalist.v1.cpp
  37 verbalist.v2.cpp
  23 verbalist.py
 142 итого
#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

enum {WINNER = 0, LOSER = 1, ENDING_COUNT = 3, COUNT = 4};
const string ENDING[ENDING_COUNT][2] = { {"Вы выиграли.\nВ школе на вас часто замечали надпись «Пни меня».\n", "Вы проиграли.\nСлово «дебил» часто доносилось из уст вашего учителя.\n"},
	{"Вы выиграли.\nПро таких говорят: книжный червь.\n", "Вы проиграли.\nВам везёт при заключении договоров: в них вы частенько заполняете фамилию с ошибкой.\n"},
	{"Вы выиграли.\n«Пивасик с поциками» — это не про вас.\n", "Вы проиграли.\nНа грамоту вам монопенисуально\n."}
};
const string QUIZ[COUNT][2] = { {"Сколько запятых пропущено в предложении: У человека который живет в Европе зона комфорта распространяется дальше чем его квартира.\n", "3"},
	{"Сколько ошибок допущено в предложении: Челавек, у каторого мошина за 150 тысяч доларов.\n", "4"},
	{"Сколько ошибок допущено в слове «Астралопитек».\n", "1"},
	{"Сколько знаков тире пропущено в предложении: Во всех новых самолетах: и в «Боингах», и в «Аэробусах» больше не устанавливают пепельницы в подлокотники.\n", "1"}
};

bool responded(const string & prompt, const string & rightAnswer) {
	cout << prompt; string s; cin >> s;
	return (s == rightAnswer);
}

int main() {
	srand(time(NULL));
	cout << "Игра «Буквоед»\nВаша задача — правильно отвечать на задаваемые вопросы по орфографии.\n";
	if(responded("Хотите начать игру? (да/нет): ", "да")) {
		for(int i = 0; i < COUNT; ++i) {
			cout << (i + 1) << ". Вопрос\n" << QUIZ[i][0];
			if(!responded("Введите ответ числом: ", QUIZ[i][1])) {
				cout << ENDING[rand() % ENDING_COUNT][LOSER];
				return 0;
			}
		}
		cout << ENDING[rand() % ENDING_COUNT][WINNER];
	}
	return 0;
}
#-*- coding: utf-8 -*-
from random import choice

WINNER = 0
LOSER = 1
ENDING = [ ("Вы выиграли.\nВ школе на вас часто замечали надпись «Пни меня».", "Вы проиграли.\nСлово «дебил» часто доносилось из уст вашего учителя."),
	("Вы выиграли.\nПро таких говорят: книжный червь.", "Вы проиграли.\nВам везёт при заключении договоров: в них вы частенько заполняете фамилию с ошибкой."),
	("Вы выиграли.\n«Пивасик с поциками» — это не про вас.", "Вы проиграли.\nНа грамоту вам монопенисуально.")
]
QUIZ = [ (1, "Сколько запятых пропущено в предложении: У человека который живет в Европе зона комфорта распространяется дальше чем его квартира.", "3"),
	(2, "Сколько ошибок допущено в предложении: Челавек, у каторого мошина за 150 тысяч доларов.", "4"),
	(3, "Сколько ошибок допущено в слове «Астралопитек».", "1"),
	(4, "Сколько знаков тире пропущено в предложении: Во всех новых самолетах: и в «Боингах», и в «Аэробусах» больше не устанавливают пепельницы в подлокотники.", "1")
]

print "Игра «Буквоед»\nВаша задача — правильно отвечать на задаваемые вопросы по орфографии.\n"
if raw_input("Хотите начать игру? (да/нет): ") == "да":
	for i, q, a in QUIZ:
		if raw_input("%d Вопрос\n%s\nВведите ответ числом: " % (i, q)) != a:
			print choice(ENDING)[LOSER]
			break
	else: 
		print choice(ENDING)[WINNER]

К сожалению, очень много места занимает петросянство и ненужные уточнения, не посмел удалить ради чистоты эксперимента.

schizoid ★★★
()
Ответ на: комментарий от OldFatMan

Это в Оренбурге школы такие? Или ты уже задание нанявшей тебя фирмы выполняешь?

Не, мне просто делать нечего было, стрейф мозга полезен, а что?

ochkarik-dev
() автор топика
Ответ на: комментарий от schizoid

А почему в этом конкретном случае ты написал именно енумом а не свитчем, только из-за эстетики или есть техническое обоснование?

ochkarik-dev
() автор топика
Ответ на: комментарий от ochkarik-dev

В основном из-за эстетики. Технически скорость выполнения будет больше, но ненамного.

И добавлять новые варианты проще.

schizoid ★★★
()
Ответ на: комментарий от OldFatMan

Не понял: что мозга полезен?

Cтрейф — это тактический способ ведения оборонительного огня в снайперском деле, путем движения по флангу. Этим я хотел сказать, что заниматься иногда чем то альтернативным от основных дел — полезно.

ochkarik-dev
() автор топика
Ответ на: комментарий от kermzyxer

Я бы считывал вопросы и ответы из файла.

Это если действительно игру писать, с множеством вопросов и т.п. Например TinyXML использовать, но я же просто от нечего делать писал.

ochkarik-dev
() автор топика
Ответ на: комментарий от ochkarik-dev

Что такое «стрейф», я знаю. Просто никак не мог применить это к мозгу. Стрейф мозга - чем-то напоминает «вынос мозга».

А определение стрейфа у тебя какое-то путаное.

Почему «ведение огня»? (а не просто смещение вправо-влево)

Почему «оборонительного»?

Почему «в снайперском деле»?

путем движения по флангу

Ведение огня путём движения? Объясни.

по флангу

Так при стрейфе вроде вдоль фронта двигаются, а не по флангу, не?

OldFatMan
()
Ответ на: комментарий от OldFatMan

Почему «оборонительного»?

Потому что используют его для отстреливания, кстати бежать задом и отстреливаться кажись то же стрейфом называется только с добавкой черед дефиз еще чего то.

Почему «ведение огня»? (а не просто смещение вправо-влево)

Потому что без огня это было бы просто движение в сторону.

Почему «в снайперском деле»?

Ну в стрелковом деле если говорить правильно, какая разница.

Ведение огня путём движения? Объясни.

Не верно выразился, не «путем» а «при».

Так при стрейфе вроде вдоль фронта двигаются, а не по флангу, не?

Ну так двигаются же в сторону фланга, в бок короче.

ochkarik-dev
() автор топика
Ответ на: комментарий от ochkarik-dev

Потому что используют его для отстреливания

Это ж просто движение. При чём тут «отстреливание»?

Потому что без огня это было бы просто движение в сторону.

А это и есть просто движение в сторону.

Ну в стрелковом деле если говорить правильно, какая разница.

Кому как. Многим действительно нет разницы: говорим (и пишем, как попало), авось поймут и так.

Ну так двигаются же в сторону фланга, в бок короче.

Ну так не «по флангу», а «в сторону фланга», а?

В общем, не делай больше «стрейф мозга», прошу тебя.

OldFatMan
()
Ответ на: комментарий от ochkarik-dev

Да не, какой xml. Файл вида
[вопрос1]
[ответ1]
[вопрос2]
[ответ2]

kermzyxer
()
Ответ на: комментарий от OldFatMan

В общем, не делай больше «стрейф мозга», прошу тебя.

Уговорил :D Вообщем то я и не пытался писать великолепный код, написал чисто в прикол, о чем сообщил еще в первом посте, а вы тут докопались до каждой переменной, будто этот кусок несчастного кода вас до конца жизни использовать заставят. Занубили, затроллили, всю мотивацию отбили :)

ochkarik-dev
() автор топика
Ответ на: комментарий от ochkarik-dev

Ла-адно, сеанс троллинга прекращаю.

Мотивирую: «Пеши есчо».

OldFatMan
()
Ответ на: комментарий от OldFatMan

Почему «в снайперском деле»?

паrни, а вам не кажется, что стрейф - чисто игровое понятие и не имеет никакого аналога irl :D

fork_you
()
Ответ на: комментарий от fork_you

Да всё уже - я же объяснил:

Ла-адно, сеанс троллинга прекращаю.

Хорошо, что ты после окончания уточнил, а не во время сеанса. ;)))

OldFatMan
()
Ответ на: комментарий от ochkarik-dev

Только да, значит оно совершенно другое, обстрел а не отстрел.

ochkarik-dev
() автор топика
Ответ на: комментарий от ochkarik-dev

Strafing is the practice of attacking ground targets from low-flying aircraft

в огороде бузина, а в Киеве дядька.

fork_you
()
Ответ на: комментарий от fork_you

паrни, а вам не кажется, что стрейф - чисто игровое понятие и не имеет никакого аналога irl :D

как это не странно — такой чисто военный термин есть ирл, и означает он атаку наземной цели самолетом-штурмовиком на небольшой высоте, а не то что описал ТС.

Ingwar ★★★★★
()
Ответ на: комментарий от Ingwar

/me представил солдата с автоматом, отходящего с поля боя полукругами по зигзагообразной траектории, подпрыгивающего через каждые 3 шага. Последний бой квавера :D

fork_you
()
Ответ на: комментарий от fork_you

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

ochkarik-dev
() автор топика
Ответ на: комментарий от mopsene

Для ЛОРа это отличный код.

Почему такое пренебрежение? Я как то всегда думал что на лоре много спецов тусит, причем в разных областях, от дворника до космонавта :)

ochkarik-dev
() автор топика
Ответ на: комментарий от ochkarik-dev

Почему такое пренебрежение? Я как то всегда думал что на лоре много спецов тусит, причем в разных областях, от дворника до космонавта

Потому что выкладывают плохой код. Хорошие специалисты слишком заняты, чтобы мериться фаллосами постить свои замечательные примеры.

mopsene ★★★
()
Ответ на: комментарий от ochkarik-dev

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

fork_you
()

Оцифруй задания из Розенталя, сделай командную игру. Чтобы были классы «грамматик», «синтаксовед», «орфограф», «специалист пунктуационной поддержки» и задания выполнялись сообща. Типа там первая цель - исправить пунктуацию, второе - исправить согласование падежей в придаточном, третье - найти опечатки и ошибки в оформлении прямой речи. На всё про всё 20 минут, команда противника старается помешать выполнить задания, добавляя ошибки, выполняющая цели команда отбивается расстановкой запятых, знаками ударения и издалека — дефисами.

Smacker ★★★★★
()

Слово «дебил», часто доносилось с уст вашего учителя.

Однако почему-то в интернете дофига людей, которые ставят запятую в данном случае.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.