简易版------打砖块
这个只要安装了easyx图形库就可以直接复制运行。
easyx的安装可以参考这个:
easyx的安装与基于easyx的C语言扫雷小游戏_makabaka12138的博客-CSDN博客
这个游戏也比较粗糙,只做了个大概,有感兴趣的可以自己改进一下。
喜欢的点个赞吧。
展示:
#include <stdio.h>
#include <stdbool.h>
#include <graphics.h> //easyX 库
#include <conio.h>//砖块宽
#define ZK_WIDTH 120
//砖块高
#define ZK_HEIGHT 40//行数
#define ZK_ROWS 4
//列数
#define ZK_COLS 5//宽 60 高 20
//窗口高
#define WINDOW_HEIGHT 600
//窗口宽
#define WINDOW_WIDTH (ZK_WIDTH*ZK_COLS)
//球的半径
#define RADIUS 10
//板子宽
#define BZ_WIDTH 300
//板子高
#define BZ_HEIGHT 20//全局变量 0 false 存在 1 true 不存在
bool zk[ZK_ROWS][ZK_COLS] = { 0 };
//球的圆心坐标
int ball_x, ball_y;
//板子左上角那个点的坐标
int bz_x, bz_y;
//球的方向向量 3 右 -3 左 -3上 3下
int ball_xfx=3, ball_yfx=-3;//游戏是否继续
bool isContinue = true;//画板子
void drawBZ();
//画球
void drawBall();//打印一块砖
// x y 下标
void drawZK(int x, int y);//显示所有的砖
void drawAllZK();//游戏的所有显示
void drawGame();//球移动
void ballMove();
//碰撞检测
void check();
//控制 是否按键 根据按键来处理
void ctolGame();int main(){initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);//板子的初始坐标bz_x = (WINDOW_WIDTH - BZ_WIDTH) / 2;bz_y = WINDOW_HEIGHT - BZ_HEIGHT;//球心初始坐标ball_x = WINDOW_WIDTH / 2;ball_y = WINDOW_HEIGHT - BZ_HEIGHT - RADIUS;while (isContinue){drawGame();ballMove();ctolGame();Sleep(10);//帧率100 1秒钟图片切换张数 16以上 100以下}settextcolor(RED);LOGFONT font = { 0 };font.lfHeight = 40;font.lfWidth = 20;settextstyle(&font);outtextxy(WINDOW_WIDTH / 2 - 100, WINDOW_HEIGHT / 2,L"Game Over!!!");/*Sleep(2000);cleardevice();//清屏zk[1][1] = zk[2][2] = 1;drawAllZK();*/while (1);return 0;
}//球移动
void ballMove(){ball_x += ball_xfx;ball_y += ball_yfx;
}//碰撞检测
void check(){//检测球是否撞上右边沿if ((ball_xfx > 0) && //球往右边走(ball_x >= (WINDOW_WIDTH - RADIUS))){//撞上了右边沿ball_xfx = -3;}//检测球是否撞上左边沿if ((ball_xfx < 0) && //球往左边走(ball_x <= RADIUS)){//撞上了左边沿ball_xfx = 3;}//检测球是否撞上上边沿if ((ball_yfx < 0) && //球往上边走(ball_y <= RADIUS)){//撞上了上边沿ball_yfx = 3;}//检测球是否撞上下边沿if ((ball_yfx > 0) && //球往下边走(ball_y >= (WINDOW_HEIGHT-RADIUS) )){//撞上了下边沿//ball_yfx = -3;isContinue = false;}//检测球是否撞上板子if ((ball_yfx > 0) &&(ball_y >= (bz_y - RADIUS)) &&//球y坐标(ball_x >= bz_x) &&(ball_x <= (bz_x + BZ_WIDTH))){ball_yfx = -3;}//检测撞砖块for (int i = 0; i < ZK_ROWS; i++){for (int j = 0; j < ZK_COLS; j++){// zk[i][j] x:j*ZK_WIDTH y:i*ZK_HEIGHT//左上角坐标 (j*ZK_WIDTH,i*ZK_HEIGHT) //右下角坐标(j*ZK_WIDTH+ZK_WIDTH,i*ZK_HEIGHT+ZK_HEIGHT)if (3 == ball_xfx){//检测从左往右撞/*if ((false == zk[i][j]) //砖块存在&& (ball_x > (j*ZK_WIDTH-RADIUS) ) //左边边界&& (ball_y>i*ZK_HEIGHT)//上边边界&& (ball_y < (i*ZK_HEIGHT + ZK_HEIGHT))//下边边界){zk[i][j] = true;//把砖块打掉ball_xfx = -3;}*/}if (-3 == ball_xfx){//检测从右往左撞/*if ((false == zk[i][j]) //砖块存在&& (ball_x <(j*ZK_WIDTH + ZK_WIDTH + RADIUS)) //右边边界&& (ball_y>i*ZK_HEIGHT)//上边边界&& (ball_y < (i*ZK_HEIGHT + ZK_HEIGHT))//下边边界){zk[i][j] = true;//把砖块打掉ball_xfx = 3;}*/}if (-3 == ball_yfx){//检测从下往上撞if ((false == zk[i][j]) //砖块存在&& (ball_x > j*ZK_WIDTH) //左边边界&& (ball_x < (j*ZK_WIDTH + ZK_WIDTH))//右边边界&& (ball_y < (i*ZK_HEIGHT + ZK_HEIGHT + RADIUS))//上边边界){zk[i][j] = true;//把砖块打掉ball_yfx = 3;}}if (3 == ball_yfx){//检测从上往下撞/*if ((false == zk[i][j]) //砖块存在&& (ball_x > j*ZK_WIDTH) //左边边界&& (ball_x < (j*ZK_WIDTH + ZK_WIDTH))//右边边界&& (ball_y > (i*ZK_HEIGHT - RADIUS))//上边边界){zk[i][j] = true;//把砖块打掉ball_yfx = -3;}*/}}}
}
//控制 是否按键 根据按键来处理
void ctolGame(){check();//不管有没有按键,都要碰撞检测int ch;if (true == _kbhit()){//检测是否有按键ch = _getch();//获取按键的值printf("ch:%d\n", ch);switch (ch){case 'a':case 'A':case 75:bz_x -= 5;break;case 'd':case 'D':case 77:bz_x += 5;break;}}
}//游戏的所有显示
void drawGame(){BeginBatchDraw();//绘图前 防闪//清屏cleardevice();drawAllZK();drawBZ();drawBall();EndBatchDraw();//绘图后 防闪
}//打印一块砖
// x y 下标
void drawZK(int x, int y){if (0 == zk[y][x]){setlinecolor(RED);setfillcolor(GREEN);fillrectangle(x * ZK_WIDTH, y * ZK_HEIGHT,x * ZK_WIDTH + ZK_WIDTH, y * ZK_HEIGHT + ZK_HEIGHT);}/*if(1 == zk[y][x]) return;setlinecolor(RED);setfillcolor(GREEN);fillrectangle(x * ZK_WIDTH, y * ZK_HEIGHT,x * ZK_WIDTH + ZK_WIDTH, y * ZK_HEIGHT + ZK_HEIGHT);*/
}//显示所有的砖
void drawAllZK(){for (int i = 0; i < ZK_ROWS; i++){//5行for (int j = 0; j < ZK_COLS; j++){//30列//if (0 == zk[i][j])drawZK(j, i);}}
}//画板子
void drawBZ(){setlinecolor(YELLOW);setfillcolor(YELLOW);fillrectangle(bz_x, bz_y, bz_x + BZ_WIDTH, bz_y + BZ_HEIGHT);
}
//画球
void drawBall(){setlinecolor(BLUE);setfillcolor(RED);fillcircle(ball_x, ball_y, RADIUS);
}
简易版------打砖块相关推荐
- node.js——麻将算法(六)简易版麻将出牌AI1.0
普通麻将的出牌AI如果不是要求特别高的话,其实蛮容易实现的,毕竟大多数人打牌都只是看自己的手牌. 所以作为简易版的AI,出牌的策略只要奔着胡牌去就可以了.我们能想到的就是把相邻或相同的牌凑到一起,把单 ...
- 从封装函数到实现简易版自用jQuery (一)
温馨提示 本文阅读对象: 对 JavaScript 有一定的了解,如果你没有学过或者忘记 JavaScript 某些操作,请看 阮一峰 JavaScript 教程 . 导语 DOM 有许多 API , ...
- 利用python实现简易版的贪吃蛇游戏(面向python小白)
前言 这篇文章主要给大家介绍了关于如何利用python实现简易版的贪吃蛇游戏的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学 ...
- python车辆管理系统_Python简易版停车管理系统
本文实例为大家分享了Python简易版停车管理系统的具体代码,供大家参考,具体内容如下 import time # 最大停车数 max_car = 100 # 当前停车数,初始为0 cur_car = ...
- 用Java写一个植物大战僵尸简易版!
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://urlify.cn/byeEj ...
- python实现简易版成绩管理系统_Python 实现简易版成绩管理系统!
上一次,公众号介绍了如何使用 Python 实现单链表,下面让我们一探单链表的简单应用:在命令行,实现简易版成绩管理系统. 这次的简易版成绩管理系统,主要有六大功能:增加学生信息.删除学生信息.修改学 ...
- python成绩管理系统界面-python实现简易版学生成绩管理系统
300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下 使用链表来实现 class Node(object): def __init__(self, data, pointer ...
- DFiddler:A HTTP Packets Listener一个简易版的手机端的Fiddler。
Diddler A HTTP Packets Listener一个简易版的手机端的Fiddler. Android系统需要Root权限. PIC_20140121_220503_617.jpeg PI ...
- 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!
零.准备工作 <dependencies><dependency><groupId>mysql</groupId><artifactId>m ...
最新文章
- Quarkus:一个Kubernetes原生Java框架
- Windows Server 2012 R2工作文件夹⑤:创建工作文件夹
- 为什么说比特币的交易属性优于储值属性
- 区块链常用架构是什么?它和保险业又如何结合?
- 中国无烟煤市场需求规模与未来发展形势分析报告2022版
- 纪中C组模拟赛总结(2019.7.5)
- android抽屉屏幕右滑,android - Android - 使滑动抽屉从左向右滑动 - 堆栈内存溢出...
- 【Python爬虫】Beautiful Soup库入门
- uefi引导linux_使用UEFI双重引导Windows和Linux
- “黑客帝国”装B特效,不分linux版本
- android checkboxpreference属性,Android CheckBoxPreference Default Value
- Python批量转换png图片为ico
- vue echarts饼状统计
- php 身份证格式校验,年龄计算
- re正则表达式必备基础知识
- 干货 | “深耕内容”背景下,携程如何做景酒优质内容的挖掘
- 【洛谷1337】[JSOI2004] 吊打XXX(模拟退火经典题)
- 主题模型分析漏洞趋势
- 牛客网 2018校招真题 摩拜 排序次数
- 【学习计算机组成原理】浮点数的加减运算