void InitVideo()
{
asm {
mov ax,13h
int 10h
}
}
void DoneVideo()
{
asm {
mov ax,3
int 10h
}
}
void WaitKey()
{
asm {
xor ax,ax
int 16h
}
}
void PutPixel(int x, int y, char color);
char GetPixel(int x, int y);
void HorLine(int y, int x1, int x2, char color);
void MoveDown(int row);
void main()
{
InitVideo();
for(int i=0; i<200; i++)
HorLine(i,0,319,i%160);
WaitKey();
MoveDown(100);
WaitKey();
DoneVideo();
}
void PutPixel(int x, int y, char color)
{
char far *ptr=(char far *)0xA0000000;
ptr[x+y*320]=color;
}
char GetPixel(int x, int y)
{
char far *ptr=(char far *)0xA0000000;
return ptr[x+y*320];
}
void HorLine(int y, int x1, int x2, char color)
{
for(int i=x1; i<=x2; i++)
PutPixel(i,y,color);
}
void MoveDown(int row)
{
int j=0;
for(j=198; j>=row; j--)
for(int i=0; i<=319; i++)
{
char c=GetPixel(i, j);
PutPixel(i,j+1,c);
}
HorLine(row,0,319,0);
}
Видеопамять в BC++ 3.1
В кратце:
Необходимо вывести на экран несколько строк, а потом ввести номер строки и после стороки с этим номером сместить все остальные строки на одну вниз(увеличив адрес на 160) а в место откуда сдвигали вставить пустую строку. А вот оригинал задания:
[CENTER][SIZE="3"]«Непосредственная работа с экранной памятью»[/size] [/CENTER]Необходимо написать программу, в которой главная функция запрашивает необходимые данные, выполняет приготовления и вызывает функцию, выполняющую задание в соответствии с вариантом, а также при необходимости выводит результат.
Независимо от варианта к функции выдвигается ряд требований:
--она не должна содержать библиотечных функций экранного ввода-вывода
--все необходимые параметры она должна получать через список аргументов
--результат – возвращаемое значение или сохранен в массив, полученный в списке аргументов
Задание:
Написать аналог функции insline (номер строки – один из аргументов)
Вот... понял всё кроме "результат – возвращаемое значение или сохранен в массив, полученный в списке аргументов"... чё-т смысла мало наблюдаю...
Всё конечно путём, пример хороший, но это всё надо сделать в обычном текстовом режиме, а не графическом 320x200
Код:
#include <iostream.h>
void WaitKey();
void InitTextMode();
void Print(int x, int y, char color);
char GetAt(int x, int y);
void HorLine(int y, int x1, int x2, char color);
void MoveDown(int from);
void main()
{
InitTextMode();
int color=1;
for(int i=0; i<25; i++, color++)
HorLine(i, 0, 80, color%16);
int n;
cin >> n;
MoveDown(n);
WaitKey();
}
void WaitKey()
{
asm {
xor ax,ax
int 0x16
}
}
void InitTextMode()
{
asm {
mov ax,3
int 0x10
}
}
void Print(int x, int y, char color)
{
char far *ptr=(char far *)0xb8000000;
ptr[(x*2)+y*160]=219;
ptr[(x*2)+y*160+1]=color;
}
char GetAt(int x, int y)
{
char far *ptr=(char far *)0xb8000000;
return ptr[(x*2)+y*160+1];
}
void HorLine(int y, int x1, int x2, char color)
{
for(int i=x1; i<x2; i++)
Print(i, y, color);
}
void MoveDown(int from)
{
for(int i=23; i>=from; i--)
for(int j=0; j<80; j++)
Print(j, i+1, GetAt(j, i));
HorLine(from, 0, 80, 0);
}
void WaitKey();
void InitTextMode();
void Print(int x, int y, char color);
char GetAt(int x, int y);
void HorLine(int y, int x1, int x2, char color);
void MoveDown(int from);
void main()
{
InitTextMode();
int color=1;
for(int i=0; i<25; i++, color++)
HorLine(i, 0, 80, color%16);
int n;
cin >> n;
MoveDown(n);
WaitKey();
}
void WaitKey()
{
asm {
xor ax,ax
int 0x16
}
}
void InitTextMode()
{
asm {
mov ax,3
int 0x10
}
}
void Print(int x, int y, char color)
{
char far *ptr=(char far *)0xb8000000;
ptr[(x*2)+y*160]=219;
ptr[(x*2)+y*160+1]=color;
}
char GetAt(int x, int y)
{
char far *ptr=(char far *)0xb8000000;
return ptr[(x*2)+y*160+1];
}
void HorLine(int y, int x1, int x2, char color)
{
for(int i=x1; i<x2; i++)
Print(i, y, color);
}
void MoveDown(int from)
{
for(int i=23; i>=from; i--)
for(int j=0; j<80; j++)
Print(j, i+1, GetAt(j, i));
HorLine(from, 0, 80, 0);
}