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