PASCAL单元常见过程调用
及小游戏编程方法设计
写本文的目的是教大家如何使用PASCAL单元来设计更好的程序界面和人机控制,本文不涉及算法,谢谢。
在文本VGA模式下,屏幕的位置分成25行,每行80个字符。
1:光标定位过程:(CRT单元)
Procedure Gotoxy(X,Y:byte);
把光标移到第X列,Y行的位置。注意X,Y的顺序是先列后行,与我们常说的第几行第几列的习惯相反。
屏幕左上角第一个位置是gotoxy(1,1);
屏幕右下角最后一个位置是gotoxy(80,25);
当光标移动后,后面write(),writeln()代码都是从当前位置输出。
例:
Var
I:integer;
begin
Fori:=1 to 25 do
begin
Gotoxy(1,i);
Write(‘AAAAA’);
End;
End.
上面的程序,就是把光标移到每行的第一个位置,然后输出’AAAAA’字符串。
2:得到当前光标位置:(CRT单元)
Function whereX: byte ; 得到当前光标位置的列;
Function whereY: byte ; 得到当前光标位置的行;
例:
gotoxy(1,1); //光标移到屏幕第1列第1行
write('AAAAA'); //输出字符串
write(wherex,' ',wherey); //当前光标的位置,输出了6,1,代表是第6列第1行
gotoxy(1,10); //光标移到屏幕第1列第10行
writeln('AAAAA'); //输出字符串
write(wherex,' ',wherey); //当前光标的位置,输出了1,11,代表是第1列第11行
明显可以看出,writeln输出后,屏幕的光标位置自动移到下一行的起点,这就是换行。
再看一个屏幕滚屏的特殊例子
gotoxy(80,25);
writeln('AAAAA');
write(wherex,' ',wherey);
在第25行80列输出一个’AAAAA’的串,当前光标是多少?
屏幕最后一个位置,输出一个A后,屏幕没有位置了,怎么办?
屏幕会往上滚屏,也就是整个屏幕上移一行,多出一个空行。
所以第24行80列显示一个’A’
所以第25行会出现‘AAAA’
此时再来一个writeln换行,屏幕再滚一行。
此时的屏幕上显示,
所以第23行80列显示一个’A’
所以第24行1列会出现‘AAAA’
最后的光标移动仍然是停在第25行第1列。
综合上述,在文本模式下,在第25行80列输出一个字符后,会导致屏幕往上滚一行,这会引起设计好的程序界面出现上滚一行的现象。至于怎么解决,大家自己想。
3:改变文字背景颜色,文字颜色:(CRT单元)
Procedure textbackground(color:byte); 设置将要输出的文字背景颜色
Procedure textcolor(color:byte);设置将要输出的文字字体颜色
在crt单元中,已经设置了很多颜色常量,但是我们可以直接用0-15的数字,比打那些英文更方便。
Const
Black=0; 黑色
Blue =1; 蓝色
Green=2; 绿色
Cyan=3; 青绿色
Red =4; 红色
Magenta=5; 洋红色
Brown=6; 褐色
Lightgray=7; 浅灰
Darkgray=8; 深灰
Lightblue=9 深蓝
Lightgreen=10; 深绿
Lightcyan=11; 深青绿
Lightred=12; 深红
Lightmagenta=13; 深洋红
Yellow=14; 黄色
White=15; 白色
先发个例题:
uses crt;
var
i,j:integer;
procedure color(i,j:integer);
begin
textbackground(i); //设置背景色
textcolor(j); //设置文字颜色
end;
begin
fori:=0 to 15 do //背景色从0-15
begin
for j:=0 to 15 do //文字色从0-15
begin
color(i,j); //设置当前文字颜色
write('ABCD'); // 输出’ABCD’
end;
writeln;
end;
end.
//当输出的字符是空格串时,屏幕上显示的就是一个背景色的小方块。
begin
color(0,7);
clrscr;
fori:=0 to 15 do
begin
for j:=0 to 15 do
begin
color(j,15); //改变背景色
write(' '); //输出空格串
end;
writeln;
end;
end.
仔细看上面的背景色,从0-7,从8-15其实是一样的。
4:清除屏幕,清除行尾文字:(CRT单元)
Procedure clrscr; 清除整个屏幕,清除后,整个屏幕的颜色,就是文字的背景色
Procedure clreol;清除光标当前行的位置,到行的末尾,也就是第80列为止。
例:
uses crt;
var
i,j,k:integer;
ch:char;
procedure color(i,j:integer);
begin
textbackground(i);
textcolor(j);
end;
begin
fori:=0 to 15 do
begin
color(i,i); //设置颜色
clrscr; //清屏
ch:=readkey; //按任意键
end;
end.
未完待续 2015/01/19
及小游戏编程方法设计
写本文的目的是教大家如何使用PASCAL单元来设计更好的程序界面和人机控制,本文不涉及算法,谢谢。
在文本VGA模式下,屏幕的位置分成25行,每行80个字符。
1:光标定位过程:(CRT单元)
Procedure Gotoxy(X,Y:byte);
把光标移到第X列,Y行的位置。注意X,Y的顺序是先列后行,与我们常说的第几行第几列的习惯相反。
屏幕左上角第一个位置是gotoxy(1,1);
屏幕右下角最后一个位置是gotoxy(80,25);
当光标移动后,后面write(),writeln()代码都是从当前位置输出。
例:
Var
I:integer;
begin
Fori:=1 to 25 do
begin
Gotoxy(1,i);
Write(‘AAAAA’);
End;
End.
上面的程序,就是把光标移到每行的第一个位置,然后输出’AAAAA’字符串。
2:得到当前光标位置:(CRT单元)
Function whereX: byte ; 得到当前光标位置的列;
Function whereY: byte ; 得到当前光标位置的行;
例:
gotoxy(1,1); //光标移到屏幕第1列第1行
write('AAAAA'); //输出字符串
write(wherex,' ',wherey); //当前光标的位置,输出了6,1,代表是第6列第1行
gotoxy(1,10); //光标移到屏幕第1列第10行
writeln('AAAAA'); //输出字符串
write(wherex,' ',wherey); //当前光标的位置,输出了1,11,代表是第1列第11行
明显可以看出,writeln输出后,屏幕的光标位置自动移到下一行的起点,这就是换行。
再看一个屏幕滚屏的特殊例子
gotoxy(80,25);
writeln('AAAAA');
write(wherex,' ',wherey);
在第25行80列输出一个’AAAAA’的串,当前光标是多少?
屏幕最后一个位置,输出一个A后,屏幕没有位置了,怎么办?
屏幕会往上滚屏,也就是整个屏幕上移一行,多出一个空行。
所以第24行80列显示一个’A’
所以第25行会出现‘AAAA’
此时再来一个writeln换行,屏幕再滚一行。
此时的屏幕上显示,
所以第23行80列显示一个’A’
所以第24行1列会出现‘AAAA’
最后的光标移动仍然是停在第25行第1列。
综合上述,在文本模式下,在第25行80列输出一个字符后,会导致屏幕往上滚一行,这会引起设计好的程序界面出现上滚一行的现象。至于怎么解决,大家自己想。
3:改变文字背景颜色,文字颜色:(CRT单元)
Procedure textbackground(color:byte); 设置将要输出的文字背景颜色
Procedure textcolor(color:byte);设置将要输出的文字字体颜色
在crt单元中,已经设置了很多颜色常量,但是我们可以直接用0-15的数字,比打那些英文更方便。
Const
Black=0; 黑色
Blue =1; 蓝色
Green=2; 绿色
Cyan=3; 青绿色
Red =4; 红色
Magenta=5; 洋红色
Brown=6; 褐色
Lightgray=7; 浅灰
Darkgray=8; 深灰
Lightblue=9 深蓝
Lightgreen=10; 深绿
Lightcyan=11; 深青绿
Lightred=12; 深红
Lightmagenta=13; 深洋红
Yellow=14; 黄色
White=15; 白色
先发个例题:
uses crt;
var
i,j:integer;
procedure color(i,j:integer);
begin
textbackground(i); //设置背景色
textcolor(j); //设置文字颜色
end;
begin
fori:=0 to 15 do //背景色从0-15
begin
for j:=0 to 15 do //文字色从0-15
begin
color(i,j); //设置当前文字颜色
write('ABCD'); // 输出’ABCD’
end;
writeln;
end;
end.
//当输出的字符是空格串时,屏幕上显示的就是一个背景色的小方块。
begin
color(0,7);
clrscr;
fori:=0 to 15 do
begin
for j:=0 to 15 do
begin
color(j,15); //改变背景色
write(' '); //输出空格串
end;
writeln;
end;
end.
仔细看上面的背景色,从0-7,从8-15其实是一样的。
4:清除屏幕,清除行尾文字:(CRT单元)
Procedure clrscr; 清除整个屏幕,清除后,整个屏幕的颜色,就是文字的背景色
Procedure clreol;清除光标当前行的位置,到行的末尾,也就是第80列为止。
例:
uses crt;
var
i,j,k:integer;
ch:char;
procedure color(i,j:integer);
begin
textbackground(i);
textcolor(j);
end;
begin
fori:=0 to 15 do
begin
color(i,i); //设置颜色
clrscr; //清屏
ch:=readkey; //按任意键
end;
end.
未完待续 2015/01/19