Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
30.05.2020
Размер:
7.21 Кб
Скачать
#include <stdio.h>
      #include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <dos.h>
 int main(void)
{int  figa[3][4][5][5]={  { {
	      {8,8,8,8,8}, {8,8,8,8,8}, {8,8,1,8,8},  {8,1,1,1,8}, {8,8,8,8,8}  } ,
                  {{8,8,8,8,8}, {8,8,1,8,8}, {8,8,1,1,8},{8,8,1,8,8},  {8,8,8,8,8}  },
                 {{8,8,8,8,8},{8,8,8,8,8}, {8,1,1,1,8}, {8,8,1,8,8},{8,8,8,8,8}}, 
               {{8,8,8,8,8},  {8,8,1,8,8},  {8,1,1,8,8}, {8,8,1,8,8},  {8,8,8,8,8}} },
	       { { {8,8,8,8,8}, {8,8,4,8,8},{8,8,4,8,8},{8,8,4,4,8}, {8,8,8,8,8} }, 
                  {{8,8,8,8,8}, {8,8,8,8,8},{8,4,4,4,8},{8,4,8,8,8},{8,8,8,8,8}},
           {{8,8,8,8,8},{8,4,4,8,8},{8,8,4,8,8},{8,8,4,8,8},{8,8,8,8,8}}, 
           { {8,8,8,8,8},{8,8,8,8,8},{8,8,8,4,8},{8,4,4,4,8},{8,8,8,8,8}} },
	       { {{8,8,8,8,8},{8,8,6,8,8},{8,8,6,8,8},{8,8,6,8,8},{8,8,8,8,8}},
              {{8,8,8,8,8},{8,8,8,8,8},{8,8,8,8,8},{8,6,6,6,8}, {8,8,8,8,8}},
                 {{8,8,8,8,8},{8,8,6,8,8},{8,8,6,8,8},{8,8,6,8,8},{8,8,8,8,8}}, 
                   {{8,8,8,8,8},{8,8,8,8,8},{8,8,8,8,8}, {8,6,6,6,8},{8,8,8,8,8} } }};
int stakan[32][32]={{2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		{2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		 {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		   {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		{2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		 {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		   {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		   {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		{2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
			 {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		{2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		 {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		   {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		{2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		 {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		   {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		   {2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		{2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2},
		  {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2} };
		  int asd=0;
		  int vrema=300;
		   _setcursortype(_NOCURSOR);
    char  c;
   clrscr();
   int variant=0; int fgh;int fig;
//--------------------------------------------------вывод инструкций 
  gotoxy(30,10);
   cputs("Demo Tetris\r\n");
   gotoxy(2,20);
   cputs("upravlenie:\r\n");
   cputs("-----------------------\r\n");
    cputs("w--slow\r\n");
    cputs("s--fast:\r\n");
    cputs("a--left\r\n");
    cputs("d--right\r\n");
    cputs("e--varint figur:\r\n");
     cputs("m--exit:\r\n");
     cputs("q--pauza\r\n");
//--------------------------------------------------------------------
 int sch=0;int x=25;int y=15;
 gotoxy(x+10,y+7);
 cputs("press any key:\r\n");
 getch();
//-----------------------------------------основной цикл
  while (c!='m')  {
  fig=rand()%3; variant=rand()%4;//--------------------------выбор варианта фигуры
  asd=2;
    gotoxy(x=rand()%27+25,y);
    int vbn=0;
//------------------------------удаление в массиве «стакан» заполненных строк
     for (int df=0;df!=31;df++){vbn=0;
 for (int dg=1;dg!=31 ;dg++){ if (stakan[df][dg]==8) vbn=1 ;}
 if ( vbn!=1) { sch+=10;
 for (int jk=df;jk!=0;jk--){for( int dg=1;dg!=31;dg++){
 stakan[jk][dg]=stakan[jk-1][dg];}
 }}}
//---------------------------------------------------------------печать стакана
 for ( df=0;df!=32;df++){
 for (int dg=0;dg!=32 ;dg++){
 gotoxy(25+dg,15+df);
 textbackground(stakan[df][dg]);
 cprintf(" ");
 }}
   gotoxy(60,20);

  printf("Schet='%i'\r\n",sch);
 if (kbhit()) c=getch(); //-----------------------------------нажатие клавиши
 for (int di=0;di<28;di++){  //----------------------------цикл движения фигуры
   delay(vrema); //---------------------------------пауза
//------------------------выбор операции по значение кнопки
   if (kbhit()) { c=getch();
   switch (c) {
  case 'w': if (vrema<970)  vrema+=60; break;
  case 'd':int we=0;
     for ( df=0;df!=5;df++){
 for (int dg=0;dg!=5;dg++){
if (figa[fig][variant][df][dg]!=8) {
if (stakan[di+df][x-25+dg+1]!=8)  we=1;} }}
if (we==0) x++;

   break;
  case 'a': we=0;
     for ( df=0;df!=5;df++){
 for (int dg=0;dg!=5;dg++){
if (figa[fig][variant][df][dg]!=8) {
if (stakan[di+df][x-25+dg-1]!=8) we=1; } }}
if (we==0) x--; break;
  case 's': if (vrema>90) vrema-=60 ;break;

case 'e': we=0; fgh=variant;
if (fgh==3) fgh=0;
else fgh+=1;
	   for ( df=0;df!=5;df++){
 for (int dg=0;dg!=5;dg++){
if (figa[fig][fgh][df][dg]!=8) {
if (stakan[di+df][x-25+dg]!=8){we=1; }} }}

     for ( df=0;df!=5;df++){
 for (int dg=0;dg!=5;dg++){
if (figa[fig][fgh][df][dg]!=8) {
if (stakan[di+df][x-25+dg]!=8){we=1; }} }}
if (we==0) variant=fgh; break;
case 'q': getch();break;  
  default:  ;


}}
//-------------------------------------------------------------------------------
  gotoxy(x,y+di);

//---------------------------------------проверка на дальнейшее движение
     for ( df=0;df!=5;df++){
 for (int dg=0;dg!=5;dg++){
if (figa[fig][variant][df][dg]!=8)  {
if (stakan[di+df+1][x-25+dg]!=8){asd=1;
 for (int kf=0;kf!=5;kf++){
 for (int lg=0;lg!=5;lg++){
if (figa[fig][variant][kf][lg]!=8) stakan[di+kf][x-25+lg]=figa[fig][variant][kf][lg];
 }} }
 } }}
 if ((asd==1) && (di==0)) c='m'; //-------------------окончение игры
//---------------------стандартный вывод
 if (asd!=1) {
   for ( df=0;df!=5;df++){
 for (int dg=0;dg!=5 ;dg++){ gotoxy(x+dg,y+di+df);
 textbackground(figa[fig][variant][df][dg]);
 cprintf(" ");
 } }

//-----------------------печать «цветных» значений массива «стакан»
   for ( df=0;df!=32;df++){
 for (int dg=0;dg<32 ;dg+=1){
  if (stakan[df][dg]!=8) {
 gotoxy(25+dg,15+df);
 textbackground(stakan[df][dg]);
 cprintf(" ");
} }} }
 else di=45;
 }
sch++;
     }
return 0;}