player — Игра в кости с кубиками и функция «Нет соответствия» для вызова игры в кости :: Переполнение стека кубиков

Я должен создать игру в кости класса Кути. Я ужасно разбираюсь в программировании, поэтому я стараюсь изо всех сил понять, что происходит. (Любые советы или рекомендации по более быстрому и простому обучению кодированию будут приветствоваться)
Текущая проблема заключается в том, что когда я пытаюсь создать файлы костей, я получаю сообщение об ошибке «Нет подходящей функции для вызова Dice :: Dice»

(Что я должен сделать для игры, так это создать класс Player с методом taketurn, класс костей с методом getRoll, и если игрок бросает определенное число, к его монстру добавляется определенная часть тела (крыло, нога и т. Д.) / cootie) (Я еще не создал класс игрока)
Я понимаю, что не могу просить людей написать мне код, я хочу попробовать и выучить это для себя. Но я так расстроен и растерян, что мне может понадобиться немного руки, прежде чем я начну понимать, что я набираю. Спасибо за ваше руководство!

main.cpp

#include "cootie.h"#include "Dice.h"#include <cstdlib>
#include <ctime>
#include <iostream>
#include <string>

using namespace std;

int main (){
cootie c("R2D2", 1, 1,0,2,1,0);

cout << "Cootie called " << "\"" << c.getName() <<"\" :"<< endl;
cout << c.getLegs() << " Leg(s)" << endl;
cout << c.getHeads() << " Head(s)" << endl;
cout << c.getEyes() << " Eye(s)" << endl;
cout << c.getWings() << " Wing(s)" << endl;
cout << c.getBodies() << " Bodie(s)" << endl;
cout << c.getAntennas() << " Antenna(s)" << endl;

Dice d(1,6);
cout << d.getRoll() << endl;return 0;
}

Dice.h

#ifndef DICE_H
#define DICE_Hclass Dice
{
public:
Dice();
void getRoll(int m, int n);
protected:
private:
};

#endif

Dice.cpp

#include "Dice.h"#include <cstdlib>
#include <ctime>
#include "cootie.h"#include <iostream>
#include <string>
using namespace std;

Dice::Dice()
{}void Dice::getRoll(int m,int n) {

srand(time(0));
(rand() % n)+m;

}

cootie.cpp

#include "cootie.h"#include <iostream>
#include <string>
using namespace std;

string name;
int legs, heads, eyes, wings, bodies, antennas;

//accessors
string cootie::getName(){return name;}
int cootie::getLegs(){return legs;}
int cootie::getHeads(){return heads;}
int cootie::getEyes(){return eyes;}
int cootie::getWings(){return wings;}
int cootie::getBodies(){return bodies;}
int cootie::getAntennas(){return antennas;}

//mutators
void cootie::setName(string n){
name = n;
}
void cootie::setLegs(int l){
legs = l;
}
void cootie::setHeads(int h){
heads = h;
}
void cootie::setEyes(int e){
eyes = e;
}
void cootie::setWings(int w){
wings = w;
}
void cootie::setBodies(int b){
bodies = b;
}
void cootie::setAntennas(int a){
antennas = a;
}

cootie.h

#ifndef COOTIE_H
#define COOTIE_H

#include <iostream>
#include <string>

using namespace std;

class cootie{
private:
//listing members?
string name;
int legs, heads, eyes, wings, bodies, antennas;public:
//constuctors
//default constructors
cootie (){
name = "undefined";
legs = 0;
heads = 0;
eyes = 0;
wings = 0;
bodies = 0;
antennas = 0;
}
//non-defaultconstructors
cootie(string n, int l, int h, int e, int w, int b, int a) {
name = n;
legs = l;
heads = h;
eyes = e;
wings = w;
bodies = b;
antennas = a;
}

string getName();
int getLegs();
int getHeads();
int getEyes();
int getWings();
int getBodies();
int getAntennas();

void setName(string n);
void setLegs(int l);
void setHeads(int h);
void setEyes(int e);
void setWings(int w);
void setBodies(int b);
void setAntennas(int a);
};

#endif /* defined(____cootie__) */

0

Решение

Привет, я вижу несколько проблем с кодом, но у меня нет конкретного вопроса, поэтому я просто пытаюсь исправить код и дать несколько советов:

Это не может работать …

Dice d(1,6); // You give arguments to the contructor
cout << d.getRoll() << endl; // Your method call has no arguments

так как вы определили:

Dice(); // Constructor takes no arguments
void getRoll(int m, int n); // method takes arguments

Затем у вас есть теневые переменные, определенные в cootie.cpp, которые вы должны удалить. Вы хотите использовать переменные, определенные в заголовочном файле, которые являются частью экземпляра объекта.

string name;
int legs, heads, eyes, wings, bodies, antennas;

Тогда srand нужно сделать только один раз, а не каждый раз, когда вы вызываете roll — возможно, в основной функции:

srand( (unsigned)time( NULL ) ) ; // This makes you have different random numbers every time the program runs (call it only once, before the first dice roll)

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

int Dice::getRoll(int maxEyes) { // Still no good abstraction
(rand() % maxEyes) + 1;
}

Ваша игральная кость не меняет своих maxEyes на время выполнения, реальная игральная кость также не делает этого. Итак, я начну с хорошей абстракции игры в кости, что вы скажете:

main.cpp

#include "Dice.h"
#include <iostream>

using namespace std;

int main()
{
Dice::randomize(); // Try commenting this out and run the program several times, check the result, then comment it back in

Dice diceWith6Sides(6);
cout << "The 6 sided dice rolls a " << diceWith6Sides.getRoll() << endl;
cout << "The 6 sided dice rolls a " << diceWith6Sides.getRoll() << endl;
cout << "The 6 sided dice rolls a " << diceWith6Sides.getRoll() << endl;

Dice diceWith20Sides(20);
cout << "The 20 sided dice rolls a " << diceWith20Sides.getRoll() << endl;
cout << "The 20 sided dice rolls a " << diceWith20Sides.getRoll() << endl;
cout << "The 20 sided dice rolls a " << diceWith20Sides.getRoll() << endl;
return 0;
}

Dice.h

#ifndef DICE_H
#define DICE_H

class Dice
{
public:
Dice(int sides);
int getRoll();

static void randomize(); // Call only once

private:
int sides;
};

#endif

Dice.cpp

#include "Dice.h"
#include <time.h>
#include <stdlib.h>

Dice::Dice(int sides) :
sides(sides)
{

}

int Dice::getRoll()
{
return ((rand() % sides) + 1);
}

void Dice::randomize()
{
srand((unsigned)time(NULL));
}

Надеюсь, что это хорошая отправная точка. Отлично повеселиться!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]