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

Игра "Жизнь" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ С Java на C++ можно ли конвертировать? http://www.cyberforum.ru/cpp-beginners/thread347435.html
Есть маленькая программка на Java: фрактальный вихрь. Можно ли её конвертировать на C++ ? Сам не силен в программировании. вот код на Java public Image createImage() { BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB); Graphics graphics = image.getGraphics(); graphics.setColor(Color.WHITE); graphics.fillRect(0, 0, size.width, size.height);...
C++ Таблица факториалов На сайте http://www.habit.ru/33/348.html приводится таблица факториалов, но не все значения (как мне кажется) в ней правильны, например, 50! Или моя программа не так считает. Кто-нибудь может проверить правильность 50! http://www.cyberforum.ru/cpp-beginners/thread347413.html
C++ Глобальная константа
Глобальные константы В С глобальная константа, т. е. инициализированная глобальная переменная с модификатором const, имеет своей областью действия всю программу (доступна для внешней компоновки), как и любая переменная без const. Другими словами, ее имя заносится в список глобальных символов объектного модуля и поэтому к ней можно обращаться из любого другого исходного файла программы. В...
C++ Командная строка.
Сумма чисел. числа передаются в виде аргументов командной строки. #include <iostream> #include <locale> using namespace std; int StringToInt(const char * str, bool & err) { char * pLastChar = NULL; int param = strtol(str, &pLastChar, 10);
C++ Конструктор преобразования. http://www.cyberforum.ru/cpp-beginners/thread347367.html
Есть класс Complex с двумя элемент данными: real и image Надо написать конструктор преобразования базового типа к типу, определяемому разрабатываемым классом, т.е. Complex. Я так понимаю конструктор должен принимать один параметр. Вот только какой? Если просто значение типа int, то после преобразования получится объект класса, в котором real имеет то значение, что преобразовывалось, а image...
C++ Работа с интернетом Здраствуйте! Мне нужно написать программу на С/С++ для плотной работы с сайтами. Меня интересуют такие вопросы: как войти на сайт,работать с куками,кликать по кнопкам,заполнять формы и т.п. Подскажите пожалуйста в какую сторону копать, полезные ссылки подробнее

Показать сообщение отдельно
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.09.2011, 08:08     Игра "Жизнь"
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
//headers/world.h
#include <iostream> 
#include <stdio.h>
                                                                                ////////////////////////////////////
#define LEFT_DOWN   table[line + 1][column - 1]                                 //[-1 L_U -1] [-1 U 0] [-1 R_U +1]//
#define DOWN        table[line + 1][column]                                     //[0   L  -1] [0^__^0] [0   R  +1]//
#define RIGHT_DOWN  table[line + 1][column + 1]                                 //[+1 L_D -1] [+1 D 0] [+1 R_D +1]//
#define RIGHT       table[line][column + 1]                                     ////////////////////////////////////
#define RIGHT_UP    table[line - 1][column + 1]
#define UP          table[line - 1][column]
#define LEFT_UP     table[line - 1][column - 1]
#define LEFT        table[line][column - 1]
 
const int LINES = 24, COLUMNS = 80;
const char amoeba = '*';
 
class World
{
    private:
        bool table[LINES][COLUMNS];
        bool auxiliaryTable[LINES][COLUMNS];                                    //why? hz...
    public:
        void randomizeTable();
        void step();
        void showTable();
};
 
void World::randomizeTable()
{
    srand(time(NULL));
    for(int line = 0; line < LINES; ++line)
        for(int column = 0; column < COLUMNS; ++column)
            /*auxiliaryTable[line][column] = (*/table[line][column] = rand() % 2/*)*/;
}
 
void World::step()                                                              //Caution!
{                                                                               //Probably bad code ='(
    for(int line = 0; line < LINES; ++line)
        for(int column = 0; column < COLUMNS; ++column)
        {
            int neighbors = 0;
            if((line == 0) && (column == 0))                                    //left up
                neighbors += DOWN + RIGHT_DOWN + RIGHT;
            else if((line == 0) && (column == (COLUMNS - 1)))                   //right up
                neighbors += LEFT + LEFT_DOWN + DOWN;
            else if((line == (LINES - 1)) && (column == (COLUMNS - 1)))         //right down
                neighbors += UP + LEFT_UP + LEFT;
            else if((line == (LINES - 1)) && (column == 0))                     //left down
                neighbors += RIGHT + RIGHT_UP + UP;
            else if(column == 0)                                                //left
                neighbors += DOWN + RIGHT_DOWN + RIGHT + RIGHT_UP + UP;
            else if(line == 0)                                                  //up
                neighbors += LEFT + LEFT_DOWN + DOWN + RIGHT_DOWN + RIGHT;
            else if(column == (COLUMNS - 1))                                    //right
                neighbors += UP + LEFT_UP + LEFT + LEFT_DOWN + DOWN;
            else if(line == (LINES - 1))                                        //down
                neighbors += RIGHT + RIGHT_UP + UP + LEFT_UP + LEFT;
            else
                neighbors += LEFT_DOWN + DOWN + RIGHT_DOWN + RIGHT + RIGHT_UP + UP + LEFT_UP + LEFT;
            if(table[line][column])
                ((neighbors > 3) || (neighbors < 2)) ? auxiliaryTable[line][column] = 0 : auxiliaryTable[line][column] = 1;
            else
                (neighbors == 3) ? auxiliaryTable[line][column] = 1 : auxiliaryTable[line][column] = 0;
        }
    for(int line = 0; line < LINES; ++line)
        for(int column = 0; column < COLUMNS; ++column)
            table[line][column] = auxiliaryTable[line][column];
}
 
void World::showTable()
{
    for(int line = 0; line < LINES; ++line)
        for(int column = 0; column < COLUMNS; ++column)
            (table[line][column]) ? std::cout << amoeba : std::cout << ' ';
            //printf((table[line][column]) ? ("%X", amoeba) : (" "));
            //(table[line][column]) ? printf("•") : printf(" ");
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//main.cpp
#include <iostream>
#include <windows.h>
#include "headers/world.h"
 
int main()
{
    /*char c_game; //y/n
    std::cout << "Start game? (y/n):\n";
    std::cin >> c_game;
    if(c_game != 'y')
        return 0;*/
    World w1;
    w1.randomizeTable();
    while(TRUE)
    {
        w1.step();
        system("cls");
        w1.showTable();
        //Sleep(300);
    }
    return 0;
}
Вот мой. консолька, окно на 24*80.
На супер гениальный и оптимизированный код не претендует (даже на википедии есть способ побыстрее), просто написал рабочий алгоритм, чтобы затем реализовать это на GUI.
В алгоритме есть одна фича (ну ладно, ладно, косяк).
Поскольку поле как-бы бесконечно, то планер должен выходить за пределы карты 24*80, а у меня просто отсеиваются все клетки, которые больше заданного промежутка, и оставшаяся половина планера продолжает жить в свое удовольствие, перемещаясь в другую сторону.

Добавлено через 4 минуты
А касательно кода ТС
Там возможен выход за границы массива? Вот тут
Цитата Сообщение от vortexx1 Посмотреть сообщение
short around ( char array [][ 5 ], short x, short y )
?

Не по теме:

В код не вчитывался, ибо голова еще не проснулась... =(

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