Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Текст программы





/*------Лабораторная работа N7-----------------*/

/*-----Управление видеоадаптером.---------------*/

#include <dos.h>

 

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

/*--------------Константы----------------------- */

#define VSEG 0xb800 /* Сегментный адрес видеопамяти */

#define byte unsigned char

 

#define word unsigned int

#define Esc 27

#define Spase 32

#define Enter 13

#define Up 0x48

#define Down 0x50

#define Left 0x4b

#define Right 0x4d

#define Home 0x47

int xk,yk;

/*----Чтение символа из видеопамяти-------------*/

byte GetSym(x1,y1)

int x1,y1;

{

return(peekb(VSEG,y1*160+x1*2));

}

/*---Чтение атрибута из видеопамяти-------------*/

byte GetAtr(x1,y1)

int x1,y1;

{

return(peekb(VSEG,y1*160+x1*2+1));

}

/*---Запись символа в видеопамять--------------*/

void PutSym(x1,y1,sym)

int x1,y1;

byte sym;

{

pokeb(VSEG,y1*160+x1*2,sym);

}

/*---Запись атрибута в видеопамять--------------*/

void PutAtr(x1,y1,atr)

int x1,y1;

byte atr;

{

pokeb(VSEG,y1*160+x1*2+1,atr);

}

/*--Инверсия квадрата на экране-----------------*/

void Invert(x1,y1)

int x1,y1;

{

byte b;

int i,j;

for (j=0;j<5;j++)

for (i=0;i<10;i++)

{

b=GetAtr(x1*10+i,y1*5+j);

PutAtr(x1*10+i,y1*5+j,(b^0x7f));

}

}

/*--Замена текущего квадрата на левый верхний--*/

void Change(x,y)

byte x,y;

{

int i,j;

byte ba,bs;

if ((x!=0)||(y!=0))

for (j=0;j<5;j++)

for (i=0;i<10;i++)

{

bs=GetSym(x*10+i,y*5+j);

ba=GetAtr(x*10+i,y*5+j);

PutSym(x*10+i,y*5+j,GetSym(i,j));

PutAtr(x*10+i,y*5+j,GetAtr(i,j));

PutSym(i,j,bs);

PutAtr(i,j,ba);

}

}

/*--Перемешивание квадратов до нажатия клавиши-*/

void RandText(void)

{

Invert(xk,yk);

xk=5;

yk=1;

while(!kbhit())

{

Change(xk,yk);

xk++;

if (xk>7) xk=0;

yk++;

if (yk>4) yk=0;

}

Invert(xk,yk);

}

/*-----Начало основной программы---------------*/

main(int argn,char *argc[])

{

int i;

 

xk=0;

yk=0;

if (argn>1){}

else /* Если параметров нет, вывод инструкции */

{

textattr(10);

clrscr();

cprintf("---------------");

cprintf(" Лабораторная работа N7 ");

cprintf("---------------");

cprintf("---------------");

cprintf(" Управление видеоадаптером. ");

cprintf("---------------");

textattr(15);

gotoxy(23,4);cprintf("Демонстрация работы с видеопамятью.");

textattr(12);

gotoxy(30,6);cprintf("<< М О З А И К А >>");

textattr(14);

gotoxy(30,8);cprintf("Клавиши управления:");

gotoxy(7,10);cprintf("< Left, Right, Up, Down> — ");

cprintf("управление выделенним квадратом.");

gotoxy(7,11);cprintf("<Spase Bar> — Обмен содержимым ");

cprintf("между выделенным квадратом");

gotoxy(7,12);cprintf(" и левым верхним");

cprintf(" квадратом.");

gotoxy(7,13);cprintf("<Enter> — перемешивание квадратов");

cprintf(" до нажатия любой клавиши.");

gotoxy(7,14);cprintf("<Esc> — вихiд.");

textattr(11);

gotoxy(28,16);cprintf("З А Д А Ч А И Г Р Ы:");

gotoxy(14,17);cprintf("Собрать при помощи клавиш ");

cprintf("управления начальный экран.");

textattr(12);

gotoxy(27,19);cprintf("Ж е л а е м у с п е х а!");

textattr(7);

gotoxy(1,21);cprintf("Примечание: При запуске с ");

cprintf("параметром <->");

gotoxy(13,22);cprintf("начальным экраном для игры ");

cprintf("является текущий.");

}

Invert(xk,yk);

for(i=0;i==0;)

switch(getch())

{ /* Обработка нажатых клавиш */

case Esc: i++; break;

case Enter:RandText();break;

case Spase:Invert(xk,yk);

 

Change(xk,yk);

Invert(xk,yk);

break;

case 0:

switch (getch()) {

case Left:Invert(xk,yk);

xk--;

if(xk<0) xk=7;

Invert(xk,yk);

break;

case Right:Invert(xk,yk);

xk++;

if(xk>7) xk=0;

Invert(xk,yk);

break;

case Up:Invert(xk,yk);

yk--;

if(yk<0) yk=4;

Invert(xk,yk);

break;

case Down:Invert(xk,yk);

yk++;

if(yk>4) yk=0;

Invert(xk,yk);

break;

}

}

Invert(xk,yk);

}







Date: 2015-05-22; view: 484; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию