我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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;
}

效果图如下:

三、显示移动挡板

代码如下:

#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;
}

效果图如下:

四、反弹小球

代码如下:

#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;
}

效果图如下:

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

代码如下:

#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;
}

效果图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

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

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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

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

本文小编为大家详细介绍“C语言怎么用数组实现反弹球消砖块”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么用数组实现反弹球消砖块”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、效果展示:二、代码如下:#
2023-06-30

C语言中怎么用easyx实现消砖块游戏

这篇文章主要讲解了“C语言中怎么用easyx实现消砖块游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中怎么用easyx实现消砖块游戏”吧!一、最终效果展示效果图如下:二、绘制静态的
2023-06-30

怎么用C语言实现小游戏打砖块

这篇文章主要讲解了“怎么用C语言实现小游戏打砖块”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C语言实现小游戏打砖块”吧!游戏目标:消除所有的方块即可过关。操作指南:游戏中使用键盘方向
2023-06-25

用c语言编写一个幂函数(c语言实现幂函数)

下面是一个使用C语言编写的幂函数的示例:```c#include double power(double base, int exponent){double result = 1.0;int i;if (exponent > 0){for
2023-09-22

用c语言编程实现素数判断(判断素数的c语言程序函数)

以下是一个用C语言编写的判断素数的函数:```c#include #include bool isPrime(int n) {if (n return false;}for (int i = 2; i * i if (n % i == 0)
2023-09-22

C语言函数调用底层实现原理分析

这篇文章主要介绍了C语言函数调用底层实现原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-24

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录