- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
//VS 2010 C++
#include <Windows.h>
#include <time.h>
#include <queue>
#pragma comment(lib, "winmm.lib")
char shapeForms[7][4][5][6] = {{{{0,0,0,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,1,1,1,1},{0,0,0,0,0}},{{0,0,0,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,1,1,1,1},{0,0,0,0,0}}},{{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,0},{0,0,1,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,0},{0,0,1,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,0},{0,0,1,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,0},{0,0,1,1,0}}},{{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,1},{0,0,0,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,1,0},{0,0,0,1,1},{0,0,0,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,1,0},{0,0,1,1,1},{0,0,0,0,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,1,0},{0,0,1,1,0},{0,0,0,1,0}}},{{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,0},{0,0,0,1,1}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,1,0},{0,0,1,1,0},{0,0,1,0,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,0},{0,0,0,1,1}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,1,0},{0,0,1,1,0},{0,0,1,0,0}}},{{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,1},{0,0,1,0,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,0},{0,0,0,1,0},{0,0,0,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,1,0},{0,1,1,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,1,0}}},{{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,1,1},{0,0,1,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,1,0,0},{0,0,1,1,0},{0,0,0,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,1,1},{0,0,1,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,1,0,0},{0,0,1,1,0},{0,0,0,1,0}}},{{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,1},{0,0,0,0,1}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,1,1,0},{0,0,1,0,0},{0,0,1,0,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,1,0,0,0},{0,1,1,1,0}},{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,1,0},{0,0,0,1,0},{0,0,1,1,0}}}}, field[32][28] = {0}, shape[5], shape_r[5], modifiers[4][3] = {{0,-1,0},{0,1,0},{1,0,0},{0,0,64}}, keys[4] = {'A', 'D', 'W', 'S'}, keyPressed = -1, lk = 0; //shape - 1: shape state; 2: shape type; 3: y; 4: x;
std::queue<std::pair<COORD, std::pair<char, char>>> paste;
COORD t;
unsigned int Score(0);
void draw(COORD cd, char c) {if((cd.Y = cd.Y - 4)||true) if(cd.Y >= 0) {SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cd);
printf("%c", c);}}
bool next_frame(bool mode, bool isShapeFell) {for(char y(0); y != 5; ++y) {for(char x(0); x != 6; ++x) {t.X = shape[4]+x; t.Y = shape[3]+y;
if(shapeForms[shape[2]][shape[1]][y][x] == 1) {if(field[t.Y][t.X] == 0) paste.push(std::make_pair(t, std::make_pair(-37, 1)));
if(field[t.Y][t.X] == 2 || field[t.Y][t.X] == 3) isShapeFell = true;}else if(field[t.Y][t.X] == 1) paste.push(std::make_pair(t, std::make_pair(32, 0)));}}
if(isShapeFell) {while(paste.size()) paste.pop();
if(mode) for(char i(0); i != 31; ++i) for(char j(0); j != 25; ++j) if(field[i][j] == 1) field[i][j] = 3;
return false;}else {for(paste; paste.size() != 0; paste.pop()) {draw(paste.front().first, paste.front().second.first);
field[paste.front().first.Y][paste.front().first.X] = paste.front().second.second;}}
return true;}
bool clearFullLines() {for(char isLineExist(1); isLineExist == 1;) {isLineExist = 0;
for(char j(0), up(0), down(0), cnt(0); j != 31; (++j) && (cnt = 0)) {for(char i(3); i != 25; ++i) if(field[j][i] == 3) if(j < 5) return false; else cnt++;
if(cnt == 22) {if(isLineExist == 0 && (isLineExist = 1) && (down = j)) up = j;
else down = j;}else if(isLineExist == 1 && (Score = Score + down-up+1)) {for(char q = down, tmp(0); q >= char(4); (--q)) for(char p(3); p != 25; (++p) && (tmp = 0)) {for(t.X = p, t.Y = q; tmp == 0; tmp = 1);
field[q][p] = 0; draw(t, 32);
if(field[up+q-down-1][p] == 3) draw(t, -37);
t.Y = up+q-down-1;
field[q][p] = field[up+q-down-1][p];
field[up+q-down-1][p] = 0;}
goto next_search;}}
next_search:;}
return true;}
int main() {timeBeginPeriod(2);
system("mode con cols=42 lines=28");
srand(clock()+time(NULL));
memset(field, 2, sizeof(field));
for(char i(0); i != 28; ++i) for(char j(0), q(0); j != 32; ++j && (q = 0)) for(t.X = i, t.Y = j; q == 0; q = 1) draw(t, -80);
for(char i(3); i != 25; ++i) for(char j(0), q(0); j != 30; ++j && (q = 0)) for(t.X = i, t.Y = j; q == 0; (q = 1) && (field[j][i] = 0)) draw(t, 32);
for(int tm = 100;true;) {next_turn: if(!clearFullLines() && printf("You fail!")) {system("pause");
return 0;}
for(t.X = 30, t.Y = 5; false;);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), t);
printf("Score: %i ", Score);
shape[1] = rand()*4/(RAND_MAX+1); shape[2] = rand()*7/(RAND_MAX+1); shape[4] = rand()*20/(RAND_MAX+1)+3;
for(shape[3] = 0; true; shape[3]++) {for(char h(0); h != 5; ++h) {Sleep(tm); tm = 70;
for(char i(0); i != 4 && keyPressed == -1; ++i) if(GetKeyState(keys[i]) < 0) keyPressed = i;
if(keyPressed != -1 && !(lk == keyPressed && lk == 2)) {for(char j(0); j != 5; ++j) shape_r[j] = shape[j];
shape[4] += modifiers[keyPressed][1]; shape[1] = (shape[1] + modifiers[keyPressed][0])%4;
tm -= modifiers[keyPressed][2];
lk = keyPressed;
keyPressed = -1;
if(!next_frame(false, false)) {for(char j(0); j != 5; ++j) shape[j] = shape_r[j];
if(!next_frame(true, false)) goto next_turn;}}else {if(!next_frame(true, false)) goto next_turn;
if(keyPressed == -1) lk = -1;
if(lk != 2) lk = 0;else keyPressed = -1;}}}}}
Была задача за минимальное кол-во строк реализовать простой тетрис. Особого внимания заслуживает 6 строчка кода. Всё очень плохо?
Управление WSAD.
spivti 26.12.2013 17:44 # +1
Больше так не пиши).
o0oflashero0o 26.12.2013 17:45 # 0
Psionic 27.12.2013 11:02 # 0
bormand 27.12.2013 11:42 # 0
WGH 27.12.2013 21:26 # 0
bormand 27.12.2013 21:28 # 0
А если он будет полностью совместим с M$VC, то в чем смысл? Разве что M$ заипались пилить свой компилятор (как и разрабы Opera), и хотят прикрутить вместо него кланг...
Так что х.з., нужно ли.
WGH 27.12.2013 21:33 # 0
Если clang-cl будет полностью совместим с cl.exe, можно будет юзать его прямо из Visual Studio.
bormand 27.12.2013 21:39 # +2
Все они слишком всепрощающие :(
Psionic 28.12.2013 18:26 # 0
Lure Of Chaos 28.12.2013 19:10 # 0
bormand 28.12.2013 20:07 # 0
О_о
Lure Of Chaos 28.12.2013 20:11 # +1
Publish your games on Windows, Mac, Linux, Android, iOS, BlackBerry and HTML5, all with the same code base."
http://libgdx.badlogicgames.com/index.html
defecate-plusplus 28.12.2013 19:55 # 0
Govnocoder#0xFF 28.12.2013 15:12 # +1
Не перевелись ещё олдфаги на GK.
Говногость 28.12.2013 15:31 # +4
320
Stertor 28.12.2013 15:49 # +1
kegdan 28.12.2013 15:52 # −2
LispGovno 28.12.2013 15:54 # +2
kegdan 28.12.2013 16:05 # 0
Stertor 28.12.2013 16:06 # 0
kegdan 28.12.2013 16:08 # −2
Stertor 28.12.2013 16:16 # 0
LispGovno 28.12.2013 15:52 # −1
6011
Stertor 28.12.2013 16:03 # −2
kegdan 28.12.2013 16:06 # 0
Stertor 28.12.2013 16:19 # 0
Lure Of Chaos 28.12.2013 17:30 # +2
wvxvw 27.12.2013 21:34 # 0
bormand 27.12.2013 21:41 # 0
А юзеры особой разницы не заметят (если будет полная совместимость с M$VC), либо будут материться что M$ пидарасы и все сломали (если ее не будет).
Тут профит разве что в халявной сборке визуалковских проектов без визуалки. Но что делать с либами, которые идут в комплекте визуалки, они же вроде как проприетарные?
wvxvw 27.12.2013 22:43 # 0
Адобу нет профита с разработчиками судиться, они там очень долго делили-рядили, как бы так им разрешить пользоваться проприетарной либой, и чтобы лицензию от Апачи можно было прилепить. В итоге нашли какой-то выход. Думаю Микрософт тоже бы нашел, если бы захотел.
Скорее будет зависеть от позиции разработчиков: согласятся ли они на ткое сожительство, или не будут дошой кривить.
kegdan 27.12.2013 23:29 # 0
Хм. А как же мнимая совместимость с сборками дотнета? (Мнимая ибо плюсы в принципе нормальный CIL код не способны сгенерировать)
guest 27.12.2013 21:35 # −4
багорофичи )))
Какой багор )))
o0oflashero0o 26.12.2013 17:48 # 0
bormand 26.12.2013 19:42 # +2
Трабла в том, что в стандарте плюсов не прописаны такие функции ввода (установка курсора, очистка экрана и т.п.). И нужно либо платформозависимые средства юзать, либо внешнюю кроссплатформенную либу.
> будет ли работать под linux
#include <Windows.h>
o0oflashero0o 26.12.2013 20:24 # 0
bormand 26.12.2013 21:19 # 0
Abbath 26.12.2013 21:40 # 0
LispGovno 26.12.2013 21:02 # 0
Мне последнее время все больше кажется что та часть стандартной библиотеки, та что работает с аппаратурой\ос в сишке и крестах должна быть как можно тоньше.
kegdan 26.12.2013 18:02 # +1
Stertor 27.12.2013 12:32 # +1
-Позорит нас эта голова. Пойдем-ка к крестьянам, пусть они ее отрубят.
-Замолчи, дурак!.. Ведь не ровен час, услышит - начнет, чего доброго, в жопу ебаться!..
kegdan 26.12.2013 18:05 # +5
Какие извращенные задачи
o0oflashero0o 26.12.2013 18:22 # +1
Ещё есть змейка, но там дракон уже не пьяный, а обкуренный.
kegdan 26.12.2013 18:47 # +1
Вопрос - вы суда похвастаться? Для этого вообще то хабра есть
o0oflashero0o 26.12.2013 18:54 # 0
kegdan 26.12.2013 18:56 # +1
o0oflashero0o 26.12.2013 19:00 # 0
o0oflashero0o 26.12.2013 18:55 # 0
kegdan 26.12.2013 18:58 # +3
http://habrahabr.ru/post/202840/
o0oflashero0o 26.12.2013 19:02 # 0
TarasB 27.12.2013 09:36 # 0
без него всё было бы проще, любой код занял бы 1 строку
bormand 27.12.2013 09:50 # 0
TarasB 27.12.2013 10:32 # 0
bormand 27.12.2013 10:42 # 0
556 килобайт высрало от <queue>, <iostream> и <ctime>...
Но код после копипасты или -E перестанет быть кроссплатформенным ;(
Soul_re@ver 26.12.2013 19:02 # 0
Используй оператор «запятая». Заодно хороший способ обфускации.
Строки 26-28:
o0oflashero0o 26.12.2013 19:04 # 0
bormand 26.12.2013 20:00 # 0
> for (t.X = 30, t.Y = 5; false;);
А это тогда что? :) Самый настоящий обход условия. А по сути то же самое, что и t.X = 30, t.Y = 5;
o0oflashero0o 26.12.2013 20:27 # 0
Soul_re@ver 27.12.2013 00:35 # 0
LispGovno 27.12.2013 00:59 # 0
bormand 27.12.2013 06:14 # 0
inkanus-gray 27.12.2013 09:26 # 0
bormand 27.12.2013 09:28 # 0
TarasB 27.12.2013 09:38 # 0
3.14159265 26.12.2013 21:02 # 0
o0oflashero0o 26.12.2013 21:05 # 0
bormand 26.12.2013 21:18 # +1
o0oflashero0o 26.12.2013 21:48 # +1
http://30lines.info/
bormand 26.12.2013 22:01 # 0
Там на сайте у толедо есть и сишная версия, емнип.
TarasB 27.12.2013 09:37 # 0
bormand 27.12.2013 09:48 # 0
Правда я пытался разобрать js, а не C, но я думаю, что логика ничем не отличается, только ввод-вывод другой.
3.14159265 26.12.2013 21:04 # +3
>>shape[1] = rand()*4/(RAND_MAX+1); shape[2] = rand()*7/(RAND_MAX+1); shape[4] = rand()*20/(RAND_MAX+1)+3;
>>for(shape[3] = 0; true; shape[3]++) {for(char h(0); h != 5; ++h) {Sleep(tm); tm = 70;
Читерство.
Это ж C++, юзайте больше препроцессора.
Правильный код в таких конкурсах должен быть абсолютно, подчеркиваю _абсолютно_ нечитаемым.
govnomonad 26.12.2013 18:22 # 0
o0oflashero0o 26.12.2013 18:24 # 0
wvxvw 26.12.2013 20:47 # +2
Dummy00001 27.12.2013 02:26 # +3
читая по диагонали, мозг увидел `taste.poop()`