Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2012, 18:14   #1
nato4ka649
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 13
Вопрос исправить игру на с++

задание такое Запрограммировать игру двух игроков в “Морской бой”. Сначала, по-сле запуска программы, игроки совместно вводят размер прямоуголь-ных клеточных полей для игры (NxM) и типы и количество кораблей. Затем игроки независимо друг от друга вводят данные о расстановке своих кораблей (программа должна проверять корректность данных). Далее программа выдает графическое изображение двух одинаковых чистых прямоугольных клеточных полей и предоставляет игрокам поочередное право делать свой ход (игрок указывает мышью на соответствующую клетку поля своего оппонента), при этом об итогах этого хода сообщает не оппонент игрока, а сама программа, отображая их графически. Программа должна анализировать действия игроков и в случае победы одного из них сообщать имя победителя и прекращать игру.
nato4ka649 вне форума Ответить с цитированием
Старый 17.01.2012, 18:21   #2
nato4ka649
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 13
По умолчанию

Код:
#include <clocale>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <ctime>
 
// перечеисление хранит направление: горизонтальное и вертикальное
enum direction{h,v};
 
class player
{
public:
        bool defeat_flag; // переменная хранит информацию о поражении
        int hits[10][10]; // массив "выстрелов" объекта
        int ships[10][10]; // массив кораблей объекта
 
        player (): defeat_flag(0)       {} // конструктор
 
        void ships_init();
        void set(int deck);
        int place_ship(int s, int c, direction dir, int deck);
        void turn(player&, int character, int digit);
        void turn(player&);
};
 
// карта размером в 13 строк и 29 столбцов
const int s = 13, c = 29;
char map[s][c] = {
                "  0123456789     0123456789 ",
                " #----------#   #----------#",
                "0|          |  0|          |",
};
 
player human;
player computer;
 
void map_init(char map[s][c]);
void show (char map[s][c]);
int input(char&, char&);
void test();
int check_ending();
 
char numbers[10] = { '0','1','2','3','4','5','6','7','8','9'};
 
int main()
{
        setlocale(LC_CTYPE, "Russian");
        int message = 0; // переменная хранит коды сообщений
        
        // установка начального значения генератора случайных чисел
        srand( static_cast<unsigned int>(time(NULL)) );
 
        human.ships_init(); // инициализация массивов человека
        computer.ships_init(); // инициализация массивов компьютера
        map_init(map); // добавление в массив map инфорации изи human.ships
 
        /*
        message может содержать три значения:
        0 - всё нормально
        1 - пользователь нажал неверную клавишу
        2 - кто-то победил, конец игры
        */
        while (message != 2)
        {
                int user_input = 0;
                system("cls"); // очистка экрана
                show(map);     // вывод на экран map
                if (message == 1) // код сообщения 1 - введено неверное значение
                        std::cout << "Вы ввели неверное значение!\n";
                message = 0;   // обнуление message
                //test();      // функция для тестирования массивов ships и hits
 
                char character, digit;
                user_input = input(character, digit); // !!!переменные передаются по ссылке
                if (user_input == 1)
                {
                        message = 1;
                        continue; 
                }
 
                human.turn(computer,character, digit);
                computer.turn(human);
                message = check_ending();
        }
        _getch();
        return 0;
}
 
/*
Добавление в массив map информации из human.ships.
Там где находятся корабли (human.ships[i][j] == 2), в массиве
map присваиваем символ K.
*/
void map_init(char map[s][c])
{
 
}
 
/*
Сначала в массив maps заносится информация о выстрелах сделанных
противниками.
Затем происходит вывод на экран map. при этом используются
массивы ships и hits класса player.
*/
void show(char map[s][c])
{
        for (int i=0; i<10; i++)
        {
                for (int j=0; j<10; j++)
                {
                        /* Заполняем поле игрока Для этого проверяем соответствующие элементы
                        computer.hits и human.ships
                        O - по данной клетке стреляли, но корабля там не было.
                        X - корабльы в данной клетке был подбит.
                        */
 
                        /* Аналогично заполняем поле компьютера. */
 
 
                } // конец for j
        } //конец for i
 
        // Посимвольный вывод массива map на экран
}

Последний раз редактировалось ACE Valery; 17.01.2012 в 21:10.
nato4ka649 вне форума Ответить с цитированием
Старый 17.01.2012, 18:22   #3
nato4ka649
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 13
По умолчанию

Код:
// ввод координат
int input(char& character, char& digit)
{
        character =  // ввод "горизонтальной" координаты
        int match = 0;
 
        // Преобразование символьной координаты в целую
 
        std::cout << '-';
        match = 0;
 
        digit =  // ввод "вертикальной" координаты
 
        // Преобразование символьной координаты в целую
 
        return 0;       
}
 
void test()
{
        std::cout << std::endl;
        for (int i = 0; i < 10; i++)
        {
                for (int j = 0; j < 10; j++)
                {
                        std::cout << human.hits[i][j];
                }
                std::cout << "  ";
                for (int j = 0; j < 10; j++)
                {
                        std::cout << computer.hits[i][j];
                }
                std::cout << std::endl;
        }
        std::cout << std::endl;
        for (int i = 0; i < 10; i++)
        {
                for (int j = 0; j < 10; j++)
                {
                        std::cout << human.ships[i][j];
                }
                std::cout << "  ";
                for (int j = 0; j < 10; j++)
                {
                        std::cout << computer.ships[i][j];
                }
                std::cout << std::endl;
        }
}
 
// В функции устанавливаются и проверяются флаги defeat_flag игроков.
int check_ending()
{
        int flag = 0;
        int human_flag = 0;
        int computer_flag = 0;
        for (int i=0; i<10;i++)
        {
                for (int j=0; j<10;j++)
                {
                        // Проверка: есть ли пользователя неповреждённые корабли
                        // Проверка: есть ли компьютера неповреждённые корабли
                }
        }
 
        // Установка flag, в зависимости от human_flag и computer_flag
}
 
void player::ships_init()
{
        // инициализация массивов hits и ships
        // Элементам hits присваиваются нули
        // Элементам ships присваиваются единицы
 
        // Установка кораблей. Начните с чётырёхпалубного:

Последний раз редактировалось ACE Valery; 17.01.2012 в 21:10.
nato4ka649 вне форума Ответить с цитированием
Старый 17.01.2012, 18:23   #4
nato4ka649
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 13
По умолчанию

Код:
}
 
void player::set (int deck)
{
        int my = deck - 1;
        bool isset = 0;
        int s,c;
        direction dir;
        while (isset == 0) // проверка удалось ли разместить корабль
        {
                dir = // выбираем направление
                
                s = // случайным образом определяются координаты
                c = 
                int e = 0;
                switch (dir)
                {
                case h:
                        if (ships[s][c+deck-1] == 1)
                        {
                                e = place_ship(s,c,dir,deck); // проверка смежных клеток
                                if (e == 0)
                                {
                                        // размещаем корабль в массиве ships
                                }
                        }
                        break;
                case v:
                        if (ships[s+deck-1][c] == 1)
                        {
                                e = place_ship(s,c,dir,deck);
                                if (e == 0)
                                {
 
                                }
                        }
                        break;
                } // конец switch
        } // конец while
} // конец set4()
 
/*
Функция проверяет, можно ли в данной координате [s][c]
разместить корабль с палубами deck.
В комментариях показано какие клетки проверяются при установке
четырёхпалубного корабля в [4][3]
*/
int player::place_ship(int s, int c, direction dir, int deck)
{
        int e = 0;
        switch (dir)
        {
                case h:
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|X      
                        3| 2222    
                        4|      
                        */
                }
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|     X 
                        3| 2222    
                        4|      
                        */
                }
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|      
                        3| 2222    
                        4|X     
                        */
                }
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|      
                        3| 2222    
                        4|     X 
                        */
                }
 
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|      
                        3|X2222    
                        4|      
                        */

Последний раз редактировалось ACE Valery; 17.01.2012 в 21:11.
nato4ka649 вне форума Ответить с цитированием
Старый 17.01.2012, 18:23   #5
nato4ka649
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 13
По умолчанию

Код:
}
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|      
                        3| 2222X    
                        4|      
                        */
                }
                for (int i = 0; i < deck; i++)
                {
                        if ()
                        {
                                e = 1;
                                /*
                                  345678
                                 #-------
                                2| XXXX     
                                3| 2222    
                                4|      
                                */
                        }
                        if ()
                        {
                                e = 1;
                                /*
                                  345678
                                 #-------
                                2|      
                                3| 2222    
                                4| XXXX     
                                */
                        }
                }
                break;
        case v:
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|X      
                        3| 2    
                        4| 2   
                        5| 2     
                        6| 2    
                        7|     
                        */
                }
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|  X    
                        3| 2    
                        4| 2   
                        5| 2     
                        6| 2    
                        7| X    
                        */
                }
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|      
                        3| 2    
                        4| 2   
                        5| 2     
                        6| 2    
                        7|X     
                        */
                }
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|      
                        3| 2    
                        4| 2   
                        5| 2     
                        6| 2    
                        7|  X   
                        */
                }
 
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2| X     
                        3| 2    
                        4| 2   
                        5| 2     
                        6| 2    
                        7|     
                        */
                }
                if ()
                {
                        e = 1;
                        /*
                          345678
                         #-------
                        2|      
                        3| 2    
                        4| 2   
                        5| 2     
                        6| 2    
                        7| X    
                        */

Последний раз редактировалось ACE Valery; 17.01.2012 в 21:11.
nato4ka649 вне форума Ответить с цитированием
Старый 17.01.2012, 18:24   #6
nato4ka649
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 13
По умолчанию

Код:
}
                for (int i = 0; i < deck; i++)
                {
                        if ()
                        {
                                e = 1;
                                /*
                                  345678
                                 #-------
                                2|      
                                3|X2    
                                4|X2   
                                5|X2     
                                6|X2    
                                7|     
                                */
                        }
                        if ()
                        {
                                e = 1;
                                /*
                                  345678
                                 #-------
                                2|      
                                3| 2X    
                                4| 2X   
                                5| 2X     
                                6| 2X    
                                7|     
                                */
                        }
                }
                break;
        }
        return e;
}
 
// Ход компьютера: вносим изменения в массивы human.ships и computer.hits
void player::turn(player& enemy)
{
        //srand(static_cast<unsigned int>(time(NULL)));
        bool flag = 0;
        while (flag == 0)
        {
                // выбор координат (случайных) по которым будет стрелять компьютер:
 
                if () // проверка: выбирал ли уже компьютер эти координаты
                {
 
                }
        }
}
 
// Ход игрока: вносим изменения в массивы computer.ships и human.hits
void player::turn(player& enemy, int character, int digit)
{
 
}

Последний раз редактировалось ACE Valery; 17.01.2012 в 21:11.
nato4ka649 вне форума Ответить с цитированием
Старый 17.01.2012, 21:12   #7
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

А в чем, собственно, проблема?

Девушка, хватит плодить темы!
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 17.01.2012 в 21:18.
ACE Valery вне форума Ответить с цитированием
Старый 17.01.2012, 23:03   #8
nato4ka649
Пользователь
 
Регистрация: 17.01.2012
Сообщений: 13
По умолчанию

проблема в том что у меня код игры с компом а надо между 2 игроками
nato4ka649 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать игру! Masyanov Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 04.06.2011 16:13
Зацените игру! Terrance! Gamedev - cоздание игр: Unity, OpenGL, DirectX 14 16.10.2010 11:34
Потестим игру? lennon Gamedev - cоздание игр: Unity, OpenGL, DirectX 35 17.11.2009 19:08
Создаю 2D игру Deamonig Gamedev - cоздание игр: Unity, OpenGL, DirectX 22 20.09.2009 17:23