parent
ede2a09749
commit
ee36ec00d5
@ -0,0 +1,146 @@ |
||||
/*
|
||||
OneLoneCoder.com - Programming The Matrix |
||||
"Ribbet" - @Javidx9 |
||||
|
||||
Disclaimer |
||||
~~~~~~~~~~ |
||||
I don't care what you use this for. It's intended to be educational, and perhaps |
||||
to the oddly minded - a little bit of fun. Please hack this, change it and use it |
||||
in any way you see fit. BUT, you acknowledge that I am not responsible for anything |
||||
bad that happens as a result of your actions. However, if good stuff happens, I |
||||
would appreciate a shout out, or at least give the blog some publicity for me. |
||||
Cheers! |
||||
|
||||
Background |
||||
~~~~~~~~~~ |
||||
I hit 0x1FF subscribers, so celebrated with a live stream! |
||||
|
||||
Controls |
||||
~~~~~~~~ |
||||
None, just spot the blonde, brunette, etc, etc... |
||||
|
||||
Author |
||||
~~~~~~ |
||||
Twitter: @javidx9 |
||||
Blog: www.onelonecoder.com |
||||
|
||||
Video: |
||||
~~~~~~ |
||||
https://youtu.be/s7EbrvA188A
|
||||
|
||||
|
||||
Last Updated: 17/09/2017 |
||||
*/ |
||||
|
||||
#include <iostream> |
||||
#include <string> |
||||
using namespace std; |
||||
|
||||
#include "olcConsoleGameEngine.h" |
||||
|
||||
|
||||
class OneLoneCoder_Matrix : public olcConsoleGameEngine |
||||
{ |
||||
public: |
||||
OneLoneCoder_Matrix() |
||||
{ |
||||
m_sAppName = L"Matrix"; |
||||
} |
||||
|
||||
private: |
||||
struct sStreamer |
||||
{ |
||||
int nColumn = 0; |
||||
float fPosition = 0; |
||||
float fSpeed = 0; |
||||
wstring sText; |
||||
}; |
||||
|
||||
list<sStreamer> listStreamers; |
||||
|
||||
int nMaxStreamers = 300; |
||||
|
||||
wchar_t RandomCharacter() |
||||
{ |
||||
return (wchar_t)(rand() % 0x1EF + 0x00C0); |
||||
return (wchar_t)(rand() % 93 + 33); // Random ASCII
|
||||
} |
||||
|
||||
void PrepareStreamer(sStreamer *s) |
||||
{ |
||||
s->nColumn = rand() % ScreenWidth(); |
||||
s->fPosition = 0; |
||||
s->fSpeed = rand() % 40 + 5; |
||||
s->sText.clear(); |
||||
|
||||
int nStreamerLength = rand() % 80 + 10; |
||||
for (int i = 0; i < nStreamerLength; i++) |
||||
s->sText.append(1, RandomCharacter()); |
||||
|
||||
//s->sText = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
} |
||||
|
||||
|
||||
protected: |
||||
// Called by olcConsoleGameEngine
|
||||
virtual bool OnUserCreate() |
||||
{ |
||||
for (int n = 0; n < nMaxStreamers; n++) |
||||
{ |
||||
sStreamer s; |
||||
PrepareStreamer(&s); |
||||
listStreamers.push_back(s); |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
// Called by olcConsoleGameEngine
|
||||
virtual bool OnUserUpdate(float fElapsedTime) |
||||
{ |
||||
// Clear Screen
|
||||
Fill(0, 0, ScreenWidth(), ScreenHeight(), PIXEL_SOLID, 0); |
||||
|
||||
for (auto &s : listStreamers) |
||||
{ |
||||
s.fPosition += fElapsedTime * s.fSpeed;
|
||||
for (int i = 0; i < s.sText.size(); i++) |
||||
{ |
||||
// If you hate ternary operators do this
|
||||
// start ->
|
||||
short col = s.fSpeed < 15.0f ? FG_DARK_GREEN : FG_GREEN; // ;-)
|
||||
if (i == 0) |
||||
col = FG_WHITE; |
||||
else |
||||
if (i <= 3) |
||||
col = FG_GREY; |
||||
|
||||
int nCharIndex = (i - (int)s.fPosition) % s.sText.size(); |
||||
|
||||
Draw(s.nColumn, (int)s.fPosition - i, s.sText[nCharIndex], col); |
||||
// <- end
|
||||
|
||||
// If you like them, do this!
|
||||
//Draw(s.nColumn, (int)s.fPosition - i, s.sText[(abs(i - (int)s.fPosition) % s.sText.size())], i == 0 ? FG_WHITE : i<=3 ? FG_GREY: i>=s.sText.size()-2 || s.fSpeed < 15.0f? FG_DARK_GREEN: FG_GREEN);
|
||||
|
||||
// Missed this out on live stream, occasionally glitch a character
|
||||
if (rand() % 1000 < 5) |
||||
s.sText[i] = RandomCharacter(); |
||||
} |
||||
|
||||
if ( s.fPosition - s.sText.size() >= ScreenHeight()) |
||||
PrepareStreamer(&s); |
||||
|
||||
} |
||||
return true; |
||||
} |
||||
}; |
||||
|
||||
|
||||
int main() |
||||
{ |
||||
// Use olcConsoleGameEngine derived app
|
||||
OneLoneCoder_Matrix game; |
||||
game.ConstructConsole(128, 80, 12, 12); |
||||
game.Start(); |
||||
return 0; |
||||
} |
Loading…
Reference in new issue