level 11
先确认会用到的关键字和函数:
int, void, clrscr();, printf, gotoxy, while, if, else if, for, switch, case, getch…应该差不多了。
由上可知需要选用stdio.h和conio.h两个头文件。
2016年08月05日 13点08分
3
level 11
//头文件调用申明
#include <stdio.h>
#include <conio.h>
2016年08月05日 13点08分
4
level 11
//全局变量申明
int x,y,xx,yy,key,mode,lost_key;
2016年08月05日 13点08分
5
level 11
//程序部分规划为3部分
menu();
void huihua();
void help();
2016年08月05日 13点08分
6
level 11
//main
int main(){
mode=2;//默认选项所在行数
menu();
}
2016年08月05日 13点08分
7
level 11
void menu(){
x=9,y=mode,mode=y;
//x=9是因为“1.绘图”这些文字占用了8格,故箭头在9格处绘制.
//y=2是因为“[Menu]”占据了第一行,为了有效,应指在2~3行,默认第二行(选项1)
clrscr();//清屏
printf("\e[0m\033[?25l");//恢复默认颜色,然后隐藏光标
printf(" [Menu]\n");
printf(" 1.绘图\n");
printf(" 2.帮助\n");
printf("UP:2 DOWN:8 确认:回车");
while (1){//箭头循环操作
gotoxy(x,y);
printf("<");
key=getch();
if (key == '2'){
if (y>2){//防止箭头跑出去
gotoxy(x,y);
printf(" ");
y--;
}
}
else if (key == '8'){
if (y<3){//防止箭头跑出去
gotoxy(x,y);
printf(" ");
y++;
}
}
else if (key == '\n'){
if (y==2){
mode=2;//记忆位置
huihua();
}
else if (y==3){
mode=3;//记忆位置
help();
}
}
}
}
2016年08月05日 13点08分
8
level 11
void huihua(){
x=2;y=2;
int i,cr=37,high_light=0,cur_display=1;
clrscr();
printf("\e[?25h");
printf("[画布尺寸]\n");
printf("宽:");
scanf("%d", &xx);
printf("长:");
scanf("%d", &yy);
clrscr();
xx=xx+1;yy=yy+1;//适应框
//绘制框。//原理:空格反色
printf("\e[7m");//反色
for (i=1;i<=xx+1;i++){
gotoxy(i,1);
printf(" ");
}
for (i=2;i<yy+1;i++){
gotoxy(1,i);
printf(" ");
gotoxy(xx+1,i);
printf(" ");
}
for (i=1;i<=xx+1;i++){
gotoxy(i,yy+1);
printf(" ");
}
printf("\e[0m");//恢复正常
2016年08月05日 13点08分
9
level 11
//绘画主程序
while (1) {
//高亮功能支持
if (high_light==1){
printf("\e[1m");
}
else if (high_light==0){
printf("\e[0m");
}
gotoxy(xx+1,yy+1);
printf("\e[%dm█",cr);//颜色状态显示
gotoxy(x, y);//在更改后移动光标
2016年08月05日 13点08分
10
level 11
int key = getch();//读取键位
//判断键位部分*逻辑
switch (key) {
case '2':
if (y > 2) {
y--;
}
break;
case '8':
if (y<yy){
y++;
}
break;
case '4':
if (x > 2) {
x--;
}
break;
case '6':
if (x<xx){
x++;
}
break;
case '5':
printf("o");
break;
case ' ':
printf(" ");
break;
case '0':
cr--;
if (cr==29){cr=37;}
break;
case ',':
high_light=1;
break;
case '.':
high_light=0;
break;
case '1':
if (x>2&&y>2){
x--;
y--;
}
break;
case '3':
if (x<xx&&y>2){
x++;
y--;
}
break;
case '7':
if (x>2&&y<yy){
x--;
y++;
}
break;
case '9':
if (x<xx&&y<yy){
x++;
y++;
}
break;
}
}
}
2016年08月05日 13点08分
11
level 11
void help(){
clrscr();
printf("\e[1;33m[Help]\e[0m\n");
printf("LEFT-UP:\e[1;32m1\e[0m RIGHT-UP:\e[1;32m3\e[0m\n");
printf("LEFT-DOWN:\e[1;32m7\e[0m RIGHT-DOWN:\e[1;32m9\e[0m\n");
printf("UP:\e[1;32m2\e[0m LEFT:\e[1;32m4\e[0m RIGHT:\e[1;32m6\e[0m DOWN:\e[1;32m8\e[0m\n");
printf("更改颜色:\e[1;32m0\e[0m 标记点:\e[1;32m5\e[0m 清除点:\e[1;32m空格\e[0m\n");
printf("开启高亮度标记模式:\e[1;32m,\e[0m 关闭高亮度标记模式:\e[1;32m.\e[0m\n");
printf("按\e[1;32m任意键返回Menu\e[0m…");
getch();
menu();
}
2016年08月05日 13点08分
12