Список Списков.морской Бой

Тема в разделе "C/C++/C#", создана пользователем moshitamoru, 21 май 2012.

  1. moshitamoru

    moshitamoru Гость

    Здравствуйте, форумчане.
    Прошу вашей помощи.
    Я новичок, и это моя первая программа.
    Есть курсовая, морской бой.
    Написал уже рандомную расстановку кораблей и движение курсора, всё хорошо. Но возникла загвоздка со списками.
    По заданию в игре должны использоваться списки. У меня однонаправленный, не кольцевой и без головного элемента.
    Но список у меня не простой, а список списков, т.е. список кораблей, и каждый корабль сам как список, в котором количество кораблей равно количеству палуб. После того как по клетке попали, элемент, соответствующей ей удаляется из списка. Игра заканчивается когда один из списков(игрока или компьютера) оказывается пуст.

    Подскажите, как реализовать список списков?
    Я правильно делаю?

    Код (C++):
    class shiplist
    {
    private:

    struct ship //элемент списка
    {
    int x,y;
    ship* nextright;
    ship* nextdown;

    ship( int _x, int _y, ship *nr = NULL, ship *nd = NULL )// конструктор с передающ значениями
    {
    x = _x;
    y = _y;
    nextright = nr;
    nextdown = nd;
    }
    };

    int shipCount;
    ship* first;
    ship* last;

    public:

    shiplist()
    {
    shipCount = 0;
    first = last = NULL;
    }



    ~shiplist()
    {



    ship* current = NULL;
    ship* nextdown = first;
    ship* nextright = first;
    while (nextdown)
    {
    while (nextright)
    {
    current = nextright;
    nextright = nextright->nextright;
    delete current;
    }

    current = nextdown;
    nextdown = nextdown->nextdown;
    delete current;
    }

    }

    void addshipRight( int _x, int _y) //добавление корабля
    {
    ship* newship = new ship( _x, _y);
    if (!last)
    {
    first = newship;
    }
    else
    {
    last->nextright = newship;
    }
    last = newship;
    shipCount++;

    }
    void addshipDown(int _x, int _y)
    {
    ship* newship = new ship( _x, _y);
    if (!last)
    {
    first = newship;
    }
    else
    {
    last->nextdown = newship;
    }
    last = newship;
    shipCount++;
    }

    bool delShip ( int _x, int _y)
    {
    ship* prev = 0,
    *current = first;
    while (current)
    {
    while (current->nextdown)
    {
    if ((current->x == _x) && (current->y == _y))
    {
    if (prev)
    {
    prev->nextright = current->nextright;
    }
    if (current == last)
    {
    last = prev;
    }
    delete current;
    shipCount--;
    return true;
    }
    else
    {
    prev = current;
    current = current->nextright;
    }
    current = first;
    current = current->nextdown;
    }
    }
    return false;
    }

    void showlist()
    {
    ship* current = first;
    while (current)
    {
    cout<<current->x<<current->y<<'\n';
    current = current->nextright;
    }
    }
    Вот вся программа, если что.


    Код (C++):
    // sea_war_oop.cpp: определяет точку входа для консольного приложения.
    //

    #include "stdafx.h"
    #include <Windows.h>
    #include <stdio.h>
    #include <conio.h>
    #include <iostream>
    #include <time.h>


    using namespace std;

    HANDLE hConsole;
    //HANDLE hStdout, hStdin;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    void Position(int X, int Y)
    {
    COORD coord = { X, Y };
    SetConsoleCursorPosition(hStdOut, coord);
    }

    enum ConsoleColor          
    {
    Black        = 0,
    Blue         = 1,
    Green        = 2,
    Cyan         = 3,
    Red       = 4,
    Magenta   = 5,
    Brown        = 6,
    LightGray    = 7,
    DarkGray     = 8,
    LightBlue    = 9,
    LightGreen  = 10,
    LightCyan    = 11,
    LightRed     = 12,
    LightMagenta = 13,
    Yellow      = 14,
    White        = 15
    };
    void SetColor(int text = 15, int background = 0)       
    {
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
    }

    class box //ячейка поля
    {
    public:
    unsigned int x;
    unsigned int y;
    int beat; // битая/не битая
    int ship; // корабль/не корабль
    int shipTipe; // тип корабля
    int sea; //свободно/занято
    int color;
    int direction; // направление корабля
    int cursor;


    box(): beat(0),ship(0), shipTipe(0),color(0),direction(0),cursor(0),sea(0)
    {}


    void show(int t, int color)// вывести ячейку
    {
    SetColor(t, color );
    Position(x,y);
    cout<<" ";

    }
    };



    class shiplist //список
    {
    private:

    struct ship //элемент списка
    {
    int x,y;
    ship* nextright;
    ship* nextdown;

    ship( int _x, int _y, ship *nr = NULL, ship *nd = NULL )// конструктор с передающ значениями
    {
    x = _x;
    y = _y;
    nextright = nr;
    nextdown = nd;
    }
    };

    int shipCount;
    ship* first;
    ship* last;

    public:

    shiplist()
    {
    shipCount = 0;
    first = last = NULL;
    }



    ~shiplist()
    {



    ship* current = NULL;
    ship* nextdown = first;
    ship* nextright = first;
    while (nextdown)
    {
    while (nextright)
    {
    current = nextright;
    nextright = nextright->nextright;
    delete current;
    }

    current = nextdown;
    nextdown = nextdown->nextdown;
    delete current;
    }

    }

    void addshipRight( int _x, int _y) //добавление корабля
    {
    ship* newship = new ship( _x, _y);
    if (!last)
    {
    first = newship;
    }
    else
    {
    last->nextright = newship;
    }
    last = newship;
    shipCount++;

    }
    void addshipDown(int _x, int _y)
    {
    ship* newship = new ship( _x, _y);
    if (!last)
    {
    first = newship;
    }
    else
    {
    last->nextdown = newship;
    }
    last = newship;
    shipCount++;
    }

    bool delShip ( int _x, int _y)
    {
    ship* prev = 0,
    *current = first;
    while (current)
    {
    while (current->nextdown)
    {
    if ((current->x == _x) && (current->y == _y))
    {
    if (prev)
    {
    prev->nextright = current->nextright;
    }
    if (current == last)
    {
    last = prev;
    }
    delete current;
    shipCount--;
    return true;
    }
    else
    {
    prev = current;
    current = current->nextright;
    }
    current = first;
    current = current->nextdown;
    }
    }
    return false;
    }

    void showlist()
    {
    ship* current = first;
    while (current)
    {
    cout<<current->x<<current->y<<'\n';
    current = current->nextright;
    }
    }



    };
    void move_сursor(box pole [10][10]) // функция двужения курсора
    {
    char dir = 'a';
    unsigned int n = 0;
    unsigned int m = 0;
    unsigned int x = 0;
    unsigned int y = 0;


    Position(x,y);
    SetColor(15,14);
    cout<<' ';
    Position(15,15);

    while (dir != '\r')// пока не enter
    {


    dir = getch();
    switch (dir)
    {
    case 'd' :
    if (x<9)
    {
    Position(x,y);
    SetColor(15,pole[y][x].color);
    cout<<' ';
    x++;
    Position(x,y);
    SetColor(15,14);
    cout<<' ';
    Position(15,15);
    }
    else
    {
    Position(x,y);
    SetColor(15,14);
    cout<<' ';
    }
    break;

    case 'a' :
    if ( x>0)
    {
    Position(x,y);
    SetColor(15,pole[y][x].color);
    cout<<' ';
    x--;
    Position(x,y);
    SetColor(15,14);
    cout<<' ';
    Position(15,15);
    }
    else
    {
    Position(x,y);
    SetColor(15,14);
    cout<<' ';
    }
    break;

    case 'w' :
    if (y>0)
    {
    Position(x,y);
    SetColor(15,pole[y][x].color);
    cout<<' ';
    y--;
    Position(x,y);
    SetColor(15,14);
    cout<<' ';
    Position(15,15);
    }
    else
    {
    Position(x,y);
    SetColor(15,14);
    cout<<' ';
    }
    break;

    case 's' :
    if (y<9)
    {
    Position(x,y);
    SetColor(15,pole[y][x].color);
    cout<<' ';
    y++;
    Position(x,y);
    SetColor(15,14);
    cout<<' ';
    Position(15,15);
    }
    else
    {
    Position(x,y);
    SetColor(15,14);
    cout<<' ';
    }
    break;
    }
    }
    }

    void standship( box pole [10][10], shiplist element)
    {
    int
    randX = 0,
    randY = 0,
    randDIR = 0,
    k = 0,
    i = 0,
    N = 0,
    S = 0,
    W = 0,
    E = 0,
    n = 0,
    m = 0;

    for ( n=0; n<10; n++)
    {
    for ( m=0; m<10; m++)
    {
    pole[n][m].x=m;
    pole[n][m].y=n;
    }
    }

    bool shipend = true;

    srand(time(NULL));

    // Четырёхпалубник
    while (shipend)
    {
    randX = 0 + rand() %10;
    randY = 0 + rand() %10;

    if (pole[randY][randX].ship == 0 && pole[randY][randX].sea == 0)
    {
    if ( pole[randY][randX].x < 7 && pole[randY][randX+1].sea == 0 && pole[randY][randX+2].sea == 0 && pole[randY][randX+3].sea == 0 &&
    pole[randY][randX+1].ship == 0 && pole[randY][randX+2].ship == 0 && pole[randY][randX+3].ship == 0)
    {
    k++;
    E = k;
    }

    if ( pole[randY][randX].x > 2 && pole[randY][randX-1].sea == 0 && pole[randY][randX-2].sea == 0 && pole[randY][randX-3].sea == 0 &&
    pole[randY][randX-1].ship == 0 && pole[randY][randX-2].ship == 0 && pole[randY][randX-3].ship == 0)
    {
    k++;
    W = k;
    }

    if ( pole[randY][randX].y < 7 && pole[randY+1][randX].sea == 0 && pole[randY+2][randX].sea == 0 && pole[randY+3][randX].sea == 0 &&
    pole[randY+1][randX].ship == 0 && pole[randY+2][randX].ship == 0 && pole[randY+3][randX].ship == 0)
    {
    k++;
    S = k;
    }

    if ( pole[randY][randX].y > 2 && pole[randY-1][randX].sea == 0 && pole[randY-2][randX].sea == 0 && pole[randY-3][randX].sea == 0 &&
    pole[randY-1][randX].ship == 0 && pole[randY-2][randX].ship == 0 && pole[randY-3][randX].ship == 0)
    {
    k++;
    N = k;
    }

    if (k > 0)
    {
    randDIR = 1 + rand() %k;

    if (randDIR == E)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY][randX+1].ship = 1;
    pole[randY][randX+2].ship = 1;
    pole[randY][randX+3].ship = 1;
    //element.addshipRight(pole[randY][randX].x, pole[randY][randX].y);        
    //element.addshipRight(pole[randY][randX+1].x, pole[randY][randX+1].y);
    //element.addshipRight(pole[randY][randX+2].x, pole[randY][randX+2].y);
    //element.addshipRight(pole[randY][randX+3].x, pole[randY][randX+3].y);
    //тип корабля
    pole[randY][randX].shipTipe = 4;
    pole[randY][randX+1].shipTipe = 4;
    pole[randY][randX+2].shipTipe = 4;
    pole[randY][randX+3].shipTipe = 4;
    //занятые соседние клетки
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX+1].sea = 1;
    pole[randY-1][randX+2].sea = 1;
    pole[randY-1][randX+3].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    pole[randY+1][randX+2].sea = 1;
    pole[randY+1][randX+3].sea = 1;

    if (pole[randY][randX].x <= 5)
    {
    pole[randY-1][randX+4].sea = 1;
    pole[randY][randX+4].sea = 1;
    pole[randY+1][randX+4].sea = 1;
    }
    if (pole[randY][randX].x >= 1)
    {
    pole[randY-1][randX-1].sea = 1;
    pole[randY][randX-1].sea = 1;
    pole[randY+1][randX-1].sea = 1;
    }


    shipend = false;
    }
    else if (randDIR == W)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY][randX-1].ship = 1;
    pole[randY][randX-2].ship = 1;
    pole[randY][randX-3].ship = 1;
    //element.addshipRight(pole[randY][randX].x, pole[randY][randX].y);        
    //element.addshipRight(pole[randY][randX-1].x, pole[randY][randX-1].y);
    //element.addshipRight(pole[randY][randX-2].x, pole[randY][randX-2].y);
    //element.addshipRight(pole[randY][randX-3].x, pole[randY][randX-3].y);
    //тип корабля
    pole[randY][randX].shipTipe = 4;
    pole[randY][randX-1].shipTipe = 4;
    pole[randY][randX-2].shipTipe = 4;
    pole[randY][randX-3].shipTipe = 4;
    //занятые соседние клетки
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX-1].sea = 1;
    pole[randY-1][randX-2].sea = 1;
    pole[randY-1][randX-3].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX-1].sea = 1;
    pole[randY+1][randX-2].sea = 1;
    pole[randY+1][randX-3].sea = 1;
    if (pole[randY][randX].x >= 4)
    {
    pole[randY-1][randX-4].sea = 1;
    pole[randY][randX-4].sea = 1;
    pole[randY+1][randX-4].sea = 1;
    }

    if (pole[randY][randX].x <= 8)
    {
    pole[randY-1][randX+1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    }

    shipend = false;
    }
    else if (randDIR == S)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY+1][randX].ship = 1;
    pole[randY+2][randX].ship = 1;
    pole[randY+3][randX].ship = 1;
    //element.addshipRight(pole[randY][randX].x, pole[randY][randX].y);        
    //element.addshipRight(pole[randY+1][randX].x, pole[randY+1][randX].y);
    //element.addshipRight(pole[randY+2][randX].x, pole[randY+2][randX].y);
    //element.addshipRight(pole[randY+3][randX].x, pole[randY+3][randX].y);
    //тип корабля
    pole[randY][randX].shipTipe = 4;
    pole[randY+1][randX].shipTipe = 4;
    pole[randY+2][randX].shipTipe = 4;
    pole[randY+3][randX].shipTipe = 4;
    //занятые соседние клетки
    pole[randY][randX-1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY+1][randX-1].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    pole[randY+2][randX-1].sea = 1;
    pole[randY+2][randX+1].sea = 1;
    pole[randY+3][randX-1].sea = 1;
    pole[randY+3][randX+1].sea = 1;

    if (pole[randY][randX].y <= 5)
    {
    pole[randY+4][randX-1].sea = 1;
    pole[randY+4][randX].sea = 1;
    pole[randY+4][randX+1].sea = 1;
    }

    if (pole[randY][randX].y >= 1)
    {
    pole[randY-1][randX-1].sea = 1;
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX+1].sea = 1;
    }

    shipend = false;
    }
    else if (randDIR == N)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY-1][randX].ship = 1;
    pole[randY-2][randX].ship = 1;
    pole[randY-3][randX].ship = 1;
    //element.addshipRight(pole[randY][randX].x, pole[randY][randX].y);        
    //element.addshipRight(pole[randY-1][randX].x, pole[randY-1][randX].y);
    //element.addshipRight(pole[randY-2][randX].x, pole[randY-2][randX].y);
    //element.addshipRight(pole[randY-3][randX].x, pole[randY-3][randX].y);
    //тип корабля
    pole[randY][randX].shipTipe = 4;
    pole[randY-1][randX].shipTipe = 4;
    pole[randY-2][randX].shipTipe = 4;
    pole[randY-3][randX].shipTipe = 4;
    //занятые соседние клетки
    pole[randY][randX-1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY-1][randX-1].sea = 1;
    pole[randY-1][randX+1].sea = 1;
    pole[randY-2][randX-1].sea = 1;
    pole[randY-2][randX+1].sea = 1;
    pole[randY-3][randX-1].sea = 1;
    pole[randY-3][randX+1].sea = 1;

    if (pole[randY][randX].y >= 4)
    {
    pole[randY-4][randX-1].sea = 1;
    pole[randY-4][randX].sea = 1;
    pole[randY-4][randX+1].sea = 1;
    }

    if (pole[randY][randX].y <= 8)
    {
    pole[randY+1][randX-1].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    }

    shipend = false;
    }
    }
    }
    }

    //Трёхпалубники
    for (i = 0; i<2; i++)
    {
    shipend = true;
    k = 0;
    N = 0;
    S = 0;
    W = 0;
    E = 0;

    while (shipend)
    {

    randX = 0 + rand() %10;
    randY = 0 + rand() %10;

    if (pole[randY][randX].ship == 0 && pole[randY][randX].sea == 0)
    {
    if ( pole[randY][randX].x < 8 && pole[randY][randX+1].sea == 0 && pole[randY][randX+2].sea == 0 && pole[randY][randX+1].ship == 0 && pole[randY][randX+2].ship == 0 )
    {
    k++;
    E = k;

    }      
    if ( pole[randY][randX].x > 1 && pole[randY][randX-1].sea == 0 && pole[randY][randX-2].sea == 0 && pole[randY][randX-1].ship == 0 && pole[randY][randX-2].ship == 0 )
    {
    k++;
    W = k;

    }      
    if ( pole[randY][randX].y < 8 && pole[randY+1][randX].sea == 0 && pole[randY+2][randX].sea == 0 && pole[randY+1][randX].ship == 0 && pole[randY+2][randX].ship == 0 )
    {
    k++;
    S = k;

    }      
    if ( pole[randY][randX].y > 1 && pole[randY-1][randX].sea == 0 && pole[randY-2][randX].sea == 0 && pole[randY-1][randX].ship == 0 && pole[randY-2][randX].ship == 0 )
    {
    k++;
    N = k;

    }

    if (k > 0)
    {

    randDIR = 1 + rand() %k;

    if (randDIR == E)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY][randX+1].ship = 1;
    pole[randY][randX+2].ship = 1;
    //тип корабля
    pole[randY][randX].shipTipe = 3;
    pole[randY][randX+1].shipTipe = 3;
    pole[randY][randX+2].shipTipe = 3;
    //занятые соседние клетки
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX+1].sea = 1;
    pole[randY-1][randX+2].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    pole[randY+1][randX+2].sea = 1;

    if (pole[randY][randX].x <= 6)
    {
    pole[randY-1][randX+3].sea = 1;
    pole[randY][randX+3].sea = 1;
    pole[randY+1][randX+3].sea = 1;
    }

    if (pole[randY][randX].x >= 1)
    {
    pole[randY-1][randX-1].sea = 1;
    pole[randY][randX-1].sea = 1;
    pole[randY+1][randX-1].sea = 1;
    }

    shipend = false;
    }
    else if (randDIR == W)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY][randX-1].ship = 1;
    pole[randY][randX-2].ship = 1;
    //тип корабля
    pole[randY][randX].shipTipe = 3;
    pole[randY][randX-1].shipTipe = 3;
    pole[randY][randX-2].shipTipe = 3;
    //занятые соседние клетки
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX-1].sea = 1;
    pole[randY-1][randX-2].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX-1].sea = 1;
    pole[randY+1][randX-2].sea = 1;

    if (pole[randY][randX].x >= 3)
    {
    pole[randY-1][randX-3].sea = 1;
    pole[randY][randX-3].sea = 1;
    pole[randY+1][randX-3].sea = 1;
    }

    if (pole[randY][randX].x <= 8)
    {
    pole[randY-1][randX+1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    }

    shipend = false;
    }
    else if (randDIR == S)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY+1][randX].ship = 1;
    pole[randY+2][randX].ship = 1;
    //тип корабля
    pole[randY][randX].shipTipe = 3;
    pole[randY+1][randX].shipTipe = 3;
    pole[randY+2][randX].shipTipe = 3;
    //занятые соседние клетки
    pole[randY][randX-1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY+1][randX-1].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    pole[randY+2][randX-1].sea = 1;
    pole[randY+2][randX+1].sea = 1;

    if (pole[randY][randX].y <= 6)
    {
    pole[randY+3][randX-1].sea = 1;
    pole[randY+3][randX].sea = 1;
    pole[randY+3][randX+1].sea = 1;
    }

    if (pole[randY][randX].y >= 1)
    {
    pole[randY-1][randX-1].sea = 1;
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX+1].sea = 1;
    }

    shipend = false;
    }
    else if (randDIR == N)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY-1][randX].ship = 1;
    pole[randY-2][randX].ship = 1;
    //тип корабля
    pole[randY][randX].shipTipe = 3;
    pole[randY-1][randX].shipTipe = 3;
    pole[randY-2][randX].shipTipe = 3;
    //занятые соседние клетки
    pole[randY][randX-1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY-1][randX-1].sea = 1;
    pole[randY-1][randX+1].sea = 1;
    pole[randY-2][randX-1].sea = 1;
    pole[randY-2][randX+1].sea = 1;

    if (pole[randY][randX].y >= 3)
    {
    pole[randY-3][randX-1].sea = 1;
    pole[randY-3][randX].sea = 1;
    pole[randY-3][randX+1].sea = 1;
    }

    if (pole[randY][randX].y <= 8)
    {
    pole[randY+1][randX-1].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    }

    shipend = false;
    }
    }
    }
    }
    }


    //Двухпалубники
    for (i = 0; i<3; i++)
    {
    shipend = true;
    k = 0;
    N = 0;
    S = 0;
    W = 0;
    E = 0;

    while (shipend)
    {

    randX = 0 + rand() %10;
    randY = 0 + rand() %10;

    if (pole[randY][randX].ship == 0 && pole[randY][randX].sea == 0)
    {
    if ( pole[randY][randX].x < 9 && pole[randY][randX+1].sea == 0 && pole[randY][randX+1].ship == 0 )
    {
    k++;
    E = k;

    }      
    if ( pole[randY][randX].x > 0 && pole[randY][randX-1].sea == 0 && pole[randY][randX-1].ship == 0 )
    {
    k++;
    W = k;

    }      
    if ( pole[randY][randX].y < 9 && pole[randY+1][randX].sea == 0 && pole[randY+1][randX].ship == 0 )
    {
    k++;
    S = k;

    }      
    if ( pole[randY][randX].y > 0 && pole[randY-1][randX].sea == 0 && pole[randY-1][randX].ship == 0 )
    {
    k++;
    N = k;

    }

    if (k > 0)
    {

    randDIR = 1 + rand() %k;

    if (randDIR == E)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY][randX+1].ship = 1;
    //тип корабля
    pole[randY][randX].shipTipe = 2;
    pole[randY][randX+1].shipTipe = 2;
    //занятые соседние клетки
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX+1].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX+1].sea = 1;

    if (pole[randY][randX].x <= 7)
    {
    pole[randY-1][randX+2].sea = 1;
    pole[randY][randX+2].sea = 1;
    pole[randY+1][randX+2].sea = 1;
    }

    if (pole[randY][randX].x >= 1)
    {
    pole[randY-1][randX-1].sea = 1;
    pole[randY][randX-1].sea = 1;
    pole[randY+1][randX-1].sea = 1;
    }

    shipend = false;
    }
    else if (randDIR == W)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY][randX-1].ship = 1;
    //тип корабля
    pole[randY][randX].shipTipe = 2;
    pole[randY][randX-1].shipTipe = 2;
    //занятые соседние клетки
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX-1].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX-1].sea = 1;

    if (pole[randY][randX].x >= 2)
    {
    pole[randY-1][randX-2].sea = 1;
    pole[randY][randX-2].sea = 1;
    pole[randY+1][randX-2].sea = 1;
    }

    if (pole[randY][randX].x <= 8)
    {
    pole[randY-1][randX+1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    }

    shipend = false;
    }
    else if (randDIR == S)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY+1][randX].ship = 1;
    //тип корабля
    pole[randY][randX].shipTipe = 2;
    pole[randY+1][randX].shipTipe = 2;
    //занятые соседние клетки
    pole[randY][randX-1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY+1][randX-1].sea = 1;
    pole[randY+1][randX+1].sea = 1;

    if (pole[randY][randX].y <= 7)
    {
    pole[randY+2][randX-1].sea = 1;
    pole[randY+2][randX].sea = 1;
    pole[randY+2][randX+1].sea = 1;
    }

    if (pole[randY][randX].y >= 1)
    {
    pole[randY-1][randX-1].sea = 1;
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX+1].sea = 1;
    }

    shipend = false;
    }
    else if (randDIR == N)
    {
    //флажок корабля
    pole[randY][randX].ship = 1;
    pole[randY-1][randX].ship = 1;
    //тип корабля
    pole[randY][randX].shipTipe = 2;
    pole[randY-1][randX].shipTipe = 2;
    //занятые соседние клетки
    pole[randY][randX-1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY-1][randX-1].sea = 1;
    pole[randY-1][randX+1].sea = 1;

    if (pole[randY][randX].y >= 2)
    {
    pole[randY-2][randX-1].sea = 1;
    pole[randY-2][randX].sea = 1;
    pole[randY-2][randX+1].sea = 1;
    }

    if (pole[randY][randX].y <= 8)
    {
    pole[randY+1][randX-1].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX+1].sea = 1;
    }

    shipend = false;
    }
    }
    }
    }
    }


    //Однопалубники
    for (i = 0; i<4; i++)
    {
    shipend = true;

    while (shipend)
    {

    randX = 0 + rand() %10;
    randY = 0 + rand() %10;

    if (pole[randY][randX].ship == 0 && pole[randY][randX].sea == 0 )
    {

    //флажок корабля
    pole[randY][randX].ship = 1;
    //тип корабля
    pole[randY][randX].shipTipe = 1;
    //занятые соседние клетки
    pole[randY-1][randX-1].sea = 1;
    pole[randY-1][randX].sea = 1;
    pole[randY-1][randX+1].sea = 1;
    pole[randY][randX-1].sea = 1;
    pole[randY][randX+1].sea = 1;
    pole[randY+1][randX-1].sea = 1;
    pole[randY+1][randX].sea = 1;
    pole[randY+1][randX+1].sea = 1;

    shipend = false;

    }


    }

    }
    }



    int _tmain(int argc, _TCHAR* argv[])
    {
    unsigned int n,m;
    int t = 15;
    box pole [10][10],
    mypole[10][10];

    shiplist element;

    //element.addshipRight(2,3);
    //element.addshipRight(6,7);


    for ( n=0; n<10; n++)
    {
    for ( m=0; m<10; m++)
    {
    pole[n][m].x=m;
    pole[n][m].y=n;
    }
    }

    standship(pole, element);

    for ( n=0; n<10; n++)
    {
    for ( m=0; m<10; m++)
    {
    if ( pole[n][m].beat==0 && pole[n][m].ship==0 && pole[n][m].x%2 == 0 && pole[n][m].y%2 == 0)
    {
    pole[n][m].color=1;
    }
    else if (pole[n][m].beat==0 && pole[n][m].ship==0 && pole[n][m].x%2 == 1 && pole[n][m].y%2 == 0)
    {
    pole[n][m].color=9;
    }
    else if (pole[n][m].beat==0 && pole[n][m].ship==0 && pole[n][m].x%2 == 0 && pole[n][m].y%2 == 1)
    {
    pole[n][m].color=9;
    }
    else if (pole[n][m].beat==0 && pole[n][m].ship==0 && pole[n][m].x%2 == 1 && pole[n][m].y%2 == 1)
    {
    pole[n][m].color=1;
    }
    else if (pole[n][m].beat==0 && pole[n][m].ship==1 )
    {
    pole[n][m].color=12;
    }
    }
    }


    for ( n=0; n<10; n++)
    {
    for ( m=0; m<10; m++)
    {  

    pole[n][m].show(t, pole[n][m].color);
    }
    }


    //Position(15, 15);
    //element.showlist;


    move_сursor(pole);




    return 0;
    }
     
Загрузка...
Похожие Темы - Список Списков морской
  1. gx6060
    Ответов:
    2
    Просмотров:
    433
  2. gx6060
    Ответов:
    6
    Просмотров:
    569
  3. Shandrik
    Ответов:
    6
    Просмотров:
    810
  4. anna
    Ответов:
    8
    Просмотров:
    815
  5. erhe
    Ответов:
    10
    Просмотров:
    791

Поделиться этой страницей