Режим чтения 0a

Тема в разделе "Общие вопросы по С и С++", создана пользователем BattleMage, 8 ноя 2007.

  1. BattleMage

    BattleMage Гость

    Ещё раз добрый день. Подскажите пожалуйста,что я тут не так делаю. Понимаю, что в чужих кодах разбираться нелегко, но все же... Задача такая. Экран состоит из четырех прямогульников разных цветов. Пользователь вводит координату точки (x,y) и должен вывести цвет той точки, которую он выбрал. ФУнкцию getpixel() или как она там называется не предлагать...

    код такой:
    Код (Text):
    #include<stdio.h>
    #include<conio.h>
    #include<dos.h>
    #include<stdlib.h>
    #include<graphics.h>

    void main()
    {
    unsigned int x,y;
    printf("Введите координаты:");
    scanf("%d %d",&x,&y);
    if ((x<0)||(x>640)||(y<0)||(y>480))
    {
    printf("Ошибка! Некорректные координаты!");
    getch();
    return;
    }
    else
    {
    clrscr();
    int gdriver = DETECT, gmode, errorcode;
    initgraph(&gdriver, &gmode, "d:\\BC\\BGI");
    errorcode = graphresult();
    if (errorcode != grOk)
    {
    printf("Графическая ошибка: %s\nНажмите любую клавишу для выхода", grapherrormsg(errorcode));
    getch();
    return;
    }

    //1
    setfillstyle(1,1);
    bar(0,0,160,480);

    //2
    setfillstyle(1,2);
    bar(160,0,320,480);

    //3
    setfillstyle(1,4);
    bar(320,0,480,480);

    //4
    setfillstyle(1,14);
    bar(480,0,640,480);

    //MK_FP - это макроопределение, которое создаёт дальний указатель из адреса сегмента (seg) смещения (ofs)
    unsigned char far *mem = (char*)MK_FP(0xa000,0);
    unsigned int q;
    unsigned short w[4];
    unsigned short u;

    asm mov ax, 0x12
    //Десятое прерывание BIOS-а
    asm int 0x10

    //регистр графического режима
    outp(0x3CE, 0x5);
    outp(0x3CF, 3);

    for(q=0;q<=(480*80);q++) *((unsigned char far*)mem+q)=255;
    //настраиваем видеокарту на режим чтения 0а
    outp(0x3CE, 0x5);
    outp(0x3CF, 0x0);
    for(u=0;u<=3;u++)
    {
    outp(0x3CE, 0x4);
    outp(0x3CF, u);
    w[u]=*((unsigned char far*)mem+y*80+x/8);
    }
    for(u=0;u<=3;u++) w[u]=w[u]>>7;
    if(w[0]==0 && w[1]==0 && w[2]==0 && w[3]==0) printf("\nЧёрный");
    if(w[0]==1 && w[1]==0 && w[2]==0 && w[3]==0) printf("\nСиний");
    if(w[0]==0 && w[1]==1 && w[2]==0 && w[3]==0) printf("\nЗелёный");
    if(w[0]==1 && w[1]==1 && w[2]==0 && w[3]==0) printf("\nЦиановый");
    if(w[0]==0 && w[1]==0 && w[2]==1 && w[3]==0) printf("\nКрасный");
    if(w[0]==1 && w[1]==0 && w[2]==1 && w[3]==0) printf("\nМалиновый");
    if(w[0]==0 && w[1]==1 && w[2]==1 && w[3]==0) printf("\nКоричневый");
    if(w[0]==1 && w[1]==1 && w[2]==1 && w[3]==0) printf("\nСветлый серый");
    if(w[0]==0 && w[1]==0 && w[2]==0 && w[3]==1) printf("\nТёмный серый");
    if(w[0]==1 && w[1]==0 && w[2]==0 && w[3]==1) printf("\nГолубой");
    if(w[0]==0 && w[1]==1 && w[2]==0 && w[3]==1) printf("\nСветлый зелёный");
    if(w[0]==1 && w[1]==1 && w[2]==0 && w[3]==1) printf("\nСветлый циановый");
    if(w[0]==0 && w[1]==0 && w[2]==1 && w[3]==1) printf("\nСветлый красный");
    if(w[0]==1 && w[1]==0 && w[2]==1 && w[3]==1) printf("\nСветлый малиновый");
    if(w[0]==0 && w[1]==1 && w[2]==1 && w[3]==1) printf("\nЖёлтый");
    if(w[0]==1 && w[1]==1 && w[2]==1 && w[3]==1) printf("\nБелый");
    getch();
    closegraph();
    return;
    }
    }
    Не обращайте внимания,что экран раскрашен всего в 4 цвета, а условий аж для 16-ти...
     
  2. BattleMage

    BattleMage Гость

    Мне кто-нить ответит? :)
     
  3. BattleMage

    BattleMage Гость

    Мне кто-нить ответит? :)
     
  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Хардкорных любителей ДОСовской графики еще поискать надо :)
     
  5. Pasha

    Pasha Гость

    Для: BattleMage
    У тебя не так много вариантов:
    1. Научится работать в видео через VESA, вкурить http://www.vesa.org/public/VBE/vbe3.pdf (вроде оно).
    2. Снять странное ограничение на getpixel.
     
  6. BattleMage

    BattleMage Гость

    думаете я сам себе задание такое придумал. в универе дали такое. и по vesa лабу будет и много чего ещё... и функция getpixel() - хероватая....
     
Загрузка...

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