0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 4
1

Исправить ошибку в коде игры "Жизнь"

11.10.2016, 00:30. Показов 1648. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть задания в том чтобы дописать игру в жизнь в файле game, в определенном поле. Собственно в чем проблема код я дописал, но не знаю в чем ошибка. Когда компилирую задается поле но игра не работает. Помогите советом!
Сам код из трех частей :
1 - main.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
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "game.h"
#include "console.h"
#include <time.h>
#include <windows.h>
 
// Start program
int main()
{
    // Set rows and cols of the future field
    size_t rows = 30, cols = 30;
    // Get a blank field
    matrix *field = Game::getBlankField(rows, cols);
    // Some magic things for getting random numbers
    srand(time(NULL));
    // Set randomly alive or dead cell
    for (uint i = 0; i < rows; i++) {
        for (uint j = 0; j < cols; j++) {
            field->at(i).at(j) = rand() % 2;
        }
    }
 
    // 1000 times will be shown
    for (uint i = 0; i < 1000; i++) {
        // Clear console
        Console::clearWin();
        // Draw the field into console
        Console::drawField(*field);
        // Save the current field...
        matrix *oldField = Game::getBlankField(rows, cols);
        Game::copy(*oldField, *field);
        // ...and update field
        Game::step(*field);
        // Check if life is frozen. If so break the loop
        if (Game::isEqual(*oldField, *field))
            break;
        // Sleep time
        Sleep(250 * 1000);
    }
    return 0;
}


2 - console.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
33
34
35
#include <vector>
#include <iostream>
#include <cstdlib>
typedef std::vector<std::vector<bool> > matrix;
typedef unsigned int uint;
 
/* Utils for working with console */
namespace Console {
 
    // Clear console in *nix
    void clearUnix() {
        system("clear");
    }
 
    // Clear console in Windows™
    void clearWin() {
        system("cls");
    }
 
    // Let's draw the field into console space!
    void drawField(matrix &field) {
        // For each row...
        for (uint i = 0; i < field.size(); i++) {
            // ...draw first '|'...
            std::cout << '|';
            // ...then for each value in row...
            for (uint j = 0; j < field[0].size(); j++) {
                // ...draw '*' if the cell is alive, ' ' otherwise...
                std::cout << (field[i][j] ? '*' : ' ') << ' ';
            }
            // ...close row with '|'
            std::cout << "|\n";
        }
    }
}
3 - game.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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <vector>
#include <iostream>
 
typedef std::vector<std::vector<bool> > matrix;
typedef unsigned int uint;
 
/* Functions implement game logic */
namespace Game {
 
    // Returns blaaaank field where nobody is alive
    matrix *getBlankField(size_t rows, size_t cols) {
        matrix *field = new matrix();
        // Add rows...
        for (uint i = 0; i < rows; i++) {
            field->push_back(std::vector<bool>());
            // ... and values into the row
            for (uint j = 0; j < cols; j++) {
                (field->at(i)).push_back(false);
            }
        }
        return field;
    }
 
    // Returns rows number
    size_t getRows(const matrix &field) {
        return field.size();
    }
 
    // Returns cols number
    size_t getCols(const matrix &field) {
        if (getRows(field) != 0) {
            return field[0].size();
        }
        return -1;
    }
 
    // ======================= YOUR CODE HERE =======================
    void copy(matrix &oldfield, matrix &field)
    {
        for (uint i = 0; i < getRows(field); i++) {
            for (uint j = 0; j < getCols(field); j++) {
                oldfield[i][j] = field[i][j];
            }
        }
        return;
 
 
 
    }
 
    uint alivecount(const matrix &field, const uint row, const uint col) {
 
        uint neighbour = 0;
        size_t rows = getRows(field);
        size_t cols = getCols(field);
 
        for (int i = -1; i < 2; i++) {
 
            for (int j = -1; j < 2; j++) {
                uint currentrow = i+rows+row;
                uint currentcol = j+cols+col;
                neighbour += field[currentrow%rows][currentcol%cols];
            }
        }
 
 
        return neighbour;
    }
 
    void step(matrix &field)
    {
        size_t rows = getRows(field);
        size_t cols = getCols(field);
        matrix field1 = *getBlankField(rows, cols);
        copy(field1, field);
 
        for (uint i = 0; i < rows; i++) {
            for (uint j = 0; j < cols; j++) {
                uint neighbour = alivecount(field1,i,j);
 
                if (!(field1[i][j]) && (neighbour == 3))
                    field[i][j] = true;
                else if ((field[i][j]) && ((neighbour < 3) || (neighbour > 4)))
                    field[i][j] = false;
 
            }
        }
 
 
    }
    bool isEqual(const matrix &oldfield,const matrix &field)
    {
        
        size_t rows = getRows(field);
        size_t cols = getCols(field);
        for (uint i = 0; i < rows; i++) {
            for (uint j = 0; j < cols; j++) {
                if (oldfield[i][j] != oldfield[i][j]) return false;
            }
        }
        
        
        return true;
    }
 
 
    // ==============================================================
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2016, 00:30
Ответы с готовыми решениями:

Исправить ошибку в коде игры "пятнашки"
Ошибка в коде пятнашки делпфи Культин unit Unit1; //СТРАНИЦА 150 interface uses ...

В коде выдает ошибку на 15 строчке. Мне надо исправить эту ошибку
procedure TForm1.BOkClick(Sender: TObject); var e1, e2: double; begin Label1.Caption := '';...

Игра "жизнь" - найти и исправить ошибки в коде
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;windows.h&gt; #include...

Как исправить исправить ошибку в коде
Здравствуйте,помогите пожалуйста исправить ошибку в коде.using System; using System.Threading; ...

Исправить неполадку в коде игры
Созданный код по игре &quot;парные картинки&quot;, суть игры в том, что нужно найти две одинаковые картинки....

9
Неэпический
17867 / 10632 / 2054
Регистрация: 27.09.2012
Сообщений: 26,733
Записей в блоге: 1
11.10.2016, 00:37 2
В общем случае, для оформления кода,
выделите код и нажмите на кнопку соответствующего языка (см. изображение)
1
Вездепух
Эксперт CЭксперт С++
11625 / 6311 / 1715
Регистрация: 18.10.2014
Сообщений: 15,894
11.10.2016, 04:13 3
Цитата Сообщение от mustekovich Посмотреть сообщение
но не знаю в чем ошибка
Отладчиком пользоваться не учили?

* Внутри функции isEqual oldfield сравнивается с oldfield, т.е. "старое" поле сравнивается само с собой. Понятно, что получается равенство. Программа сразу выходит из главного цикла, решив, что поле больше не меняется.

* Каждый вызов Game::getBlankField - утечка памяти.

* Sleep на 250 секунд после каждой итерации??? 250 (двести пятьдесят) секунд, Карл!!!11 Это что ж за жизнь-то такая?
0
Croessmah
11.10.2016, 04:14
  #4

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Sleep на 250 секунд после каждой итерации??? 250 (двести пятьдесят) секунд, Карл!!!11 Это что ж за жизнь-то такая?
Real-time, наверное. :D

0
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 4
11.10.2016, 18:15  [ТС] 5
Croessmah, Croessmah, спасибо, во всем разобрался, можно теперь удалить эту темку?
0
Неэпический
17867 / 10632 / 2054
Регистрация: 27.09.2012
Сообщений: 26,733
Записей в блоге: 1
11.10.2016, 18:17 6
Цитата Сообщение от mustekovich Посмотреть сообщение
спасибо, во всем разобрался, можно теперь удалить эту темку?
Сообщения и темы, а также другой контент, размещаемый на форуме, по просьбам пользователей не удаляется и не закрывается.
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
11.10.2016, 18:18 7
Цитата Сообщение от mustekovich Посмотреть сообщение
можно теперь удалить эту темку?
Нет, темы по просьбам пользователей не удаляются. Правила почитайте.
0
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 4
11.10.2016, 18:20  [ТС] 8
хотя бы до 30 числа, чтобы не было кражи кода
0
Администратор
Эксперт .NET
9445 / 4732 / 761
Регистрация: 17.04.2012
Сообщений: 9,582
Записей в блоге: 14
11.10.2016, 18:27 9
Береги честь смолоду, а интеллектуальную собственность снову

Правила есть правила, вы с ними согласились при регистрации.
Вот только вы даже не описали, в чём была ошибка. А ведь могли бы помочь другим людям с подобным вопросом.
0
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 4
11.10.2016, 18:48  [ТС] 10
чтобы у всего потока была одна и та же работа? ну уж нет, тут и так весь код написан
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2016, 18:48
Помогаю со студенческими работами здесь

Исправить ошибку в коде
using System; using System.Linq; using System.Collections.Generic; class MainClass { ...

Исправить ошибку в коде
Исправьте пожалуйста. Заранее спасибо!)) uses GraphABC; procedure KeyDown(key:integer); begin...

Исправить ошибку в коде
Procedure Way(i, j: Longlnt); Begin If (i=l) And (j=l) Then Exit; If (i=l) And...

Исправить ошибку в коде
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; typedef struct...

Исправить ошибку в коде
import java.util.Map; import java.util.TreeMap; import java.util.regex.Matcher; import...

Исправить ошибку в коде с++
Помогите исправить ошибку в коде: CString m_showlink; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru