本文主要向大家介绍了C/C++知识点之c语言 弹弹球小游戏,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

#include

#include

#include

#include

#include

#pragma comment(lib, "WINMM.LIB")

#define BRICK_NUM 100

//形状类型

#define SQUARE  1

#define STAR 2

#define DIAMOND 3

/*

建立对应模型:20/80  程序:核心代码20% 非核心的代码80%

1、砖块:描述砖块

2、球

3、条形木块

*/

typedef struct Point

{

int x;

int y;

} Point;

//球数据模型

typedef struct Ball

{

//坐标

Point point;

//形状,普通 火球 激光

int shape;

//水平方向  r:1 l:-1 :  'l' 'r'

int hdir;

//垂直方向  u :1 d:-1

int vdir;

//速度

int speed;

} Ball;

//木板

typedef struct Board

{

//坐标

Point point;

//长度

int length;

//方向 左(-1)  右(1)

int dir;

//速度

int speed;

} Board;

//构建类型,摸拟砖块

typedef struct Brick

{

//坐标

Point point;

//形状 :1:正方形(普通砖块 10)  2(圆形 20)   3:

int shape;

} Brick;

//砖块

Brick bricks[BRICK_NUM];

//构建一个球

Ball ball;

//构建一个木板

Board board;

//计数器,

int count=0;

//总分值

int totalScore=0;

void init()

{

srand(time(0));

//初始化球

ball.point.x=36;

ball.point.y=22;

ball.shape=1;

ball.speed=200;

ball.vdir=1;//向上 u   向下 d 向左 l 向右 r

ball.hdir=-1;

//初始化木板

board.point.x=32;

board.point.y=23;

board.length=5;

board.speed=300;

board.dir=-1;

//初始化砖块

initBrick();

}

/*

功能:定位光标(输出)位置

*/

void setPosition(Point point)

{

//用户坐标信息转换成内部坐标信息

COORD coord= {point.x,point.y};

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);

}

/*

可视化显示木板,球

*/

void showBall()

{

setPosition(ball.point);

//颜色:r g b

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY) ;

printf("◎");

}

/*

*可视化显示木板 (重构)--》进化--》

*/

void showBorad()

{

int index=0;

setPosition(board.point);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_INTENSITY) ;

for(index=0; index

{

printf("〓");

}

}

/*

随机数字

*/

int createRan()

{

return rand()%3+1;// 0  12

}

/*

初始化砖块信息

*/

void initBrick()

{

//确定第一个砖块位置 x ,y 程序逻辑会引起修改

int x=10;

int y=2;

int i=0;

//保存最初坐标

int index=0;

//100=25*4

for(index=0; index

{

//确定每一行起始坐标

if(index!=0 && index%25==0) //25  50  75

{

//换行

x=bricks[i*25].point.x;

y=bricks[i*25].point.y+1;

i++;

}

//具体化

bricks[index].point.x=x;

bricks[index].point.y=y;

//形状

bricks[index].shape=createRan();

x=x+2;

}

}

/*

*图形化砖块

*/

void showBrick()

{

int index=0;

for(index=0; index

{

setPosition(bricks[index].point);

switch(bricks[index].shape)

{

case SQUARE:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_INTENSITY);

printf("■");

break;

case STAR:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),

FOREGROUND_GREEN | FOREGROUND_INTENSITY);

printf("★");

break;

case DIAMOND:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_INTENSITY);

printf("◆");

break;

}

}

}

/*

检查小球是否碰到了木板

1 碰

0 没有碰到

*/

int ballToBoard()

{

//木板的启始x值

int bxs=board.point.x;

int bxe=board.point.x+board.length*2;

if( (ball.point.x>=bxs && ball.point.x<=bxe) && ball.point.y==board.point.y-1 )

{

return 1;

}

return 0;

}

void selDir(){

//函数:异步

if(GetAsyncKeyState(VK_LEFT)){

board.dir=-1;

}else if(GetAsyncKeyState(VK_RIGHT)){

board.dir=1;

}

}

/*

移动木板

*/

void moveBoard()

{

int index=0;

setPosition(board.point);

//清除

for(index=0; index

{

printf("  ");

}

//新坐标:

board.point.x+=2*board.dir;

//重新

setPosition(board.point);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_INTENSITY) ;

for(index=0; index

{

printf("〓");

}

}

/*

检查小球是否碰到砖块

0

1

2

3

*/

int ballToBrick(){

int index=0;

for(index=0;index

if(bricks[index].point.x==ball.point.x && bricks[index].point.y==ball.point.y){

return  bricks[index].shape;;

}

}

return 0;

}

/*

移动小球

*/

void moveBall()

{

int left=4;

int right=64;

int top=2;

int bottom=24;

//水平、垂直增量

int stepx=2;

int stepy=1;

int shape=0;

Point p={76,10};

//得到小球原来位置

Point oldPoint=ball.point;

srand(time(0));

//原来位置图形清除

setPosition(oldPoint);

printf("  ");

//检查水平方向

if(ball.point.x

{

//改变水平方向

ball.hdir=1;

}

else if(ball.point.x>right)

{

ball.hdir=-1;

}

//检查垂直方向

if(ball.point.y

{

ball.vdir=-1;

}

else if(ball.point.y>bottom)

{

ball.vdir=1;

}

else if(ballToBoard()==1)

{

ball.vdir=1;

}

//确定小球的新的位置

ball.point.x=oldPoint.x+stepx*ball.hdir;

ball.point.y=oldPoint.y-stepy*ball.vdir;

//判断是否碰到砖块 0 1 2 3

shape=ballToBrick();

//计算碰了多少块砖块

count+=shape>0?1:0;

setPosition(p);

totalScore+=shape*10;

printf("小球碰了%d砖块,计分:%d",count,totalScore);

//重新绘制

setPosition(ball.point);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY) ;

printf("◎");

}

/*

功能模块:绘制围墙 1B=8bit A:1B 中文:2B

*/

void paintWall()

{

int index=0;

Point point;

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);

//上边。下边

for(index=0; index<70; index=index+2)

{

point.x=index;

point.y=0;

setPosition(point);

printf("■");

point.y=26;

setPosition(point);

printf("■");

}

//左边、右边akes[0].x=oldX+2;

for(index=1; index<=26; index++)

{

point.x=0;

point.y=index;

setPosition(point);

printf("■");

point.x=68;

setPosition(point);

printf("■");

}

}

void show()

{

paintWall();

showBrick();

showBall();

showBorad();

}

int main()

{

init();

show();

while(1)

{

moveBall();

selDir();

moveBoard();

//速度

Sleep(ball.speed);

}

return 0;

}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

c语言小游戏编程弹珠游戏,C/C++知识点之c语言 弹弹球小游戏相关推荐

  1. 《HTML5 2D游戏编程核心技术》——第1章,第1.1节Snail Bait游戏

    本节书摘来自华章出版社<HTML5 2D游戏编程核心技术>一书中的第1章,第1.1节,作者[美] 戴维·吉尔里,更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  2. 游戏编程入门(6):开发 Brainiac(记忆对对碰) 游戏

    接上文 游戏编程入门(5):使用键盘和鼠标控制游戏 这个游戏是记忆游戏,将隐藏的方块配对.即点击一下方块,就会翻转出图片页,然后记忆几秒,回归成方块,要将相同图片的方块进行配对. 本章内容包括: 如果 ...

  3. 游戏编程入门(完):开发 Stunt Jumper(摩托车跳跃)游戏

    Stunt Jumper 是一个横向滚动的摩托车跳跃游戏,玩家必须仔细控制摩托车手的速度,以便帮助它越过一排汽车. 本章内容包括: Stunt Jumper 的基本思路 如何设计 Stunt Jump ...

  4. python弹球游戏双球代码键盘操作_python运用pygame库实现双人弹球小游戏

    使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截失败的一方输掉游戏,规则类似于简化版的乒乓球. 因为是第一次用pygam ...

  5. python小游戏编程实例-10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目

    另外要注意:光理论是不够的.这里顺便总大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交 ...

  6. C语言用数组编程矩阵,二维数组—矩阵求和(C语言)

    昨天上机了,之前上机都觉得题目挺简单的,但昨天的题明显比以前难了好吗!字符串二维数组感觉也没教什么呀..所以我也做了蛮久,现依次把这几道题放在这里留作纪念. 题目1:请写一个程序,对于一个m行m列(2 ...

  7. 计算机编程工程师理论知识,结构工程师基础知识点:程序设计语言

    一.程序设计语言 计算机程序设计语言又称算法语言.目前国内外比较通用的算法语言有多种,如BASIC.FORTRAN.PASCAL.ALGOL.C等.随着算法语言本身的发展和完善,同一语言中还有不同的标 ...

  8. 通过游戏编程学Python(番外篇)— 单词小测验

    通过游戏编程学Python 通过游戏编程学Python(6)- 英汉词典.背单词 通过游戏编程学Python(番外篇)- 乱序成语.猜单词 通过游戏编程学Python(5)- 猜成语(下) 通过游戏编 ...

  9. 由《怪物弹珠》浅谈游戏的本地化

    众所周知,<怪物弹珠>是原家用机游戏制作人--冈本吉起在离开CAPCOM后沉寂许久之后的成名作.其作为社交游戏,从2013年推出至今,依然在日本APPStoue处于"霸榜&quo ...

  10. LCP 63 弹珠游戏

    文章目录 题目 注意: 示例 1: 示例 2: 示例 3: c++代码 题目 N*M 大小的弹珠盘的初始状态信息记录于一维字符串型数组 plate 中,数组中的每个元素为仅由 "O" ...

最新文章

  1. 【经验】对一个合格C++高级工程师(音视频方向)的要求
  2. 生产事故 java_记一次生产事故:30万单就这样没了!
  3. cpci检索为什么那么慢_索引原理与慢查询优化
  4. Linux把应用放在桌面上
  5. 全国计算机等级考试题库二级C操作题100套(第75套)
  6. 为什么写C语言弹不出窗口,居然还有SB说C写不出窗口的..
  7. react学习(43)----react中将一个元素渲染为 DOM
  8. Python自带又好用的代码调试工具Pdb学习笔记
  9. 用word这么多年,90%的人居然不知道这12个小技巧
  10. 致加西亚的信 谁动了我的奶酪
  11. Deep metric learning 深度度量学习 总结
  12. grok java_ELK实战 - Grok简易入门
  13. Python2/3的中、英文字符编码与解码输出: UnicodeDecodeError: 'ascii' codec can't decode/encode...
  14. 攻防演练怎样防止个人信息泄露
  15. 敲一万小时的代码可以成为大牛吗?
  16. Nacos注册中心AP架构源码(Distro)下篇
  17. 根据E-R图设计数据库表
  18. 2.3 VLAN间路由
  19. C站万字详解二叉树基本操作演示程序(附图)
  20. 硬币拼凑指定面额的动态规划算法

热门文章

  1. 郝斌c语言课程笔记,郝斌C语言详细笔记(附源码) - 图文
  2. matlab 计算图像峰值信噪比,Matlab评价图像质量,峰值信噪比,模糊系数的计算 | 学步园...
  3. 在线UTF-8转换成GBK工具
  4. tex中的书签与链接hyperref
  5. 学习:网络接口RJ45
  6. 使用Excel内置控件生成二维码
  7. Python Excel 批量生成二维码
  8. matlab 安装 cvx 和 mosek 以及 gurobi
  9. 输入一个三位数,求个位十位百位java代码
  10. java基础代码-实现键盘输入