Добавил:
masterdos
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовая работа / курсач / tetris1 / tetris
.cpp#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;}