服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现图形化打砖块游戏

C语言实现图形化打砖块游戏

2022-12-01 14:16小雪菜本菜 C/C++

这篇文章主要为大家详细介绍了C语言实现图形化打砖块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现图形化打砖块游戏的具体代码,供大家参考,具体内容如下

C语言实现图形化打砖块游戏

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#include<stdio.h> 
#include<conio.h>
#include<easyx.h>
#include<Windows.h>
#define WINDOW_Width  768
#define WINDOW_Height 1073 
#define BrickWidth 81
#define BrickHeight 27
#define ROWS 5     //行
#define COLS 8     //列
enum bk { null, red, orange, yellow, green, blue };
#define Broad_Width 110
#define Broad_Height 20
int brick[ROWS][COLS] = { 0 };
IMAGE img[6], img_ball[2]; IMAGE img_bk, img_board;
 
int Ball_x = 6; //球的x方向向量   
int Ball_y = -6;//球的y方向向量  
#define Radius 5
int Broad_x = (WINDOW_Width - Broad_Width) / 2 +25; //Broad初始化
int Broad_y = WINDOW_Height - Broad_Height-100;
 
int circle_x = WINDOW_Width / 2-16;               //circle初始化
int circle_y = WINDOW_Height - Radius - Broad_Height-122 ;
void loadRescource()
{
    loadimage(img + 1, "./res/redblock.png",78,25);
    loadimage(img + 2, "./res/orangeblock.png",78,25);
    loadimage(img + 3, "./res/yellowblock.png",78,25);
    loadimage(img + 4, "./res/greenblock.png",78,25);
    loadimage(img + 5, "./res/blueblock.png",78,25);
 
    loadimage(&img_bk, "./res/bk.png");
 
    loadimage(img_ball + 0, "./res/ball0.png");
    loadimage(img_ball + 1, "./res/ball.png");
 
    loadimage(&img_board, "./res/board.png");
 
}
void drawBall()
{
    putimage(circle_x, circle_y, &img_ball[0]);
    putimage(circle_x, circle_y, &img_ball[1]);
 
}
 
 
void ballMove()
{
    circle_x += Ball_x;
    circle_y += Ball_y;
 
}
int  DisappearBrick()
{
    int ZK_COL =( circle_x-60) / BrickWidth;
    int ZK_ROW = (circle_y-250) / BrickHeight;
 
    if (ZK_ROW < 5 && ZK_COL < 8 && brick[ZK_ROW][ZK_COL] != -1)
    {
        brick[ZK_ROW][ZK_COL] = -1;
        return 1;
 
    }return 0;
}
//碰撞检测int circle_x, int circle_y
void CollisionDetection()
{
    //球如果往右边移动,检测球是否撞上右边沿
    if (Ball_x > 0 && circle_x >= WINDOW_Width - Radius-55)
    {
        Ball_x = -6;
    }
    //球如果往上边移动,检测球是否撞上上边沿
    if (Ball_y < 0 && circle_y <= Radius || DisappearBrick())
    {
        Ball_y = 6;
    }
    //球如果往左边移动,检测球是否撞上左边沿
    if (Ball_x < 0 && circle_x <= Radius +35)
    {
        Ball_x = 6;
    }
    //球如果往下边移动,检测球是否撞上下边沿
    if (Ball_y > 0 && circle_y >= WINDOW_Height - Radius)
    {
        Ball_y = 0;
        Ball_x = 0;
 
    }
    //检测球是否撞上板子,只能从上往下撞,只有两种极限情况
    if ((Ball_y > 0) && (circle_y >= (Broad_y - Radius) - 25) &&//球y坐标
        (circle_x >= Broad_x) && (circle_x <= (Broad_x + Broad_Width)))
    {
        Ball_y = -6;
    }
 
}
//键盘控制
void KeyControl()
{
    CollisionDetection();    //不管有没有按键都要碰撞检测
    int ch;
    if (true == _kbhit())
    {                       //检测是否有按键
        ch = _getch();//获取按键的值
        switch (ch)
        {
        case 'a':
        case 'A':
        case 75:
            if(Broad_x >= Radius + 35+38)
            Broad_x -= 50;
            break;
        case 'd':
        case 'D':
        case 77:
            if (Broad_x <= WINDOW_Width - Radius - 55-149)
            Broad_x += 50;
            break;
        }
    }
}
void DrawAllBrick()
{
    for (int i = 0; i < ROWS; i++)
    {
        for (int j = 0; j < COLS; j++)
            switch (brick[i][j])
            {
            case 1:
                putimage(j * 81 + 60, i * 27 + 250, &img[1]);
                break;
            case 2:
                putimage(j * 81 + 60, i * 27 + 250, &img[2]);
                break;
            case 3:
                putimage(j * 81 + 60, i * 27 + 250, &img[3]);
                break;
            case 4:
                putimage(j * 81 + 60, i * 27 + 250, &img[4]);
                break;
            case 5:
                putimage(j * 81 + 60, i * 27 + 250, &img[5]);
            }
    }
 
}
void init(int  brick[][COLS])
{
    int k = 1;
    for (int i = 0; i < ROWS; i++)
    {
 
        for (int j = 0; j < COLS; j++)
        {
 
            brick[i][j] = k;
 
        }
        k++;
    }
 
}
 
int main()
{
    initgraph(WINDOW_Width, WINDOW_Height/*,EW_SHOWCONSOLE*/);
    init(brick);
    loadRescource();
 
    while (true)
    {
        BeginBatchDraw();
 
        putimage(0, 0, &img_bk);
 
        putimage(Broad_x, Broad_y, &img_board);
 
        DrawAllBrick();
 
        drawBall();
        ballMove();
        KeyControl();
        DisappearBrick();
 
        EndBatchDraw();
        Sleep(20);
    }
    while (1);
    return 0;
}

C语言实现图形化打砖块游戏

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

原文链接:https://blog.csdn.net/weixin_60569662/article/details/124038612

延伸 · 阅读

精彩推荐
  • C/C++教你用Matlab制作黄金矿工小游戏

    教你用Matlab制作黄金矿工小游戏

    黄金矿工作为经典的单机小游戏,一直深受大家的喜爱。本文将用Matlab制作这一款经典的游戏,文中的实现步骤讲解详细,感兴趣的可以了解一下...

    slandarer6832022-10-11
  • C/C++C++封装线程类的实现方法

    C++封装线程类的实现方法

    这篇文章主要介绍了C++封装线程类的实现方法,实例介绍了针对线程的创建、调用等方法的封装操作,需要的朋友可以参考下...

    C++教程网8702021-02-07
  • C/C++C语言朴素模式匹配算法实例代码

    C语言朴素模式匹配算法实例代码

    朴素模式匹配算法也称为布鲁特-福斯算法,感觉很是高大上,但是实现起来很简单。这篇文章主要给大家介绍了关于C语言朴素模式匹配算法的相关资料,需...

    bfhonor8322021-11-12
  • C/C++C++ STL array容器访问元素的几种方式

    C++ STL array容器访问元素的几种方式

    这篇文章主要介绍了C++ STL array容器访问元素的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    c语言中文网6562021-10-20
  • C/C++详解CLion配置openMP的方法

    详解CLion配置openMP的方法

    这篇文章主要介绍了CLion配置openMP的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    古人诚不我欺9292021-10-22
  • C/C++C++中的异常实例详解

    C++中的异常实例详解

    异常处理是C++的一项语言机制,用于在程序中处理异常事件,下面这篇文章主要给大家介绍了关于C++中异常的相关资料,文中通过实例代码介绍的非常详细,需要...

    wuqiongjin11012022-09-09
  • C/C++C语言用循环单链表实现约瑟夫环

    C语言用循环单链表实现约瑟夫环

    这篇文章主要为大家详细介绍了C语言用循环单链表实现约瑟夫环,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    东流长江水10342022-02-16
  • C/C++在Visual Studio使用C++开发Metro应用

    在Visual Studio使用C++开发Metro应用

    这篇文章主要介绍了在Visual Studio使用C++开发Metro应用的示例,尽管只是一个Hello world,但可以体现出VS下为开发者提供的方便,需要的朋友可以参考下...

    C++教程网4552021-03-02