打印一个框,可以在平面内任意移动,并且要控制框中的一个坐标点,让它不能移动到框的外面
2014-12-02 15:24
169 查看
开发环境:ubuntu 12.04
开发工具:gcc编译器 ,vim编辑器
功能:
打印一个框,可以在平面内任意移动,并且要控制框中的一个坐标点,让它不能移动到框的外面
作用:
可以用作技术培训哈
#include
#include
#include
#include
typedef struct object OBJ;
struct object
{
int px;
int py;
char c;
};
int Y,X,Origin_X,Origin_Y; //X Y 分别为边框的大小,Origin_X,Oigin_Y为原点坐标
struct termios old_setting;
void background_set(void);
void game1(void);
void obj_printf1(OBJ *p);
void obj_printf2(OBJ *p);
int term_set();
int term_reset();
void main(void)
{
int flag;
printf("Input the mode : ");
scanf("%d",&flag);
getchar();
if(flag==1)
game1();
}
void background_set(void)
{
// static int L,W;
printf("输入边框的大小:\n\n");
printf("横长X=");
scanf("%d",&X);
getchar();
printf("竖长Y=");
scanf("%d",&Y);
getchar();
printf("\n\n");
printf("输入边框原点坐标:\n\n");
printf("Origin_X= ");
scanf("%d",&Origin_X);
getchar();
printf("\nOrigin_Y= ");
scanf("%d",&Origin_Y);
getchar();
printf("\n\n");
}
void game1(void)
{
OBJ *ptr1;
int c;
background_set();
OBJ obj={Origin_X+5,Origin_Y+5,'*'};
ptr1=&obj;
system("clear");
obj_printf2(ptr1); //打印框和设置的坐标点
// obj_printf1(ptr1);
printf("\n");
term_set();
for(;;)
{
c=getchar();
// getchar();
//移动设置的点,保证它不移动到框外
if( (c=='w') && ( ptr1->py > 1+Origin_Y ) ) ptr1->py--;
else if( (c=='s') && ( ptr1->py < Y-2) ) ptr1->py++;
else if( (c=='a') && ( ptr1->px > 1+Origin_X ) ) ptr1->px--;
else if( (c=='d') && ( ptr1->px < X-2) ) ptr1->px++;
system("clear");
obj_printf2(ptr1);
// obj_printf1(ptr1);
}
term_reset();
}
void obj_printf2(OBJ *p)
{
int i,j,k;
for(i=0;i
{
for(j=0;j
{
if( ( i==Origin_Y&&j>=Origin_X ) || ( i==Y-1 && (j>=Origin_X) ) || ( j==Origin_X && i>=Origin_Y ) || ( j==X-1 && i>=Origin_Y) )// || (j==10) || (j==X+9) )
printf("*");
else if( (i==p->py) && (j==p->px) ) printf("*");
else printf(" ");
// printf("\n");
}
printf("\n");
//if( i == p->px - 1 ) printf("*");
}
// for(i=0;ipy;i++)
// printf("");
}
void obj_printf1(OBJ *p)
{
int i;
for(i=0;ipy;i++)
printf("\n");
for(i=0;ipx;i++)
printf(" ");
printf("%c",p->c);
}
//设置终端输入不带回显,并且每次按键都进行反馈
int term_set()
{
struct termios new_setting;
tcgetattr(fileno(stdin),&old_setting);
new_setting = old_setting;
new_setting.c_lflag &=~ECHO;
new_setting.c_lflag &=~(ICANON|ECHO);
new_setting.c_cc[VMIN]=1;
new_setting.c_cc[VTIME]=0;
return tcsetattr(fileno(stdin),TCSAFLUSH,&new_setting);
}
int term_reset()
{
return tcsetattr(fileno(stdin),TCSANOW,&old_setting);
}
本人原创
欢迎交流
qq:920052390
欢迎与本人交流
新浪博客:http://blog.sina.com.cn/u/2049150530
csdn博客:http://blog.csdn.net/u011749143
博客园:http://www.cnblogs.com/sky-heaven/
新浪微博:张昺华--sky
开发工具:gcc编译器 ,vim编辑器
功能:
打印一个框,可以在平面内任意移动,并且要控制框中的一个坐标点,让它不能移动到框的外面
作用:
可以用作技术培训哈
#include
#include
#include
#include
typedef struct object OBJ;
struct object
{
int px;
int py;
char c;
};
int Y,X,Origin_X,Origin_Y; //X Y 分别为边框的大小,Origin_X,Oigin_Y为原点坐标
struct termios old_setting;
void background_set(void);
void game1(void);
void obj_printf1(OBJ *p);
void obj_printf2(OBJ *p);
int term_set();
int term_reset();
void main(void)
{
int flag;
printf("Input the mode : ");
scanf("%d",&flag);
getchar();
if(flag==1)
game1();
}
void background_set(void)
{
// static int L,W;
printf("输入边框的大小:\n\n");
printf("横长X=");
scanf("%d",&X);
getchar();
printf("竖长Y=");
scanf("%d",&Y);
getchar();
printf("\n\n");
printf("输入边框原点坐标:\n\n");
printf("Origin_X= ");
scanf("%d",&Origin_X);
getchar();
printf("\nOrigin_Y= ");
scanf("%d",&Origin_Y);
getchar();
printf("\n\n");
}
void game1(void)
{
OBJ *ptr1;
int c;
background_set();
OBJ obj={Origin_X+5,Origin_Y+5,'*'};
ptr1=&obj;
system("clear");
obj_printf2(ptr1); //打印框和设置的坐标点
// obj_printf1(ptr1);
printf("\n");
term_set();
for(;;)
{
c=getchar();
// getchar();
//移动设置的点,保证它不移动到框外
if( (c=='w') && ( ptr1->py > 1+Origin_Y ) ) ptr1->py--;
else if( (c=='s') && ( ptr1->py < Y-2) ) ptr1->py++;
else if( (c=='a') && ( ptr1->px > 1+Origin_X ) ) ptr1->px--;
else if( (c=='d') && ( ptr1->px < X-2) ) ptr1->px++;
system("clear");
obj_printf2(ptr1);
// obj_printf1(ptr1);
}
term_reset();
}
void obj_printf2(OBJ *p)
{
int i,j,k;
for(i=0;i
{
for(j=0;j
{
if( ( i==Origin_Y&&j>=Origin_X ) || ( i==Y-1 && (j>=Origin_X) ) || ( j==Origin_X && i>=Origin_Y ) || ( j==X-1 && i>=Origin_Y) )// || (j==10) || (j==X+9) )
printf("*");
else if( (i==p->py) && (j==p->px) ) printf("*");
else printf(" ");
// printf("\n");
}
printf("\n");
//if( i == p->px - 1 ) printf("*");
}
// for(i=0;ipy;i++)
// printf("");
}
void obj_printf1(OBJ *p)
{
int i;
for(i=0;ipy;i++)
printf("\n");
for(i=0;ipx;i++)
printf(" ");
printf("%c",p->c);
}
//设置终端输入不带回显,并且每次按键都进行反馈
int term_set()
{
struct termios new_setting;
tcgetattr(fileno(stdin),&old_setting);
new_setting = old_setting;
new_setting.c_lflag &=~ECHO;
new_setting.c_lflag &=~(ICANON|ECHO);
new_setting.c_cc[VMIN]=1;
new_setting.c_cc[VTIME]=0;
return tcsetattr(fileno(stdin),TCSAFLUSH,&new_setting);
}
int term_reset()
{
return tcsetattr(fileno(stdin),TCSANOW,&old_setting);
}
本人原创
欢迎交流
qq:920052390
欢迎与本人交流
新浪博客:http://blog.sina.com.cn/u/2049150530
csdn博客:http://blog.csdn.net/u011749143
博客园:http://www.cnblogs.com/sky-heaven/
新浪微博:张昺华--sky
相关文章推荐
- 二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。 对于两个格子坐标(x1,y1),(x2,y2)的
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进
- 寒假的时候,小明同学要去拜访很多朋友,恰巧他所有朋友的家都处在坐标平面的X轴上。小明可以任意选择一个朋友的家开始访问,但是每次访问后他都必须回到出发点,然后才能去访问下一个朋友。
- 二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。 对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根 小易想知道最多可以放多少块蛋糕在网格盒子里。 输入描述: 每组数组包含网格长宽W,
- 在平面中,一个点绕任意点旋转θ度后的点的坐标
- 在Sprite 基础之上创建一个既可以控制移动,也可以动画的对象定义。
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- 如何判断任意四个点可以组成矩形及正方形 && 点绕另外一个点旋转后的坐标
- 利用Jqurey写一个输入内容增加并且可以删除,上下移动的标签
- 用CRectTracker绘制一个矩形区域,并且可以移动该矩形
- 二、给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指定的步长遍历地牢,要求每一步都不可以超过地牢的边界,也不能到达障碍上。地牢的出口可能在任意某个可以通行的位置上。牛牛想知道最坏情况下,他需要多少步才可以离开这个地牢。
- 验证任意一个大于4并且小于500的偶数都可以拆分成两个素数之和
- unity 让对象的任意一个方向(局部坐标)旋转来面对世界中任意一个点或移动的对象
- 程序有一个调用打印机的功能,在调试的时候可以用,用tomcat部署上去了之后就不能打印了····
- 算法实战:给定一个带通配符问号的数W,问号可以代表任意一个一位数字。 再给定一个整数X,和W具有同样的长度。 问有多少个整数符合W的形式并且比X大?
- 设计一个含有一个表单的页面,并且在表单上放入一个文本框。编写程序,当鼠标在页面上移动时,鼠标的坐标将显示在这个文本框中。
- 使用API实现的一个增加系统桌面,并且可以任意切换的小程序.
- 在平面中,一个点绕任意点旋转θ度后的点的坐标