C语言实现打砖块游戏

 更新时间:2022年05月11日 12:35:06   作者:Object_in_java  
这篇文章主要为大家详细介绍了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语言实现文件读写功能流程

    C语言实现文件读写功能流程

    这篇文章主要介绍了C语言实现文件读写,文件是一段数据的集合,这些数据可以是有规则的,也可以是无序的集合。在stdio.h有一个非常重要的东西,文件指针,每个文件都会在内存中开辟一块空间,用于存放文件的相关信息
    2022-12-12
  • C++构造函数初始化列表的实现详解

    C++构造函数初始化列表的实现详解

    构造函数主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用;析构函数主要作用在于对象销毁前系统自动调用,执行一 些清理工作
    2022-09-09
  • 实例讲解C语言编程中的结构体对齐

    实例讲解C语言编程中的结构体对齐

    这篇文章主要介绍了C语言编程中的结构体对齐,值得注意的是一些结构体对齐的例子在不同编译器下结果可能会不同,需要的朋友可以参考下
    2016-04-04
  • Qt学习教程之表格控件蚂蚁线详解

    Qt学习教程之表格控件蚂蚁线详解

    如果有用过PS的选区工具应该就会知道蚂蚁线是什么东西了,就是用来表示选区的一种虚线,关键还是要动态的!下面这篇文章主要给大家介绍了关于Qt学习教程之表格控件蚂蚁线的相关资料,需要的朋友可以参考下
    2018-07-07
  • C++中TinyXML读取xml文件用法详解

    C++中TinyXML读取xml文件用法详解

    本文主要介绍了C++中TinyXML读取xml文件用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C语言三种函数调用约定_cdecl与_stdcall及_fastcall详细讲解

    C语言三种函数调用约定_cdecl与_stdcall及_fastcall详细讲解

    本篇文章使用的工具是vs2010,内容可能涉及到汇编的知识,建议有一些汇编基础的再来看,不过没有汇编基础也没有关系,了解一下这三种调用约定即可
    2022-10-10
  • 解析在main函数之前调用函数以及对设计的作用详解

    解析在main函数之前调用函数以及对设计的作用详解

    本篇文章是对在main函数之前调用函数以及对设计的作用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言 将字符串逆序输出的实例

    C语言 将字符串逆序输出的实例

    这篇文章主要介绍了C语言将字符串逆序输出的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • C++基于回溯法解决八皇后问题示例

    C++基于回溯法解决八皇后问题示例

    这篇文章主要介绍了C++基于回溯法解决八皇后问题,简单描述了八皇后问题,以及回溯法的原理与解决八皇后问题的相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • C++中SetConsoleCursorPosition()移动光标函数的用法大全

    C++中SetConsoleCursorPosition()移动光标函数的用法大全

    这篇文章主要介绍了C++中SetConsoleCursorPosition()移动光标函数的用法大全,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03

最新评论