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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Robesper3411
 Аватар для Robesper3411
13 / 13 / 1
Регистрация: 20.02.2012
Сообщений: 430
Записей в блоге: 1
22.07.2012, 16:47     Игра "Морской бой" Рассстановка кораблей #1
Пишу игру "Морской бой". Нужно пока что только расставить корабли. На данный момент логика следующая. Все поле забито нулями (ноль - пустая ячейка).
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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rudeeeboy
14 / 14 / 1
Регистрация: 08.11.2010
Сообщений: 172
22.07.2012, 17:40     Игра "Морской бой" Рассстановка кораблей #2
попробовал запустить, у меня вообще не работает, ничего не выводит
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
22.07.2012, 17:41     Игра "Морской бой" Рассстановка кораблей #3
разбирается конечно в коде без комментариев слишком долго.. отмечу не по теме факт
C++
1
int x, y, z, i ,j, k, s;
так писать члены класса - это же просто непонимание ООП.. это же не объявление каких-то переменных как в функции. Это должны быть свойства, то есть переменные относящиеся к объекту. А эти i и j .. к ним никак не относится, их нужно объявлять в самой функции..
Robesper3411
 Аватар для Robesper3411
13 / 13 / 1
Регистрация: 20.02.2012
Сообщений: 430
Записей в блоге: 1
22.07.2012, 17:55  [ТС]     Игра "Морской бой" Рассстановка кораблей #4
Цитата Сообщение от rudeeeboy Посмотреть сообщение
попробовал запустить, у меня вообще не работает, ничего не выводит
просто он долго выводит. Нужно подождать С этой проблемой тоже нужно разобраться...

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

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

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

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

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

Цитата Сообщение от Leomana Посмотреть сообщение
а зачем Вам Sleep(10) ?
если его убираю сразу выдает ошибку... Но эт косяк я согласен.
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
22.07.2012, 19:19     Игра "Морской бой" Рассстановка кораблей #10
Цитата Сообщение от Robesper3411 Посмотреть сообщение
если его убираю зразу выдает ошибку... Но эт косяк я согласен.
ошибка? Что за ошибка такая ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2012, 19:41     Игра "Морской бой" Рассстановка кораблей
Еще ссылки по теме:

Игра "Морской бой" C++
Морской бой - программа зацикливается на расстановке кораблей C++
C++ Игра "Морской бой"

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

Или воспользуйтесь поиском по форуму:
Robesper3411
 Аватар для Robesper3411
13 / 13 / 1
Регистрация: 20.02.2012
Сообщений: 430
Записей в блоге: 1
22.07.2012, 19:41  [ТС]     Игра "Морской бой" Рассстановка кораблей #11
Цитата Сообщение от Leomana Посмотреть сообщение
ошибка? Что за ошибка такая ?
типа того: в приложении обнаржена ошибка и оно будет закрыто.
Yandex
Объявления
22.07.2012, 19:41     Игра "Морской бой" Рассстановка кораблей
Ответ Создать тему
Опции темы

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