XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Трактир
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Dragon27

offline
Опыт: 6,779
Активность:
Xenosapien, а ты пробовал?
Старый 13.09.2008, 03:09
NETRAT

offline
Опыт: 83,712
Активность:
Насколько я помню, перегружать его можно как угодно в пределах класса функций с двумя параметрами.
Старый 13.09.2008, 17:13
Dragon27

offline
Опыт: 6,779
Активность:
А не с двумя разве нельзя?
Старый 13.09.2008, 17:43
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
Драхон, если тебе нечего сказать, то не флуди в топике, плз. Во всяком случае, твой первый камент заставляет задуматся о твоей способности логически мыслить.
Старый 14.09.2008, 23:10
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
Вопрос появился. Я хочу использовать графику на срр для иллюстрации результатов работы, проблема с выводом на экран. После компиляции- черный пустой фуллскрин. Пробовал найти решение трабла в инете, графический режим в options включен, директории прописаны правильно, в BGI есть EGAVGA.BGI, путь к драйверу int gdriver = DETECT, gmode, errorcode; ... компилятор Borland C++ for DOS 3.1
Старый 19.10.2008, 23:48
HGL
Phased out.
offline
Опыт: 25,976
Активность:
фтопку модуль graphics.h! пиши свой.

HGL добавил:
принцип работы следующий:

1) вместо всех этих детектграфов-инитграфов пишешь
Код:
asm {
MOV AX, 13h
INT 0x10
}

(вроде так, а ваще хз)
2) потом переменную
Код:
unsigned char far *screen = (unsigned char far*) MK_FP(0xA000, 0);

3) потом чтобы нарисовать пиксел
Код:
screen[x+y*320] = color;

(вроде так)
4) и чтобы залить экран
Код:
_fmemset(screen, color, 64000);

color - unsigned char =)

Вот если я нигде не ошибся, это должно очень ило работать, потом можешь создать второй массив типа "виртуальный экран" на него рисовать а потом разом пихать на экран "реальный" командой _fmemcpy .

Такой метод рисования гораздо быстрее борландовской фигни, плюс тебе не нужен файл .BGI.

Одна проблема - все процедуры и функции, вроде рисования линий и заливок, придётся писать вручную.
У меня где-то были, но искать щас некогда...

ВотЪ
Старый 20.10.2008, 08:44
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
Большое спасибо. Мне совсем не приходило в голову написать чтото свое. Теперь по крайней мере я знаю в каком направлении работать)
Старый 20.10.2008, 22:00
HGL
Phased out.
offline
Опыт: 25,976
Активность:
незачто только я ошибся там вместо 13h надо 0x13 в начале =) просто первое - для паскаля, второе для с++ я недавно детишкам на паскале объяснял вот и спутал
Старый 20.10.2008, 22:36
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
Твой пример я ниасилил (выдает ошибку процессора), нашел в инете по сабжу такую прогу: должна залить экран определенным цветом и провести две диагонали.

Код:
#include<mem.h>
#include<stdio.h>
#include<conio.h>

unsigned char far buffer[200][320];

int main(void)
{
int i;
unsigned char far *vmem=(unsigned char far*)0xA0000000;
_asm{
mov ax,0x13
int 0x10
}
_fmemset(buffer,0x02,64000);
for(i=0;i<200;i++)
buffer[i][i]=buffer[i][319-i]=0x04;
_fmemcpy(vmem,buffer,320*200);
getch();
_asm{
mov ax,0x03
int 0x10
}
return 0;
}


Как и следовало ожидать, не работает. Могу только гадать в чем проблема, я вобще только когда начал набирать твой пример понял что то ассемблер) Иначе я б так не радовался. Ошибка в обеих случаях аналогична:
Миниатюры
Кликните на картинку для увеличения
Название:  wtf.JPG
Просмотров: 23
Размер:  15.5 Кбайт  
Старый 21.10.2008, 23:09
ScorpioT1000
Работаем
offline
Опыт: отключен
Код:
#include "mem.h" //и ятп надо его подрубить ибо у мня этого не оказалось
#include <stdio.h>
#include <conio.h>

unsigned char far buffer[200][320];

int main(void) {
    int i;
    unsigned char far *vmem=(unsigned char far*)0xA0000000;
    _asm{
        mov ax,0x13
        int 0x10
    }
    _fmemset(buffer,0x02,64000);
    for(i=0;i<200;i++)
        buffer[i]=buffer[i][319-i]=0x04;
    _fmemcpy(vmem,buffer,320*200);
    getch();
    _asm{
        mov ax,0x03
        int 0x10
    }
    return 0;
}


требует mem.h http://www.graphviz.org/pub/graphviz/development/doxygen/html/mem_8h-source.html

[i]ScorpioT1000 добавил:

или я чтото не то делаю, ибо там 16бит проект надо=\

Отредактировано ScorpioT1000, 21.10.2008 в 23:47.
Старый 21.10.2008, 23:47
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
Цитата:
Сообщение от ScorpioT1000
требует mem.h

Ты имеешь ввиду, что у меня нет файла mem.h? Если так, то в инклудах он лежит... правда, его содержимое не очень-то напоминает то на что ты дал ссыль.

Мб надо запускать через какойто эмулятор доса?
Старый 21.10.2008, 23:52
HGL
Phased out.
offline
Опыт: 25,976
Активность:
о! я нашёл какуюто старую версию модуля своего!
Код:
#include <dos.h>
#include <iostream.h>
#include <stdlib.h>

#define VIDEO_SEGMENT 0xA000
#define SCREEN_WIDTH 320


typedef struct {

unsigned char Red, Green, Blue;

} TRGBColors;

typedef TRGBColors TRGBPalette[255];

TRGBPalette rgbpMain;

void SetPalette (TRGBPalette Pal)

{

outportb(0x3C8, 0);

for (int i=0; i <= 255; i++)

{

outportb(0x3C9, Pal[ i].Red);
outportb(0x3C9, Pal[ i].Green);
outportb(0x3C9, Pal[ i].Blue);

}

}

void SetMode13h (void)

{

_AH = 0;
_AL = 0x13;
geninterrupt (0x10);

}

void SetTextMode (void)

{

_AH = 0;
_AL = 0x03;
geninterrupt (0x10);

}

void PutPixel (int x, int y, unsigned char color)

{

if

(
(x>=0)&&
(x<SCREEN_WIDTH)&&
(y>=0)&&
(y<200)
) { pokeb (VIDEO_SEGMENT, (y * SCREEN_WIDTH) + x, color); };

}




это собсна модуль. сохрани его как DISGRAPH.CPP

потом прога для тестирования


Код:
#include "DISGRAPH.CPP"
#include <math.h>
#include <conio.h>


int DrawStyle = 1;


int ymo (void)

{

unsigned int w;

asm {

mov ax,3
int 0x33
mov [w],dx

}

return w;

}


int xmo (void)

{

unsigned int w;

asm {

mov ax,3
int 0x33
mov [w],cx

}

return w;

}

unsigned char far virtscreen[64000];

unsigned char far *screen = (unsigned char far*) MK_FP(0xA000, 0);


void PutPixelV(int x, int y, unsigned char c)

{

if

(
(x>=0)&&
(x<SCREEN_WIDTH)&&
(y>=0)&&
(y<200)
) { virtscreen[x+y*320] = c; };

}

unsigned char GetPixelV(int x, int y)

{

if

(
(x>=0)&&
(x<SCREEN_WIDTH)&&
(y>=0)&&
(y<200)
) { return virtscreen[x+y*320]; };

return 0;



}


void FillVirtScreen(unsigned char c)

{

for (int x = 0; x <= 319; x++)
for (int y = 0; y <= 199; y++)

{

PutPixelV(x,y,c);

}


}

void CopyVirtScreen(void)

{

if (DrawStyle==1){

for (int x = 0; x <= 319; x++)
for (int y = 0; y <= 199; y++)

{

PutPixel(x,y,virtscreen[x+y*320]);

} }

else

{

_fmemcpy(screen, virtscreen, 320*200);

}



}

typedef struct

{

int x, y;

unsigned char depth;

} TParticle;

TParticle Particlez[1000];

void InitParticlez(void)

{

for (int i=0; i<=1000; i++)

{

Particlez[ i].x = random (319);

Particlez[ i].y = random (199) - 50;

Particlez[ i].depth = random(3)+1;

}

}

int pal = 0;

int SetPalB (void)

{

outportb(0x3C8, 0);

for (int i=0; i <= 255; i++)

{

outportb(0x3C9, i+2);
outportb(0x3C9, i+2);
outportb(0x3C9, i+2);

}

pal = 1;

return 0;

}


int SetPalW (void)

{

outportb(0x3C8, 0);

for (int i=0; i <= 255; i++)

{

outportb(0x3C9, 255-i-2);
outportb(0x3C9, 255-i-2);
outportb(0x3C9, 255-i-2);

}

pal = 2;

}

void MoveParticlez(void)

{

for (int i=0; i<=1000; i++)

{

Particlez[ i].x += random (3) -1;

Particlez[ i].y += random(Particlez[ i].depth-1)+1;

if (Particlez[ i].y >= 199) {Particlez[ i].y=0;}

}

}

void DrawParticlez(void)

{



for (int i=0; i<=1000; i++)

{

PutPixelV(Particlez[i ].x, Particlez[i ].y, Particlez[i ].depth*10);

}



}




int SwitchPalette(void)

{

return pal==1 ? SetPalW():SetPalB();

}





int main(void)

{

SetMode13h();

FillVirtScreen(0);

InitParticlez();

SetPalB();


int n=1;

int DoSlow=1;

while(1)

{

n += 1;

if ((n==3)||(!DoSlow)){ MoveParticlez();n=1;};

FillVirtScreen(0);

DrawParticlez();

CopyVirtScreen();

if (kbhit()!=0)

{

unsigned char c = getch();

if (c == 27) {break;};

if (char(c) == '1') {SwitchPalette();}

// if (char(c) == '3') {DoSlow = !DoSlow;}

if (char(c) == '2') {DrawStyle = !DrawStyle;}

}


}

SetTextMode();

return 0;

}


насчёт проги я не уверен, но модуль ДОЛЖЕН работать. потому что я его из файла скопировал. и он у меня работал.
если у тебя и сейчас будет выскакивать та же ошибка - проблема в твоём компе =)

HGL добавил:
оО слушай а ведь точно - если ты ввёл только
asm {
mov ax, 0x13
int 0x10
}
и у тебя выскочила та ошибка - у тя комп такой. потому что тут НЕТ ошибки xD

HGL добавил:
да вот то же самое но какбы без ассемблера =)
Код:
_AH = 0;
_AL = 0x13;
geninterrupt (0x10);
Старый 22.10.2008, 00:01
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
Цитата:
Сообщение от HGL
оО слушай а ведь точно - если ты ввёл только
asm {
mov ax, 0x13
int 0x10
}
и у тебя выскочила та ошибка - у тя комп такой. потому что тут НЕТ ошибки xD

Сразу бы так и сказал) Это наверно такой тонкий намек от компа чтоб я не дергался и игрался в наш любимый варик) Ррр...

Xenosapien добавил:
Кстати, это идея. Можно отдалить в эдиторе камеру так чтоб угол обзора перпендикулярно и карта помещалась на один экран, и спокойно выводить нужные мне графики на карту обьектами. И даже можно взять карту побольше, чтоб написать команды для приближения и отдаления камеры, типа масштаб. А если учитывать возможность присвоения обьектам каких угодно необходимых мне свойств, то в будущем смогу в варе хоть динамические цепи второго порядка расчитывать, с наглядной демонстрацией процесса. Ой-е, меня понесло. Даешь worldedit как универсальную среду разработки учебных программ!!!

Отредактировано Xenosapien, 22.10.2008 в 02:25.
Старый 22.10.2008, 00:52
HGL
Phased out.
offline
Опыт: 25,976
Активность:
ну... ну это уже совсем изврат =)
Старый 23.10.2008, 17:59
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
Скажите, может ли поток быть членом класса?
Старый 24.12.2008, 23:17
NETRAT

offline
Опыт: 83,712
Активность:
расшифруй что значит "членом класса" - экземпляр класса (да, конечно) или свойством класса - обьектом, принадлежащим классу (да, конечно) или че-то еще
Старый 25.12.2008, 00:09
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
private членом класса, я имел ввиду.

Xenosapien добавил:
точнее полем класса)
Старый 25.12.2008, 00:51
NETRAT

offline
Опыт: 83,712
Активность:
чет ты путаешься в определениях
почему нет? вообще поток - обьект созданный ОС и доступ мы к нему имеем исключительно по хэндлю, т.о. в конструкторе/деструкторе класса его придется создавать и освобождать
Старый 26.12.2008, 15:11
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
А как правильно обьявлять поток в классе? Например, мне достаточно просто обьявить
class A{
private:
ofstream ofs;
...};
, и я получаю еррор при попытке запуска программы.
если я добавляю в конструктор/деструктор
A::A()
{...
ofs.open("file");}
и
A::A()
{...
ofs.сlose();}
то получаю все тот же еррор. Я явно гдето ошибаюсь.
Старый 12.01.2009, 23:44
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 03:33.