中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
c语言图形小游戏(俄罗斯方块)
作者:未知 时间:2005-07-27 23:18 出处:CSDN 责编:chinaitpower
              摘要:c语言图形小游戏(俄罗斯方块)

#include <stdio.h>
#include <stdlib.h>
#include<graphics.h>
int Mark[32][13];
int flag=0;
void InitMark() /*init the cap */
{int i,j;
 for(i=1;i<31;i++)
  for(j=1;j<11;j++)
   Mark[i][j]=0;
 for(j=0;j<13;j++)
  {Mark[0][j]=1;
   Mark[31][j]=1;
  }
 for(i=1;i<31;i++)
 {Mark[i][0]=1;
  Mark[i][11]=1;
  Mark[i][12]=0;
 }
}


void Draw1(int x,int y)      /*draw the long bock*/
{setfillstyle(1,2);
 bar(x-9,y+1,x-1,y+9);Mark[(y-90)/10][(x-100)/10]=1;Mark[(y-90)/10][12]++;
 bar(x+1,y+1,x+9,y+9);Mark[(y-90)/10][(x-90)/10]=1; Mark[(y-90)/10][12]++;
 bar(x+11,y+1,x+19,y+9);Mark[(y-90)/10][(x-80)/10]=1;Mark[(y-90)/10][12]++;
 bar(x+21,y+1,x+29,y+9);Mark[(y-90)/10][(x-70)/10]=1;Mark[(y-90)/10][12]++;
}

void Draw1_1(int x,int y)/*覆盖上一个长形方块*/
{setfillstyle(1,BLACK);
 bar(x-9,y+1,x+29,y+10);
 Mark[(y-90)/10][(x-100)/10]=0;Mark[(y-90)/10][12]--;
 Mark[(y-90)/10][(x-90)/10]=0;Mark[(y-90)/10][12]--;
 Mark[(y-90)/10][(x-80)/10]=0;Mark[(y-90)/10][12]--;
 Mark[(y-90)/10][(x-70)/10]=0;Mark[(y-90)/10][12]--;
}

void Draw1_2(int x,int y)/*The up long Block*/
{setfillstyle(1,2);
 bar(x+1,y-9,x+9,y-1);Mark[(y-100)/10][(x-90)/10]=1;Mark[(y-100)/10][12]++;
 bar(x+1,y+1,x+9,y+9);Mark[(y-90)/10][(x-90)/10]=1;Mark[(y-90)/10][12]++;
 bar(x+1,y+11,x+9,y+19);Mark[(y-80)/10][(x-90)/10]=1;Mark[(y-80)/10][12]++;
 bar(x+1,y+21,x+9,y+29);Mark[(y-70)/10][(x-90)/10]=1;Mark[(y-70)/10][12]++;
}

void Draw1_3(int x,int y) /*cover the Long Block*/
{setfillstyle(1,BLACK);
 bar(x+1,y-9,x+9,y+29);
 Mark[(y-100)/10][(x-90)/10]=0;Mark[(y-100)/10][12]--;
 Mark[(y-90)/10][(x-90)/10]=0;Mark[(y-90)/10][12]--;
 Mark[(y-80)/10][(x-90)/10]=0;Mark[(y-80)/10][12]--;
 Mark[(y-70)/10][(x-90)/10]=0;Mark[(y-70)/10][12]--;
}

void Draw2(int x,int y)      /*draw the Tian bock*/
{setfillstyle(1,3);
 bar(x-9,y+1,x-1,y+9);Mark[(y-90)/10][(x-100)/10]=1;Mark[(y-90)/10][12]++;
 bar(x+1,y+1,x+9,y+9);Mark[(y-90)/10][(x-90)/10]=1; Mark[(y-90)/10][12]++;
 bar(x-9,y+11,x-1,y+19);Mark[(y-80)/10][(x-100)/10]=1;Mark[(y-80)/10][12]++;
 bar(x+1,y+11,x+9,y+19);Mark[(y-80)/10][(x-90)/10]=1;Mark[(y-80)/10][12]++;
}

void Draw2_1(int x,int y)   /*cover the Tian bock*/
{setfillstyle(1,BLACK);
 bar(x-9,y+1,x+9,y+19);
 Mark[(y-90)/10][(x-100)/10]=0;Mark[(y-90)/10][12]--;
 Mark[(y-90)/10][(x-90)/10]=0; Mark[(y-90)/10][12]--;
 Mark[(y-80)/10][(x-100)/10]=0;Mark[(y-80)/10][12]--;
 Mark[(y-80)/10][(x-90)/10]=0;Mark[(y-80)/10][12]--;
}

void Draw3(int x,int y)
{setfillstyle(1,4);
 bar(x-9,y+1,x-1,y+9);Mark[(y-90)/10][(x-100)/10]=1;Mark[(y-90)/10][12]++;
 bar(x+1,y+1,x+9,y+9);Mark[(y-90)/10][(x-90)/10]=1; Mark[(y-90)/10][12]++;
 bar(x+1,y+11,x+9,y+9);Mark[(y-80)/10][(x-90)/10]=1;Mark[(y-80)/10][12]++;
 bar(x+11,y+11,x+19,y+19);Mark[(y-80)/10][(x-80)/10]=1;Mark[(y-90)/10][12]++;
}
void Draw3_1(int x,int y)
{setfillstyle(1,BLACK);
 bar(x-10,y,x+10,y+10);
 Mark[(y-90)/10][(x-100)/10]=0;Mark[(y-90)/10][12]--;
 Mark[(y-90)/10][(x-90)/10]=0; Mark[(y-90)/10][12]--;
 bar(x,y+10,x+20,y+20);
 Mark[(y-80)/10][(x-90)/10]=0;Mark[(y-80)/10][12]--;
 Mark[(y-80)/10][(x-80)/10]=0;Mark[(y-90)/10][12]--;
}


void Screen()
{
 rectangle(100,100,200,400);
 rectangle(250,150,300,200);
}

int Block()
{int i,j;
 i=flag;
 flag=random(3);

switch(flag)
 {case 0:setfillstyle(1,BLACK);
  bar(251,151,299,199);
  setfillstyle(1,RED);
         bar(256,171,264,179);
  bar(266,171,274,179);
  bar(276,171,284,179);
  bar(286,171,294,179);
  break;
  case 1:setfillstyle(1,BLACK);
  bar(251,151,299,199);
         setfillstyle(1,RED);
         bar(271,156,279,164);
  bar(271,166,279,174);
  bar(271,176,279,184);
  bar(271,186,279,194);
         break;
  case 2:setfillstyle(1,BLACK);
  bar(251,151,299,199);
         setfillstyle(1,RED);
         bar(266,156,274,164);
  bar(276,156,284,164);
  bar(266,166,274,174);
  bar(276,166,284,174);
         break;
 }
 return i;
}

int Control(int CH,int x,int y)
{int key;

 switch(CH)
 {case 0:/*对平放长操作*/
  Draw1(x,y);
  while(Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)
  {
   if(kbhit())
   {key=getch();
   if(key==75&&Mark[(y-90)/10][(x-110)/10]==0) {Draw1_1(x,y);x-=10;Draw1(x,y);}
   else if(key==77&&Mark[(y-90)/10][(x-60)/10]==0) {Draw1_1(x,y);x+=10;Draw1(x,y);}
  else if(key==32&&Mark[(y-100)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-90)/10]==0)  {Draw1_1(x,y);Control(1,x,y);break;}
       else if(key==80&&Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)
             {Draw1_1(x,y);
              while(Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)
                          {y+=10;
                          }
              Draw1(x,y);
              break;
              }
        else if(key==27){return 27;}
   }
   Draw1_1(x,y);
   y+=10;
   Draw1(x,y);
    delay(10000000000);
  }
  break;
  case 1: /*对竖放长操作*/
  Draw1_2(x,y);
  while(Mark[(y-60)/10][(x-90)/10]==0)
  {
   if(kbhit())
   {key=getch();
    if(key==75&&Mark[(y-100)/10][(x-100)/10]==0&&Mark[(y-90)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-100)]==0&&Mark[(y-70)/10][(x-100)/10]==0)
    {Draw1_3(x,y);x-=10;Draw1_2(x,y);}
    else if(key==77&&Mark[(y-100)/10][(x-80)/10]==0&&Mark[(y-90)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-70)/10][(x-80)/10]==0)
    {Draw1_3(x,y);x+=10;Draw1_2(x,y);}
   else if(key==32&&Mark[(y-90)/10][(x-100)/10]==0&&Mark[(y-90)/10][(x-80)/10]==0&&Mark[(y-70)/10][(x-70)/10]==0) {Draw1_3(x,y);Control(0,x,y);break;}
        else if(key==80&&Mark[(y-60)/10][(x-90)/10]==0)
             {Draw1_3(x,y);
              while(Mark[(y-60)/10][(x-90)/10]==0)
                          {y+=10;
                          }
              Draw1_2(x,y);
              break;
              }
         else if(key==27) {return 27;}
   }
   Draw1_3(x,y);/*cover the before Up Block*/
   y+=10;
   Draw1_2(x,y);
   delay(10000000000);
   }
         break;
  case 2:Draw2(x,y);/*对田方处理*/
  while(Mark[(y-70)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-100)/10]==0)
  {
   if(kbhit())
   {key=getch();
   if(key==75&&Mark[(y-90)/10][(x-110)/10]==0&&Mark[(y-80)/10][(x-110)/10]==0) {Draw2_1(x,y);x-=10;Draw2(x,y);}
   else if(key==77&&Mark[(y-90)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0) {Draw2_1(x,y);x+=10;Draw2(x,y);}
  else if(key==80&&Mark[(y-70)/10][(x-100)/10]==0&&Mark[(y-70)/10][(x-90)/10]==0)
             {Draw2_1(x,y);
              while(Mark[(y-70)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-100)/10]==0)
                          {y+=10;
                          }
              Draw2(x,y);
              break;
              }
        else if(key==27){return 27;}
   }
   Draw2_1(x,y);
   y+=10;
   Draw2(x,y);
    delay(10000000000);
  }
      break;
  case 3:Draw3(x,y);  /*left Tian design*/
  while(Mark[(y-70)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-100)/10]==0)
  {
   if(kbhit())
   {key=getch();
   if(key==75&&Mark[(y-90)/10][(x-110)/10]==0&&Mark[(y-80)/10][(x-100)/10]==0) {Draw3_1(x,y);x-=10;Draw3(x,y);}
   else if(key==77&&Mark[(y-90)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0) {Draw3_1(x,y);x+=10;Draw3(x,y);}
  else if(key==32&&Mark[(y-90)/10][(x-110)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-70)/10][(x-90)/10]==0)  {Draw3_1(x,y);Control(4,x,y);break;}
       else if(key==80&&Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)
             {Draw1_1(x,y);
              while(Mark[(y-80)/10][(x-100)/10]==0&&Mark[(y-80)/10][(x-90)/10]==0&&Mark[(y-80)/10][(x-80)/10]==0&&Mark[(y-80)/10][(x-70)/10]==0)
                          {y+=10;
                          }
              Draw1(x,y);
              break;
              }
        else if(key==27){return 27;}
   }
   Draw1_1(x,y);
   y+=10;
   Draw1(x,y);
    delay(10000000000);
  }
   break;
  case 4:break;
  case 5:break;
  case 6:break;
 }
}
void Delete()
{int y,y1,x;
 for(y=1;y<=30;y++)
 {if(Mark[y][12]==10)
  {for(y1=y;y1>1;y1--)
    Mark[y1][12]=Mark[y1-1][12];
    Mark[1][12]=0;
   for(y1=y;y1>1;y1--)
    for(x=1;x<=10;x++)
     Mark[y1][x]=Mark[y1-1][x];
   for(x=1;x<=10;x++)
     Mark[1][x]=0;
  setfillstyle(1,BLACK);
  bar(101,101,199,399);
  for(y1=1;y1<=30;y1++)
   for(x=1;x<=10;x++)
    if(Mark[y1][x]==1)
    {setfillstyle(1,2);
     bar(x*10+91,y1*10+91,x*10+99,y1*10+99);
    }
  }
 }
}

int Gameover()
{if(Mark[1][12]>=1&&Mark[2][12]>=1&&Mark[3][12]>=1&&Mark[4][12]>=1&&Mark[5][12]>=1) return 1;
 else return 0;
}

void main()
{  int gd,gm,CH,NC,OFF=0;
   gd=DETECT;
   initgraph(&gd,&gm,"");
   randomize();
   InitMark();
   NC=0;
   Screen();  /*屏幕设置*/
   flag=random(3);
   while(1)
   {
    CH=Block();
    NC=Control(CH,140,110);  /*控制图形函数*/

   if(NC==27) break;
   Delete();
   OFF=Gameover();
   if(OFF) break;
   }
   getch();
   cleardevice();
   closegraph();
}



关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有