Форум программистов, компьютерный форум CyberForum.ru

Класc Dice (игральные кости). - C++

Восстановить пароль Регистрация
 
5Hur1K
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 5
08.02.2012, 22:46     Класc Dice (игральные кости). #1
Доброго времени суток!
Ребят, подскажите
Вот задание моё для лабы:
"Создать обьявление класса и разработать драйвер-программу, которая продемонстрирует работу класса.
Класс Dice (игральные кости). Класс сохраняет 3 игральных кости и общее количество очков после последнего броска. Должны быть предусмотрены методы, которые реализуют инициализацию и броски игральных костей."

Вот собс-но немного кода который я написал:

Dice.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#define N 3
class Dice
{
private:
     int roll;
     int dice123[N];
 
public:
    Dice();
    ~Dice(){}
    int getRoll();
};
Dice.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "Dice.h"
#include <time.h>
#include <stdlib.h>
#define N 3
Dice::Dice()
{
    int i;
    srand(time(NULL));
    for(i=0;i<N;i++){
        dice123[i]=1+rand()%6;
        roll+=dice123[i];
    }
}
int Dice::getRoll()
{
    return roll;
}
Main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include "Dice.h"
using namespace std;
 
int main()
{
    Dice rolling;
    cout<<"The roll is "<<rolling.getRoll()<<endl;
    return 0;
}
Как бы компилятор это хавает, а вот результат весёлый -813235782
Подскажите пожалуйстa, так как я чёт не приложу ума куда чего, перечитал довольно инфы на счёт классов, но так и не могу понять куда что и в какой последовательности лепить...
Да и это должно быть без перегруженных операторов, в следующей лабе уже будут...
И желательно с комментариями по коду
З.Ы. Препод на парах о теплицах рассказывает, так что сам не могу, поэтому тут и пишу!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2012, 22:46     Класc Dice (игральные кости).
Посмотрите здесь:

C++ Игральные карты !!
C++ Игра в кости
проитерировать свой класc C++
C++ В программе про игральные кости нужно дать вес каждой грани...
C++ Кости домино
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IFree Host
Заблокирован
08.02.2012, 22:58     Класc Dice (игральные кости). #2
а зачем ты все это внутрь конструктора разместил. Раз уж есть сама функция, которя должна этим заниматься, так в нее и размещай.

И потом таким образом, ты получишь только один из результатов а не три.

Ты ведь просишь вернуть значение одной переменной а не трех. И функция больше вернуть не
может. Надо подругому опрашивать

Добавлено через 1 минуту
Тот результат который тебе возвращается говорит о том, что переменная не инициализирована
5Hur1K
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 5
08.02.2012, 23:40  [ТС]     Класc Dice (игральные кости). #3
Цитата Сообщение от IFree Host Посмотреть сообщение
Ты ведь просишь вернуть значение одной переменной а не трех.
Ну вообще-то там идёт сумма трёх бросков которая сохраняется в переменную ролл в середине цикла

Добавлено через 2 минуты
Цитата Сообщение от IFree Host Посмотреть сообщение
Добавлено через 1 минуту
Тот результат который тебе возвращается говорит о том, что переменная не инициализирована
А когда я пытаюсь её инициализировать компилятор говорит про какое-то двоеточие, но что интересно одно уже там стоит
типа
Dice():roll(0){}

Добавлено через 34 минуты
вот немного переписал, но всёравно не понимаю зачем тогда там собс-но dice123, хотя они там нужны по условию задачи.
Прошшу помощи в усовершенствовании моего бреда)))
и ещё что-то мне не нравиться этот массив 3-х кубиков, может подскажите что можно с ним сделать, может я как-то его не правильно обьявляю, или мне каждый кубик по отдельности обьявлять, и нужно ли их инициализировать??

Dice.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define N 3
class Dice
{
private:
     int roll;
     int dice123[N];
 
public:
    Dice()
    {
        roll=0;
    }
    ~Dice(){}
    int getRoll();
};
Dice.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "Dice.h"
#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define N 3
int Dice::getRoll()
{
    int i;
    srand(time(NULL));
    for(i=0;i<N;i++){
        dice123[i]=1+rand()%6;
        roll+=dice123[i];
        cout<<dice123[i]<<endl; //что бы посмотреть что в каждом
                                                           кубике и сравнить с результатом
    }
    return roll;
}
Ну а main.cpp без изменений
IFree Host
Заблокирован
09.02.2012, 01:53     Класc Dice (игральные кости). #4
Dice():roll(0){} - это компилятор тебе показывает правильный код инициализации.

Так надо инициализировать переменные в конструкторе:

C
1
2
3
4
5
// Конструктор в cpp
 
Dice::Dice():roll(0)
{
}
Вобще кошерней оставлять конструктор пустым, а все примочки кидать в функции и вызывать их потом по отдельности.

Вот тебе рабочий код выводит результат для каждого кубика отдельно

CDice.h

C
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
 
class CDice
{
public:
    int roll[3];
 
    CDice(void);
    ~CDice(void);
 
    void Roll();
};
CDice.cpp

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "StdAfx.h"
#include "CDice.h"
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
 
CDice::CDice(void)
{
}
 
CDice::~CDice(void)
{
}
void CDice::Roll()
{
    srand(time(NULL));
    for(int i=0; i<3; i++)
    {
        roll[i] = 1+rand()%6;
    }
}
Dice.cpp
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Dice.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "CDice.h"
 
 
void main()
{
    CDice Kosti;
    Kosti.Roll();
    for (int i=0; i<3; i++) printf("%i  ", Kosti.roll[i]);
    getchar();
}
5Hur1K
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 5
09.02.2012, 02:48  [ТС]     Класc Dice (игральные кости). #5
Всё разобрался сам, вот именно то что мне нужно было:
Dice.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
class Dice
{
private:
    int value;
 
public:
    Dice();
    ~Dice(){}
    void setValue();
    int getValue();
};
 
class Driver
{
private:
    Dice dice1, dice2, dice3;
    int sum;
 
public:
    Driver()
    {
        sum=0;
    }
    ~Driver(){}
    void roll();
    int result();
};
Dice.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "Dice.h"
 
Dice::Dice()
{
    value=0;
    srand(time(NULL));
}
void Dice::setValue()
{
    value=1+rand()%6;
    cout<<value<<endl;
}
int Dice::getValue()
{
    return value;
}
void Driver::roll()
{
    dice1.setValue();
    dice2.setValue();
    dice3.setValue();
    sum=dice1.getValue()+dice2.getValue()+dice3.getValue();
}
int Driver::result()
{
    return sum;
}
main.c:
C++
1
2
3
4
5
6
7
8
9
#include "Dice.h"
 
int main()
{
    Driver rolling;
    rolling.roll();
    cout<<"The roll is "<<rolling.result()<<endl;
    return 0;
}
только в идеале описание и реализацию класса Driver надо бы засунуть в отдельные файлы....
Yandex
Объявления
09.02.2012, 02:48     Класc Dice (игральные кости).
Ответ Создать тему
Опции темы

Текущее время: 17:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru