Страница 1 из 1

Игра в кости с применением класса

Добавлено: 08 дек 2015, 12:15
Oxidous
Всем доброго времени суток,

Нужно написать игру в "кости". Играть должен юзер против в компьютера. Выигрывает тот, у кого больше очков.
Вот код самой программы. Да,он совсем простенький,но для моей задачи подходит.

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

#include <time.h>
#include <iostream>
#include <conio.h>
#include<windows.h>
using namespace std;
void show(int x)
{
    switch(x)
    {
    case 1:
cout <<"===========" <<endl;
cout <<"|         |" <<endl;
cout <<"|    0    |" <<endl;
cout <<"|         |" <<endl;
cout <<"===========" <<endl;
break;
 
case 2:
cout <<"===========" <<endl;
cout <<"|    0    |" <<endl;
cout <<"|         |" <<endl;
cout <<"|    0    |" <<endl;
cout <<"===========" <<endl;
break;
 
case 3:
cout <<"===========" <<endl;
cout <<"|  0      |" <<endl;
cout <<"|    0    |" <<endl;
cout <<"|      0  |" <<endl;
cout <<"===========" <<endl;
break;
 
case 4:
cout <<"===========" <<endl;
cout <<"|  0   0  |" <<endl;
cout <<"|         |" <<endl;
cout <<"|  0   0  |" <<endl;
cout <<"===========" <<endl;
break;
 
case 5:
cout <<"===========" <<endl;
cout <<"|  0   0  |" <<endl;
cout <<"|    0    |" <<endl;
cout <<"|  0   0  |" <<endl;
cout <<"===========" <<endl;
break;
 
case 6:
cout <<"===========" <<endl;
cout <<"|  0   0  |" <<endl;
cout <<"|  0   0  |" <<endl;
cout <<"|  0   0  |" <<endl;
cout <<"===========" <<endl;
break;
    }
}
 
void main()
{
 
    cout<< "Dobro pozalovat v igru 'Kosti'. "<<endl;
    cout<< "Pravila prostie: Viigrivaet tot, u kogo bolshe ockov. Udaci Vam!"<<endl;
    cout<<endl;
    srand(time(0));
 int i,igr1=0,igr2=0,a,b;
 do
 {
     cout <<"Nazmite [1] dlia broska, [2] - dlia prosmotra sceta, [3] - dlia vigoda iz igri. ";
        cin>>i;
     switch (i)
     {
         case 1:
 system("cls");
 a = rand() % 6+1;
  b = rand() % 6+1;
  cout<<"U Vas: "<<endl;
 show(a);
 igr1+=a;
  cout<<"U kompiutera: "<<endl;
 show(b);
 igr2+=b;
 break;
         case 2:
             if(igr1>igr2)
              cout<<"Vi viigrivaete so scetom: "<<igr1<<":"<<igr2<<endl;
              cout<<endl;
             if(igr2>igr1)
                 cout<<"Vi proigrivaete so scetom: "<<igr2<<":"<<igr1<<endl;
                 cout<<endl;
             if(igr1==igr2)
                 cout<<"Scet ravnii "<<igr1<<":"<<igr2<<endl;
                 cout<<endl;
    break;
   }
  }
  while(i!=3);
  _getch();
}
Очень хочу попросить помощи у знающих людей. Игра должна быть реализована через класс и объект класса.
Как можно переделать данную игру? Никак немогу понять, как пользоваться классами и потому не получается реальзовать игру через классы, а в самостоятельном задании написано,что игра должна быть реализована именно через класс.

Re: Игра в кости с применением класса

Добавлено: 09 дек 2015, 12:20
Din666
Возможно еще раскидать по методам для красоты

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

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

#ifndef __linux__

#include <conio.h>
#include<windows.h>

#define ClearScreenSystemCommand "cls"

#else // FOR LINUX
#define ClearScreenSystemCommand "clear"
#endif

class GameKosti {

    public:

        void showIntro() {
            std::cout << "Dobro pozalovat v igru 'Kosti'. " << std::endl;
            std::cout << "Pravila prostie: Viigrivaet tot, u kogo bolshe ockov. Udaci Vam!" << std::endl;
            std::cout << std::endl;
        }

        int start() {

            ::srand(time(0)); 

            do {
                int igr1=0;
                int igr2=0;

                std::cout << "Nazmite [1] dlia broska, [2] - dlia prosmotra sceta, [3] - dlia vigoda iz igri. ";
                std::cout.flush(); // когда нет <<std::endl (которая делает флуш автоматом) надо зафлушить вручную

                char i = 0;
                std::cin >> i;
                switch (i) {

                    case '1': {
                            clearScreen();
                            int a = ::rand() % 6+1;
                            std::cout << "U Vas: " << std::endl;
                            show(a);
                            igr1 += a;

                            std::cout << "U kompiutera: " << std::endl;
                            int b = ::rand() % 6+1;
                            show(b);
                            igr2 += b;
                        }
                        break;

                    case '2':
                        if(igr1 > igr2) {
                            std::cout << "Vi viigrivaete so scetom: " << igr1 << ":" << igr2 << std::endl;
                        }
                        std::cout << std::endl;

                        if( igr2 > igr1) {
                            std::cout << "Vi proigrivaete so scetom: " << igr2 << ":" << igr1 << std::endl;
                        }
                        std::cout << std::endl;

                        if( igr1 == igr2) {
                            std::cout << "Scet ravnii " << igr1 << ":" << igr2 << std::endl;
                        }
                        std::cout << std::endl;
                        break;

                    case '3': // EXIT GAME
                        return 0;

                    default:
                        std::cout << "Neverny hod" << std::endl;
                        break;
                }

            } while(true);

            return -1;
        }


        void show(int x) {
               // Твой шоу тут (пришлось вырезать: не влезает в ограничение длины сообщения на форуме) ((
        }

        void clearScreen() {
            ::system(ClearScreenSystemCommand);
        }

};

int main() {

    GameKosti game;

    game.showIntro();

    return game.start();
}

Re: Игра в кости с применением класса

Добавлено: 09 дек 2015, 17:42
Decoder
Формально всё вроде бы сделано: и класс есть и методы в нём. Вполне возможно, что преподавателя и такой результат устроит.
Но вот по-хорошему нужно было бы сделать примерно так:
- Описать отдельный класс для Игрока, который инкапсулировал бы в себе результат игры для данного участника. Соответственно, в нём должны быть методы добавления баллов, получения общей суммы, обнуления результата и другие...
- В приватную часть класса Игры поместить два экземпляра класса Игрока.
- При получении новых результатов игры значения должны записываться в объекты класса Игрока.
- При отображении результата игры значения должны браться из объектов класса Игрока.

Re: Игра в кости с применением класса

Добавлено: 10 дек 2015, 09:50
Din666
Decoder: ты не совсем прав, в ТЗ такого не было, надо делать точно по тз, преподаватели это ценят. Кроме того, не надо выполнять за ученика всю работу полностью, надо дать ему только направление в максимально простой форме и указать на имеющиеся недочеты/ошибки. Что я и сделал.

Re: Игра в кости с применением класса

Добавлено: 10 дек 2015, 09:56
Absurd

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

std::setlocale(LC_ALL, "RUS_RUS");
Что вы все транслитом пишете? Поставьте в начало локаль и не мучайтесь.