- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章C++小游戏BrickHit实例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
打砖块小游戏。材料:EasyX图形库.
碰撞的处理,木板移动方法还需要优化.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
//定义 Circle,Brick,Broad
#include<cmath>
#include<graphics.h>
#ifndef _PROPERTY_H_
#define _PROPERTY_H_
struct
Circle {
int
x0, y0, r;
int
mvX, mvY;
COLORREF
color;
virtual
~Circle() {}
Circle(
int
x0_,
int
y0_,
int
r_,
int
mvX_,
int
mvY_,
COLORREF
color_)
:x0(x0_), y0(y0_), r(r_), mvX(mvX_), mvY(mvY_), color(color_) {}
//小球起始位置
void
prtCirl() {
setfillcolor(color);
solidcircle(x0, y0, r);
}
//小球的移动
void
CirlMove() {
setfillcolor(BLACK);
solidcircle(x0, y0, r);
x0 += mvX;
y0 += mvY;
setfillcolor(color);
solidcircle(x0, y0, r);
}
//判断小球是否离开宽口内。
//参数:窗口左上坐标、宽、高。
//离开返回真。
bool
IsCirlQuit(
int
x,
int
y,
int
width,
int
height) {
if
(x0 - x <= r && mvX < 0) {
mvX = -mvX;
return
false
;
}
else
if
(x + width - x0 <= r && mvX > 0) {
mvX = -mvX;
return
false
;
}
else
if
(y0 - y <= r && mvY < 0) {
mvY = -mvY;
return
false
;
}
else
if
(y + height - y0 <= r)
return
true
;
return
false
;
}
};
struct
Brick {
int
x0, y0;
COLORREF
color;
int
height, width;
virtual
~Brick() {}
Brick(
int
x0_,
int
y0_,
int
width_,
int
height_,
COLORREF
color_)
:x0(x0_), y0(y0_), width(width_), height(height_), color(color_) {}
//砖块的绘制
void
prtBrick() {
setfillcolor(color);
solidrectangle(x0, y0, x0 + width, y0 + height);
}
//判断砖块是否与小球发生碰撞
//参数:小球
//发生碰撞返回真
bool
IsCrashCirl(Circle &arg) {
if
(arg.x0 + arg.r < x0 || x0 + width < arg.x0 - arg.r)
return
false
;
int
disY = min(
abs
(y0 - arg.y0),
abs
(y0 + height - arg.y0));
if
(disY <= arg.r) {
arg.mvY = -arg.mvY;
return
true
;
}
return
false
;
}
//砖块的清除
void
BrickClr() {
setfillcolor(BLACK);
solidrectangle(x0, y0, x0 + width, y0 + height);
}
};
struct
Broad :
public
Brick{
int
mvX;
int
floor
, ceiling;
virtual
~Broad() {}
Broad(
int
x0_,
int
y0_,
int
width_,
int
height_,
int
mvX_,
int
floor_,
int
ceiling_,
COLORREF
color_)
:Brick(x0_, y0_, width_, height_, color_), mvX(mvX_),
floor
(floor_), ceiling(ceiling_) {}
//重载,判断木板是否与小球发生碰撞
//参数:小球
//发生碰撞返回真
bool
IsCrashCirl(Circle &arg) {
if
(arg.x0 + arg.r < x0 || x0 + width < arg.x0 - arg.r)
return
false
;
if
(y0 - arg.y0 <= arg.r&&arg.mvY > 0) {
arg.mvY = -arg.mvY;
return
true
;
}
return
false
;
}
//木板移动
void
BroadMove() {
POINT point;
GetCursorPos(&point);
if
(x0 <= point.x&&point.x <= x0)
return
;
BrickClr();
if
(point.x < x0)
x0 = max(x0 - mvX,
floor
);
else
x0 = min(x0 + mvX, ceiling - width);
setfillcolor(color);
solidrectangle(x0, y0, x0 + width, y0 + height);
}
};
#endif // _PROPERTY_H_
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
//Main.cpp
#include<list>
#include<algorithm>
#include"property.cpp"
using
namespace
std;
const
int
WndW = 400, WndH = 400;
//窗口大小
list<Brick> CreatBricks();
bool
theGame(list<Brick> &MyBrks, Broad &MyBrd, Circle&MyCirl);
int
main() {
//brick布局
list<Brick> MyBrks = move(CreatBricks());
//broad:60*20,移速5,WHITE
Broad MyBrd(WndW/2 - 30, WndH - 20, 60, 20, 5, 0, WndW, WHITE);
//circle:半径5,移速5,DARKGRAY
Circle MyCirl(WndW/2 - 10, WndH - 20 - 10, 10, 5, 5, DARKGRAY);
HWND
Hwnd = initgraph(WndW, WndH);
bool
GameOver = theGame(MyBrks, MyBrd, MyCirl);
if
(GameOver)
MessageBox(Hwnd, L
"u Win!"
, L
"BrickHit"
,MB_OK);
else
MessageBox(Hwnd, L
"default!"
, L
"BrickHit"
, MB_OK);
closegraph();
return
0;
}
//bricks的实现
list<Brick> CreatBricks() {
//brick信息:5行10列,40*10
int
Row = 5, Col = 10;
int
BrickW = WndW / Col;
int
BrickH = 10;
list<Brick> MyBrks;
bool
ColChoice =
true
;
for
(
int
i = Row - 1; i >= 0; i--) {
ColChoice = !ColChoice;
for
(
int
j = 0; j < Col; j++)
switch
(ColChoice) {
case
true
:
MyBrks.push_back({ BrickW*j,BrickH*i,BrickW,BrickH,LIGHTGREEN });
ColChoice = !ColChoice;
break
;
case
false
:
MyBrks.push_back({ BrickW*j,BrickH*i,BrickW,BrickH,LIGHTCYAN });
ColChoice = !ColChoice;
break
;
}
}
return
MyBrks;
}
//游戏的实现
bool
theGame(list<Brick> &MyBrks, Broad &MyBrd, Circle&MyCirl) {
//游戏起始界面
for_each(MyBrks.begin(), MyBrks.end(), [](Brick it) { it.prtBrick(); });
MyBrd.prtBrick();
MyCirl.prtCirl();
//游戏循环
while
(!MyBrks.empty()) {
MyCirl.CirlMove();
MyBrd.BroadMove();
if
(MyCirl.IsCirlQuit(0, 0, WndW, WndH))
return
false
;
MyBrd.IsCrashCirl(MyCirl);
auto theBrick = find_if(MyBrks.begin(), MyBrks.end(),
[&MyCirl](Brick it) {
return
it.IsCrashCirl(MyCirl); });
if
(theBrick != MyBrks.end()) {
theBrick->BrickClr();
MyBrks.erase(theBrick);
}
Sleep(30);
}
return
true
;
}
|
总结 。
以上所述是小编给大家介绍的C++小游戏BrickHit实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:https://www.cnblogs.com/WYK-paint/archive/2018/02/11/8441455.html 。
最后此篇关于C++小游戏BrickHit实例代码的文章就讲到这里了,如果你想了解更多关于C++小游戏BrickHit实例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
现在我正在学习一些 Javascript,但由于我的技能很低,现在遇到了很多问题。我需要一些帮助来解决这段代码中的几个问题。 我正在尝试编写一个名为“打鱼”的游戏。它有一个计时器、分数和 onclic
我知道网上有几个类似的问题,但没有一个真正对我有帮助。我只是想绘制一个网格,并为用户提供点击这些网格单元格的选项。每次用户单击时,单元格的颜色/填充应从黑色变为白色。 我目前正在做的事情如下: BLA
我正在创建一个小游戏,其中一只猫必须捕获一只随机移动的老鼠。代码背后的想法是首先随机移动鼠标,然后检查猫相对于鼠标的位置。该代码对于较小的网格(CatAndMouse(...) 中的第一个输入)工作得
这个问题在这里已经有了答案: Iterating through a Collection, avoiding ConcurrentModificationException when removi
本文实例为大家分享了C语言实现三子棋(井字棋)小游戏的具体代码,供大家参考,具体内容如下 推荐阅读顺序(不建议跳过) 先看实现之后的界面 —— 然后看分析程序要实现的步骤 —— 之后在看翻到te
我想在我正在开发的简单平台游戏中实现实体块,但我不知道如何实现。 我尝试了很多东西,但没有任何效果。 我想做以下事情: 当我跳上去时,我会留在那里 当我跳到它下面时,我不会到达顶部 当我从左侧跳时,我
我正在 WinForms 中制作简单的图形游戏,目前我希望在游戏开始时显示一个菜单。我唯一的问题是我不确定应用程序本身的结构,这是我目前所拥有的: 1) 要有菜单形式和游戏形式。选择新游戏后,创建游戏
我试图让我的玩家 rect 在侧面和底部与我的敌人 rect 碰撞,因此玩家 rect 不会抛出敌人的 rect 但我不知道为什么它一直将我传送到它根本不起作用 VIDEo platform.rec
我是一名优秀的程序员,十分优秀!