-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
74 lines (65 loc) · 2.77 KB
/
main.cpp
File metadata and controls
74 lines (65 loc) · 2.77 KB
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
#include <iostream>
#include <chrono>
#include <thread>
#include <poll.h>
#include <unistd.h>
#include <termios.h>
#include <algorithm>
#define CLR_SCORE "\033[1;32m"
#define CLR_HARD "\033[1;31m"
#define CLR_NORM "\033[1;34m"
#define CLR_CTRL "\033[1;33m"
#define CLR_RESET "\033[0m"
int main() {
struct termios oldt, newt;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
int score = 0; bool hardMode = false; char input;
std::cout << CLR_CTRL << "==========================\n SPEED CLICKER\n==========================\n" << CLR_RESET
<< "Controls:\n " << CLR_CTRL << "[h]" << CLR_RESET << " Toggle Hard Mode (10x Speed!)\n "
<< CLR_CTRL << "[q]" << CLR_RESET << " Quit Game\n " << CLR_CTRL << "[Any key]" << CLR_RESET << " Click!\n\n";
std::cout << CLR_CTRL << "Press any key to start..." << CLR_RESET << std::flush;
if (read(STDIN_FILENO, &input, 1) <= 0 || input == 'q') {
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return 0;
}
for (int i = 3; i > 0; --i) {
std::cout << "\r" << CLR_SCORE << "Starting in " << i << "... " << CLR_RESET << std::flush;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
std::cout << "\r" << CLR_SCORE << "GO! " << CLR_RESET << "\n" << std::flush;
tcflush(STDIN_FILENO, TCIFLUSH);
struct pollfd fds[1] = {{STDIN_FILENO, POLLIN, 0}};
auto last_tick = std::chrono::steady_clock::now();
bool updateUI = true;
while (true) {
int timeout_ms = hardMode ? 100 : 1000;
auto now = std::chrono::steady_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - last_tick).count();
int remaining = std::max(0, static_cast<int>(timeout_ms - elapsed));
if (poll(fds, 1, remaining) > 0) {
if (read(STDIN_FILENO, &input, 1) <= 0 || input == 'q') break;
if (input == 'h') hardMode = !hardMode;
else score++;
updateUI = true;
}
now = std::chrono::steady_clock::now();
elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - last_tick).count();
if (elapsed >= timeout_ms) {
score++;
last_tick = now;
updateUI = true;
}
if (updateUI) {
std::cout << "\r" << CLR_SCORE << "Score: " << score << CLR_RESET << " "
<< (hardMode ? CLR_HARD "[HARD MODE]" : CLR_NORM "[NORMAL MODE]")
<< " " << std::flush;
updateUI = false;
}
}
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
std::cout << "\n\n" << CLR_SCORE << "Final Score: " << score << CLR_RESET << "\nThanks for playing!\n";
return 0;
}