#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#define HEI 23
#define WID 12
void CreatigneTetrimono(int);
void draw(int);
void sec_counter(int);
int locate(int y,int x);
int gamescore[13];
int stat[50];
int field[HEI][WID];//ゲームエリア
int next[4][2];//Nextエリア
///////////////////////////////
int main(void){
int state[6];
int tetrimino,tetriminoS;
int timer=0;
int y,x;//エリア制御
///////////////////////////////
for(y=0;y<HEI;y++)
for(x=0;x<WID;++x)
field[y][x]= x<=0||WID-1<=x||HEI-1<=y
?2: y<=1?3 :0;
printf("テトリス!!!\n"
"Enterキーの入力でゲームがスタートします");
while(getchar()!='\n'){}//EnterKeyWait
printf("Game Start! ");
Sleep(1000);//カウントダウン3sec
for(y=3;y>=0;--y)sec_counter(y);
system("cls");
srand((unsigned)time(NULL));// 乱数のシードを与える
stat[0]=tetriminoS=0;//テトリミノステータス変数初期化
//////////////////////////////
while(1){//ゲームループ開始
do tetrimino=rand()%7+1;//乱数1-7//1I/2O/3S/4Z/5J/6L/7T
while(tetriminoS==tetrimino);//同一種類の連発禁止
CreatigneTetrimono(tetrimino);
stat[0]++;
locate(0,0); //ゲームエリアの描画
for(y=0;y<HEI;printf("\n",++y)){
for(x=0;x<WID;x++)
draw(field[y][x]);
if(y<=4+1)printf("__");
if(!y)printf("<***NEXT___%d,%d",tetrimino,stat[0]);
if(1<=y&&y<=4) for(x=0;x<2;++x)
draw(next[y-1][x]);
if(y==4+1)printf("stat=%d teto=%d",tetriminoS,tetrimino);
}
Sleep(500);
timer+=500;
if(timer==15000)break;
tetriminoS=tetrimino;
}//ゲームループ終了
//system("cls");
printf("[DM]処理を終了しました");
return 0;
}
void CreatigneTetrimono(int tetrimino){
int y,x,nxt[7][4][2]={
{{0,1},{0,1},{0,1},{0,1}},//I
{{0,0},{0,0},{1,1},{1,1}},//O
{{0,0},{0,1},{1,1},{1,0}},//S
{{0,0},{1,0},{1,1},{0,1}},//Z
{{0,0},{0,1},{0,1},{1,1}},//J
{{0,0},{1,0},{1,0},{1,1}},//L
{{0,0},{0,1},{1,1},{0,1}} //T
};
if(1<=tetrimino&&tetrimino<=7)
for(y=0;y<4;++y)
for(x=0;x<2;++x)
next[y][x]=nxt[tetrimino-1][y][x];
}
void draw(int n){
char*cp[]={"ee","□","■","◆","〇"};
printf(0<=n&&n<=3?cp[1+n]:*cp);}
void sec_counter(int n){
if(1<=n&&n<=10){
printf("%d ",n); Sleep(1000);
}
}
int locate(int y,int x){COORD cor;
static HANDLE hso=INVALID_HANDLE_VALUE;
cor.Y=y; cor.X=x;
if(hso==INVALID_HANDLE_VALUE)
hso=GetStdHandle(STD_OUTPUT_HANDLE);
return hso==INVALID_HANDLE_VALUE ? 0 :
SetConsoleCursorPosition(hso, cor);
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHRpbWUuaD4KI2luY2x1ZGU8d2luZG93cy5oPgojZGVmaW5lIEhFSSAyMwojZGVmaW5lIFdJRCAxMgp2b2lkIENyZWF0aWduZVRldHJpbW9ubyhpbnQpOwp2b2lkIGRyYXcoaW50KTsKdm9pZCBzZWNfY291bnRlcihpbnQpOwppbnQgbG9jYXRlKGludCB5LGludCB4KTsKaW50IGdhbWVzY29yZVsxM107CmludCBzdGF0WzUwXTsKaW50IGZpZWxkW0hFSV1bV0lEXTsvL+OCsuODvOODoOOCqOODquOCogppbnQgbmV4dFs0XVsyXTsvL05leHTjgqjjg6rjgqIKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwppbnQgbWFpbih2b2lkKXsKICBpbnQgc3RhdGVbNl07CiAgaW50IHRldHJpbWlubyx0ZXRyaW1pbm9TOwogIGludCB0aW1lcj0wOwogIGludCB5LHg7Ly/jgqjjg6rjgqLliLblvqEKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIGZvcih5PTA7eTxIRUk7eSsrKQogICAgZm9yKHg9MDt4PFdJRDsrK3gpCiAgICAgIGZpZWxkW3ldW3hdPSB4PD0wfHxXSUQtMTw9eHx8SEVJLTE8PXkKICAgICAgICA/MjogeTw9MT8zIDowOwogIHByaW50Zigi44OG44OI44Oq44K577yB77yB77yBXG4iCiAgICAgICAgICJFbnRlcuOCreODvOOBruWFpeWKm+OBp+OCsuODvOODoOOBjOOCueOCv+ODvOODiOOBl+OBvuOBmSIpOwogIHdoaWxlKGdldGNoYXIoKSE9J1xuJyl7fS8vRW50ZXJLZXlXYWl0CiAgcHJpbnRmKCJHYW1lIFN0YXJ0ISAiKTsKICBTbGVlcCgxMDAwKTsvL+OCq+OCpuODs+ODiOODgOOCpuODszNzZWMKICBmb3IoeT0zO3k+PTA7LS15KXNlY19jb3VudGVyKHkpOwogIHN5c3RlbSgiY2xzIik7CiAgc3JhbmQoKHVuc2lnbmVkKXRpbWUoTlVMTCkpOy8vIOS5seaVsOOBruOCt+ODvOODieOCkuS4juOBiOOCiwogIHN0YXRbMF09dGV0cmltaW5vUz0wOy8v44OG44OI44Oq44Of44OO44K544OG44O844K/44K55aSJ5pWw5Yid5pyf5YyWCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIHdoaWxlKDEpey8v44Ky44O844Og44Or44O844OX6ZaL5aeLCiAgICBkbyB0ZXRyaW1pbm89cmFuZCgpJTcrMTsvL+S5seaVsDEtNy8vMUkvMk8vM1MvNFovNUovNkwvN1QKICAgIHdoaWxlKHRldHJpbWlub1M9PXRldHJpbWlubyk7Ly/lkIzkuIDnqK7poZ7jga7pgKPnmbrnpoHmraIKICAgIENyZWF0aWduZVRldHJpbW9ubyh0ZXRyaW1pbm8pOwogICAgc3RhdFswXSsrOwogICAgbG9jYXRlKDAsMCk7IC8v44Ky44O844Og44Ko44Oq44Ki44Gu5o+P55S7CiAgICBmb3IoeT0wO3k8SEVJO3ByaW50ZigiXG4iLCsreSkpewogICAgICBmb3IoeD0wO3g8V0lEO3grKykKICAgICAgICBkcmF3KGZpZWxkW3ldW3hdKTsKICAgICAgaWYoeTw9NCsxKXByaW50ZigiX18iKTsKICAgICAgaWYoIXkpcHJpbnRmKCI8KioqTkVYVF9fXyVkLCVkIix0ZXRyaW1pbm8sc3RhdFswXSk7CiAgICAgIGlmKDE8PXkmJnk8PTQpIGZvcih4PTA7eDwyOysreCkKICAgICAgICBkcmF3KG5leHRbeS0xXVt4XSk7CiAgICAgIGlmKHk9PTQrMSlwcmludGYoInN0YXQ9JWQgIHRldG89JWQiLHRldHJpbWlub1MsdGV0cmltaW5vKTsKICAgIH0KICAgIFNsZWVwKDUwMCk7CiAgICB0aW1lcis9NTAwOwogICAgaWYodGltZXI9PTE1MDAwKWJyZWFrOwogICAgdGV0cmltaW5vUz10ZXRyaW1pbm87CiAgfS8v44Ky44O844Og44Or44O844OX57WC5LqGCi8vc3lzdGVtKCJjbHMiKTsKICBwcmludGYoIltETV3lh6bnkIbjgpLntYLkuobjgZfjgb7jgZfjgZ8iKTsKICByZXR1cm4gMDsKfQp2b2lkIENyZWF0aWduZVRldHJpbW9ubyhpbnQgdGV0cmltaW5vKXsKaW50IHkseCxueHRbN11bNF1bMl09ewogIHt7MCwxfSx7MCwxfSx7MCwxfSx7MCwxfX0sLy9JCiAge3swLDB9LHswLDB9LHsxLDF9LHsxLDF9fSwvL08KICB7ezAsMH0sezAsMX0sezEsMX0sezEsMH19LC8vUwogIHt7MCwwfSx7MSwwfSx7MSwxfSx7MCwxfX0sLy9aCiAge3swLDB9LHswLDF9LHswLDF9LHsxLDF9fSwvL0oKICB7ezAsMH0sezEsMH0sezEsMH0sezEsMX19LC8vTAogIHt7MCwwfSx7MCwxfSx7MSwxfSx7MCwxfX0gLy9UCn07CiAgaWYoMTw9dGV0cmltaW5vJiZ0ZXRyaW1pbm88PTcpCiAgCWZvcih5PTA7eTw0OysreSkKICAJICBmb3IoeD0wO3g8MjsrK3gpCiAgICAgICAgbmV4dFt5XVt4XT1ueHRbdGV0cmltaW5vLTFdW3ldW3hdOwp9CnZvaWQgZHJhdyhpbnQgbil7CiAgY2hhcipjcFtdPXsiZWUiLCLilqEiLCLilqAiLCLil4YiLCLjgIcifTsKICBwcmludGYoMDw9biYmbjw9Mz9jcFsxK25dOipjcCk7fQp2b2lkIHNlY19jb3VudGVyKGludCBuKXsKICBpZigxPD1uJiZuPD0xMCl7CiAgICBwcmludGYoIiVkICIsbik7IFNsZWVwKDEwMDApOwogIH0KfQppbnQgbG9jYXRlKGludCB5LGludCB4KXtDT09SRCBjb3I7CiAgc3RhdGljIEhBTkRMRSBoc289SU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAgY29yLlk9eTsgY29yLlg9eDsKICBpZihoc289PUlOVkFMSURfSEFORExFX1ZBTFVFKQogICAgaHNvPUdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSk7CiAgcmV0dXJuIGhzbz09SU5WQUxJRF9IQU5ETEVfVkFMVUUgPyAwIDoKICAgICAgICAgU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uKGhzbywgY29yKTsKfQo=