С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
10 / 10 / 9
Регистрация: 30.03.2016
Сообщений: 163
1

Ошибка в коде игры "Быки и коровы"

30.03.2016, 22:18. Показов 973. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include "Game.h"
using namespace std; 
Game::Game() {
    com;
    per;
}
Game:: ~Game() {
    delete[] per; 
    delete[] com; 
    per = NULL; 
    com = NULL; 
}
Game:: Game(const Game &a) {
    this->com = a.com; 
    this->per = a.per;
}
int Game::cow() {
    int count = 0; 
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if ((com->number(i) == per->number(j))&& (i!=j)) count++; 
    return count; 
}
int Game:: bull() {
    int count = 0, c;
    for (int i = 0; i < 4; i++) {
        if (com->number(i) == per->number(i)) count++;
    }
        return count;
}
void Game:: play() {
    Number *com=new Number;  
    Number *per= new Number; 
    int a, b, c; 
    bool flag = false; 
    com->ran(); 
    com->print(); 
    cout << "=========================================="<<endl<<"Hello, this game is 'Bulls and Cows'."<<endl<<"=========================================="<<endl<<"The computer concived 4-digits number (all digits are different, without '0'."<<endl<<"Your task - guess it through numbers inputs."<<" If the digit is identical, but it is at the other location - this ic 'cow' <C>."<<endl<<"If it is in the same place - would be 'bull' <B>."<< endl<<"Number  B C"<<endl<<"----------"<< endl; 
    while (flag == false) {
        cin >> a;
        for (int i = 3; i >=0 ; i--) {
            per->in(i, a % 10); 
            a = a / 10; 
        }
        per->print(); 
        b = bull(); 
        c = cow(); 
        cout << endl << "     " << b << " " << " " << c << endl;
        if (bull() == 4) flag = true; 
    }
}
всем известная игра "Быки и коровы"
программа рушиться, а именно в этом моменте
C++
1
2
3
4
5
6
int Game:: bull() {
    int count = 0, c;
    for (int i = 0; i < 4; i++) {
        if (com->number(i) == per->number(i)) count++;
    }
        return count;
заранее спасибо)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2016, 22:18
Ответы с готовыми решениями:

Задача про вектор для игры "Быки и коровы"
Задача из книги Страуструпа, вот условие : программа должна хранить вектор из четырех различных...

Функция для игры "быки и коровы"
Помогите составить код для С++, для раздела Функции. сама задача Компьютер задумывает...

Алгоритм игры "Быки и коровы"
Игра &quot;Быки и коровы&quot;. Вы загадываете пятизначное число. Программа дает Вам другое четырехзначное...

Алгоритм игры Быки -коровы в С++
сложно ли реализовать алгоритм игры Быки -коровы в С++

4
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
30.03.2016, 22:29 2
Весь код не вижу, но что то мне подсказывает что массивы не проинициализированы и конструктор копии не верно сделан.
1
10 / 10 / 9
Регистрация: 30.03.2016
Сообщений: 163
30.03.2016, 22:32  [ТС] 3
C++
1
2
3
4
5
6
7
#include <iostream>
#include  "Game.h"
using namespace std; 
void main(){
    Game g; 
    g.play(); 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include "Digit.h"
using namespace std; 
Digit:: Digit() {
    value = 0; 
}
bool Digit:: check(int a) {
    int b=value; 
    while (b != 0) {
        if (value % 10 == a) return true;
        b = b / 10; 
    }
    return false; 
}
int Digit::getDigit() {
    return value; 
}
void Digit::set(int a) {
    value = a; 
}
C++
1
2
3
4
5
6
7
8
9
10
#pragma once
#ifndef Digit_h
class Digit {
private: int value; 
public: Digit(); 
        bool check(int a); 
        int getDigit(); 
        void set(int a); 
};
#endif#
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include "Game.h"
using namespace std; 
Game::Game() {
    com;
    per;
}
Game:: ~Game() {
    delete[] per; 
    delete[] com; 
    per = NULL; 
    com = NULL; 
}
Game:: Game(const Game &a) {
    this->com = a.com; 
    this->per = a.per;
}
int Game::cow() {
    int count = 0; 
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if ((com->number(i) == per->number(j))&& (i!=j)) count++; 
    return count; 
}
int Game:: bull() {
    int count = 0, c;
    for (int i = 0; i < 4; i++) {
        if (com->number(i) == per->number(i)) count++;
    }
        return count;
}
void Game:: play() {
    Number *com=new Number;  
    Number *per= new Number; 
    int a, b, c; 
    bool flag = false; 
    com->ran(); 
    com->print(); 
    cout << "=========================================="<<endl<<"Hello, this game is 'Bulls and Cows'."<<endl<<"=========================================="<<endl<<"The computer concived 4-digits number (all digits are different, without '0'."<<endl<<"Your task - guess it through numbers inputs."<<" If the digit is identical, but it is at the other location - this ic 'cow' <C>."<<endl<<"If it is in the same place - would be 'bull' <B>."<< endl<<"Number  B C"<<endl<<"----------"<< endl; 
    while (flag == false) {
        cin >> a;
        for (int i = 3; i >=0 ; i--) {
            per->in(i, a % 10); 
            a = a / 10; 
        }
        per->print(); 
        b = bull(); 
        c = cow(); 
        cout << endl << "     " << b << " " << " " << c << endl;
        if (bull() == 4) flag = true; 
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
#ifndef Game_h
#include "Number.h"
class Game {
private: Number *com, *per; 
         int cow(); 
         int bull(); 
public: Game(); 
        ~Game(); 
        Game(const Game &a); 
        void play();
};
#endif
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
33
34
35
36
37
38
39
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include "Digit.h"
#include "Number.h"
using namespace std;
Number::Number() {
    Digit *num = new Digit[n]; 
    num[0].set(0); 
    num[1].set(0); 
    num[2].set(0); 
    num[3].set(0); 
 
}
void Number:: in(int p, int a) {
    num[p].set(a); 
}
void Number::ran() {
    int a; 
    bool flag = true; 
    srand(time(NULL));
    for (int i = 0; i < 4; i++) {
        a = rand() % 9 + 1;
        for (int j = 0; j < i; j++) {
            if (a == num[j].getDigit()) flag = false; 
        }
        if (flag==false ) a = rand() % 9 + 1;
        num[i].set(a); 
    }
}
int Number:: number(int i){
    if ((i >= 0) && (i < 4)) {
        return num[i].getDigit();
    }
    return -1; 
}
void Number::print() {
    cout << num[0].getDigit() << " " << num[1].getDigit() << " " << num[2].getDigit() << " " << num[3].getDigit() << endl;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
#ifndef Number_h
#define n 4
#include "Digit.h"
class Number {
private: Digit num[n]; 
public: Number(); 
        void in(int p, int a); 
        void ran(); 
        int number(int i); 
        void print(); 
};
#endif
Это весь код.
0
10 / 10 / 9
Регистрация: 30.03.2016
Сообщений: 163
30.03.2016, 23:03  [ТС] 4
это Конструктор копирования. хоть и не надо, но с чего то лектор его хочет в коде.

Добавлено через 7 минут
Цитата Сообщение от Timama Посмотреть сообщение
com->ran();
* * com->print();
дебагер падает вот на этом месте
0
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
31.03.2016, 07:27 5
Оч плохой код.
Обрати внимание на свой конструктор класса Number.
Ты создаешь в теле конструктора переменные, с таким же именем, что и члены твоего класса. Это приводит к том, что члены твоего класса остаются не проинициализированы, к утечке. И такого рода ошибок оч много. Разберись с этим для начала.
П.С. старайся давать уникальные имена каждой переменной.
0
31.03.2016, 07:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2016, 07:27
Помогаю со студенческими работами здесь

Программа для игры «Быки и коровы»
Требуется угадать случайное четырехзначное число. Называются пробные цифры. Если цифра по значению...

Написать исходник игры Быки и Коровы
Условия вроде такие: комп загадывает число (4 знака), а человек пытается отгадать. Но человек...

Не работает код игры быки и коровы
Добрый день. У меня 8 винда и vb6, код игры быки и коровы, размещенный на вашем сайте не идет(...

Готовый код игры Быки и коровы но есть баги
Проблемы кода: 1)Не отмечает правильно число быков и коров, когда цифры повторяются. 2)При...

Разработать программу для игры «Пики и фазы» («Быки и коровы»)
Разработать программу для игры «Пики и фазы» («Быки и коровы»). Требуется угадать случайное...

Напишите программу, обрабатывающую один раунд игры «Быки и коровы»
Напишите программу, обрабатывающую один раунд игры «Быки и коровы». Пользователь вводит две строки....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru