目录

  • 一、最终效果展示
  • 二、绘制静态的挡板
  • 三、控制挡板
  • 四、消砖块
  • 五、鼠标交互

一、最终效果展示

效果图如下:

这个项目还是有很多的细节漏洞的。例如: 边界控制这里还是有点问题的。

二、绘制静态的挡板

代码如下:

#include<conio.h>
#include<graphics.h>#define High 480 //游戏画面尺寸
#define Width 640//全局变量
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int radius;//小球的半径
int bar_x,bar_y;//挡板的中心坐标
int bar_high,bar_width;//挡板的高度和宽度
int bar_left,bar_right,bar_top,bar_bottom;//挡板的左右上下位置坐标void startup()//数据的初始化
{ball_x=Width/2;ball_y=High/2;ball_vx=1;ball_vy=1;radius=20;bar_high=High/20;bar_width=Width/5;bar_x=Width/2;bar_y=High-bar_high/2;bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;bar_top=bar_y-bar_high/2;bar_bottom=bar_y+bar_high/2;initgraph(Width,High);BeginBatchDraw();
}void clean()//显示画面
{setcolor(BLACK);//绘制黑线,黑色填充的圆setfillcolor(BLACK);fillcircle(ball_x,ball_y,radius);bar(bar_left,bar_top,bar_right,bar_bottom);//绘制黑色,黑色填充的挡板
}void show()//显示画面
{setcolor(YELLOW);//绘制黄线,绿色填充的圆setfillcolor(GREEN);fillcircle(ball_x,ball_y,radius);bar(bar_left,bar_top,bar_right,bar_bottom);//绘制黄色,绿色填充的挡板FlushBatchDraw();Sleep(3);
}void updateWithoutInput()//与用户输入无关的更新
{ball_x=ball_x+ball_vx;ball_y=ball_y,ball_vy;//更新小球的坐标if( (ball_x<=radius)||(ball_x>=Width-radius))ball_vx=-ball_vx;if( (ball_y<=radius)||(ball_y>=High-radius))ball_vy=-ball_vy;
}void updateWithInput()//与用户输入有关的更新
{}void gameover()
{EndBatchDraw();closegraph();
}int main()
{startup();//数据的初始化while(1){clean();//把之前绘制的内容清除updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新show();//显示新画面}
}

效果图如下:

三、控制挡板

代码如下:

#include<conio.h>
#include<graphics.h>#define High 480 //游戏画面尺寸
#define Width 640//全局变量
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int radius;//小球的半径
int bar_x,bar_y;//挡板的中心坐标
int bar_high,bar_width;//挡板的高度和宽度
int bar_left,bar_right,bar_top,bar_bottom;//挡板的左右上下位置坐标void startup()//数据的初始化
{ball_x=Width/2;ball_y=High/2;ball_vx=1;ball_vy=1;radius=20;bar_high=High/20;bar_width=Width/5;bar_x=Width/2;bar_y=High-bar_high/2;bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;bar_top=bar_y-bar_high/2;bar_bottom=bar_y+bar_high/2;initgraph(Width,High);BeginBatchDraw();
}void clean()//显示画面
{setcolor(BLACK);//绘制黑线,黑色填充的圆setfillcolor(BLACK);fillcircle(ball_x,ball_y,radius);bar(bar_left,bar_top,bar_right,bar_bottom);//绘制黑色,黑色填充的挡板
}void show()//显示画面
{setcolor(YELLOW);//绘制黄线,绿色填充的圆setfillcolor(GREEN);fillcircle(ball_x,ball_y,radius);bar(bar_left,bar_top,bar_right,bar_bottom);//绘制黄色,绿色填充的挡板FlushBatchDraw();Sleep(3);
}void updateWithoutInput()//与用户输入无关的更新
{//挡板和小球碰撞,小球反弹if(((ball_y+radius>=bar_top)&&(ball_y+radius<bar_bottom-bar_high/3))||((ball_y-radius<=bar_bottom)&&(ball_y-radius>bar_top-bar_high/3)))if((ball_x>=bar_left)&&(ball_x<=bar_right))ball_vy=-ball_vy;ball_x=ball_x+ball_vx;ball_y=ball_y,ball_vy;//更新小球的坐标if( (ball_x<=radius)||(ball_x>=Width-radius))ball_vx=-ball_vx;if( (ball_y<=radius)||(ball_y>=High-radius))ball_vy=-ball_vy;
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input=getch();if(input=='a'&&bar_left>0){bar_x=bar_x-15;//位置左移bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;}if(input=='d'&&bar_right<Width){bar_x=bar_x+15;//位置左移bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;}if(input=='w'&&bar_top>0){bar_y=bar_y-15;//位置左移bar_top=bar_y-bar_high/2;bar_bottom=bar_y+bar_high/2;}if(input=='s'&&bar_bottom<High){bar_y=bar_y+15;//位置右移bar_top=bar_y-bar_high/2;bar_bottom=bar_y+bar_high/2;}}
}void gameover()
{EndBatchDraw();closegraph();
}int main()
{startup();//数据的初始化while(1){clean();//把之前绘制的内容清除updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新show();//显示新画面}
}

效果图如下:

四、消砖块


代码如下:

#include<conio.h>
#include<graphics.h>#define High 480 //游戏画面尺寸
#define Width 640
#define Brick_num 10//全局变量
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int radius;//小球的半径
int bar_x,bar_y;//挡板的中心坐标
int bar_high,bar_width;//挡板的高度和宽度
int bar_left,bar_right,bar_top,bar_bottom;//挡板的左右上下位置坐标int isBrickExisted[Brick_num];//每个砖块是否存在,1为存在,0为没有了
int brick_high,brick_width;//每个砖块的高度和宽度void startup()//数据的初始化
{ball_x=Width/2;ball_y=High/2;ball_vx=1;ball_vy=1;radius=20;bar_high=High/20;bar_width=Width/5;bar_x=Width/2;bar_y=High-bar_high/2;bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;bar_top=bar_y-bar_high/2;bar_bottom=bar_y+bar_high/2;brick_width=Width/Brick_num;brick_high=High/Brick_num;int i;for(i=0;i<Brick_num;i++)isBrickExisted[i]=1;initgraph(Width,High);BeginBatchDraw();
}void clean()//显示画面
{setcolor(BLACK);//绘制黑线,黑色填充的圆setfillcolor(BLACK);fillcircle(ball_x,ball_y,radius);bar(bar_left,bar_top,bar_right,bar_bottom);//绘制黑色,黑色填充的挡板int i,brick_left,brick_right,brick_top,brick_bottom;for(i=0;i<Brick_num;i++){brick_left=i*brick_width;brick_right=brick_left+brick_width;brick_top=0;brick_bottom=brick_high;if(!isBrickExisted[i])//砖块没有了,绘制黑色fillrectangle(brick_left,brick_top,brick_right,brick_bottom);}
}void show()//显示画面
{setcolor(YELLOW);//绘制黄线,绿色填充的圆setfillcolor(GREEN);fillcircle(ball_x,ball_y,radius);bar(bar_left,bar_top,bar_right,bar_bottom);//绘制黄色,绿色填充的挡板int i,brick_left,brick_right,brick_top,brick_bottom;for(i=0;i<Brick_num;i++){brick_left=i*brick_width;brick_right=brick_left+brick_width;brick_top=0;brick_bottom=brick_high;if(isBrickExisted[i])//砖块存在,绘制砖块{setcolor(WHITE);setfillcolor(RED);fillrectangle(brick_left,brick_top,brick_right,brick_bottom);//绘制砖块}}FlushBatchDraw();Sleep(3);
}void updateWithoutInput()//与用户输入无关的更新
{//挡板和小球碰撞,小球反弹if(((ball_y+radius>=bar_top)&&(ball_y+radius<bar_bottom-bar_high/3))||((ball_y-radius<=bar_bottom)&&(ball_y-radius>bar_top-bar_high/3)))if((ball_x>=bar_left)&&(ball_x<=bar_right))ball_vy=-ball_vy;ball_x=ball_x+ball_vx;ball_y=ball_y+ball_vy;//更新小球的坐标//小球和边界碰撞if( (ball_x<=radius)||(ball_x>=Width-radius))ball_vx=-ball_vx;if( (ball_y<=radius)||(ball_y>=High-radius))ball_vy=-ball_vy;//判断小球是否和某个砖块碰撞int i,brick_left,brick_right,brick_top,brick_bottom;for(i=0;i<Brick_num;i++){if(isBrickExisted[i])//砖块存在才判断{brick_left=i*brick_width;brick_right=brick_left+brick_width;brick_bottom=brick_high;if((ball_y==brick_bottom+radius)&&(ball_x>=brick_left)&&(ball_x<=brick_right)){isBrickExisted[i]=0;ball_vy=-ball_vy;}}}
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input=getch();if(input=='a'&&bar_left>0){bar_x=bar_x-15;//位置左移bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;}if(input=='d'&&bar_right<Width){bar_x=bar_x+15;//位置左移bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;}}
}void gameover()
{EndBatchDraw();closegraph();
}int main()
{startup();//数据的初始化while(1){clean();//把之前绘制的内容清除updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新show();//显示新画面}
}

效果图如下:

五、鼠标交互


先看一个关于鼠标交互的实例

#include<graphics.h>
#include<conio.h>
int main(void)
{initgraph(640,480);//初始化图形窗口MOUSEMSG m;//定义鼠标消息while(1){m=GetMouseMsg();//获取一条鼠标消息if(m.uMsg==WM_MOUSEMOVE){putpixel(m.x,m.y,WHITE);//鼠标移动的时候画小白点}else if(m.uMsg==WM_LBUTTONDOWN){rectangle(m.x-5,m.y-5,m.x+5,m.y+5);//鼠标左键按下时在鼠标位置画一个方块}else if(m.uMsg==WM_RBUTTONUP){circle(m.x,m.y,10);//鼠标右键按下时在鼠标位置画一个圆}}return 0;
}
用鼠标控制挡板移动,按鼠标左键初始化小球位置

代码如下:

#include<conio.h>
#include<graphics.h>#define High 480 //游戏画面尺寸
#define Width 640
#define Brick_num 10//全局变量
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int radius;//小球的半径
int bar_x,bar_y;//挡板的中心坐标
int bar_high,bar_width;//挡板的高度和宽度
int bar_left,bar_right,bar_top,bar_bottom;//挡板的左右上下位置坐标int isBrickExisted[Brick_num];//每个砖块是否存在,1为存在,0为没有了
int brick_high,brick_width;//每个砖块的高度和宽度void startup()//数据的初始化
{ball_x=Width/2;ball_y=High/2;ball_vx=1;ball_vy=1;radius=20;bar_high=High/20;bar_width=Width/5;bar_x=Width/2;bar_y=High-bar_high/2;bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;bar_top=bar_y-bar_high/2;bar_bottom=bar_y+bar_high/2;brick_width=Width/Brick_num;brick_high=High/Brick_num;int i;for(i=0;i<Brick_num;i++)isBrickExisted[i]=1;initgraph(Width,High);BeginBatchDraw();
}void clean()//显示画面
{setcolor(BLACK);//绘制黑线,黑色填充的圆setfillcolor(BLACK);fillcircle(ball_x,ball_y,radius);bar(bar_left,bar_top,bar_right,bar_bottom);//绘制黑色,黑色填充的挡板int i,brick_left,brick_right,brick_top,brick_bottom;for(i=0;i<Brick_num;i++){brick_left=i*brick_width;brick_right=brick_left+brick_width;brick_top=0;brick_bottom=brick_high;if(!isBrickExisted[i])//砖块没有了,绘制黑色fillrectangle(brick_left,brick_top,brick_right,brick_bottom);}
}void show()//显示画面
{setcolor(YELLOW);//绘制黄线,绿色填充的圆setfillcolor(GREEN);fillcircle(ball_x,ball_y,radius);bar(bar_left,bar_top,bar_right,bar_bottom);//绘制黄色,绿色填充的挡板int i,brick_left,brick_right,brick_top,brick_bottom;for(i=0;i<Brick_num;i++){brick_left=i*brick_width;brick_right=brick_left+brick_width;brick_top=0;brick_bottom=brick_high;if(isBrickExisted[i])//砖块存在,绘制砖块{setcolor(WHITE);setfillcolor(RED);fillrectangle(brick_left,brick_top,brick_right,brick_bottom);//绘制砖块}}FlushBatchDraw();Sleep(3);
}void updateWithoutInput()//与用户输入无关的更新
{//挡板和小球碰撞,小球反弹if(((ball_y+radius>=bar_top)&&(ball_y+radius<bar_bottom-bar_high/3))||((ball_y-radius<=bar_bottom)&&(ball_y-radius>bar_top-bar_high/3)))if((ball_x>=bar_left)&&(ball_x<=bar_right))ball_vy=-ball_vy;ball_x=ball_x+ball_vx;ball_y=ball_y+ball_vy;//更新小球的坐标//小球和边界碰撞if( (ball_x<=radius)||(ball_x>=Width-radius))ball_vx=-ball_vx;if( (ball_y<=radius)||(ball_y>=High-radius))ball_vy=-ball_vy;//判断小球是否和某个砖块碰撞int i,brick_left,brick_right,brick_top,brick_bottom;for(i=0;i<Brick_num;i++){if(isBrickExisted[i])//砖块存在才判断{brick_left=i*brick_width;brick_right=brick_left+brick_width;brick_bottom=brick_high;if((ball_y==brick_bottom+radius)&&(ball_x>=brick_left)&&(ball_x<=brick_right)){isBrickExisted[i]=0;ball_vy=-ball_vy;}}}
}void updateWithInput()//与用户输入有关的更新
{/*char input;if(kbhit()){input=getch();if(input=='a'&&bar_left>0){bar_x=bar_x-15;//位置左移bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;}if(input=='d'&&bar_right<Width){bar_x=bar_x+15;//位置左移bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;}}*/MOUSEMSG m;//定义鼠标信息if(MouseHit())//这个函数用于检测当前是否有鼠标消息{m=GetMouseMsg();//获取一条鼠标消息if(m.uMsg==WM_MOUSEMOVE){//挡板的位置等于鼠标所在的位置bar_x=m.x;bar_y=m.y;bar_left=bar_x-bar_width/2;bar_right=bar_x+bar_width/2;bar_top=bar_y-bar_high/2;bar_bottom=bar_y+bar_high/2;}else if(m.uMsg==WM_LBUTTONDOWN){ball_x=bar_x;//初始化小球的位置为挡板上面中心ball_y=bar_top-radius-3;}}
}void gameover()
{EndBatchDraw();closegraph();
}int main()
{startup();//数据的初始化while(1){clean();//把之前绘制的内容清除updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新show();//显示新画面}
}

效果图如下:

项目: 用easyx实现消砖块相关推荐

  1. 项目: 用数组实现反弹球消砖块

    项目:用数组实现反弹球消砖块 一.效果展示: 二.代码如下: 一.效果展示: 二.代码如下: #include<stdio.h> #include<string.h> #inc ...

  2. 开维控制精灵 Ctrl js 快手小游戏 - 自动消砖块

    开维控制精灵 Ctrl.js 快手小游戏 - 自动消砖块 Ctrl.js是基于js语法规则的控制类脚本语言,用于自动化软件测试. Ctrl.js 需要在手机上下载"开维控制精灵", ...

  3. C语言实现【小游戏——反弹球消砖块】

    目录: 1.目标要求: 2.C语言代码: 3.运行结果: 1.目标要求: 1.击中上方方块'H',分数加1 2.下方控制线没有接到小球时,游戏结束 2.C语言代码: #include<stdio ...

  4. 【C语言】数组反弹球消砖块

    数组反弹球消砖块 一.模板 二.反弹球 三.增加挡板 四.消砖块和计数功能 五.最终成果 一.模板 简单的模板,目前由头文件,全局变量,清屏函数,初始化数据,显示画面,与用户有关的更新,与用户无关的更 ...

  5. VUE+Canvas 实现桌面弹球消砖块小游戏

    大家都玩过弹球消砖块游戏,左右键控制最底端的一个小木板平移,接住掉落的小球,将球弹起后消除画面上方的一堆砖块. 那么用VUE+Canvas如何来实现呢?实现思路很简单,首先来拆分一下要画在画布上的内容 ...

  6. 项目: 用函数实现反弹球消砖块

    目录 一.项目描述和最终的成果展示 二.封装后的弹跳小球 三.显示移动挡板 四.反弹小球 五.添加砖块并实现打砖块操作 一.项目描述和最终的成果展示 这是在上一次弹跳小项目上进行了一系列的优化和封装. ...

  7. C语言之五子棋项目 基于EasyX图形库

    C语言之五子棋 前言 一.EasyX图形库下载与安装 1.EasyX图形库下载 2.VS2019设置EasyX图形库 二.五子棋中用到的图形库知识 1.初始化页面 2.文字显示 3.鼠标操作 4.棋盘 ...

  8. C语言——反弹球消砖块

    目录 前言 一.小球代码的重构 函数 二. 实现游戏的边框 三.显示移动挡板 四.反弹小球 五.消除砖块 六.玩家输入 getchar() kbhit() 七.结尾--最后实现的代码 #define ...

  9. 项目: 用Easyx绘制围棋和象棋的棋盘

    目录 一.绘制围棋棋盘 代码如下: 效果图如下: 二.绘制象棋棋盘 代码如下: 效果图如下: 一.绘制围棋棋盘 代码如下: #include<graphics.h> #include< ...

最新文章

  1. RHEL/Fedora/CentOs的系统服务优化
  2. js实现kmp算法_「leetcode」459.重复的子字符串:KMP算法还能干这个!
  3. HTML5火焰文字特效DEMO演示---转载
  4. 【转】执行Import-SPWeb报错Import-SPWeb : Requested value 'PublishingPages' was not found
  5. linux搜索pdf文件,桌面应用|如何使用 pdfgrep 从终端搜索 PDF 文件
  6. 防水耐脏,超大容量双肩包,限时拼团仅需49元
  7. java canvas旋转_在HTML5 Canvas上将图像旋转90度
  8. 【Algorithm】冒泡排序
  9. CCF 2016-4-4游戏
  10. php面向对象封装mysql_PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)...
  11. 转: android编译过程(流程图)
  12. Intellij Idea打包jar
  13. 宝塔面板FTP连接方法
  14. c语言string函数的用法_C语言基础| 指针和函数
  15. JavaSE总结(适合Java期末考试复习,JavaSE部分知识回顾)
  16. 【R语言】结巴分词与词性提取(以“提取知乎问题标题的频繁词前100个形容词”实战为例)(3月25日学习笔记)
  17. 15款超好用的短链接在线生成器(新浪t.cn、腾讯url.cn)
  18. Java IO流中偏移量是什么意思
  19. 微信小程序 + 腾讯位置服务获取全国城市列表
  20. 视觉目标检测-05:使用目标区域的提取方法(手机iVcam与电脑iVcam之间相机的链接)

热门文章

  1. 使用coding.net上传项目
  2. Gitorious安装与配置
  3. 成功开源项目证明Web是开源最大成功
  4. 【原创】FPGA (Verilog/NIOS II/Microblaze) 编程小提醒
  5. Item 29. Virtual Constructors and PrototypeItem 30. Factory Method
  6. 区块链预言机(4)内在机制
  7. 在 Eclipse 上建立一个 JSP
  8. 数学建模_随机森林分类模型详解Python代码
  9. CTF——angr使用学习记录
  10. JavaScript之自定义对象