Lab4
This commit is contained in:
164
Lab4/Lab4-1.cpp
Normal file
164
Lab4/Lab4-1.cpp
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
#include <conio.h>
|
||||||
|
#include <dos.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define LEFT_ARROW 'K'
|
||||||
|
#define RIGHT_ARROW 'M'
|
||||||
|
#define ESC 27
|
||||||
|
|
||||||
|
const int x1 = 10;
|
||||||
|
const int y1 = 10;
|
||||||
|
const int x2 = 70;
|
||||||
|
const int y2 = 20;
|
||||||
|
|
||||||
|
class Slider
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int x, y;
|
||||||
|
public:
|
||||||
|
Slider();
|
||||||
|
void moveLeft();
|
||||||
|
void moveRight();
|
||||||
|
int getX();
|
||||||
|
int getY();
|
||||||
|
} slider;
|
||||||
|
|
||||||
|
int Slider::getX()
|
||||||
|
{
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Slider::getY()
|
||||||
|
{
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
Slider::Slider()
|
||||||
|
{
|
||||||
|
x = 0;
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Slider::moveLeft()
|
||||||
|
{
|
||||||
|
if(x>0)
|
||||||
|
x--;
|
||||||
|
else if(y>0)
|
||||||
|
{
|
||||||
|
x = 59;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Slider::moveRight()
|
||||||
|
{
|
||||||
|
if((y < 10 && x < 60) || (y == 10 && x < 59))
|
||||||
|
x++;
|
||||||
|
else if(y<10)
|
||||||
|
{
|
||||||
|
x = 0;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Scene
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int width, height;
|
||||||
|
char* screen;
|
||||||
|
public:
|
||||||
|
Scene(int, int, int, int);
|
||||||
|
void render(Slider);
|
||||||
|
} scene = Scene(x1,y1,x2,y2);
|
||||||
|
|
||||||
|
Scene::Scene(int x1, int y1, int x2, int y2)
|
||||||
|
{
|
||||||
|
width = x2 - x1 + 1;
|
||||||
|
height = y2 - y1 + 1;
|
||||||
|
screen = new char[width * height];
|
||||||
|
screen[width * height - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
void Scene::render(Slider slider)
|
||||||
|
{
|
||||||
|
clrscr();
|
||||||
|
for(int i = 0; i < width; i++)
|
||||||
|
for(int j = 0; j < height; j++)
|
||||||
|
{
|
||||||
|
char texel = ' ';
|
||||||
|
if(slider.getX() == i && slider.getY() == j)
|
||||||
|
texel = '*';
|
||||||
|
screen[i + j * width] = texel;
|
||||||
|
}
|
||||||
|
screen[width * height - 1] = '\0';
|
||||||
|
cprintf(screen);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Side
|
||||||
|
{
|
||||||
|
LEFT, RIGHT, HOLD
|
||||||
|
};
|
||||||
|
|
||||||
|
void outputGreeting()
|
||||||
|
{
|
||||||
|
printf("Program allows to move character using left and right arrows.\n");
|
||||||
|
printf("Motion is permanent.\n");
|
||||||
|
printf("Use ESC button to stop program.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void goToNextLine()
|
||||||
|
{
|
||||||
|
cprintf("\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
int lastKey;
|
||||||
|
int state = 1;
|
||||||
|
Side side = HOLD;
|
||||||
|
while(state)
|
||||||
|
{
|
||||||
|
delay(30);
|
||||||
|
if(kbhit())
|
||||||
|
switch(getch())
|
||||||
|
{
|
||||||
|
case RIGHT_ARROW:
|
||||||
|
side = RIGHT;
|
||||||
|
break;
|
||||||
|
case LEFT_ARROW:
|
||||||
|
side = LEFT;
|
||||||
|
break;
|
||||||
|
case ESC:
|
||||||
|
state = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch(side)
|
||||||
|
{
|
||||||
|
case RIGHT:
|
||||||
|
slider.moveRight();
|
||||||
|
break;
|
||||||
|
case LEFT:
|
||||||
|
slider.moveLeft();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
scene.render(slider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
clrscr();
|
||||||
|
outputGreeting();
|
||||||
|
system("PAUSE");
|
||||||
|
|
||||||
|
window(x1,y1,x2,y2);
|
||||||
|
scene.render(slider);
|
||||||
|
|
||||||
|
loop();
|
||||||
|
|
||||||
|
goToNextLine();
|
||||||
|
system("PAUSE");
|
||||||
|
clrscr();
|
||||||
|
}
|
||||||
175
Lab4/Lab4-2.cpp
Normal file
175
Lab4/Lab4-2.cpp
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
#include <conio.h>
|
||||||
|
#include <dos.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <bios.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define LEFT_ARROW 75
|
||||||
|
#define RIGHT_ARROW 77
|
||||||
|
#define ESC 27
|
||||||
|
|
||||||
|
const int x1 = 10;
|
||||||
|
const int y1 = 10;
|
||||||
|
const int x2 = 70;
|
||||||
|
const int y2 = 20;
|
||||||
|
|
||||||
|
class Slider
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int x, y;
|
||||||
|
public:
|
||||||
|
Slider();
|
||||||
|
void moveLeft();
|
||||||
|
void moveRight();
|
||||||
|
int getX();
|
||||||
|
int getY();
|
||||||
|
} slider;
|
||||||
|
|
||||||
|
int Slider::getX()
|
||||||
|
{
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Slider::getY()
|
||||||
|
{
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
Slider::Slider()
|
||||||
|
{
|
||||||
|
x = 0;
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Slider::moveLeft()
|
||||||
|
{
|
||||||
|
if(x>0)
|
||||||
|
x--;
|
||||||
|
else if(y>0)
|
||||||
|
{
|
||||||
|
x = 59;
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Slider::moveRight()
|
||||||
|
{
|
||||||
|
if((y < 10 && x < 60) || (y == 10 && x < 59))
|
||||||
|
x++;
|
||||||
|
else if(y<10)
|
||||||
|
{
|
||||||
|
x = 0;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Scene
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int width, height;
|
||||||
|
char* screen;
|
||||||
|
public:
|
||||||
|
Scene(int, int, int, int);
|
||||||
|
void render(Slider);
|
||||||
|
} scene = Scene(x1,y1,x2,y2);
|
||||||
|
|
||||||
|
Scene::Scene(int x1, int y1, int x2, int y2)
|
||||||
|
{
|
||||||
|
width = x2 - x1 + 1;
|
||||||
|
height = y2 - y1 + 1;
|
||||||
|
screen = new char[width * height];
|
||||||
|
screen[width * height - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
void Scene::render(Slider slider)
|
||||||
|
{
|
||||||
|
clrscr();
|
||||||
|
for(int i = 0; i < width; i++)
|
||||||
|
for(int j = 0; j < height; j++)
|
||||||
|
{
|
||||||
|
char texel = ' ';
|
||||||
|
if(slider.getX() == i && slider.getY() == j)
|
||||||
|
texel = '*';
|
||||||
|
screen[i + j * width] = texel;
|
||||||
|
}
|
||||||
|
screen[width * height - 1] = '\0';
|
||||||
|
cprintf(screen);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Side
|
||||||
|
{
|
||||||
|
LEFT, RIGHT, HOLD
|
||||||
|
};
|
||||||
|
|
||||||
|
void outputGreeting()
|
||||||
|
{
|
||||||
|
printf("Program allows to move character using left and right arrows.\n");
|
||||||
|
printf("Motion is permanent.\n");
|
||||||
|
printf("Use ESC button to stop program.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void goToNextLine()
|
||||||
|
{
|
||||||
|
cprintf("\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
char getKey()
|
||||||
|
{
|
||||||
|
union REGS r;
|
||||||
|
r.h.ah = 0x6;
|
||||||
|
r.h.dl = 0xff;
|
||||||
|
int86(0x21,&r,&r);
|
||||||
|
return r.h.al;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
int state = 1;
|
||||||
|
Side side = HOLD;
|
||||||
|
char lastKey;
|
||||||
|
|
||||||
|
while(state)
|
||||||
|
{
|
||||||
|
delay(30);
|
||||||
|
lastKey = getKey();
|
||||||
|
switch(lastKey)
|
||||||
|
{
|
||||||
|
case RIGHT_ARROW:
|
||||||
|
side = RIGHT;
|
||||||
|
break;
|
||||||
|
case LEFT_ARROW:
|
||||||
|
side = LEFT;
|
||||||
|
break;
|
||||||
|
case ESC:
|
||||||
|
state = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch(side)
|
||||||
|
{
|
||||||
|
case RIGHT:
|
||||||
|
slider.moveRight();
|
||||||
|
break;
|
||||||
|
case LEFT:
|
||||||
|
slider.moveLeft();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
scene.render(slider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
clrscr();
|
||||||
|
outputGreeting();
|
||||||
|
system("PAUSE");
|
||||||
|
|
||||||
|
window(x1,y1,x2,y2);
|
||||||
|
scene.render(slider);
|
||||||
|
|
||||||
|
loop();
|
||||||
|
|
||||||
|
goToNextLine();
|
||||||
|
system("PAUSE");
|
||||||
|
clrscr();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user