c语言使用gotoxy函数清屏,system(“cls”)与gotoxy(0,0)清屏作用的问题

#include

#include

#include

#include

//全局变量

int add_x,add_y;                                                //飞机位置

int high,width;                                                  //游戏画面尺寸

int bullet_x,bullet_y;                                        //子弹位置

int enemy_x,enemy_y;                                     //敌军位置

int score;

void gotoxy(int x,int y)  //光标移动到(x,y)位置

{

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

COORD pos;

pos.X = x;

pos.Y = y;

SetConsoleCursorPosition(handle,pos);

}

void HideCursor() // 用于隐藏光标

{

CONSOLE_CURSOR_INFO cursor_info = {1, 0};  // 第二个值为0表示隐藏光标

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}

void startup()

{

high = 20;

width = 30;

add_x = high/2;

add_y = width/2;

bullet_x = 0;

bullet_y = add_y+1;

enemy_x = 0;

enemy_y = add_y;

score = 0;

HideCursor() ;//隐藏光标

}

void show()

{

system("cls");//gotoxy(0,0);                              //清屏函数{:10_249:}

int i,j,k,l;

for( i = 0 ; i < high ; i ++ )

{

for( j = 0 ; j < width ; j ++ )

{

if((i==add_x)&&(j==add_y))           //输出飞机

{

printf("lYl");

printf("\n");

for( k = 0 ; k < j-1 ; k ++ )

printf(" ");

printf("/ l \");

printf("\n");

for( k = 0 ; k< j ; k ++ )

printf(" ");

printf("/ \");

printf("\n");

}

else if((i==bullet_x)&&(j==bullet_y))

printf("|");                                    //输出子弹

else if((i==enemy_x)&&(j==enemy_y))

printf("*");

else

printf(" ");                                  //输出空格

}

printf("\n");

}

printf("得分: %d\n",score);

}

void updateWithoutInput()

{

if( add_x >= high )

add_x--;

if( add_y >= width )

add_y--;

if( add_x<1 )

add_x++;

if( add_y<1 )

add_y++;

if( bullet_x>-1 )

bullet_x -- ;

if( bullet_x == enemy_x&&bullet_y == enemy_y )

{

score ++;                                                //得分+1

enemy_x = -1;                                        //产生新的敌机

enemy_y = rand()%width;

bullet_x = -2;                                         //子弹无效

}

if( enemy_x > high )

{

enemy_x = -1 ;

enemy_y = rand()%width ;

}

//敌机移动

static int speed=0;

if( speed < 20 )

speed++;

if( speed == 20 )

{

speed = 0;

enemy_x++;

}

}

void updateWithInput()

{

char input;

if( kbhit() )                                               //判断是否有输入

{

input = getch();

switch(input){

case 'w':add_x--;break;

case 'a':add_y--;break;

case 's':add_x++;break;

case 'd':add_y++;break;

case 'W':add_x--;break;

case 'A':add_y--;break;

case 'S':add_x++;break;

case 'D':add_y++;break;

case  ' ':bullet_x = add_x-1,bullet_y = add_y+1;

}

}

}

int main()

{

startup();                                                   //数据的初始化

while(1)                                                   //游戏循环执行

{

show();                                                 //显示画面

updateWithoutInput();                     //与输入无关的更新

updateWithInput();                          //与输入有关的更新

}

return 0;

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值