20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 519
Записей в блоге: 1
1

Игра "Морской бой" Рассстановка кораблей

22.07.2012, 16:47. Показов 3105. Ответов 10
Метки нет (Все метки)

Пишу игру "Морской бой". Нужно пока что только расставить корабли. На данный момент логика следующая. Все поле забито нулями (ноль - пустая ячейка).
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

Если начинаю строить корабль, то сначала рэндомно выбираю координаты и тут же рассчитываю (в зависимости от количества палуб и направления), нет ли "по соседству" других кораблей, т.е. проверяю (отмечено иксами, где большие иксы - предполагаемое положение корабля)

0 0 0 0 0 0 0 0 0 0
0 х х х х х 0 0 0 0
0 х Х Х Х х 0 0 0 0
0 х х х х х 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <Windows.h>
 
 
using namespace std;
 
//Класс "Пустое поле", т.е. забитое нулями
class A
{
private:
    int i,j;
public:
    int n[10][10];
    int s[12][12];
    A()
    {
        for (i=0; i < 12; i++)
        {   
            for(j=0; j < 12; j++)
            {
                s[i][j] = 0;
            }
        }
        for (i=0; i < 10; i++)
        {   
            for(j=0; j < 10; j++)
            {
                n[i][j] = s[i+1][j+1];
            }
        }
    }
};
 
 
class B: public A
{
public:
    int x, y, z, i ,j, k, s;
        int str(int palub, int c)
        {
            int z = 0;
            if (c==0)
            {
                z = 9 - palub;
            }
            else
                z = 9;
            srand(int (time(NULL)));
            Sleep(10);
            x = rand()%z;
            return x;
        }
        int stb(int palub, int c)
        {
            int z = 0;
            if (c!= 0)
            {
                z = 9 - palub;
            }
            else
                z = 9;
            srand(int (time(NULL)));
            Sleep(10);
            y = rand()%z;
            return y;
        }
        int napr()
        {
            srand(int (time(NULL)));
            Sleep(10);
            z = rand()%2;
            return z;
        }
        int proverka_n(int a, int b, int palub, int c)
        {
            int k = 0;
            int temp = 0;
            int temp_a = 0;
            int temp_b = 0;
            if (c == 0)
            {
                temp_b = palub + 2;
                temp_a = 2;
            }
            else
            {
                temp_a = palub + 2;
                temp_b = 2;
            }
 
            for(i = a - 1; i < a + temp_b; i++)
            {
                for(j = b - 1; j < b + temp_a; j++)
                {
                    k += n[i][j];
                }
            }
            return k;
        }
        int fun(int palub)
        {
            int c=napr();
            int a=str(palub, c);
            int b=stb(palub, c);
            k = proverka_n(a,b,palub,c);
            if(k==0)
            {
                for(i = 0; i < palub; i++)
                {
                    n[a][b] = 1;
                    if(c==0)
                    {
                        b++;
                    }
                    else
                    {
                        a++;
                    }
                }
            }
            else 
            {
                a,b,c;
                fun(palub);
            }
            return 0;
        }
 
        int fun5()
        {
            for (i=0; i < 10; i++)
            {
                for(j=0; j < 10; j++)
                {
                    cout << n[i][j] << ' ';
                }
                cout << endl;
            }
            return 0;
        }   
};
 
 
int main()
{
    B b;
    for(int i=0;i<1;i++)
    {
        b.fun(4);
    }
    for(int i=0;i<2;i++)
    {
        b.fun(3);
    }
    for(int i=0;i<3;i++)
    {
        b.fun(2);
    }
    for(int i=0;i<4;i++)
    {
        b.fun(1);
    } 
    b.fun5();
    return 0;
}
То есть получается все время что-то типа этого
0 0 0 0 0 0 0 0 0 0
0 1 0 0 1 0 0 1 0 0
0 1 0 0 1 0 0 0 0 0
0 1 0 0 0 0 1 1 1 1
0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 1 0 1 0
1 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2012, 16:47
Ответы с готовыми решениями:

Случайное распределение кораблей по полю в игре "морской бой"
Привет всем кто читал мой предыдущий пост про векторы в морском боем, в той же фунции появилась...

Найти и исправить ошибки (игра "Морской бой")
Ребят. На с++ пишу недавно. Решил сделать простенькую игру: &quot;Морской бой&quot;. Игра будет происходит...

Игра "Морской Бой"
СРОЧНО!!! Требуется помощь с данной игрой: нечто просто заменяет все клетки кораблей на клетку воды...

Игра "Морской бой"
Морской бой.Машина задумывает два числа от 0 до 9.Игрок пытается их угадать, вводя свои два...

10
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
22.07.2012, 17:40 2
попробовал запустить, у меня вообще не работает, ничего не выводит
0
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
22.07.2012, 17:41 3
разбирается конечно в коде без комментариев слишком долго.. отмечу не по теме факт
C++
1
int x, y, z, i ,j, k, s;
так писать члены класса - это же просто непонимание ООП.. это же не объявление каких-то переменных как в функции. Это должны быть свойства, то есть переменные относящиеся к объекту. А эти i и j .. к ним никак не относится, их нужно объявлять в самой функции..
0
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 519
Записей в блоге: 1
22.07.2012, 17:55  [ТС] 4
Цитата Сообщение от rudeeeboy Посмотреть сообщение
попробовал запустить, у меня вообще не работает, ничего не выводит
просто он долго выводит. Нужно подождать С этой проблемой тоже нужно разобраться...

Добавлено через 1 минуту
Цитата Сообщение от Leomana Посмотреть сообщение
разбирается конечно в коде без комментариев слишком долго.. отмечу не по теме факт
C++
1
int x, y, z, i ,j, k, s;
так писать члены класса - это же просто непонимание ООП.. это же не объявление каких-то переменных как в функции. Это должны быть свойства, то есть переменные относящиеся к объекту. А эти i и j .. к ним никак не относится, их нужно объявлять в самой функции..
да, согласен, пока в ООП слабоват(минусы заочного обучения налицо). Ну а касательно поставленного вопроса?
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
22.07.2012, 18:02 5
через раз выводит, это от вашего рандома

Добавлено через 3 минуты
у меня всё нормально вывело, кроме четырех палубного, попробуй не рандомно сделать, и со своими координатами
0
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 519
Записей в блоге: 1
22.07.2012, 18:06  [ТС] 6
Цитата Сообщение от rudeeeboy Посмотреть сообщение
через раз выводит, это от вашего рандома

Добавлено через 3 минуты
у меня всё нормально вывело, кроме четырех палубного, попробуй не рандомно сделать, и со своими координатами
а если не рэндомно, то как? Мне необходимо каждый раз генерировать уникальное расположение кораблей.
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
22.07.2012, 18:13 7
ну к примеру вводи координаты с клавиатуры, и делай проверку
0
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
22.07.2012, 19:09 8
у меня этот код ошибку при выполнении выдает.. о том что стек переполнен.. и хз почему.. скорее всего из-за глубокой рекурсии, то есть
C++
1
if(k==0)
это условие не может выполнится.. советую по другому попробовать продумать алгоритм

Добавлено через 19 минут
Цитата Сообщение от Robesper3411 Посмотреть сообщение
просто он долго выводит. Нужно подождать С этой проблемой тоже нужно разобраться...
а зачем Вам Sleep(10) ?
0
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 519
Записей в блоге: 1
22.07.2012, 19:12  [ТС] 9
Цитата Сообщение от rudeeeboy Посмотреть сообщение
ну к примеру вводи координаты с клавиатуры, и делай проверку
просто это получится не совсем правильно. В результате все равно придется прийти к рэндому, но за совет спасибо.

Добавлено через 2 минуты
Цитата Сообщение от Leomana Посмотреть сообщение
у меня этот код ошибку при выполнении выдает.. о том что стек переполнен.. и хз почему.. скорее всего из-за глубокой рекурсии, то есть
C++
1
if(k==0)
это условие не может выполнится.. советую по другому попробовать продумать алгоритм
ок. попробую - спасибо за замечание. Довольно ценное

Цитата Сообщение от Leomana Посмотреть сообщение
а зачем Вам Sleep(10) ?
если его убираю сразу выдает ошибку... Но эт косяк я согласен.
0
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
22.07.2012, 19:19 10
Цитата Сообщение от Robesper3411 Посмотреть сообщение
если его убираю зразу выдает ошибку... Но эт косяк я согласен.
ошибка? Что за ошибка такая ?
0
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 519
Записей в блоге: 1
22.07.2012, 19:41  [ТС] 11
Цитата Сообщение от Leomana Посмотреть сообщение
ошибка? Что за ошибка такая ?
типа того: в приложении обнаржена ошибка и оно будет закрыто.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2012, 19:41
Помогаю со студенческими работами здесь

Игра "Морской бой"
задание такое Запрограммировать игру двух игроков в “Морской бой”. Сначала, по-сле запуска...

Игра "Морской бой"
Всем привет, помогите пожалуйста разобраться с задачей. Нужно написать код, и если можете с...

Расстановка кораблей (морской бой)
Доброго времени суток, при расстановке 2х палубных кораблей возникает проблема... При выборе точки...

Консольный морской бой. Расстановка кораблей
Добрый вечер, уважаемые форумчане. Хочу написать консольный морской бой. Начал с функции...

Морской бой.Обработка массива. Расстановка кораблей
Пытаюсь написать морской бой. Свою карту я подгружаю из файла. Проблема в том, что у меня не...

Проверить правильность расстановки кораблей. Морской бой
Есть матрица NxM, где расставлены корабли. Корабли не стоят на краю матрицы, кол-во 4-х клеточных...


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

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

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