温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-05-11 15:29:14 来源:亿速云 阅读:143 作者:iii 栏目:开发技术

这篇文章主要介绍“C语言怎么实现打砖块游戏”,在日常操作中,相信很多人在C语言怎么实现打砖块游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现打砖块游戏”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

效果如下:

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

代码:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<Windows.h>

int score;
int ball_row, ball_col;
int ball_vv, ball_vh;
int area_height, area_width;
int baffle_col, baffle_row, baffle_size;
int brick_col, brick_row;
bool isLose;

void gotoxy(int x, int 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 };
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void startup()
{
    area_height = 20;
    area_width = 40;
    ball_row = area_height / 2;
    ball_col = area_width / 2;
    ball_vv = 1;
    ball_vh = 1;

    baffle_col = area_width / 2;
    baffle_row = area_height - 2;
    baffle_size = 8;
    
    brick_row = 1;
    brick_col = rand() % area_width;

    score = 0;
    isLose = false;
}

void show()
{
    gotoxy(0, 0);
    int i, j;
    //system("cls");
    for (i = 0; i <= area_height; i++)
    {
        for (j = 0; j <= area_width; j++)
        {
            if (i == ball_row && j == ball_col)
            {
                printf("O");
            }
            else if (i == 0 || i == area_height)
                printf("-");
            else if (j == 0 || j == area_width)
                printf("|");
            else if (i == baffle_row && (j >= baffle_col && j <= baffle_col + baffle_size))
                printf("=");
            else if (i == brick_row && j == brick_col)
                printf("#");
            else printf(" ");
        }
        printf("\n");
    }
    printf("score:%d\n", score);
}

void updateWithhoutInput() {
    static int count = 0;

    if(count % 5 == 0){
        ball_col += ball_vh;
        ball_row += ball_vv;
    }
    
    if (ball_col == 0 + 1 || ball_col == area_width - 1)//vh changed
        ball_vh *= -1;
    if (ball_row == 0 + 1 /*|| ball_row == area_height - 1*/)//vv changed
        ball_vv *= -1;
    if (ball_row == baffle_row - 1 && (ball_col >= baffle_col && ball_col < baffle_col + baffle_size))//在baffle上一行就判断碰撞。 
        ball_vv *= -1;
    // 砖块的左,右,下左,下,下右可以检测到碰撞 
    if ((ball_row == brick_row + 1 && (ball_col >= brick_col - 1 && ball_col <= brick_col + 1))||(ball_row == brick_row && (ball_col == brick_col - 1 || ball_col==brick_col+1))) {
        ball_vv *= -1;
        brick_row = -1;
        score += 10;
        brick_row = 1;
        brick_col = rand() % area_width;
    }

    if (ball_row >= area_height)
        isLose = true;
        
    count++;
}

void updateWithInput() {


    char input;
    if (kbhit()) {
        input = getch();
        switch (input)
        {
        case 'a': if (baffle_col > 0 + 1)baffle_col--; break;
        case 'w': if (baffle_row > 0 + 1)baffle_row--; break;
        case 'd': if (baffle_col < area_width - baffle_size - 1)baffle_col++; break;
        case 's': if (baffle_row < area_height - 1)baffle_row++; break;

        default:
            break;
        }
    }
}

int Lost(){
    if(ball_row > area_height)
        return 1;
    return 0;
}

int IsFinish() {//游戏是否结束 
    if (score == 100) {
        system("cls");
        printf("congretulations!!!");
        score = 0;
        _sleep(500);//先暂停在现实符合人性化 
        system("pause");
        return 1;
    }
    else if (Lost() == 1) {
        system("cls");
        printf("you have lost!!!");
        score = 0;
        _sleep(500);
        system("pause");
        return 1;
    }
    return 0;
}


int main()
{
    HideCursor();
    startup();
    while (1)
    {
        show();
        updateWithInput();
        updateWithhoutInput();
        if(IsFinish() == 1){
            startup();
            continue;
        }
    }
    return 0;
}

到此,关于“C语言怎么实现打砖块游戏”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI