-
Notifications
You must be signed in to change notification settings - Fork 0
/
Zeetris.cpp
121 lines (95 loc) · 3.48 KB
/
Zeetris.cpp
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
114
115
116
117
118
119
120
121
#include <iostream>
#include <SFML/Graphics.hpp> /* 处理图像 */
#include <SFML/Audio.hpp> /* 处理声音 */
#include <time.h> /* 处理时间 */
#include <Windows.h>
#include <string>
#include "Button.h"
#include "Display.h"
#include "GameSetting.h"
#include "Game.h"
using namespace sf;
using namespace std::chrono;
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
int main()
{
RenderWindow window(
VideoMode(1024, 768), /* 窗口分辨率 */
"Zeetris"); /* 窗口标题 */
GameSetting gameSetting;
Font font;
font.loadFromFile("media/fonts/proportional.ttf");
Music backgroundMusic;
backgroundMusic.openFromFile(
"media/music/other side - Lena Raine.wav"); /* 加载背景音乐 */
backgroundMusic.setLoop(true); /* 设置重复播放音乐 */
backgroundMusic.setVolume(gameSetting.volume);
backgroundMusic.play(); /* 播放音乐 */
while (window.isOpen()) {
Event event;
Button playButton, settingButton, exitButton;
Texture titleTexture;
titleTexture.loadFromFile("media/image/title.png");
Sprite title(titleTexture);
while (1) {
window.clear();
title.setScale(0.5f, 0.5f);
title.setPosition(400.0f, 400.0f);
window.draw(title);
playButton.window = &window;
settingButton.window = &window;
exitButton.window = &window;
playButton.setButton("media/image/button/start.png", 0.0f, 100.0f, 3);
settingButton.setButton("media/image/button/setting.png", 0.0f, 200.0f, 3);
exitButton.setButton("media/image/button/exit.png", 0.0f, 300.0f, 3);
playButton.draw(font, 80, L"开始");
settingButton.draw(font, 80, L"设置");
exitButton.draw(font, 80, L"退出");
displayText(&window, font, L"操作说明:\nA/D 向左/向右移动\nS 软降\nO/P 逆时针/顺时针旋转\n空格 硬降\n左shift 暂存", 30, 0, 500, 1, 1, false);
window.display();
window.pollEvent(event);
Vector2i mousePos = Mouse::getPosition(window);
Vector2f mousePosF(static_cast<float>(mousePos.x), static_cast<float>(mousePos.y));
if (playButton.click(event, mousePos, mousePosF)) {
break;
}
//设置
if (settingButton.click(event, mousePos, mousePosF)) {
SettingButton volume;
Button backBtn;
backBtn.window = &window;
while (1) {
window.clear();
backBtn.setButton("media/image/button/button.png", 900.0f, 700.0f, 2);
backBtn.draw(font, 40, L"back");
volume.setButton(0, 0, font, gameSetting.volume);
FloatRect box = volume.subButton.buttonSprite.getGlobalBounds();
volume.window = &window;
volume.draw(&window, font, 48, L"音量:" + to_wstring(gameSetting.volume));
window.display();
window.pollEvent(event);
Vector2i mousePos = Mouse::getPosition(window);
Vector2f mousePosF(static_cast<float>(mousePos.x), static_cast<float>(mousePos.y));
gameSetting.volume += volume.click(event, mousePos, mousePosF) * 10;
if (gameSetting.volume > 100)gameSetting.volume = 100;
else if (gameSetting.volume < 0)gameSetting.volume = 0;
backgroundMusic.setVolume(gameSetting.volume);
if (backBtn.click(event, mousePos, mousePosF)) {
break;
}
}
}
if (exitButton.click(event, mousePos, mousePosF)
|| event.type == Event::Closed
|| event.key.code == Keyboard::Escape) {
window.close();
return 0;
}
}
Game game;
game.window = &window;
game.startGame(font, gameSetting);
window.clear();
}
return(0);
}