下面是一个用C语言编写的 《笑脸碰边框反弹 》游戏(可在TC中很好运行),高手请看问题~~
#include<stdio.h>#include<bios.h>#include<conio.h>#defineUP0x4800#defineDOWN0x5000#de...
#include<stdio.h>
#include<bios.h>
#include<conio.h>
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 0x11b
void main()
{
int l=15,r=35,u=10,d=18,x,y,key;
void frame(int,int,int,int);
void move(int,int *,int *,int *,int *,int *,int *);
clrscr();
x=(l+r)/2;
y=(u+d)/2;
textcolor(YELLOW);
frame(l,r,u,d);
gotoxy(x,y);
cprintf("%c",1);
key=bioskey(0);
while(key!=ESC)
{
move(key,&x,&y,&l,&r,&u,&d);
key=bioskey(0);
}
}
void frame(int l,int r,int u,int d)
{
int i;
for(i=l;i<r+1;i++)
{
gotoxy(i,u);
printf("%c",219);
gotoxy(i,d);
printf("%c",219);
}
for(i=u+1;i<d+1;i++)
{
gotoxy(l,i);
printf("%c",219);
gotoxy(r,i);
printf("%c",219);
}
}
void move(int key,int *x,int *y,int *l,int *r,int *u,int *d)
{
gotoxy(*x,*y);
putchar(32);
if(key==UP)
{
if(*y==*u+1)*y=*d-1;
else (*y)--;
}
if(key==DOWN)
{
if(*y==*d-1)*y=*u+1;
else (*y)++;
}
if(key==LEFT)
{
if(*x==*l+1)*x=*r-1;
else (*x)--;
}
if(key==RIGHT)
{
if(*x==*r-1)*x=*l+1;
else (*x)++;
}
gotoxy(*x,*y);
putchar(1);
}
这个程序没有注释,请高手加上注释和原理(详细点的),可供千万C爱好者学习, O(∩_∩)O谢谢~~
尤其是void frame(int l,int r,int u,int d)这个函数,难以理解,请更加详细点,谢谢~~ 展开
#include<bios.h>
#include<conio.h>
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 0x11b
void main()
{
int l=15,r=35,u=10,d=18,x,y,key;
void frame(int,int,int,int);
void move(int,int *,int *,int *,int *,int *,int *);
clrscr();
x=(l+r)/2;
y=(u+d)/2;
textcolor(YELLOW);
frame(l,r,u,d);
gotoxy(x,y);
cprintf("%c",1);
key=bioskey(0);
while(key!=ESC)
{
move(key,&x,&y,&l,&r,&u,&d);
key=bioskey(0);
}
}
void frame(int l,int r,int u,int d)
{
int i;
for(i=l;i<r+1;i++)
{
gotoxy(i,u);
printf("%c",219);
gotoxy(i,d);
printf("%c",219);
}
for(i=u+1;i<d+1;i++)
{
gotoxy(l,i);
printf("%c",219);
gotoxy(r,i);
printf("%c",219);
}
}
void move(int key,int *x,int *y,int *l,int *r,int *u,int *d)
{
gotoxy(*x,*y);
putchar(32);
if(key==UP)
{
if(*y==*u+1)*y=*d-1;
else (*y)--;
}
if(key==DOWN)
{
if(*y==*d-1)*y=*u+1;
else (*y)++;
}
if(key==LEFT)
{
if(*x==*l+1)*x=*r-1;
else (*x)--;
}
if(key==RIGHT)
{
if(*x==*r-1)*x=*l+1;
else (*x)++;
}
gotoxy(*x,*y);
putchar(1);
}
这个程序没有注释,请高手加上注释和原理(详细点的),可供千万C爱好者学习, O(∩_∩)O谢谢~~
尤其是void frame(int l,int r,int u,int d)这个函数,难以理解,请更加详细点,谢谢~~ 展开
1个回答
展开全部
理解这个程序,先要知道conio.h中的几个函数
conio.h是对输入输出设备进行基本控制的函数库
gotoxy(x,y); 是控制屏幕输出的主要函数,文本方式下,屏幕是80列*25行,gotoxy是定义到(x,y)坐标,以后的输出就从这个位置开始;
putchar(c); 是向屏幕输出一个字符,c 是ASCII码
biosky(); 是无等待地获取键盘输入,得到的是键的扫描码,如果没有按键也立刻返回,返回值是0;
void frame(int l,int r,int u,int d) // 绘制一个矩形
{
int i;
for(i=l;i<r+1;i++)
{ // 从l到r,分别在u和d的位置绘制横线
gotoxy(i,u);
printf("%c",219);
gotoxy(i,d);
printf("%c",219);
}
for(i=u+1;i<d+1;i++)
{ // 从u+1到d,分别在l和r的位置绘制两条竖线
gotoxy(l,i);
printf("%c",219);
gotoxy(r,i);
printf("%c",219);
}
}
void move(int key,int *x,int *y,int *l,int *r,int *u,int *d)
这个函数是根据key的码值,计算下一个x和y 的坐标,如果碰到了边界,则x和y停留在边界的位置上。这个函数有两个putchar
第一个是输出空格,擦除原先位置上的符号;
第二个是计算出新的位置后,输出ASCII(1)的符号,可能就是你说的那个笑脸
剩余的部分估计你应该能够理解了
conio.h是对输入输出设备进行基本控制的函数库
gotoxy(x,y); 是控制屏幕输出的主要函数,文本方式下,屏幕是80列*25行,gotoxy是定义到(x,y)坐标,以后的输出就从这个位置开始;
putchar(c); 是向屏幕输出一个字符,c 是ASCII码
biosky(); 是无等待地获取键盘输入,得到的是键的扫描码,如果没有按键也立刻返回,返回值是0;
void frame(int l,int r,int u,int d) // 绘制一个矩形
{
int i;
for(i=l;i<r+1;i++)
{ // 从l到r,分别在u和d的位置绘制横线
gotoxy(i,u);
printf("%c",219);
gotoxy(i,d);
printf("%c",219);
}
for(i=u+1;i<d+1;i++)
{ // 从u+1到d,分别在l和r的位置绘制两条竖线
gotoxy(l,i);
printf("%c",219);
gotoxy(r,i);
printf("%c",219);
}
}
void move(int key,int *x,int *y,int *l,int *r,int *u,int *d)
这个函数是根据key的码值,计算下一个x和y 的坐标,如果碰到了边界,则x和y停留在边界的位置上。这个函数有两个putchar
第一个是输出空格,擦除原先位置上的符号;
第二个是计算出新的位置后,输出ASCII(1)的符号,可能就是你说的那个笑脸
剩余的部分估计你应该能够理解了
追问
O(∩_∩)O谢谢~~,不过
for(i=l;i<r+1;i++)
{ // 从l到r,分别在u和d的位置绘制横线
gotoxy(i,u);
printf("%c",219);
gotoxy(i,d);
printf("%c",219);
}
这段能在说详细点吗,为什么是一个for,两个 gotoxy(i,u); printf("%c",219);
又是什么意思~~
追答
一个是gotoxy(i,u) 上面的位置
另一个是gotoxy(i,d) 下面的位置
i从l到r,从左到右循环,所以是同时绘制的上面和下面的横线
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询