您的位置:首页 > 其它

俄罗斯方块 -- 暑假集训

2012-12-05 17:15 295 查看
 

自己写的俄罗斯方块

a s d w 控制左下右和变形,支持改变速度和图形大小(在代码中改一下15 16
17行即可)

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define CUBE_R
20//行
#define CUBE_L
11//列
#define SPEED 200
#define MOD 28

int
cur_x,cur_y;
int
score,next,cube,map[CUBE_R+10][CUBE_L+10];
int
GameSpeed=SPEED;

int
dir[28][4][2]={//七种方块共28种变形,用x
y偏移量表示

   {0,0,0,1,1,0,1,1}  ,{0,0,0,1,1,0,1,1}  ,{0,0,0,1,1,0,1,1}  ,{0,0,0,1,1,0,1,1}  ,

   {0,0,0,-1,0,1,1,1} ,{0,0,-1,0,1,0,1,-1} ,{0,0,0,-1,0,1,-1,-1},{0,0,-1,0,1,0,-1,1} ,

   {0,0,0,-1,0,1,1,-1},{0,0,-1,0,-1,-1,1,0},{0,0,0,-1,0,1,-1,1} ,{0,0,-1,0,1,0,1,1}  ,

   {0,0,0,-1,0,1,0,2} ,{0,0,-1,0,1,0,2,0}  ,{0,0,0,-1,0,1,0,2}  ,{0,0,-1,0,1,0,2,0}  ,

   {0,0,0,-1,1,0,1,1} ,{0,0,-1,0,0,-1,1,-1},{0,0,0,-1,1,0,1,1}  ,{0,0,-1,0,0,-1,1,-1},

   {0,0,0,1,1,0,1,-1} ,{0,0,-1,0,0,1,1,1}  ,{0,0,0,1,1,0,1,-1}  ,{0,0,-1,0,0,1,1,1}  ,

   {0,0,0,-1,0,1,-1,0},{0,0,0,1,-1,0,1,0}  ,{0,0,0,-1,0,1,1,0}  ,{0,0,-1,0,1,0,0,-1} ,
};

void
gotoxy(int x,int y)//定位输出的函数,照抄即可
{

   COORD c;

   c.X=x-1;c.Y=y-1;

   SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}

void
Move(int x,int y,int id,int state)//移动或者消除方块
{

   int i;

   for(i=0;i<4;i++)

   {

     
 x=cur_x+dir[id][i][0];

     
 y=cur_y+dir[id][i][1];

     
 if(x>0 &&
y>0 &&
x<CUBE_R &&
y<CUBE_L)

     
 {

     
   
 gotoxy(y*2+1,x+1);

     
   
 if(state)printf("■");

     
   
 else
printf("  ");

     
 }

   }
}

void
Clear_Show_next(int x,int y,int id,int state)//显示或者消除下一个方块
{

   int i,a,b;

   a=x;b=y;

   for(i=0;i<4;i++)

   {

     
 x=a+dir[id][i][0];

     
 y=b+dir[id][i][1];

     
 gotoxy(y*2+1,x+1);

     
 if(state)printf("■");

     
 else printf("  ");

   }
}

void
Add_Cube(int x,int y,int id)
{

   int i;

   for(i=0;i<4;i++)

   {

     
 x=cur_x+dir[id][i][0];

     
 y=cur_y+dir[id][i][1];

     
 if(x>0 &&
y>0 &&
x<CUBE_R &&
y<CUBE_L)

     
   
 map[x][y]=1;

   }
}

int
Judge(int x,int y,int id)//判断越界或者冲突
{

   int i,a,b;

   a=x;b=y;

   for(i=0;i<4;i++)

   {

     
 x=a+dir[id][i][0];

     
 y=b+dir[id][i][1];

     
 if(x>0 &&
y>0 &&
x<CUBE_R &&
y<CUBE_L)

     
 {

     
   
 if(map[x][y])return
0;

     
 }

     
 else if(!(x<=0))return 0;

   }

   return 1;
}

void
init(int id)
{

   int i,j;

   score=0;

   cur_x=0;cur_y=CUBE_L/2;

   memset(map,0,sizeof(map));

   gotoxy(1,1);

   for(i=0;i<=CUBE_R;i++)

   {

     
 for(j=0;j<=CUBE_L;j++)

     
 {

     
   
 if(i==0
&&
j==0)printf("╔");

     
   
 else
if(i==0 &&
j==CUBE_L)printf("╗");

     
   
 else
if(i==CUBE_R &&
j==0)printf("╚");

     
   
 else
if(i==CUBE_R &&
j== CUBE_L)printf("╝");

     
   
 else
if(i==0 || i==CUBE_R)printf("==");

     
   
 else
if(j==0 || j==CUBE_L)printf("‖");

     
   
 else
printf("  ");

     
 }

     
 if(i==1)printf("    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: