c语言小游戏编程弹珠游戏,C/C++知识点之c语言 弹弹球小游戏
本文主要向大家介绍了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语言 弹弹球小游戏相关推荐
- 《HTML5 2D游戏编程核心技术》——第1章,第1.1节Snail Bait游戏
本节书摘来自华章出版社<HTML5 2D游戏编程核心技术>一书中的第1章,第1.1节,作者[美] 戴维·吉尔里,更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...
- 游戏编程入门(6):开发 Brainiac(记忆对对碰) 游戏
接上文 游戏编程入门(5):使用键盘和鼠标控制游戏 这个游戏是记忆游戏,将隐藏的方块配对.即点击一下方块,就会翻转出图片页,然后记忆几秒,回归成方块,要将相同图片的方块进行配对. 本章内容包括: 如果 ...
- 游戏编程入门(完):开发 Stunt Jumper(摩托车跳跃)游戏
Stunt Jumper 是一个横向滚动的摩托车跳跃游戏,玩家必须仔细控制摩托车手的速度,以便帮助它越过一排汽车. 本章内容包括: Stunt Jumper 的基本思路 如何设计 Stunt Jump ...
- python弹球游戏双球代码键盘操作_python运用pygame库实现双人弹球小游戏
使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截失败的一方输掉游戏,规则类似于简化版的乒乓球. 因为是第一次用pygam ...
- python小游戏编程实例-10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目
另外要注意:光理论是不够的.这里顺便总大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交 ...
- C语言用数组编程矩阵,二维数组—矩阵求和(C语言)
昨天上机了,之前上机都觉得题目挺简单的,但昨天的题明显比以前难了好吗!字符串二维数组感觉也没教什么呀..所以我也做了蛮久,现依次把这几道题放在这里留作纪念. 题目1:请写一个程序,对于一个m行m列(2 ...
- 计算机编程工程师理论知识,结构工程师基础知识点:程序设计语言
一.程序设计语言 计算机程序设计语言又称算法语言.目前国内外比较通用的算法语言有多种,如BASIC.FORTRAN.PASCAL.ALGOL.C等.随着算法语言本身的发展和完善,同一语言中还有不同的标 ...
- 通过游戏编程学Python(番外篇)— 单词小测验
通过游戏编程学Python 通过游戏编程学Python(6)- 英汉词典.背单词 通过游戏编程学Python(番外篇)- 乱序成语.猜单词 通过游戏编程学Python(5)- 猜成语(下) 通过游戏编 ...
- 由《怪物弹珠》浅谈游戏的本地化
众所周知,<怪物弹珠>是原家用机游戏制作人--冈本吉起在离开CAPCOM后沉寂许久之后的成名作.其作为社交游戏,从2013年推出至今,依然在日本APPStoue处于"霸榜&quo ...
- LCP 63 弹珠游戏
文章目录 题目 注意: 示例 1: 示例 2: 示例 3: c++代码 题目 N*M 大小的弹珠盘的初始状态信息记录于一维字符串型数组 plate 中,数组中的每个元素为仅由 "O" ...
最新文章
- 【经验】对一个合格C++高级工程师(音视频方向)的要求
- 生产事故 java_记一次生产事故:30万单就这样没了!
- cpci检索为什么那么慢_索引原理与慢查询优化
- Linux把应用放在桌面上
- 全国计算机等级考试题库二级C操作题100套(第75套)
- 为什么写C语言弹不出窗口,居然还有SB说C写不出窗口的..
- react学习(43)----react中将一个元素渲染为 DOM
- Python自带又好用的代码调试工具Pdb学习笔记
- 用word这么多年,90%的人居然不知道这12个小技巧
- 致加西亚的信 谁动了我的奶酪
- Deep metric learning 深度度量学习 总结
- grok java_ELK实战 - Grok简易入门
- Python2/3的中、英文字符编码与解码输出: UnicodeDecodeError: 'ascii' codec can't decode/encode...
- 攻防演练怎样防止个人信息泄露
- 敲一万小时的代码可以成为大牛吗?
- Nacos注册中心AP架构源码(Distro)下篇
- 根据E-R图设计数据库表
- 2.3 VLAN间路由
- C站万字详解二叉树基本操作演示程序(附图)
- 硬币拼凑指定面额的动态规划算法