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

Ошибка с "stdafx.h" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В матрице запомнить строку с повторяющимся элементом http://www.cyberforum.ru/cpp-beginners/thread1086768.html
А теперь если вы обратили внимание на заголовок, перейдем к делу :) Например, в матрице в строках есть повторяющийся элемент. И мне надо запомнить данную строку, само значение и количество его повторений. Вот в таком случае надо создать свою структуру с 3 полями: struct S { int row, value, count; ... };
C++ Литература по работе со звуком в С++ Посоветуйте хорошие книжки для работы со звуком на С++. Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread1086757.html
C++ Неверная передача значения
Есть typedef enum {a, b, c, d} my; есть функция void MyF(my x) ее вызов в виде MyF(0); MyF(a); работает нормально А вызов в виде my temp=a;
Описать структуру с именем WORKER C++
Описать структуру с именем WORKER, содержащий следующие поля: NAME-фамилия и инициалы работника, POS-название должности, YEAR - год принятия на работу, MONTH-месяц приема на работу. Написать программу, отдельными функциями выполняет следующие действия: - Ввод с клавиатуры данных в массив TABL, состоящий из N переменных типа WORKER; - Упорядочение записей в алфавитном порядке; -...
C++ Как еще короче записать данный код? http://www.cyberforum.ru/cpp-beginners/thread1086708.html
#include <ios> main() { system("for /f \"tokens=1,2,3\" %a in (input.txt) do set /a %a*%b*%c*2 >output.txt"); } подсказка курите bat файлы
C++ Выяснить, образуют ли числа возрастающую последовательность Очень нужно: Дано натуральное число n, действительные числа a1, ..., an. Выяснить, образуют возрастающую последовательность числа a1, ..., an. подробнее

Показать сообщение отдельно
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
01.02.2014, 19:34     Ошибка с "stdafx.h"
ebywku, набросал свой вариант игры. Только он не завершенный:
- Нет проверки на наличие пустых соседних клеток при попадании в "0" клетку (т.е. клетку, рядом с которой нет мин).
- Нет проверки на победу в игре (принимается только поражение ).

Пример игры в действии - во вложенном файле.

Нет, мне не сложно её дописать - но тогда вам не интересно будет разбирать её исходный код. А поставив задачу - покопаетесь в коде, лучше освоитесь.

Кликните здесь для просмотра всего текста

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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <iostream> // подключаем для ввода-вывода инфорации
#include <clocale> // для поддержки русского языка
#include <cstdlib> // для генерации случайных чисел
#include <vector> // для работы с матрицами (игровое поле)
#include <ctime> // понадобится для генерации "семени" в srand()
#include <algorithm> // для работы с игровым полем
#include <cmath> // ну, понадобился мне модуль числа :)
#include <iomanip> // для форматированного ввода-вывода
 
typedef std::vector<std::vector<std::pair<int, bool>>> field; // тип игрового поля
struct POINT { int x, y; }; // точки попадания
 
// проверяем правильность введенных данных
bool check_pos(POINT pos, int size);
// Генерация игрового поля. Принимает размер и количество мин
field generate_game(int size, int count);
// Ожидание при завершении программы
void end_game();
// Вывод игрового поля
void print(field matrix, bool status = false);
// Основной цикл игры
void begin_game(field matrix);
 
// входная функция
int main()
{
    field matrix = generate_game(7, 10); // генерируем игровое поле (7х7, 10 мин)
    begin_game(matrix); // запускаем игровой цикл
    end_game(); // пауза перед завершением
    return 0;
}
 
// проверяем правильность введенных данных
bool check_pos(POINT pos, int size)
{
    if(pos.x>=0 && pos.x<size)
        if(pos.y>=0 && pos.y < size)
            return true;
    return false;
}
 
// Генерация игрового поля. Принимает размер и количество мин
// Возвращает, соответственно, игровое поле в виде двумерного массива (контейнера)
field generate_game(int size, int count)
{
    field matrix(size, std::vector<std::pair<int, bool>>(size, std::make_pair(0, false))); // игровое поле
    std::vector<std::pair<int, int>> mines; // координаты мин на игровом поле
    std::srand(static_cast<unsigned int>(std::time(NULL))); // задаём семя для генератора случайных чисел
 
    for(int i=0; i<count; ++i) { // произвольно располагаем мины
 
        int x = rand()%size;
        int y = rand()%size;
 
        if(matrix[x][y].first == 0) { // свободна ли клетка?
            matrix[x][y].first = -1; // -1 на игровом поле - мина
            mines.push_back(std::make_pair(x, y)); // добавляем координаты мины
        }
        else
            --i; // если клетка занята - повторяем итерацию цикла
    }
    
    // располагаем цифры на игровом поле, определяющие позиции мин
    for(int i=0; i<size; ++i)
        for(int j=0; j<size; ++j) {
            if(matrix[i][j].first ==-1) continue;
            int t = 0;
            for(auto p : mines) {
                if(std::abs(p.first-i)<2 && std::abs(p.second-j)<2)
                    ++t;
            }
            matrix[i][j].first = t;
        }
 
    return matrix; // возвращаем игровое поле
}
 
// Ожидание при завершении программы
void end_game()
{
    std::cout << std::endl;
    std::system("pause");
}
 
// Вывод игрового поля
void print(field matrix, bool status)
{
    using std::cout;
    cout << std::endl;
 
    std::for_each(matrix.begin(), matrix.end(), [=](std::vector<std::pair<int, bool>>& row)
    {
        std::for_each(row.begin(), row.end(), [=](std::pair<int, bool> value)
        {
            if(value.second || status) {
                if(value.first == -1)
                    cout << std::setw(3) << "*";
                else
                    cout << std::setw(3) << value.first;
            }
            else
                cout << std::setw(3) << "#";
        });
        cout << std::endl;
    });
}
 
// Основной цикл игры
void begin_game(field matrix)
{
    using std::cin; using std::cout; // Здесь их часто используем
 
    std::setlocale(LC_ALL, "rus");
    POINT pos;
    bool status = false;
 
    while(true)
    {
        print(matrix);
        cout << "--------" << std::endl;
        cout << "Координаты точки попадания (Пример: 2 3 ): ";
        cin >> pos.x >> pos.y;
        --pos.x; --pos.y;
        
        if(!check_pos(pos, matrix.size())) {
            cout << "Введены некорректные данные. Повторите ввод.";
            continue;
        }
 
        if(matrix[pos.x][pos.y].second) {
            cout << "Вы уже стреляли сюда. Повторите ввод.";
            continue;
        }
 
        if(matrix[pos.x][pos.y].first == -1) {
            cout << "Вы попали в мину!";
            print(matrix, true);
            break;
        }
 
        else matrix[pos.x][pos.y].second = true;
    }
 
    if(!status)
        cout << "Вы проиграли";
    else
        cout << "Вы выиграли";
 
}


У вас проблемы с подключением заголовочных файлов - не пожалел времени на комментирование, зачем подключаем тот или иной файл.

Логика программы:
- создаётся двумерный массив (игровое поле), каждая ячейка которого содержит 2 переменные: int и bool.
Первое значение int - содержит количество мин рядом с этой ячейкой (либо -1, если сама является миной).
Второе значение bool - содержит значение попадания по этой клетке (false - еще не попадали, true - попадали).

- запускается бесконечный цикл, который принимает от игрока координаты ячеек, фильтрует их и выдает результаты.


В общем, вроде всё. Будут вопросы - пишите )
P.s: код в истинном стиле C++ - не пугайтесь. Вроде бы
P.s.s: кстати, была мысль загнать весь функционал в свою область имен, но, передумал, решив, что и так код может показаться сложным для понимания.
Миниатюры
Ошибка с "stdafx.h"  
 
Текущее время: 06:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru