Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Программа: "Угадай число".Version 0.1  (Прочитано 1159 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dvano

  • Автор темы
  • Любитель
  • *
  • Сообщений: 67
    • Просмотр профиля
Программа: "Угадай число".Version 0.1
« : 24 Марта 2014, 13:56:42 »
Привет. Хочу поделиться своей первой программой на C++. Раньше работал с Java, но захотелось чего-то сложнее. 8)
Главное, что я хочу получить от этой темы, усовершенствование моего исходника и критика.

/*
 * File:   main.cpp
 * Author: dvano
 *
 * Created on 23 марта 2014 г., 21:59
 */

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

using namespace std;

int main(int argc, char** argv)
{
    unsigned short int player, computer, choice, minNumber, maxNumber, counter, maxCounter;

    srand(time(NULL));

    do
    {
        cout << "1 - game" << "\n";
        cout << "2 - info" << "\n";
        cout << "3 - exit" << "\n";

        cin >> choice;

        switch (choice)
        {
            case 1:
                cout << "enter the min number >= 0..." << "\n";

                cin >> minNumber;

                cout << "enter the max number > " << minNumber << "..." << "\n";

                cin >> maxNumber;

                cout << "enter the max counter > 0..." < "\n";

                cin >> maxCounter;

                computer = minNumber + rand() % (maxNumber - minNumber + 1);

                counter = 1;

                cout << "enter the number from " << minNumber << " to " << maxNumber << "\n";

                while (player != computer && (counter <= maxCounter))
                {
                    cin >> player;

                    player > computer ? cout << "your number > magic number" << "\n" : cout << "your number < magic number" << "\n";

                    cout << "remaining attempts " << maxCounter - counter << "\n";

                    counter++;
                }

                player == computer ? cout << "you win!" << "\n" : cout << "you lost!" << "\n";

                break;
            case 2:
                cout << "version 0.2" << "\n";
                break;
        }
    }
    while (choice != 3);

    cout << "bye!" << "\n";

    return 0;
}
« Последнее редактирование: 25 Марта 2014, 14:52:37 от dvano »

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5589
  • Все по палатам!
    • Просмотр профиля
Re: Программа: "Угадай число".Version 0.1
« Ответ #1 : 24 Марта 2014, 14:18:34 »
Это на Си написать надо было  :-\. А если на плюсах, то надо создать класс "игра" и от него наследовать класс "угадай"...
Извините, я все еще учусь

Оффлайн dvano

  • Автор темы
  • Любитель
  • *
  • Сообщений: 67
    • Просмотр профиля
Re: Программа: "Угадай число".Version 0.1
« Ответ #2 : 24 Марта 2014, 14:26:49 »
Это на Си написать надо было  :-\. А если на плюсах, то надо создать класс "игра" и от него наследовать класс "угадай"...

Не обязательно. C++ поддерживает процедурное программирование, но на этом спасибо :). Кстати, если я введу не числовой символ, программа начнет зацикливаться без конца. Как это исправить?

Если уже затронута тема ООП, то я бы создал класс Game, в котором есть все правила, касающиеся игры. Создал бы еще класс Player, его наследуют PlayerComputer и PlayerHuman, каждый из этих классов имеет имя и функцию для работы с игрой. Жаль, я не знаю как на C++ это сделать. Создание классов в C++ для меня еще сложно. Хотя на Java это легко, но от простоты аж тошно.  ;D
« Последнее редактирование: 24 Марта 2014, 14:30:54 от dvano »

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5589
  • Все по палатам!
    • Просмотр профиля
Re: Программа: "Угадай число".Version 0.1
« Ответ #3 : 24 Марта 2014, 14:29:58 »
dvano, вообще то в программировании принято проверять действия пользователя, то есть надо проверить, что он ввел - число или нет. То есть надо взять введенные символы и проверить это
Извините, я все еще учусь

Оффлайн soarin

  • Старожил
  • *
  • Сообщений: 1850
  • ubuntu 20.04
    • Просмотр профиля
Re: Программа: "Угадай число".Version 0.1
« Ответ #4 : 24 Марта 2014, 17:28:13 »
Из гомномета за такое
if (player == computer) cout << "you win!" << "\n";
if (player != computer) cout << "you lost!" << "\n";
В с++ также как и в java есть оператор else в условиях.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7203
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Программа: "Угадай число".Version 0.1
« Ответ #5 : 24 Марта 2014, 20:06:53 »
SergeyIT, а если лень кучу условий проверять, то я обычно try catch в плюсах пользуюсь. В большинстве случаев этого достаточно,если алгоритм не ветвится в зависимости от условий, того что ввели.
dvano, переменные можно было перечислить через запятую, они все одного типа. Ну и классы в плюсах сам Бог Страуструп велел использовать.

Оффлайн Delit

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Программа: "Угадай число".Version 0.1
« Ответ #6 : 24 Марта 2014, 21:32:02 »
Да вроде нормальный код. Я бы выделил кусок кода
Цитировать
cout << "enter the number from " << minNumber << " to " << maxNumber << "\n";

                while (player != computer && (counter <= maxCounter))
                {
                    cin >> player;

                    if (player > computer) cout << "your number > magic number" << "\n";
                    if (player < computer) cout << "your number < magic number" << "\n";

                    cout << "remaining attempts " << maxCounter - counter << "\n";

                    counter++;
                }
в отдельную функцию. По смыслу это отдельный игровой цикл. До него идет подготовка после результат. Ну еще можно в результате выводить количество попыток :)

Оффлайн dvano

  • Автор темы
  • Любитель
  • *
  • Сообщений: 67
    • Просмотр профиля
Re: Программа: "Угадай число".Version 0.1
« Ответ #7 : 25 Марта 2014, 14:53:41 »
Немного изменил код.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7203
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Программа: "Угадай число".Version 0.1
« Ответ #8 : 25 Марта 2014, 16:56:24 »
dvano, а теперь введи вместо цифр 123 букву h и полюбуйся на бесконечный цикл. (Прервать процесс можно нажав Ctrl+C в терминальном окне). Кто "защиту от дурака" делать будет?

Оффлайн dvano

  • Автор темы
  • Любитель
  • *
  • Сообщений: 67
    • Просмотр профиля
Re: Программа: "Угадай число".Version 0.1
« Ответ #9 : 25 Марта 2014, 17:34:05 »
dvano, а теперь введи вместо цифр 123 букву h и полюбуйся на бесконечный цикл. (Прервать процесс можно нажав Ctrl+C в терминальном окне). Кто "защиту от дурака" делать будет?

Так я об этом и говорил выше(решение проблемы знаю). Защиту от "дурака" делать не буду. Буду "идти дальше"(изучение структур).
« Последнее редактирование: 25 Марта 2014, 17:38:19 от dvano »

 

Страница сгенерирована за 0.031 секунд. Запросов: 25.