107 lines
2.4 KiB
C
107 lines
2.4 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include "header.h"
|
|||
|
|
|
|||
|
|
// 计时器
|
|||
|
|
class Timer {
|
|||
|
|
public:
|
|||
|
|
Timer() {
|
|||
|
|
interval = 0;
|
|||
|
|
t_start = 0;
|
|||
|
|
open_timer = false;
|
|||
|
|
}
|
|||
|
|
Timer(DWORD _interval): interval(_interval) {
|
|||
|
|
t_start = 0;
|
|||
|
|
open_timer = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 设置间隔
|
|||
|
|
void set(DWORD _interval) { interval = _interval; }
|
|||
|
|
// 开启和关闭计时器
|
|||
|
|
void open() {
|
|||
|
|
open_timer = true;
|
|||
|
|
t_start = clock();
|
|||
|
|
}
|
|||
|
|
void close() { open_timer = false; }
|
|||
|
|
// 获得状态
|
|||
|
|
bool status() { return open_timer; }
|
|||
|
|
// 确认是否经过了间隔时间
|
|||
|
|
bool t_time() {
|
|||
|
|
if(open_timer && clock() - t_start > interval) {
|
|||
|
|
t_start = clock();
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
DWORD t_start;
|
|||
|
|
DWORD interval;
|
|||
|
|
bool open_timer;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 音乐封装类
|
|||
|
|
class Music {
|
|||
|
|
public:
|
|||
|
|
// 获取音乐路径
|
|||
|
|
Music(const char _arr[]): command("") { strcat_s(command, _arr); }
|
|||
|
|
|
|||
|
|
void init(); // 初始化
|
|||
|
|
void open(); // 打开
|
|||
|
|
void play(); // 播放
|
|||
|
|
void pause(); // 暂停
|
|||
|
|
void resume(); // 继续
|
|||
|
|
void stop(); // 停止
|
|||
|
|
void close(); // 关闭
|
|||
|
|
|
|||
|
|
void length(char[]); // 音乐长度
|
|||
|
|
void status(char[]); // 音乐播放状态
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
char command[BUF_SIZE];
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 矩形类,用于碰撞检测
|
|||
|
|
class Rect {
|
|||
|
|
public:
|
|||
|
|
Rect() {}
|
|||
|
|
Rect(int _left, int _top, int _width, int _height): left(_left), top(_top), width(_width), height(_height) {
|
|||
|
|
c_x = left + width / 2;
|
|||
|
|
c_y = top + height / 2;
|
|||
|
|
|
|||
|
|
right = left + width;
|
|||
|
|
bottom = top + height;
|
|||
|
|
|
|||
|
|
radius = (int)sqrt(width * width + height * height) / 2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 返回碰撞的index,否则返回-1
|
|||
|
|
int collision(int, const Rect[]);
|
|||
|
|
bool collision(const Rect&);
|
|||
|
|
|
|||
|
|
// 返回点是否在矩形中
|
|||
|
|
bool point_in(int, int);
|
|||
|
|
|
|||
|
|
// 用于修改矩形大小
|
|||
|
|
void operator*=(double times) {
|
|||
|
|
radius *= times;
|
|||
|
|
width *= times, height *= times;
|
|||
|
|
|
|||
|
|
left = c_x - width / 2;
|
|||
|
|
right = c_x + width / 2;
|
|||
|
|
top = c_y - height / 2;
|
|||
|
|
bottom = c_y + height / 2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 输出矩形
|
|||
|
|
friend ostream& operator<<(ostream& out, const Rect& rect) {
|
|||
|
|
out << rect.left << " " << rect.right << endl;
|
|||
|
|
out << rect.top << " " << rect.bottom << endl;
|
|||
|
|
return out;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int left, right, top, bottom, width, height;
|
|||
|
|
int c_x, c_y;
|
|||
|
|
int radius;
|
|||
|
|
};
|