Сетевые крестики-нолики
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 22.03.05 07:34
Оценка: +1
Пока сидели в институте и ждали препода, написалось такое вот

#include <stddef.h>
#include <conio.h>
#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include <iostream.h>
#include <dos.h>

template <class T>
struct point
{
    T x;
    T y;

    point()
    {
    }

    point(T _x, T _y) :
        x(_x),
        y(_y)
    {
    }

    int operator == (const point<T> &pt)
    {
        return (x == pt.x) && (y == pt.y);
    }
};

typedef point<size_t> point_int;
enum symbol { none, x, o };

class cell
{
    point_int pt;
    size_t dim;
public:
    symbol s;
    cell()
    {
        s = none;
    }

    cell(point_int _pt, size_t _dim) :
        pt(_pt),
        dim(_dim),
        s(none)
    {
    }

    void draw(int color, int thickness)
    {
        linesettingstype lst;
        getlinesettings(&lst);

        setlinestyle(SOLID_LINE, 0, thickness);
        int c = getcolor();
        setcolor(color);
        rectangle(pt.x, pt.y, pt.x + dim, pt.y + dim);

        setcolor(c);

        c = getcolor();

        switch(s)
        {

            case x:
                setcolor(LIGHTRED);
                line(pt.x + 2, pt.y + 2, pt.x + dim - 2, pt.y + dim - 2);
                line(pt.x + dim - 2, pt.y + 2, pt.x + 2, pt.y + dim - 2);
                break;
            case o:
                setcolor(GREEN);
                circle(pt.x + dim / 2, pt.y + dim / 2, (dim - 2) / 2);
                break;


        } // switch

        setcolor(c);

        setlinestyle(lst.linestyle, lst.upattern, lst.thickness);
    }
};

template <int N, int M, int D>
class field
{
public:
    cell cells[N][M];
    point_int selected;

    field() :
        selected(0, 0)
    {
        for(int n = 0; n < N; ++n)
        {
            for(int m = 0; m < M; ++m)
            {
                cells[n][m] = cell(point_int(D * n, D * m), D);
            } // for
        } // for
    }

    void draw()
    {
        for(int n = 0; n < N; ++n)
        {
            for(int m = 0; m < M; ++m)
            {
                cells[n][m].draw(LIGHTGRAY, 1);
            } // for
        } // for

        cells[selected.x][selected.y].draw(WHITE, 10);
    }

    void left()
    {
        if(selected.x)
            --selected.x;
    }

    void right()
    {
        if(selected.x < N - 1)
            ++selected.x;
    }

    void up()
    {
        if(selected.y)
            --selected.y;
    }

    void down()
    {
        if(selected.y < M - 1)
            ++selected.y;
    }
}

char name[200], file[200], opponent[200];
symbol s;

void readname()
{
    //
    // Reading opponent
    FILE *f = fopen(file, "rt");
    fread(opponent, 1, 200, f);
    fclose(f);
}

void writename()
{
    FILE *f = fopen(file, "wt");
    fwrite(name, 1, 200, f);
    fclose(f);
}

void wait()
{
       //
       // Waiting
       cout << "Press any key when ready..." << endl;
       getch();
}

void handshake()
{
    FILE *f = fopen(file, "rt");
    if(!f)
    {
       writename();
       wait();
       readname();

       s = x;
    } // if
    else
    {
       fclose(f);

       readname();
       wait();
       writename();

       s = o;
    } // else

    remove(file);
}

int readturn(symbol &s, point_int &p)
{
    FILE *f = fopen(file, "rt");
    if(!f)
    {
       return 0;
    }

    fread(&s, sizeof(symbol), 1, f);
    fread(&p, sizeof(point_int), 1, f);

    fclose(f);

    remove(file);

    return 1;
}

void writeturn(symbol s, point_int p)
{
    FILE *f = fopen(file, "wt");

    fwrite(&s, sizeof(symbol), 1, f);
    fwrite(&p, sizeof(point_int), 1, f);

    fclose(f);

}

void main()
{
    cout << "What's your name, man?" << endl;
    cin >> name;
    cout << "File name?" << endl;
    cin >> file;

    handshake();


    int driver = EGA, mode = EGAHI, errorcode;
    initgraph(&driver, &mode, "");
    errorcode = graphresult();


    if (errorcode != grOk)  /* an error occurred */
    {
       printf("Graphics error: %s\n", grapherrormsg(errorcode));
       printf("Press any key to halt:");
       getch();
       exit(1);             /* return with error code */
    }

    field<15, 15, 20> f;
    f.draw();

    int ch;
    symbol sm;
    point_int p;

    do
    {
        ch = getch();

        if(readturn(sm, p))
        {
          f.cells[p.x][p.y].s = sm;
          if(sm == s)
             writeturn(s, p);
        } // if

        if(!ch)
        {
            ch = getch();

            if(ch)
            {
                switch(ch)
                {
                    case 0x4b:
                        f.left();
                        break;
                    case 0x4d:
                        f.right();
                        break;
                    case 0x48:
                        f.up();
                        break;
                    case 0x50:
                        f.down();
                        break;
                } // switch
            } // if
        } // if
        else
        {
            switch(ch)
            {
                case 0x20:
                    if(none == f.cells[f.selected.x][f.selected.y].s)
                    {
                        f.cells[f.selected.x][f.selected.y].s = s;
//                            s == x ? o : x;
                        writeturn(s, f.selected);
                    }
                    break;
            } // switch
        } // else

        f.draw();
        gotoxy(60, 5);
        cout << name << " vs. " << opponent;
    }
    while(ch != 0x1b);

    closegraph();
}


Компилируется под Borland C++ 3.1
HgLab: Mercurial Server and Repository Management for Windows
Re: Сетевые крестики-нолики
От: SergH Россия  
Дата: 22.03.05 09:24
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Пока сидели в институте и ждали препода, написалось такое вот


А почему в форум "Коллеги улыбнитесь?"
И, что-то я не вкурил, как организуется сетевое взаимодействие? Вроде, через файл, но я что-то не помню в ДОСе разделяемых по сети файлов...
Делай что должно, и будь что будет
Re[2]: Сетевые крестики-нолики
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 22.03.05 09:30
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, Нахлобуч, Вы писали:


Н>>Пока сидели в институте и ждали препода, написалось такое вот


SH>А почему в форум "Коллеги улыбнитесь?"

SH>И, что-то я не вкурил, как организуется сетевое взаимодействие? Вроде, через файл, но я что-то не помню в ДОСе разделяемых по сети файлов...

Да в цикле файл читается. Если там все еще записан ваш ход, то ничего не делаем. Если не ваш, то выводим ход на экран, ждем вашего хода и пишем в тот же файл.
HgLab: Mercurial Server and Repository Management for Windows
Re[3]: Сетевые крестики-нолики
От: SergH Россия  
Дата: 22.03.05 09:34
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Да в цикле файл читается. Если там все еще записан ваш ход, то ничего не делаем. Если не ваш, то выводим ход на экран, ждем вашего хода и пишем в тот же файл.


Это понятно Непонятно, как в DOS получить доступ к файлу по сети.
Делай что должно, и будь что будет
Re[4]: Сетевые крестики-нолики
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 22.03.05 10:23
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, Нахлобуч, Вы писали:


Н>>Да в цикле файл читается. Если там все еще записан ваш ход, то ничего не делаем. Если не ваш, то выводим ход на экран, ждем вашего хода и пишем в тот же файл.


SH>Это понятно Непонятно, как в DOS получить доступ к файлу по сети.


А это все на расшаренном диске происходит — он один на всех
HgLab: Mercurial Server and Repository Management for Windows
Re[4]: Сетевые крестики-нолики
От: Аноним  
Дата: 22.03.05 10:30
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, Нахлобуч, Вы писали:


SH>Это понятно Непонятно, как в DOS получить доступ к файлу по сети.


Там нетварь, видимо.
Re[5]: Сетевые крестики-нолики
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 22.03.05 10:33
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, SergH, Вы писали:


SH>>Здравствуйте, Нахлобуч, Вы писали:


SH>>Это понятно Непонятно, как в DOS получить доступ к файлу по сети.


А>Там нетварь, видимо.


Ага
HgLab: Mercurial Server and Repository Management for Windows
Re[6]: Сетевые крестики-нолики
От: Кодёнок  
Дата: 22.03.05 10:43
Оценка:
У меня друг "сетевой чат" на том же принципе сделал в школе.
Re[7]: Сетевые крестики-нолики
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 22.03.05 10:50
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>У меня друг "сетевой чат" на том же принципе сделал в школе.


А как номер школы?
HgLab: Mercurial Server and Repository Management for Windows
Re[8]: Сетевые крестики-нолики
От: Кодёнок  
Дата: 22.03.05 11:30
Оценка:
Кё>>У меня друг "сетевой чат" на том же принципе сделал в школе.

Н>А как номер школы?


Росийско-Американский Профессиональный Лицей (№11)
Re[9]: Сетевые крестики-нолики
От: spbnt  
Дата: 22.03.05 13:10
Оценка:
Здравствуйте, Кодёнок, Вы писали:
Кё>Росийско-Американский Профессиональный Лицей (№11)

ОФФ: Меня всегда интересовало, что же там такого американского в этих всех совместных школах и лицеях? То что она русская я понимаю, а вот что там от америки? Стиль преподавания, или школьная программа из США импортирована?
Re[10]: Сетевые крестики-нолики
От: poilk  
Дата: 22.03.05 15:52
Оценка:
Здравствуйте, spbnt, Вы писали:

S>Здравствуйте, Кодёнок, Вы писали:

Кё>>Росийско-Американский Профессиональный Лицей (№11)

S>ОФФ: Меня всегда интересовало, что же там такого американского в этих всех совместных школах и лицеях? То что она русская я понимаю, а вот что там от америки? Стиль преподавания, или школьная программа из США импортирована?


Может быть бабки? Т.е. baksy?
Re: CS2d
От: Lunik Россия  
Дата: 22.03.05 17:29
Оценка:
раз уж такое дело...
я когда ещё в школе учился, вот такое чудо сделал
заруба была в него на уроках.
это типа Counter Strike 2D для сети, должен быть общий сетевой диск.
ЗЫ у меня почемуто с недавнего времени перестало под XP работать,
---
Lunik
Re[10]: Сетевые крестики-нолики
От: Кодёнок  
Дата: 23.03.05 05:11
Оценка:
Кё>>Российско-Американский Профессиональный Лицей (№11)

S>ОФФ: Меня всегда интересовало, что же там такого американского в этих всех совместных школах и лицеях? То что она русская я понимаю, а вот что там от америки? Стиль преподавания, или школьная программа из США импортирована?


В те времена этот лицей дружил с каким-то аналогичным заведением в Огайо и группы студентов каждый год ездили отсюда туда и наоборот. Плюс отдельные гости. Плюс преподавание английского лучше чем в школе (на самом деле, ненамного ) Сейчас все кончилось и его переименовали в Технико-Экономический Проф. Лицей.

А преподавание там как в универе, по парам. Программа общеобразовательная + допольнительные предметы, у нас иначе нельзя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.