//easyx图形库头文件
#include//控制台输入输出头文件
//宏定义:砖块为:5行10列
#define ROW 5
#define COL 10
//砖块数组
int ZhuanKuai[ROW][COL] = { 0 };
//小球坐标
int ballx;
int bally;
//小球的速度一定,坐标均匀的改变
int addx = 1;
int addy = -1;
//判断木板是否接到球
bool starting = false;
//木板坐标
int boardx;
int boardy;
//绘制转块
void DrawZhuanKuai();
//初始化游戏
void InitGame();
//木板移动
void MuBan();
//小球移动
void ballMove();
int main(){
//创建图形窗口
initgraph(400, 600);
//初始化游戏
InitGame();
//建立死循环,让游戏继续
while (1){
//kbhit()-->判断是否有按键按下
//有按键按下--》true
//无按键按下--》false
//检测键盘输入:有输入,移动木板
if (kbhit()){
MuBan();
}
//如果木板接不到小球:终止循环
if (bally > boardy){
break;
}
ballMove();//移动小球
}
//弹出窗口:游戏结束
//"游戏结束!!!"--》提示信息
//"打砖块"--》新生成的窗口标题
//MB_OK--》只有一个【确定】按钮
MessageBox(NULL, L"游戏结束!!!", L"打砖块", MB_OK);
return 0;
}
//...省略函数实现相关代码...
```
## 3. 函数实现相关代码
### 3.1 初始化游戏
```c
//小球坐标
int ballx;
int bally;
//木板坐标
int boardx;
int boardy;
//初始化游戏
void InitGame(){
//初始化小球坐标
ballx = 200;
bally = 580;
//初始化木板坐标
boardx = 170;
boardy = 590;
//绘制转块
DrawZhuanKuai();
//绘制小球
//设置填充颜色:粉红色
setfillcolor(LIGHTRED);
//绘制实心小球
solidcircle(ballx, bally, 10);//坐标 + 半径
//绘制木板
//设置填充颜色:黄色
setfillcolor(YELLOW);
//绘制实心木板
solidrectangle(boardx, boardy, boardx + 60, boardy + 10);
}
```
### 3.2 绘制砖块
```c
//宏定义:砖块为:5行10列
#define ROW 5
#define COL 10
//砖块数组
int ZhuanKuai[ROW][COL] = { 0 };
//绘制转块
void DrawZhuanKuai(){
for (int i = 0; i < ROW; i++){
for (int j = 0; j < COL; j++){
//判断是否有砖块
if (ZhuanKuai[i][j] == 0){
if ((i + j) % 2 == 0){
//设置填充颜色为:天蓝色
setfillcolor(LIGHTCYAN);
//画出填充矩形:左上右下
solidrectangle(j * 40, i * 20, j * 40 + 40, i * 20 + 20);
}
else{
//设置填充颜色为:灰色
setfillcolor(LIGHTGRAY);
//画出填充矩形:左上右下
solidrectangle(j * 40, i * 20, j * 40 + 40, i * 20 + 20);
}
}
}
}
}
```
### 3.3 木板移动
```c
//木板移动
void MuBan(){
//用黑色木板擦除之前的木板
//设置填充颜色:黑色
setfillcolor(BLACK);
//绘制实心木板
solidrectangle(boardx, boardy, boardx + 60, boardy + 10);
//让木板左右移动
switch (getch()){
case 75://向左移动
boardx -= 15;
break;
case 77://向右移动
boardx += 15;
break;
default:break;
}
//防止木板出界
if (boardx <= 0){
boardx = 0;
}
if (boardx >= (400 - 60)) {
boardx = (400 - 60);
}
//重新绘制木板
//设置填充颜色:黄色
setfillcolor(YELLOW);
//绘制实心木板
solidrectangle(boardx, boardy, boardx + 60, boardy + 10);
}
```
### 3.4 小球移动
```C
//小球的速度一定,坐标均匀的改变
int addx = 1;
int addy = -1;
//判断木板是否接到球
bool starting = false;
//移动小球
void ballMove(){
//用黑色小球擦除之前的小球
//绘制小球
//设置填充颜色:黑色
setfillcolor(BLACK);
//绘制实心小球
solidcircle(ballx, bally, 10);//坐标 + 半径
//开始绘制
BeginBatchDraw();
//小球碰墙壁
//小球半径为:10
if (ballx >= (400 - 10) || ballx <= (0 + 10)) {
addx = -1 * addx;
}
if (bally <= 10){
addy = -1 * addy;
}
//小球碰砖块
int flag = 0;//标记小球打到砖块
for (int i = 0; i < ROW; i++){
for (int j = 0; j < COL; j++){
//砖块坐标
int x = j * 40;
int y = i * 20;
//小球遇到砖块
if (ZhuanKuai[i][j] == 0 && x - ballx <= 10 && ballx - x <= 50 && bally - y >= 10 && bally - y <= 30) {
addy = -1 * addy;
ZhuanKuai[i][j] = 1;
flag = 1;//控制跳出外层循环
//让砖块消失
//设置填充颜色:黑色
setfillcolor(BLACK);
//绘制实心木板
solidrectangle(x, y, x + 40, y + 20);
break;//退出内层循环
}
}
if (flag){
break;//退出外层循环
}
}
//小球碰木板
if (starting&&boardx - ballx <= 10 && ballx - boardx <= 70 && boardy - bally <= 10) {
addy = -1 * addy;
}
starting = true;
ballx += addx;
bally += addy;
//移动到新位置的小球
//设置填充颜色:粉色
setfillcolor(LIGHTRED);
//绘制实心小球
solidcircle(ballx, bally, 10);//坐标 + 半径
//结束绘制
FlushBatchDraw();
Sleep(5);//延时5毫秒
}
```
## 4. 成果展示
![](/image_editor_upload/085513_80195.png)
如果觉得《c语言游戏菜单栏 C语言小游戏之打砖块》对你有帮助,请点赞、收藏,并留下你的观点哦!