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

Морской бой. Ф-ция автоматической рассатновки кораблей. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу, которая оп- ределяет наименьшую и наибольшую цифру этого числа http://www.cyberforum.ru/cpp-beginners/thread246343.html
1)Дано трехзначное целое число. Составить программу, которая определяет наименьшую и наибольшую цифру этого числа. Число вводить с клавиатуры. 2)Составить программу приближенного вычисления площади фигуры, ограниченной заданными линиями.использовать метод прямоугольников. Для построения прямоугольника использовать правый конец отрезка. y = −2x2 + 3x + 6, y = x + 2. 3)Даны три массива....
C++ НОК Люди, нужно найти НОК n-го количества чисел, числа записаны в массив. НОД я уже написал, но НОК как-то не выходит. Кто-нибудь мог бы написать мне на C (не C++ и C#) очень важно чтобы на чистом С. http://www.cyberforum.ru/cpp-beginners/thread246333.html
Сколько битов потребуется? C++
Сколько битов потребуется для адресации 64560 байтов, 2 мегабайтов, 17 мегабайтов, 5 гигабайтов?
ошибка C++
подскажите где ошибка: Вот задание: Сформировать текстовый файл, записав в него 20 слу- чайных чисел от –10 до +10, по одному на строке. #include <fstream> #include <iostream> #include <time.h> using namespace std;
C++ Найти максимальную сумму цифр числа http://www.cyberforum.ru/cpp-beginners/thread246279.html
Составить функцию, аргументом которой является длинное целое число. Возращаемое значение должно быть равно сумме десятичных цифр числа n. Найти максимальную сумму цифр числа среди элементов одномерного массива. Если таких сумм несколько, то вывести элементы с данной максимальной суммой цифр. Вот я начал писать листинг, функцию составил, ввел массив, а дальше не могу... Помогите закончить!...
C++ посмотрите Подскажите пожалуйста,правильно-ли составлена блок схема по этой программе? программа: #include <iostream> using namespace std; struct pas подробнее

Показать сообщение отдельно
notgosu
9 / 9 / 1
Регистрация: 16.02.2011
Сообщений: 17

Морской бой. Ф-ция автоматической рассатновки кораблей. - C++

21.02.2011, 17:58. Просмотров 4701. Ответов 3
Метки (Все метки)

Добрый день, ув. форумчане! Есть задание написать консольный морской бой. Есть задача расстановки кораблей компьютера случайным образом. Массив [10][10], заполненный '0' - игровое поле. 'X' - корабль.
В ф-ции расстановки кораблей перед заполнением 'Х' идет проверка на наличие кораблей в случайно выбранном элементе и вокруг него(чтобы корабли не соприкасались). Мною написана ф-ция:
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
void AutoSet(char field[10][10], int  m, int n)
{
    //Расстановка однопалубных кораблей
    srand(time(NULL));
    for(int i=0; i<4; i++){
        m=rand()%10;
        n=rand()%10;
        while (field[m][n]=='X' || field[m][n+1]=='X' || field[m][n-1]=='X' || field[m+1][n]=='X' || field[m-1][n]=='X'
            || field[m+1][n+1]=='X' || field[m+1][n-1]=='X' || field[m-1][n+1]=='X' || field[m-1][n-1]=='X'){
            m=rand()%10;
            n=rand()%10;
        }
        field[m][n]='X';
    }
 
    //Расстановка двохпалубных кораблей
    for(int i=0; i<3; i++){
        int k=rand()%2;
        switch(k){
        case 0://вертикальное расположение корабля
            m=rand()%9;
            n=rand()%10;
            while(field[m][n]=='X' || field[m-1][n-1]=='X' || field[m-1][n]=='X' || field[m-1][n+1]=='X' ||
                  field[m][n-1]=='X' || field[m][n+1]=='X' || field[m+1][n-1]=='X' || field[m+1][n]=='X' ||
                  field[m+1][n+1]=='X' || field[m+2][n-1]=='X' || field[m+2][n]=='X' || field[m+2][n+1]=='X'){
                  m=rand()%9;
                  n=rand()%10;
            }
            field[m][n]='X';
            field[m+1][n]='X';
            break;
        case 1://горизонтальное расположение корабля
            m=rand()%10;
            n=rand()%9;
            while(field[m][n]=='X' || field[m][n+1]=='X' || field[m-1][n-1]=='X' || field[m-1][n]=='X' ||
                field[m-1][n+1]=='X' || field[m-1][n+2]=='X' || field[m][n-1]=='X' || field[m][n+2]=='X' ||
                field[m+1][n-1]=='X' || field[m+1][n]=='X' || field[m+1][n+1]=='X' || field[m+1][n+2]=='X'){
                m=rand()%10;
                n=rand()%9;
            }
            field[m][n]='X';
            field[m][n+1]='X';
            break;
        }   
    }
 
    //Расстановка трехпалубных кораблей
    for (int i=0; i<2; i++){
        int n=rand()%2;
        switch(n){
        case 0://вертикальное положение корабля
            m=rand()%8;
            n=rand()%10;
            while(field[m][n]=='X' || field[m+1][n]=='X' || field[m+2][n]=='X' || field[m-1][n-1]=='X' ||
                field[m-1][n]=='X' || field[m-1][n+1]=='X' || field[m][n-1]=='X' || field[m][n+1]=='X' ||
                field[m+1][n-1]=='X' || field[m+1][n+1]=='X' || field[m+2][n-1]=='X' || field[m+2][n+1]=='X' ||
                field[m+3][n-1]=='X' || field[m+3][n]=='X' || field[m+3][n+1]=='X'){
                m=rand()%8;
                n=rand()%10;
            }
            field[m][n]='X';
            field[m+1][n]='X';
            field[m+2][n]='X';
            break;
        case 1:
            m=rand()%10;
            n=rand()%8;
            while(field[m][n]=='X' || field[m][n+1]=='X' || field[m][n+2]=='X' || field[m-1][n-1]=='X' ||
                field[m-1][n]=='X' || field[m-1][n+1]=='X' || field[m-1][n+2]=='X' || field[m-1][n+3]=='X' ||
                field[m][n-1]=='X' || field[m][n+3]=='X' || field[m+1][n-1]=='X' || field[m+1][n]=='X' ||
                field[m+1][n+1]=='X' || field[m+1][n+2]=='X' || field[m+1][n+3]=='X'){
                m=rand()%10;
                n=rand()%8;
            }
            field[m][n]='X';
            field[m][n+1]='X';
            field[m][n+2]='X';
            break;
        }//switch
    }//for
 
    //Расстановка четырехпалубного корабля
    int l=rand()%2;
    switch(l){
    case 0://вертикальное положение
        m=rand()%7;
        n=rand()%10;
        while(field[m][n]=='X' || field[m+1][n]=='X' || field[m+2][n]=='X' || field[m+3][n]=='X' ||
            field[m-1][n-1]=='X' || field[m-1][n]=='X' || field[m-1][n+1]=='X' || field[m][n-1]=='X' ||
            field[m][n+1]=='X' || field[m+1][n-1]=='X' || field[m+1][n+1]=='X' || field[m+2][n-1]=='X' ||
            field[m+2][n+1]=='X' || field[m+3][n-1]=='X' || field[m+3][n+1]=='X' || field[m+4][n-1]=='X' ||
            field[m+4][n]=='X' || field[m+4][n+1]=='X'){
            m=rand()%7;
            n=rand()%10;
        }
        field[m][n]='X';
        field[m+1][n]='X';
        field[m+2][n]='X';
        field[m+3][n]='X';
        break;
    case 1://горизонтальное положение
        m=rand()%10;
        n=rand()%7;
        while(field[m][n]=='X' || field[m][n+1]=='X' || field[m][n+2]=='X' || field[m][n+3]=='X' ||
            field[m-1][n-1]=='X' || field[m-1][n]=='X' || field[m-1][n+1]=='X' || field[m-1][n+2]=='X' ||
            field[m-1][n+3]=='X' || field[m-1][n+4]=='X' || field[m][n-1]=='X' || field[m][n+4]=='X' ||
            field[m+1][n-1]=='X' || field[m+1][n]=='X' || field[m+1][n+1]=='X' || field[m+1][n+2]=='X' ||
            field[m+1][n+3]=='X' || field[m+1][n+4]=='X'){
            m=rand()%10;
            n=rand()%7;
        }
        field[m][n]='X';
        field[m][n+1]='X';
        field[m][n+2]='X';
        field[m][n+3]='X';
        break;
    }//switch
}
Проблема в расстановке четырехпалубного корабля - иногда консоль появляеться пустой(я так понял безконечный цыкл появляется) и ничего не происходит. Проблема сугубо в коде расстановки четырехпалубного корабля, без него все работает на ура.
Вот код программы, выводящей заполненное поле на экран:
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<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
 
void AutoSet(char field[10][10], int m, int n);
 
void main()
{
    setlocale(LC_ALL, "rus");
    const int m=10, n=10;
    char pfield[m][n], efield[m][n], nazv[m]={'A','B','C','D','E','F','G','H','I','J'};
    
    for (int i=0; i<m; i++)     //Заполнение
        for(int j=0; j<n; j++)  //поля игрока
            pfield[i][j]=0;     //нолями
    for (int i=0; i<m; i++)     //Заполнение
        for(int j=0; j<n; j++)  //поля компьютера
            efield[i][j]='0';   //нолями
    
    AutoSet(efield,m,n);
    cout<<"   ";
    for (int i=0; i<10; i++)
        cout<<nazv[i]<<" ";
    cout<<"\n";
    for (int i=0; i<10; i++)
        cout<<" ";
    cout<<"\n";
    for (int i=0; i<m; i++){    
        if (i== 9)
            cout<<(i+1)<<" ";
        else
        cout<<(i+1)<<"  ";
        for(int j=0; j<n; j++){
            cout<<efield[i][j]<<" ";
        }
        cout<<"\n";
    }
    
}
Просьба к коллегам - посмотрите свежей головой где я начудил, а то уже мозги кипят. Проблема 99% что в расстановке четырехпалубного корабля. Заранее благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru