Обсуждение Программирование на C/C++

Re: Программирование на C/C++
2 KoT 6ereMoT
Одна из идей. Карты игрока, колода карт, карты на столе - это всё 3 двумерных булевских(а можно даже int-овых не важно, использовать как булевские) массива 4x13. Таким образом сложение и вычитание колод будет сводиться к объединению этих массивов различными булевскими операциями (&, |, ^). И в принципе можно даже сделать одномерный массив из 52 элементов, идея та же.
 
Re: Программирование на C/C++
2 KoT 6ereMoT
Одна из идей. Карты игрока, колода карт, карты на столе - это всё 3 двумерных булевских(а можно даже int-овых не важно, использовать как булевские) массива 4x13. Таким образом сложение и вычитание колод будет сводиться к объединению этих массивов различными булевскими операциями (&, |, ^). И в принципе можно даже сделать одномерный массив из 52 элементов, идея та же.
Немного недопонял, это же битовые операторы (&, |, ^, ~, >>, <<), как их применять будем? Ну, а с одномерным массивом в общем правильно, чо мудрить. Рандомим число, берём карту из колоды, обнуляем элемент массива (карты в колоде уже нет), снова рандом, новая карточка на столе, в колоде ноль.
А вот как определять комбинации - у меня это пока самый тяжёлый момент.
 
Re: Программирование на C/C++
Ну да, надо логические, но это не суть. Суть в том, что если надо из колоды1 добавить карты в колоду2, делаем в цикле колода2 = колода1 || колода2, если нужно убрать карты из колоды2, то колода2 = колода2 && !колода1 (естественно, там будет цикл, а не простое присваивание).
Определять комбинации была бы проблема, если бы всё хранилось в виде массива строк. А так очень просто.
Например, определение флеша:
Код:
    int PlayerCards[4][13] = {{0,0,1,0,1,0,0,1,0,1,1,0,0}, //буби
                                {0,0,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} //пики
                                };
    for(int i = 0;i < 4;i++)
    {
        int flashCards = 0;
        for(int j = 0; j < 13;j++)
        {
            flashCards += PlayerCards[i][j];
        }
        if (flashCards >= 5)
        {
            printf("FLASH FOUND\r\n");
            break;
        }
    }
 
Re: Программирование на C/C++
Получаю изображение с помощью StretchBlt и передаю по сокету в другую программу. В итоге с цветами не лады, видимо там ргб в другой последовательности. Вопрос: как можно быстро поменять местами ргб байты? Проходить циклом по всему массиву не хочется, нужна максимальная производительность
 
Re: Программирование на C/C++
2Vad
Если переводить в байтовый массив с помощью GetDiBits, а потом выполнять обратное преобразование с помощью SetDIBits проблем быть не должно.
 
Re: Программирование на C/C++
Подскажите пожалуйста, как быстро снять скриншот с экрана или окна
Задача такая: снять скриншот, масштабировать, передать
StretchBlt дает всего 5 кадров в секунду, в идеале нужно 30

Вот например тот же фрапс пишет видео с экрана в реальном времени
 
Re: Программирование на C/C++
Хочется реализовать такое (с 30 секунды):


Нашел screen capture recorder с сорцами. Он как-то через кодеки работает, гляну
 

martynov55

Ословед
Re: Программирование на C/C++
Привет всем, хотел спросить, как считывать инфу из поля edit построково, нашол метод cin.getline(str, 1024, '\n');, но хз как его присобачить к edit.
Вообщем решил проблему просто поиском '\n' и '\r'
 
Re: Программирование на C/C++
Привет всем, хотел спросить, как считывать инфу из поля edit построково, нашол метод cin.getline(str, 1024, '\n');, но хз как его присобачить к edit.
Вообщем решил проблему просто поиском '\n' и '\r'

PHP:
hEdit = GetDlgItem(hWnd, IDC_EDIT1);
lpBuf = (LPWSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 255*sizeof(WCHAR));
GetWindowText(hEdit, lpBuf,255);

Ну а дальше, разбиваешь текст на строки, и погнали=)
 

SunnyMan

Namynnuz
Re: Программирование на C/C++
Возможно, потому что в функцию в принципе нельзя передать исключительно тип? И... Это точно функция, а не ее прототип?
 
Re: Программирование на C/C++
Возможно, потому что в функцию в принципе нельзя передать исключительно тип? И... Это точно функция, а не ее прототип?
Да это прототип
Мышку наведи на подчеркнутое и поймешь.
Я оказался прав насчет std::move
 
Re: Программирование на C/C++
Возможно, потому что в функцию в принципе нельзя передать исключительно тип? И... Это точно функция, а не ее прототип?
Да это прототип
Мышку наведи на подчеркнутое и поймешь.
Я оказался прав насчет std::move
Не помогло, я еще новичок, но помоему я же использовал пространство имен std ? (using namespace std )
 

SunnyMan

Namynnuz
Re: Программирование на C/C++
Именно из-за using твой кастомный класс move и std::move находятся в одной области видимости.
 
Re: Программирование на C/C++
Здравствуйте, вот такой вот вопрос, создаю я объект ну допустим t34, запихиваю в переменные координаты x = 0 и y = 0 , так проблема вот в чем, когда я вызываю метод move_tank, в нем изменяются переменные x и y объекта, потом при следующем вызове этого метода, у переменных x и y значения выставляются по умолчанию(которые задавал при создании объекта) почему так?
Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>


using namespace std;


class tank
{
private:
    int x,y;
    char symbol;
public:
    tank(int a, int b, char c) : x(a), y(b), symbol(c) {}
    void move_tank(int);
};


char map[15][20];


void render();
void init_game();
int input(tank);
void ai(tank);


int main()
{
    tank t34(0,0,'T');
    tank t52(4,5,'Y');
    init_game();
    render();
    int e = 0;
    while(1)
    {
        e = input(t34);
        if(e == 1)
            break;
        ai(t52);
    }
    return 0;
}


void tank::move_tank(int ch)
{
    
    switch(ch)
    {
        case 72:
            if(x > 0)
            {
                map[x][y] = ' ';
                x--;
                map[x][y] = symbol;
            }
            break;
        case 80:
            if(x < 14)
            {
                map[x][y] = ' ';
                x++;
                map[x][y] = symbol;
            }
            break;
        case 75:
            if(y > 0)
            {
                map[x][y] = ' ';
                y--;
                map[x][y] = symbol;
            }
            break;
        case 77:
            if(y < 19)
            {
                map[x][y] = ' ';
                y++;
                map[x][y] = symbol;
            }
            break;
    }
    
    render();
}
void render()
{
    system("cls");
    for(int i = 0; i < 15; i++)
    {
        for(int j = 0; j < 20; j++)
        {
            cout<<map[i][j];
        }
        cout<<endl;
    }
}
void init_game()
{
    for(int i = 0; i < 15; i++)
    {
        for(int j = 0; j < 20; j++)
        {
            map[i][j] = ' ';
        }
    }
    map[0][0] = 'T';
    map[4][5] = 'Y';
}
void ai(tank t)
{
    int rnd = rand()%4;
    switch(rnd)
    {
    case 0:
        t.move_tank(72);
        break;
    case 1:
        t.move_tank(75);
        break;
    case 2:
        t.move_tank(80);
        break;
    case 3:
        t.move_tank(77);
        break;
    }
}
int input(tank t)
{
    int e = 0;
    char act = _getch();
    int ch = static_cast<int>(act);
    if(ch == 72 || ch == 75 || ch == 80 || ch == 77)
        t.move_tank(ch);
    else if(ch == -32)
        input(t);
    else if(ch == 27)
        return e = 1;
}
 

Yanus Odron

Ословед
Re: Программирование на C/C++
Здравствуйте, вот такой вот вопрос, создаю я объект ну допустим t34, запихиваю в переменные координаты x = 0 и y = 0 , так проблема вот в чем, когда я вызываю метод move_tank, в нем изменяются переменные x и y объекта, потом при следующем вызове этого метода, у переменных x и y значения выставляются по умолчанию(которые задавал при создании объекта) почему так?
Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>


using namespace std;


class tank
{
private:
    int x,y;
    char symbol;
public:
    tank(int a, int b, char c) : x(a), y(b), symbol(c) {}
    void move_tank(int);
};


char map[15][20];


void render();
void init_game();
int input(tank);
void ai(tank);


int main()
{
    tank t34(0,0,'T');
    tank t52(4,5,'Y');
    init_game();
    render();
    int e = 0;
    while(1)
    {
        e = input(t34);
        if(e == 1)
            break;
        ai(t52);
    }
    return 0;
}


void tank::move_tank(int ch)
{
    
    switch(ch)
    {
        case 72:
            if(x > 0)
            {
                map[x][y] = ' ';
                x--;
                map[x][y] = symbol;
            }
            break;
        case 80:
            if(x < 14)
            {
                map[x][y] = ' ';
                x++;
                map[x][y] = symbol;
            }
            break;
        case 75:
            if(y > 0)
            {
                map[x][y] = ' ';
                y--;
                map[x][y] = symbol;
            }
            break;
        case 77:
            if(y < 19)
            {
                map[x][y] = ' ';
                y++;
                map[x][y] = symbol;
            }
            break;
    }
    
    render();
}
void render()
{
    system("cls");
    for(int i = 0; i < 15; i++)
    {
        for(int j = 0; j < 20; j++)
        {
            cout<<map[i][j];
        }
        cout<<endl;
    }
}
void init_game()
{
    for(int i = 0; i < 15; i++)
    {
        for(int j = 0; j < 20; j++)
        {
            map[i][j] = ' ';
        }
    }
    map[0][0] = 'T';
    map[4][5] = 'Y';
}
void ai(tank t)
{
    int rnd = rand()%4;
    switch(rnd)
    {
    case 0:
        t.move_tank(72);
        break;
    case 1:
        t.move_tank(75);
        break;
    case 2:
        t.move_tank(80);
        break;
    case 3:
        t.move_tank(77);
        break;
    }
}
int input(tank t)
{
    int e = 0;
    char act = _getch();
    int ch = static_cast<int>(act);
    if(ch == 72 || ch == 75 || ch == 80 || ch == 77)
        t.move_tank(ch);
    else if(ch == -32)
        input(t);
    else if(ch == 27)
        return e = 1;
}

попробуйте использовать в классе tank другие название переменных, да и вообще, в среде разработки по любому есть пошаговая отладка, и можно про прыгать все участки кода, и найти где в переменную записывается значение
 
Сверху