Avaxnet

نسخه کامل: tetris
شما در حال مشاهده نسخه تکمیل نشده می باشید. مشاهده نسخه کامل با قالب بندی مناسب.

salam be hamegi mamnoon misham age yeki komakam kone

man baziye tetriso be zabane c mikham

age kesi komak kone mamnoon misham

ninaz68 نوشته شده توسط:

salam be hamegi mamnoon misham age yeki komakam kone

man baziye tetriso be zabane c mikham

age kesi komak kone mamnoon misham


با سلام به دوست عزيزم .قبل از هرچيز از شما خواهش ميكنم از نوشتن به زبان فينگليش جدا به پرهيزيد و بر اساس قوانين فروم فارسي بنويسيد..
راستش من 3تا لينك براي تتريس پيدا كردم اما افسوس كه هر 3 غير قابل استفاده هستند.
اگر كسي درست و سالم داره ممنون ميشم برامون بذاره..

من به دلفی دارم میتونی برگردونی به C ؟

#include <time.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

void menu();
void kadr();
void left();
void right();
void rotate();
void down();
void clean();
void draw();
void refresh();
void fix();
void checkscore();
void delrow(int );
void checkend();

int checklimit();
int checkscreen();


int score,LEVEL;

int X = 40 , Y = 8 ,LIMIT_RIGHT=51, LIMIT_LEFT=30 ,LIMIT_DOWN=40;
int POLY , FORM ;

int  x_poly[6][4][6]={
 { {0,1,1,1,88},{-1,0,-1,1,88},{-1,-1,-1,0,88},{1,1,0,-1,88}}
,{ {0,1,0,-1,88},{0,1,1,1,88},{0,-1,0,1,88},{0,-1,-1,-1,88} }
,{ {1,1,1,1,88},{-2,-1,0,1,88},{1,1,1,1,88},{-2,-1,0,1,88}}
,{ {0,0,-1,88},{-1,0,0,88},{-1,0,-1,88},{-1,0,-1,88} }
,{ {0,1,0,-1,0,88},{0,1,0,-1,0,88},{0,1,0,-1,0,88}, {0,1,0,-1,0,88}}
,{ {0,-1,0,-1,88},{0,-1,-1,-2,88},{0,-1,0,-1,88},{0,-1,-1,-2,88} }
              };
int  y_poly[6][4][6]={
 { {-1,0,-1,1,88},{-1,-1,0,-1,88},{-1,0,1,1,88},{0,1,1,1,88} }
,{ {0,1,1,1,88},{0,-1,0,1,88},{0,-1,-1,-1,88},{0,-1,0,1,88} }
,{ {-1,0,1,2,88},{0,0,0,0,88},{-1,0,1,2,88},{0,0,0,0,88} }
,{ {0,-1,0,88},{-1,0,-1,88},{-1,-1,0,88},{-1,0,0,88} }
,{ {0,0,1,0,-1,88},{0,0,1,0,-1,88},{0,0,1,0,-1,88},{0,0,1,0,-1,88} }
,{ {0,0,-1,1,88},{0,0,-1,-1,88},{0,0,-1,1,88},{0,0,-1,-1,88} }
           };

int screen[80][50];

main()
{
textmode(C4350);
clrscr();

menu();

clrscr();

clock_t start=0, end;


randomize();
textcolor(4);
gotoxy(65,3);cprintf("SCORE : %d",score);


  POLY = random(6);
  FORM = random(4);

  textcolor(10);
  kadr();
  textcolor(9);
  draw();



while(1){



 if(kbhit()){
     char ch = getch();
     switch(ch){
         case 72 : rotate();break;
         case 75 : left()  ;break;
         case 77 : right() ;break;
         case 80 : down()  ;break;
         case 27 : main();
           }//switch()
         }//if

end = clock();


if((end - start)/CLK_TCK >= 0.5/float(LEVEL) ) { refresh(); start = end; }

    }//while()

} // main()

void left(){
    clean();
    X--;
    if( !checklimit() || !checkscreen() )X++;
    draw();
       }

void right(){
    clean();
    X++;
    if( !checklimit() || !checkscreen() )X--;
    draw();
       }

void rotate(){
    if(POLY==1&&FORM==3&&X==50)return;// halate estesna baray shekle 2 va forme 4
    clean();
    FORM = ++FORM%4 ;
    if( !checklimit()  || !checkscreen() )FORM--;
    draw();
       }

void down(){

    clean();
    Y++;
    int step=1;
    while(step<=5){
    if(!checkscreen()){Y--;break;}
    else { Y++; step++;continue ;}

         }//while
    if(!checkscreen())Y--;
    draw();
       }

int checklimit(){


for(int i=0;x_poly[POLY][FORM][i]!=88;i++)
if( X+x_poly[POLY][FORM][i] <= LIMIT_LEFT  || X+x_poly[POLY][FORM][i] >= LIMIT_RIGHT)return 0 ;


return 1;

        }


void clean(){

    for(int i=0;x_poly[POLY][FORM][i]!=88;i++){

        gotoxy(X+x_poly[POLY][FORM][i],Y+y_poly[POLY][FORM][i]);
        printf(" ");

                           }//for

        }

void draw(){

    for(int i=0;x_poly[POLY][FORM][i]!=88;i++){
        textcolor(9);
        gotoxy(X+x_poly[POLY][FORM][i],Y+y_poly[POLY][FORM][i]);
        cprintf("%c",219);
        gotoxy(79,45);
                           }//for

        }

void refresh(){

    clean();
    Y++;
    if(!checkscreen()){Y--;draw();fix();}
    draw();

          }

int checkscreen(){

for( int i = 0 ; y_poly[POLY][FORM][i] != 88 ; i++ )
    if( Y + y_poly[POLY][FORM][i]  >= LIMIT_DOWN ) return 0;

for( i = 0 ; x_poly[POLY][FORM][i] != 88 ; i++ )
    if( screen [ X+x_poly[POLY][FORM][i] ] [Y + y_poly[POLY][FORM][i]] == -1)return 0;

return 1;

         }//checkscreen()

void fix(){

       for(int i = 0 ; x_poly[POLY][FORM][i] != 88 ; i++ )
        screen[X+x_poly[POLY][FORM][i]][Y+y_poly[POLY][FORM][i]] = -1;

  X = 40 , Y = 8;
  POLY = random(6);
  FORM = random(4);

  checkscore();
  checkend();

      }//fix()




void kadr(){

    for(int i=8 ; i<=LIMIT_DOWN ; i++){
gotoxy(LIMIT_LEFT , i);
cprintf("%c",219);
gotoxy(LIMIT_RIGHT, i);
cprintf("%c",219);
              }//for

for( i=LIMIT_LEFT ; i<=LIMIT_RIGHT ; i++){
gotoxy(i , LIMIT_DOWN);
cprintf("%c" , 219);

              }//for
textcolor(7);
gotoxy(2,45);cprintf("ESC = quite");
       }//kadr()

void checkscore(){
int count=0;
for( int j=LIMIT_DOWN ; j>=1; j-- ){
for( int i = LIMIT_LEFT+1 ; i < LIMIT_RIGHT ; i++ ){
    if(screen[i][j]!=-1) break ;
    if(i==LIMIT_RIGHT-1) {delrow(j); count++ ; j=LIMIT_DOWN;}

                    }//for



               }//for

score=score+100*count;
textcolor(4);
gotoxy(73,3);cprintf("%d",score);
}

void delrow(int j){

for(int i=LIMIT_LEFT+1;i<LIMIT_RIGHT;i++){
      screen[i][j]=0;
      gotoxy(i,j);printf(" ");

                     }//for
delay(200);

for(int k=j-1;k>=1;k--){
for( i=LIMIT_LEFT+1 ; i<LIMIT_RIGHT ; i++ ){

    if( screen[i][k] == -1 ){ screen[i][k] = 0;screen[i][k+1]=-1;
                  gotoxy(i,k);printf(" ");
                  gotoxy(i,k+1);cprintf("%c",219);
                }//if
                        }//for
        }//for

          }//delrow()

void checkend(){

      for(int i = LIMIT_LEFT+1 ; i<LIMIT_RIGHT ; i++ )
       if(screen[i][8] == -1) {textcolor(6);gotoxy(60,10);cprintf("GAME OVER");getch();main();}

           }//checkend()

void menu(){

for(int i=0;i<=79;i++){
for(int j=0;j<=49;j++){
screen[i][j]=0;
              }}
score = 0;
X = 40,Y = 8;

clrscr();

textcolor(14);
gotoxy(2,45);cprintf("ESC = quite");
gotoxy(50,45);cprintf("WRITTEN BY HOSSEIN");
LEVEL = 1;

 for( i=1 ; i<=10 ; i++) {
 gotoxy(20,i*2+10);cprintf(" LEVEL %d " ,i);
     //getch();
     }

textcolor(9);
gotoxy(18,12);cprintf("%c",219);

   i = 12;

while(1){
  char ch = getch();

switch(ch){

  case 72: if(LEVEL >1) LEVEL--  ; else continue;gotoxy(18,i);cprintf(" "); gotoxy(18,i=i-2);cprintf("%c",219);break;

  case 80: if(LEVEL <10) LEVEL++ ; else continue;gotoxy(18,i);cprintf(" ");gotoxy(18,i=i+2);cprintf("%c",219);break;

  case 13: return;

  case 27: exit(0);
              }//switch

        }//while

       }//menu()


موفق باشید
لینک مرجع