Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2009, 20:57   #1
Nixtone
Пользователь
 
Регистрация: 16.10.2007
Сообщений: 17
По умолчанию C++ for DOS (задачка, граф.редактор)

Доброго времени суток всем читающим данный топик) У меня проблемка, есть исходник графического редактора на C++ под DOS, там необходимо поменять кисти в виде ромбиков на кисти в виде слешей "/" и "\" и ихже только в 2 раза меньше, т.е. там есть 4 кисти и надо написать другие 4 кисти в виде слешей. Помогите пожалуйста.

Исходник
PHP код:
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define GS 0xA000
#define KS 0x0040
char SCAN;
int l=0;

char my_getch ()
{
char CH;
while (
peek (KS0x1A) == peek (KS0x1C));
CH peekb (KSpeek (KS0x1A));
if (
CH==0)
SCAN peekb (KSpeek (KS0x1A)+1);
poke (KS0x1Apeek (KS0x1C));
return 
CH;
}

void MyFillScr (int xint yint x1,int y1char c)
{
int ij;
for (
i=xi<x1i++)
for (
j=yj<y1j++)
pokeb (GS, (320*j+i), c);
}

void save_f ()
{
char *FILE_NAME="C:risunok.bmp\0";
int FILE_HANDLE;
struct REGPACK regs;

regs.r_ax=0x3C00;
regs.r_cx=0x0000;
regs.r_ds=FP_SEG(FILE_NAME);
regs.r_dx=FP_OFF(FILE_NAME);
intr(0x21, &regs);
FILE_HANDLE=regs.r_ax;

regs.r_ax=0x4000;
regs.r_bx=FILE_HANDLE;
regs.r_cx=64000;
regs.r_ds=GS;
regs.r_dx=9920;
intr(0x21, &regs);

regs.r_ax=0x3E00;
regs.r_bx=FILE_HANDLE;
intr(0x21, &regs);
}

void open_f ()

{

char *FILE_NAME="C:risunok.bmp\0";
int FILE_HANDLE;
struct REGPACK regs;
regs.r_ax=0x3D00;
regs.r_cx=0x0000;
regs.r_ds=FP_SEG(FILE_NAME);
regs.r_dx=FP_OFF(FILE_NAME);
intr(0x21, &regs);

if (
regs.r_flags&0x0001!=0)
{return;}

FILE_HANDLE=regs.r_ax;

regs.r_ax=0x3F00;
regs.r_bx=FILE_HANDLE;
regs.r_cx=64000;
regs.r_ds=GS;
regs.r_dx=9920;

intr(0x21, &regs);

regs.r_ax=0x3E00;
regs.r_bx=FILE_HANDLE;
intr(0x21, &regs);
}


void MyLine (int x1int y1int x2int y2char c)
{
int xy;
float a;
if ( (
x2==x1) && (y2==y1) )
pokeb (GS, (320*y1+x1), c);
else
if ( 
abs(x2-x1) > abs(y2-y1) )
{
= (float)(y2-y1)/(x2-x1);
if (
x2 x1)
for (
x=x1x<=x2x++)
{
a*(x-x1) + y1;
pokeb (GS, (320*y+x), c);
}
else
for (
x=x1x>=x2x--)
{
a*(x-x1) + y1;
pokeb (GS, (320*y+x), c);
}
}
else
{
= (float)(x2-x1)/(y2-y1);
if (
y2 y1)
for (
y=y1y<=y2y++)
{
a*(y-y1) + x1;
pokeb (GS, (320*y+x), c);
}
else
for (
y=y1y>=y2y--)
{
a*(y-y1) + x1;
pokeb (GS, (320*y+x), c);
}
}
}

void OCHISTKA ()
 {
MyFillScr (0,30,320,200,0xF);}


void PERO_ROMB (int x2,int y2,int z,int c)
 {
int k;int i;int y3;int y1;
 
y1=y2-z;
 
y3=(y2-y1)/2+y1;
   for (
y1,k=0;y1<=y2;y1++)
    if (
y1<=y3) {
      for (
i=x2-k+1;i<=x2+k-1;i++)
    
pokeb (GS,320*y1+i,c);k++;}
        else 
        {
k--;
         for (
i=x2-k+2;i<=x2+k-2;i++)
         
pokeb(GS,320*y1+i,c);}}
 
         
void PERO_KRUG (float x1,int y2,int z,char c )
 {
int k;int i;int y1;int y3;
 
y1=y2-z;
  
y3=(y2-y1)/2+y1;
   for (
y1,k=1;y1<=y2;y1++)
     if (
y1<=y3)
    {  for (
i=x1-k;i<=x1+k;i+=2)
    
pokeb (GS,320*y1+i,c);k++;}
    else
    {
k--; for (i=x1-k+1;i<=x1+k-1;i+=2)
    
pokeb (GS,320*y1+i,c);}
 }

 
void main ()
{
char CH;
char COLOR;
int XY,cv=0x0,cvzal=0xF,P,cf;
union REGS regs;
int  v,u;


regs.h.ah 0x00;
regs.h.al 0x13;
int86 (0x10, &regs, &regs);
regs.x.ax 0x00;
int86 (0x33, &regs, &regs);
if (
regs.x.ax == 0)
printf ("%s""\nNo Mouse detected\n");
my_getch ();
MyFillScr (0,31,320,200,0xF);//фон экрана
MyFillScr (0,0,32030,0x9);//фон меню
MyFillScr (3,3,13,13,0xF);//кнопка сохр
MyLine (4,4,11,4,0x0);    
MyLine (4,7,11,7,0x0);   
MyLine (4,10,11,10,0x0);   
MyLine (13,8,18,8,0x0);   
MyLine (13,8,15,10,0x0);   
MyLine (13,8,15,6,0x0); 

MyFillScr (3,16,13,26,0xF);//кнопка откр
MyLine (417,1117,0x0);    
MyLine (420,1120,0x0);   
MyLine (423,1123,0x0);   
MyLine (13,21,18,21,0x0);   
MyLine (18,21,1623,0x0);   
MyLine (1619,1821,0x0); 
Nixtone вне форума Ответить с цитированием
Старый 18.05.2009, 20:58   #2
Nixtone
Пользователь
 
Регистрация: 16.10.2007
Сообщений: 17
По умолчанию

PHP код:
MyFillScr (22,3,35,13,0xF);//кнопка очистки экрана

MyFillScr (38,3,51,13,0xF);//кнопка заливки экрана

MyFillScr (22,16,51,26,0xF);//кнопка рисования 
MyLine (24,21,4821,0x0); //линии   
//палитра
MyFillScr (55,3,65,13,0x0);
MyFillScr (67,3,77,13,0xB);
MyFillScr (79,3,89,13,0x3);
MyFillScr (91,3,101,13,0xD);
MyFillScr (103,3,113,13,0x5);
MyFillScr (115,3,125,13,0x1);
MyFillScr (55,16,65,26,0xC);
MyFillScr (67,16,77,26,0x6);
MyFillScr (79,16,89,26,0xE);
MyFillScr (91,16,101,26,0x7);
MyFillScr (103,16,113,26,0xF);
MyFillScr (115,16,125,26,0x4);

//перо
MyFillScr (135,6,195,21,0xF);
PERO_ROMB(142,16,6,0x0);
PERO_ROMB(154,18,10,0x0);
PERO_KRUG(166,15,4,0x0);
PERO_KRUG(179,17,8,0x0);
MyLine (230,6,250,6,0xF);  
MyLine (230,20,250,20,0xF);
MyLine (230,6,230,20,0xF);
MyLine (250,6,250,20,0xF);
pokeb (GS,320*13+240,0xF);
//стерка
MyLine (200,6,220,6,0xF);  
MyLine (200,20,220,20,0xF);
MyLine (200,6,200,20,0xF);
MyLine (220,6,220,20,0xF);
 
PERO_ROMB(210,16,6,0xF);

 
//кнопка закрытия
MyFillScr (310,0,320,10,0x4);
MyLine (311,0,319,8,0xF);       
MyLine (311,8,319,0,0xF);


regs.x.ax 0x01;
int86 (0x33, &regs, &regs);
while (
1==1)
{
regs.x.ax 0x03;
int86 (0x33, &regs, &regs);

if (
regs.x.bx==0x01)
{
regs.x.cx/2regs.x.dx;
if (
310<=&& X<=320 && 0<=&& Y<=10) break;


if (
139<=&& X<=144 && 10<=&& Y<=16P=1;     //pero
if (149<=&& X<=159 && 8<=&& Y<=18P=2;
if (
163<=&& X<=169 && 11<=&& Y<=15P=3;
if (
175<=&& X<=183 && 9<=&& Y<=17P=4;
if (
230<=&& X<=250 && 7<=&& Y<=19P=5;
if (
207<=&& X<=212 && 10<=&& Y<=16cv=0xF;  //sterka
//Цвета
if (55<=&& X<=65 && 3<=&& Y<=13)
cv=0x0;}
if (
67<=&& X<=77 && 3<=&& Y<=13)
{
cv=0xB;}
if (
79<=&& X<=89 && 3<=&& Y<=13)
{
cv=0x3;}
if (
91<=&& X<=101 && 3<=&& Y<=13)
{
cv=0xD;}
if (
103<=&& X<=113 && 3<=&& Y<=13)
{
cv=0x5;}
if (
115<=&& X<=125 && 3<=&& Y<=13)
{
cv=0x1;}
if (
55<=&& X<=65 && 16<=&& Y<=26)
{
cv=0xC;}
if (
67<=&& X<=77 && 16<=&& Y<=26)
{
cv=0x6;}
if (
79<=&& X<=89 && 16<=&& Y<=26)
{
cv=0xE;}
if (
91<=&& X<=101 && 16<=&& Y<=26)
{
cv=0x7;}
if (
103<=&& X<=113 && 16<=&& Y<=26)
{
cv=0xF;}
if (
115<=&& X<=125 && 16<=&& Y<=26)
{
cv=0x4;}
//очистка
if (22<=&& X<=35 && 3<=&& Y<13)
{
MyFillScr (0,31320200,0xF);} 

if (
3<=&& X<=13 && 3<=&& Y<=13) {save_f();}//сохранение в файл
if (3<=&& X<=13 && 16<=&& Y<=26) {open_f();}//открытие из файла
if (38<=&& X<=51 && 3<=&& Y<=13){MyFillScr (0,31,320,200,cvzal);}//заливка экрана
if (24<=&& X<=51 &&16<=&& Y<=26){MyLine (110,100,190,100,0x0);}//рисование линии
 
if (8<=&& X<=313 && 41<=&& Y<=200)
{
if (
P==1PERO_ROMB(X,Y,6,cv);
if (
P==2PERO_ROMB(X,Y,10,cv);
if (
P==3PERO_KRUG(X,Y-1,4,cv);
if (
P==4PERO_KRUG(X,Y-1,8,cv);
if (
P==5pokeb (GS,320*(Y-1)+(X-1),cv);
 }
}
if (
regs.x.bx==0x02)//Правая кнопка мыши
{regs.x.cx/2regs.x.dx;
//Цвета
if (55<=&& X<=65 && 3<=&& Y<=13)
cvzal=0x0;MyFillScr (38,3,51,13,cvzal);}
if (
67<=&& X<=77 && 3<=&& Y<=13)
{
cvzal=0xB;MyFillScr (38,3,51,13,cvzal);}
if (
79<=&& X<=89 && 3<=&& Y<=13)
{
cvzal=0x3;MyFillScr (38,3,51,13,cvzal);}
if (
91<=&& X<=101 && 3<=&& Y<=13)
{
cvzal=0xD;MyFillScr (38,3,51,13,cvzal);}
if (
103<=&& X<=113 && 3<=&& Y<=13)
{
cvzal=0x5;MyFillScr (38,3,51,13,cvzal);}
if (
115<=&& X<=125 && 3<=&& Y<=13)
{
cvzal=0x1;MyFillScr (38,3,51,13,cvzal);}
if (
55<=&& X<=65 && 16<=&& Y<=26)
{
cvzal=0xC;MyFillScr (38,3,51,13,cvzal);}
if (
67<=&& X<=77 && 16<=&& Y<=26)
{
cvzal=0x6;MyFillScr (38,3,51,13,cvzal);}
if (
79<=&& X<=89 && 16<=&& Y<=26)
{
cvzal=0xE;MyFillScr (38,3,51,13,cvzal);}
if (
91<=&& X<=101 && 16<=&& Y<=26)
{
cvzal=0x7;MyFillScr (38,3,51,13,cvzal);}
if (
103<=&& X<=113 && 16<=&& Y<=26)
{
cvzal=0xF;MyFillScr (38,3,51,13,cvzal);}
if (
115<=&& X<=125 && 16<=&& Y<=26)
{
cvzal=0x4;MyFillScr (38,3,51,13,cvzal);}


regs.h.ah 0x00;
  
regs.h.al 0x03;      // Текстовый режим 
  
int86 (0x10, &regs, &regs);  

Nixtone вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
граф де Брейна ne11son Помощь студентам 6 11.11.2011 01:58
Граф в Delphi Римма1990 Помощь студентам 0 20.04.2009 20:53
Задача на граф kopzone Помощь студентам 5 27.07.2008 23:14
Граф в паскале LLIypLLIyH Помощь студентам 10 16.06.2008 14:09
Граф в Делфи консоль LLIypLLIyH Помощь студентам 6 12.06.2008 18:20