文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-30 13:11

关注

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

一、效果展示:

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

二、代码如下:

#include<stdio.h>#include<string.h>#include<conio.h>#include<Windows.h>#include<time.h>#define High 24   //游戏画面尺寸#define Width 36//全局变量int ball_x,ball_y;//小球的坐标int ball_vx,ball_vy;//小球的速度int canvas[High][Width]={0};int position_x,position_y;//挡板的中心坐标int ridus;//挡板的半径大小int left,right;//挡板的左右大小int score=0;//分数//二维数组存储游戏画布中对应的元素//0为空格,1为小球 2为挡板 3为砖块(1分)   4为砖块(2分)  5为砖块(3分)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() //数据的初始化{    int k,i;    ridus=5;    position_x=High-1;    position_y=Width/2;    left=position_y-ridus;    right=position_y+ridus;    ball_x=position_x-1;    ball_y=position_y;    ball_vx=-1;    ball_vy=1;    canvas[ball_x][ball_y]=1;    for(k=left;k<=right;k++)//挡板        canvas[position_x][k]=2;    srand(time(NULL));    for(k=0;k<Width;k++)//加几排砖块    {        for(i=0;i<High/4;i++)        {            canvas[i][k]=rand()%3+3;//随机的初始化砖块类型        }    }}//定义隐藏光标函数void HideCursor(){    CONSOLE_CURSOR_INFO cursor;        cursor.bVisible = FALSE;        cursor.dwSize = sizeof(cursor);        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);        SetConsoleCursorInfo(handle, &cursor);}void show()//显示画面{    gotoxy(0,0);//将光标移动到原点位置,以下重画清屏    int i,j;    for(i=0;i<High;i++)    {        for(j=0;j<Width;j++)        {            if(canvas[i][j]==0)                printf(" ");//输出空格            else if(canvas[i][j]==1)                printf("O");//输出小球0            else if(canvas[i][j]==2)                printf("*");//输出挡板            else if(canvas[i][j]==3)                printf("#");//输出砖块            else if(canvas[i][j]==4)                printf("+");            else if(canvas[i][j]==5)                printf("$");        }        printf("|\n");//显示右边界    }    for(j=0;j<Width;j++)        printf("-");//显示下边界    printf("\n");    printf("#、+、$ 一个分别为1、2、3分\n");    printf("分数为:%d\n",score);}void updateWithoutInput()//与用户输入无关的更新{    static int speed=0;    if(ball_x==High-2)    {        if( (ball_y>=left)&&(ball_y<=right) )//被挡板挡住        {            printf("\a");//响铃        }        else        {            printf("游戏失败\n");            system("pause");            exit(0);        }    }    if(speed<5)//起到延时的效果        speed++;    if(speed==5)    {        speed=0;        canvas[ball_x][ball_y] = 0;        //更新小球的坐标        ball_x=ball_x+ball_vx;        ball_y=ball_y+ball_vy;        canvas[ball_x][ball_y] = 1;        //碰到边界后反弹        if( (ball_x==0) || (ball_x==High-2) )            ball_vx = -ball_vx;        if( (ball_y==0) || (ball_y==Width-1) )            ball_vy = -ball_vy;        //碰到砖块后反弹        if(canvas[ball_x-1][ball_y]>=3&&canvas[ball_x-1][ball_y]<=5)        {            if(canvas[ball_x-1][ball_y]==3)//判断砖块的类型                score++;            if(canvas[ball_x-1][ball_y]==4)                score=score+2;            if(canvas[ball_x-1][ball_y]==5)                score=score+3;            ball_vx=-ball_vx;            canvas[ball_x-1][ball_y]=0;            printf("\a");        }    }}void updateWithInput()//与用户输入有关的更新{    char input;    if(kbhit())//判断是否有输入    {        input=getch();        if( ((input=='a')||(input=='A')) && (left>0) )        {            canvas[position_x][right]=0;            position_y--;            left=position_y-ridus;            right=position_y+ridus;            canvas[position_x][left]=2;        }        if( ((input=='d')||(input=='D')) && (right<Width-1) )        {            canvas[position_x][left]=0;            position_y++;            left=position_y-ridus;            right=position_y+ridus;            canvas[position_x][right]=2;        }    }  }int main(){    system("title 消砖块游戏中");    system("color 09");    startup();//数据的初始化    HideCursor();    while(1)    {        show();//显示画面        updateWithoutInput();//与用户输入无关的更新        updateWithInput();//与用户输入有关的更新    }    return 0;}

读到这里,这篇“C语言怎么用数组实现反弹球消砖块”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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