读书人

自个儿做的一个俄罗斯方块

发布时间: 2013-01-01 14:04:18 作者: rapoo

自己做的一个俄罗斯方块

昨天晚上突发奇想想做一下,然后就真实的感受到了自己的菜,不过终究还是做出来了,虽然丑的一逼,还那么多bug,不过还是很高兴,不会任何东西然后把它写出来还是很不容易了

我用了graphics.h,这个vc没有,我就把它抄下写进去了,,,

graphics.h:

#include <graphics.h>#include <conio.h>#include <time.h>#include <dos.h>#include "MyGraph.h"#include <iostream.h>#include <stdlib.h>#include <stdio.h>#include <windows.h> int MAX = 50000 ;bool  GameOver = 0 ; Cell cell[16][9] ;Grid grid ;int key1 , key ;bool  CellGrid[19][4][4]={{{1,1,1,1},      // 0{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{1,1,0,0},//1{1,1,0,0},{0,0,0,0},{0,0,0,0}},{{1,0,0,0},//2{1,1,1,0},{0,0,0,0},{0,0,0,0}},{{0,0,1,0},//3{1,1,1,0},{0,0,0,0},{0,0,0,0}},{{0,1,0,0},//4{1,1,1,0},{0,0,0,0},{0,0,0,0}},{{1,1,0,0},//5{0,1,1,0},{0,0,0,0},{0,0,0,0}},{{0,1,1,0},//6{0,0,1,1},{0,0,0,0},{0,0,0,0}},{{1,0,0,0},//7{1,0,0,0},{1,0,0,0},{1,0,0,0}},{{1,1,0,0},//8{1,0,0,0},{1,0,0,0},{0,0,0,0}},{{1,1,1,0},//9{0,0,1,0},{0,0,0,0},{0,0,0,0}},{{0,1,0,0},//10{0,1,0,0},{1,1,0,0},{0,0,0,0}},{{1,0,0,0},//11{1,0,0,0},{1,1,0,0},{0,0,0,0}},{{1,1,1,0},//12{1,0,0,0},{0,0,0,0},{0,0,0,0}},{{1,1,0,0},//13{0,1,0,0},{0,1,0,0},{0,0,0,0}},{{1,0,0,0},//14{1,1,0,0},{1,0,0,0},{0,0,0,0}},{{1,1,1,0},//15{0,1,0,0},{0,0,0,0},{0,0,0,0}},{{0,1,0,0},//16{1,1,0,0},{0,1,0,0},{0,0,0,0}},{{0,1,0,0},//17{1,1,0,0},{1,0,0,0},{0,0,0,0}},{{1,0,0,0},//18{1,1,0,0},{0,1,0,0},{0,0,0,0}}};void ChangeAble(){int  i , j ;int   x = grid.getx() ;int   y = grid.gety() ;bool  flag = 0 ; for( i = 0 ; i < 4 ; i ++ )for( j = 0 ; j < 4 ; j ++ ){if( y + i >= 14 || x + j >= 8 ) continue ;if( cell[y+i][x+j].getvis() && CellGrid[grid.getnext()][i][j] ){flag = 1 ;break ;}}if( flag == 1 ) grid.setchangeable( 0 ) ;else grid.setchangeable( 1 ) ;}bool check( int Dir ){int  dx[3] = { 0 , -1 , 1 } ;int  dy[3] = { 1 , 0 ,  0 } ;int num = grid.getnum() ;int x = grid.getx() ;int y = grid.gety() ;for( int i = 0 ; i < 4 ; i ++ )for( int j = 0 ; j < 4 ; j ++ ){if( cell[y+i+dy[Dir]][x+j+dx[Dir]].getvis() && CellGrid[num][i][j] ) return false ;if( CellGrid[num][i][j] && ( x + j + dx[Dir] < 0 || x + j + dx[Dir] > 8 ) ) return false ;}return true ;}bool jduge(){int num = grid.getnum() ;int x = grid.getx() ;int y = grid.gety() ;for( int i = 0 ; i < 4 ; i ++ )for( int j = 0 ; j < 4 ; j ++ ){if( cell[y+i][x+j].getvis() && CellGrid[num][i][j] ) return false ;}return true ;}int  main(){int i , j , score = 0 ;srand( (unsigned)time( NULL ) );initgraph( 360 , 600 ) ;for( i = 0 ; i < 15 ; i ++ )for( j = 0 ; j < 9 ; j ++ ){cell[i][j].sety( i )   ;cell[i][j].setx( j )   ; cell[i][j].setvis( 0 ) ;}for( i = 0 ; i <= 8 ; i ++ ){cell[15][i].sety( 15 )  ;cell[15][i].setx( i )   ;cell[15][i].setvis( 1 ) ;}while( !GameOver ){if( score >= 10 ) MAX = 40000 ; else if( score >= 20 ) MAX = 30000 ; else if( score >= 30 ) MAX = 20000 ; else if( score >= 50 ) MAX = 10000 ; else if( score >= 100 ) MAX = 5000 ;int temp ;temp = rand() % 7 ; grid.setnum( temp ) ;grid.setx( 0 ) ;grid.sety( 0 ) ;grid.setnext() ;if( !jduge() ){GameOver = 1 ; break ;}while( 1 ){cleardevice();for( i = 0 ; i < 15 ; i ++ )for( j = 0 ; j < 9 ; j ++ )if( cell[i][j].getvis() ) cell[i][j].printcell() ;for( i = 0 ; i < 4 ; i ++ )for( j = 0 ; j < 4 ; j ++ )if( !cell[grid.gety()+i][grid.getx()+j].getvis() && CellGrid[grid.getnum()][i][j] ) cell[grid.gety()+i][grid.getx()+j].printcell() ;if( !check( 0 ) ) {bool  Flag[16] ;memset( Flag , 0 , sizeof( Flag ) ) ;for( i = 0 ; i < 4 ; i ++ )for( j = 0 ; j < 4 ; j ++ ){if( CellGrid[grid.getnum()][i][j] )cell[grid.gety()+i][grid.getx()+j].setvis( 1 ) ;}for( i = 0 ; i < 15 ; i ++ ){int flag = 0 ; for( j = 0 ; j < 9 ; j ++ ){if( !cell[i][j].getvis() ) flag = 1 ; if( cell[i][j].getvis() ) Flag[i] = 1 ;}if( !flag ){for( j = 0 ; j < 9 ; j ++ )cell[i][j].setvis( 0 ) ;Flag[i] = 0 ;score ++ ;}}for( i = 14 ; i >= 0 ; i -- ){if( Flag[i] == 0 ){for( j = i - 1 ; j >= 0 ; j -- )if( Flag[j] == 1 ) break ;if( j < 0 ) continue ;for( int k = 0 ; k < 9 ; k ++ ){bool vis = cell[j][k].getvis() ;cell[i][k].setvis( vis ) ; cell[j][k].setvis( 0 ) ; Flag[i] = 1 ; Flag[j] = 0 ;}}}break ;}int Count = 0 ;while( !kbhit() ){Count ++ ; if( Count == MAX ) break ; }if( Count == MAX ){int y = grid.gety() ;grid.sety( y + 1 ) ;continue ; }key = getch() ;if( key == 72 )          //up{ChangeAble() ; if( grid.getchangeable() )grid.Changenum() ;}else if( key == 80 )    // down {while( check( 0 ) ) {int y = grid.gety() ; grid.sety( y + 1 ) ;}}else if( key == 75 )    // left {if( check( 1 ) ) {int x = grid.getx() ;grid.setx( x - 1 ) ;}}else if( key == 77 )    // right {if( check( 2 ) ){int x = grid.getx() ;grid.setx( x + 1 ) ;}}key1 = key ;}}getch();closegraph();  cout << "你的成绩是:" << score << endl ;     return 0 ;}


读书人网 >其他相关

热点推荐