文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言中怎么用函数实现反弹球消砖块

2023-06-30 13:51

关注

本篇内容介绍了“C语言中怎么用函数实现反弹球消砖块”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、项目描述和最终的成果展示

这是在上一次弹跳小项目上进行了一系列的优化和封装。项目: 弹跳的小球
上次没有用函数进行的封装。这次在上次的基础上进行封装和一些功能的优化。

最终效果图如下:

C语言中怎么用函数实现反弹球消砖块

二、封装后的弹跳小球

代码如下:

#include<stdio.h>#include<string.h>#include<conio.h>#include<windows.h>//全局变量int high,width; //游戏画面大小int ball_x,ball_y;//小球的坐标int ball_vx,ball_vy;//小球的速度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 startup()//数据的初始化{    high =  15;    width = 20;    ball_x = 0;    ball_y = width/2;    ball_vx = 1;    ball_vy = 1;}void show()//显示画面{    gotoxy(0,0);//光标移动到原点位置,以下重画清屏    int i,j;    for(i=0;i<=high;i++)    {        for(j=0;j<=width;j++)        {            if( ( i == ball_x) && ( j == ball_y ) )                printf("O");//输出小球            else if( j == width)                printf("+");//输出右边框            else if( i == high)                printf("-");//输出下边框            else                printf(" ");//输出空格        }        printf("\n");    }}void updateWithoutInput()//与用户输入无关的更新{    ball_x = ball_x + ball_vx;    ball_y = ball_y + ball_vy;    if( (ball_x == 0 ) || (ball_x == high-1 ))        ball_vx = -ball_vx;    if( (ball_y == 0 ) || (ball_y == width-1 ))        ball_vy = -ball_vy;    Sleep(50);}void updateWithInput()//与用户输入有关的更新{}int main(void){    startup();//数据的初始化    while(1)    {        show();//显示画面        updateWithoutInput();//与用户输入无关的更新        updateWithInput();//与用户输入有关的更新    }    return 0;}

效果图如下:

C语言中怎么用函数实现反弹球消砖块

三、显示移动挡板

代码如下:

#include<stdio.h>#include<string.h>#include<conio.h>#include<windows.h>//全局变量int high,width; //游戏画面大小int ball_x,ball_y;//小球的坐标int ball_vx,ball_vy;//小球的速度int position_x,position_y;//挡板的中心坐标int ridus;//挡板的半径大小int left,right;//挡板的左右位置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 startup()//数据的初始化{    high =  15;    width = 20;    ball_x = 0;    ball_y = width/2;    ball_vx = 1;    ball_vy = 1;    ridus = 5;    position_x = high;    position_y = width/2;    left = position_y -ridus;    right = position_y + ridus;}void show()//显示画面{    gotoxy(0,0);//光标移动到原点位置,以下重画清屏    int i,j;    for(i=0;i<=high+1;i++)    {        for(j=0;j<=width;j++)        {            if( ( i == ball_x) && ( j == ball_y ) )                printf("O");//输出小球            else if( j == width)                printf("+");//输出右边框            else if( i == high+1)                printf("-");//输出下边框            else if ( (i==high)&&(j>=left)&&(j<=right))                printf("*");            else                printf(" ");//输出空格        }        printf("\n");    }}void updateWithoutInput()//与用户输入无关的更新{    ball_x = ball_x + ball_vx;    ball_y = ball_y + ball_vy;    if( (ball_x == 0 ) || (ball_x == high-1 ))        ball_vx = -ball_vx;    if( (ball_y == 0 ) || (ball_y == width-1 ))        ball_vy = -ball_vy;    Sleep(50);}void updateWithInput()//与用户输入有关的更新{    char input;    if(kbhit())    {        input = getch();        if( input == 'a' || input == 'A' )        {            position_y--;//位置左移            left = position_y-ridus;            right = position_y+ridus;        }        if( input == 'd' || input == 'D' )        {            position_y++;            left = position_y - ridus;            right = position_y + ridus;        }    }}int main(void){    startup();//数据的初始化    while(1)    {        show();//显示画面        updateWithoutInput();//与用户输入无关的更新        updateWithInput();//与用户输入有关的更新    }    return 0;}

效果图如下:

C语言中怎么用函数实现反弹球消砖块

四、反弹小球

代码如下:

#include<stdio.h>#include<string.h>#include<conio.h>#include<windows.h>//全局变量int high,width; //游戏画面大小int ball_x,ball_y;//小球的坐标int ball_vx,ball_vy;//小球的速度int position_x,position_y;//挡板的中心坐标int ridus;//挡板的半径大小int left,right;//挡板的左右位置int ball_number;//反弹小球的次数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 startup()//数据的初始化{    high =  15;    width = 20;    ball_x = 0;    ball_y = width/2;    ball_vx = 1;    ball_vy = 1;    ridus = 5;    position_x = high;    position_y = width/2;    left = position_y -ridus;    right = position_y + ridus;    ball_number=0;}void show()//显示画面{    gotoxy(0,0);//光标移动到原点位置,以下重画清屏    int i,j;    for(i=0;i<=high+1;i++)    {        for(j=0;j<=width;j++)        {            if( ( i == ball_x) && ( j == ball_y ) )                printf("O");//输出小球            else if( j == width)                printf("+");//输出右边框            else if( i == high+1)                printf("-");//输出下边框            else if ( (i==high)&&(j>=left)&&(j<=right))                printf("*");            else                printf(" ");//输出空格        }        printf("\n");    }    printf("反弹小球数:%d\n",ball_number);}void updateWithoutInput()//与用户输入无关的更新{    if( ball_x == high -1)    {        if( (ball_y>=left) && (ball_y<=right) )        {            ball_number++;            printf("\a");//响铃        }        else        {            printf("游戏失败\n");            system("pause");            exit(0);        }    }        ball_x = ball_x + ball_vx;    ball_y = ball_y + ball_vy;    if( (ball_x == 0 ) || (ball_x == high-1 ))        ball_vx = -ball_vx;    if( (ball_y == 0 ) || (ball_y == width-1 ))        ball_vy = -ball_vy;    Sleep(50);}void updateWithInput()//与用户输入有关的更新{    char input;    if(kbhit())    {        input = getch();        if( input == 'a' || input == 'A' )        {            position_y--;//位置左移            left = position_y-ridus;            right = position_y+ridus;        }        if( input == 'd' || input == 'D' )        {            position_y++;            left = position_y - ridus;            right = position_y + ridus;        }    }}int main(void){    startup();//数据的初始化    while(1)    {        show();//显示画面        updateWithoutInput();//与用户输入无关的更新        updateWithInput();//与用户输入有关的更新    }    return 0;}

效果图如下:

C语言中怎么用函数实现反弹球消砖块

五、添加砖块并实现打砖块操作

代码如下:

#include<stdio.h>#include<string.h>#include<conio.h>#include<windows.h>//全局变量int high,width; //游戏画面大小int ball_x,ball_y;//小球的坐标int ball_vx,ball_vy;//小球的速度int position_x,position_y;//挡板的中心坐标int ridus;//挡板的半径大小int left,right;//挡板的左右位置int ball_number;//反弹小球的次数int block_x1,block_y1;//砖块1的位置int block_x2,block_y2;//砖块2的位置int block_x3,block_y3;//砖块3的位置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 startup()//数据的初始化{    high =  15;    width = 20;    ball_x = 0;    ball_y = width/2;    ball_vx = 1;    ball_vy = 1;    ridus = 5;    position_x = high;    position_y = width/2;    left = position_y -ridus;    right = position_y + ridus;    ball_number=0;    block_x1 = 0;    block_y1 = 1;    block_x2 = 0;    block_y2 = 2;    block_x3 = 0;    block_y3 = 3;    score=0;}void show()//显示画面{    gotoxy(0,0);//光标移动到原点位置,以下重画清屏    int i,j;    for(i=0;i<=high+1;i++)    {        for(j=0;j<=width;j++)        {            if( ( i == ball_x) && ( j == ball_y ) )                printf("O");//输出小球            else if( j == width)                printf("+");//输出右边框            else if( i == high+1)                printf("-");//输出下边框            else if ( (i==high)&&(j>=left)&&(j<=right))                printf("*");            else if( (i==block_x1) && (j==block_y1) )                printf("A");//输出砖块1            else if( (i==block_x2) && (j==block_y2) )                printf("B");//输出砖块2            else if( (i==block_x3) && (j==block_y3) )                printf("C");//输出砖块3            else                printf(" ");//输出空格        }        printf("\n");    }    printf("反弹小球数:%d\n",ball_number);    printf("消掉的砖块数: %d\n",score);}void updateWithoutInput()//与用户输入无关的更新{    if( ball_x == high -1)    {        if( (ball_y>=left) && (ball_y<=right) )//被挡板挡住了        {            ball_number++;            printf("\a");//响铃        }        else        {            printf("游戏失败\n");            system("pause");            exit(0);        }    }        if( (ball_x == block_x1) && (ball_y ==block_y1) )//小球击中砖块1    {        score++;//分数加1        block_y1=rand()%width;//产生新的砖块        while((block_y1==block_y2) || ( block_y1==block_y3))        //当新产生的砖块和其他砖块重合时        {            block_y1=rand()%width;//产生新的砖块        }    }    if( (ball_x == block_x2) && (ball_y ==block_y2) )//小球击中砖块2    {        score++;//分数加1        block_y2=rand()%width;//产生新的砖块        while((block_y2==block_y1) || ( block_y2==block_y3))        //当新产生的砖块和其他砖块重合时        {            block_y2=rand()%width;//产生新的砖块        }    }    if( (ball_x == block_x3) && (ball_y ==block_y3) )//小球击中砖块3    {        score++;//分数加1        block_y3=rand()%width;//产生新的砖块        while((block_y3==block_y1) || ( block_y3==block_y2))            //当新产生的砖块和其他砖块重合时        {            block_y3=rand()%width;//产生新的砖块        }    }    ball_x = ball_x + ball_vx;    ball_y = ball_y + ball_vy;    if( (ball_x == 0 ) || (ball_x == high-1 ))        ball_vx = -ball_vx;    if( (ball_y == 0 ) || (ball_y == width-1 ))        ball_vy = -ball_vy;    Sleep(66);}void updateWithInput()//与用户输入有关的更新{    char input;    if(kbhit())    {        input = getch();        if( input == 'a' || input == 'A' )        {            position_y--;//位置左移            left = position_y-ridus;            right = position_y+ridus;        }        if( input == 'd' || input == 'D' )        {            position_y++;            left = position_y - ridus;            right = position_y + ridus;        }    }}int main(void){    startup();//数据的初始化    while(1)    {        show();//显示画面        updateWithoutInput();//与用户输入无关的更新        updateWithInput();//与用户输入有关的更新    }    return 0;}

效果图如下:

C语言中怎么用函数实现反弹球消砖块

“C语言中怎么用函数实现反弹球消砖块”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯