工大在线

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 923|回复: 1
打印 上一主题 下一主题

我和队友写的俄罗斯代码(暂时没有时间函数)

[复制链接]

2

主题

0

好友

15

积分

书生

Rank: 2

该用户从未签到

西工币
26 枚
好评度
0 点
声望
0 点
注册时间
2010-7-13
帖子
15
积分
15
UID
27187
跳转到指定楼层
1#
发表于 2010-7-14 16:45:29 |只看该作者 |倒序浏览
本帖最后由 在校学生 于 2010-7-14 16:57 编辑

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<time.h>
#include<string.h>
#include<dos.h>
#include<bios.h>
#define ESC 0x11b      
#define UP 0x4800      
#define DOWN 0x5000     
#define LEFT 0x4b00     
#define RIGHT 0x4d00
#define YES 0x1579      
#define NO 0x316e
#define CELL 20  

   
       void randompoint();
       void nextdraw();
       void tempdraw();
       void move();
       void save();
       void showdown();
       void showleft();
       void showright();
       void showup(int select);
       void cover();
       void draw();
       void initigrid();
       void scangrid();
       void repaint();
       void getsave();
/******************dingyi quanju bianliang***********/
    int arg[4][2];               //记录初始坐标
    int arg2[4][2]={0};          //记录运动中坐标
    int block[4][2]={0};         //运动中坐标
    int block2[4][2]={0};        //记录下一个方块坐标
    int cells[14][21]={0};       //游戏区域每个小方格状态
    int top=19;
    int key;
    int blockid;      //panduan dangqian de fangkuai xingzhuang
    int blockid2;                   //record the size of the tempblock
    int blockid1;
    int flag=0;                       //jilu xuanzhuan cishu
/**********************han shu shen ming*******************/


int main(void)
{
    /* request auto detection */
    int gdriver = DETECT, gmode, errorcode;
   initigrid();

    /* initialize graphics, local variables
*/
    initgraph(&gdriver, &gmode, "");
    /* read result of initialization */
    errorcode = graphresult();
    if (errorcode != grOk)
    /* an error occurred */
    {
       printf("Graphics error: %s\n", grapherrormsg(errorcode));
       printf("Press any key to halt:");
       getch();
       exit(1);
       /* terminate with an error code */
    }

    /* select drawing color */
    setcolor(getmaxcolor());
    /* select fill color */
    setfillstyle(SOLID_FILL,LIGHTGRAY);
    /* draw a border around the screen */
    rectangle(60, 60, 300,460);
    rectangle(56,56,304,464);
    rectangle(400,60,480,140);
    rectangle(396,56,484,144);
    rectangle(340,260,500,340);
    line(340,280,500,280);
    line(340,310,500,310);


    /* wait for a key */
    getch();
    /* fill in sunmain region */
    floodfill(61,61 , getmaxcolor());//fill the main area color
    setfillstyle(SOLID_FILL,LIGHTBLUE);
    floodfill(401,61,getmaxcolor());  //set the upright area color
    setwritemode(0);
    /********draw little retangles************/
    for(int i=0;i<20;i++)
    line(60,i*CELL+60,300,i*CELL+60);
    for(i=0;i<12;i++)
    line(i*CELL+60,60,i*CELL+60,460);
  /**********draw little retangles of the submain area*****/
    for(i=0;i<4;i++)
    line(400,i*CELL+60,480,i*CELL+60);
    for(i=0;i<4;i++)
    line(400+i*CELL,60,400+i*CELL,140);



/*****************************hanshu diaoyong*******************/


        //shenqing yige leixing wei "moveobject" de duixiang
  randomize();
  randompoint();                       //zai xiaoquyu hua xiayige xiaofangkuai
  nextdraw();
  randompoint();
  tempdraw();
  draw();
  move();
if(i>=0)
{
  for(i=0;i<4;i++)
  {setfillstyle(SOLID_FILL,LIGHTBLUE);
  floodfill(block[0]+200+1,block[1]+1,getmaxcolor());  }
  randompoint();
  nextdraw();
  draw();
  move();
}
    /* clean up */
    getch();
    closegraph();
    return 0;
}
/****************init draw rectangle****************/
void initigrid()
  {
   for(int i=0;i<21;i++)
    {cells[0]=1;cells[13]=1;}
   for(i=0;i<14;i++)
    cells[20]=1;
   for(i=1;i<13;i++)
     for(int j=0;j<20;j++)
  cells[j]=0;
  }
void randompoint()
{
     flag=0;
     blockid= random(7);
     blockid2=blockid;
     switch(blockid)
     {
     case 0:
     {arg[0][0]=160;arg[0][1]=60;
      arg[1][0]=180;arg[1][1]=60;
      arg[2][0]=160;arg[2][1]=80;
      arg[3][0]=180;arg[3][1]=80;
      break;}
     case 1:
     {arg[0][0]=140;arg[0][1]=60;
      arg[1][0]=160;arg[1][1]=60;
      arg[2][0]=180;arg[2][1]=60;
      arg[3][0]=200;arg[3][1]=60;
      break;}
     case 2:
     {arg[0][0]=160;arg[0][1]=60;
      arg[1][0]=160;arg[1][1]=80;
      arg[2][0]=180;arg[2][1]=80;
      arg[3][0]=180;arg[3][1]=100;
      break;}
     case 3:
     {arg[0][0]=180;arg[0][1]=60;
      arg[1][0]=180;arg[1][1]=80;
      arg[2][0]=160;arg[2][1]=80;
      arg[3][0]=160;arg[3][1]=100;
      break;}
      case 4:
     {arg[0][0]=160;arg[0][1]=60;
      arg[1][0]=160;arg[1][1]=80;
      arg[2][0]=160;arg[2][1]=100;
      arg[3][0]=180;arg[3][1]=100;
      break;}
       case 5:
     {arg[0][0]=180;arg[0][1]=60;
      arg[1][0]=180;arg[1][1]=80;
      arg[2][0]=160;arg[2][1]=100;
      arg[3][0]=180;arg[3][1]=100;
      break;}
       case 6:
     {arg[0][0]=180;arg[1][0]=60;
     arg[1][0]=160;arg[1][1]=80;
     arg[2][0]=180;arg[2][1]=80;
     arg[3][0]=200;arg[3][1]=80;
     break;}
      }
}

void tempdraw()
{
   for(int i=0;i<4;i++)
   {
    block[0]=arg2[0]=arg[0];
    block[1]=arg2[1]=arg[1];
   setfillstyle(SOLID_FILL,RED);
   if(block[0]>=0&&block[0]<140&&block[1]>=0&&block[1]<240)
   floodfill(block[0]+1,block[1]+1,getmaxcolor());
   }
}
void nextdraw()
{
   int i,j;
   for(i=0;i<4;i++)
   { block[0]=arg[0];
     block[1]=arg[1];}
   setfillstyle(SOLID_FILL,BLACK);
   for (i=400;i<480;i+=20)
     {for (j=60;j<140;j+=20)
       floodfill(i+1,j+1,getmaxcolor());}
   for( i=0;i<4;i++)
   {
   setfillstyle(SOLID_FILL,RED);
   floodfill(block[0]+261,block[1]+1,getmaxcolor());
   }
}
void save()
{
     for(int i=0;i<4;i++)
      {
block2[0]=arg[0];
block2[1]=arg[1];
      }
     blockid1=blockid2;
}
void getsave()
{
  for(int i=0;i<4;i++)
      {
block[0]=block2[0];
block[1]=block2[1];
      }
     blockid2=blockid1;
}
void draw()
{
   for(int i=0;i<4;i++)
   {arg2[0]=block[0];
    arg2[1]=block[1];
   setfillstyle(SOLID_FILL,RED);
   if(block[0]>=60&&block[0]<3000&&block[1]>=60&&block[1]<460)
   floodfill(block[0]+1,block[1]+1,getmaxcolor());
}
}
void cover()
{
   for(int i=0;i<4;i++)
   {
    arg2[0]=block[0];
    arg2[1]=block[1];
    setfillstyle(SOLID_FILL,LIGHTGRAY);
    if(block[0]>=60&&block[0]<300&&block[1]>=60&&block[1]<460)
    floodfill(block[0]+1,block[1]+1,getmaxcolor());
   }
}

void move()
{
  for (;;)
  {
    key=bioskey(0);
    if (key)
    {
      switch(key)
      {
case DOWN:{
   showdown ();
   break;
}
case UP:{
   showup(blockid2);
   break;
}
case LEFT:{
   showleft();
   break;
}
case RIGHT:{
   showright();
   break;
}
case ESC:{
   exit(1);
}
      }
}
     }
  }

void showdown()
{
   int i,judge=0;
   cover();
   for(i=0;i<4;i++)
     block[1]+=20;
   for(i=0;i<4;i++)
   if(cells[block[0]/20-2][block[1]/20-3]) judge=1;
   if(judge)
     {for(i=0;i<4;i++)
{ block[1]-=20;
   cells[arg2[0]/20-2][arg2[1]/20-3]=1;}
      if(bioskey(1)) bioskey(0);
      draw();
      scangrid();
      getsave();
      draw();
      randompoint();
      nextdraw();
      save();
      return;
     }
  draw();
  }


void showleft()
{
   int i,judge=0;
   cover();
   for( i=0;i<4;i++)
   block[0]-=20;
   for(i=0;i<4;i++)
     if(cells[block[0]/20-2][block[1]/20-3]) judge=1;
     if(judge)
       for(i=0;i<4;i++){block[0]+=20;}
   draw();
}
void showright()
{
   int i,judge=0;
    cover();
    for(i=0;i<4;i++)
    block[0]+=20;
    for(i=0;i<4;i++)
     if(cells[block[0]/20-2][block[1]/20-3]) judge=1;
     if(judge)
       for(i=0;i<4;i++){block[0]-=20;}
    draw();
}
void showup(int select)
{
    int i,j,judge=0;
    cover();
    flag++;
  switch(select)
  {
    case 0: break;
    case 1:                        // 以第二块为中心旋转
      {flag =flag%2;
       for(i=0; i<4; i++)
{
  block[(flag+1)%2] =block[1][(flag+1)%2];
  block[flag] =block[1][flag]+(i-1)*20;
}
       break;}
    case 2:                       //以三四块为中心旋转
      {flag =flag%2;
      if(flag==1)
      { block[0][1]+=40;block[1][0]+=40;}
      if(flag==0)
      { block[0][1]-=40;block[1][0]-=40;}
      break;}
    case 3:                       //以三四块为中心旋转
      {flag =flag%2;
      if(flag==1)
      { block[0][1]+=40;block[1][0]-=40;  }
      if(flag==0)
      { block[0][1]-=40;block[1][0]+=40;  }
      break;}
    case 4:
      {flag=flag%4;
      switch(flag)
      {
case 0:
     /*旋转到初始位置,在三次旋转的基础上修改就可 */
   block[0][0] +=20; block[0][1]-=40;
   block[3][0] +=60;
   break;
case 1:
   block[0][0] +=40; block[0][1] +=20;/*一次旋转,修改一二块 */
   block[3][1] -=20;
   break;
case 2:
   block[0][0] -=40; block[0][1] -=20;/*二次旋转,在一次旋转的基础上修改. */
   block[3][0] -=40; block[3][1] -=20;
   break;
case 3:     /*三次旋转,在二次旋转的基础上修改*/
   block[0][0] -=20;block[0][1]+=40;
   block[3][0] -=20;block[3][1]+=40;
   break;
      }
      break;}
  case 5:
    {flag=flag%4;
    switch(flag)
    {
      case 0:
block[0][0] -=20; block[0][1] -=60;
block[1][0] -=20; block[1][1] -=20;
break;
      case 1:
block[0][0] +=20; block[0][1]+=40;
block[1][0] -=20;
break;
      case 2:
block[0][0] -=40; block[0][1] +=40;
block[1][1] +=40;
break;
      case 3:
block[0][0] +=40; block[0][1] -=20;
block[1][0] +=40; block[1][1] -=20;
break;
    }
    break;}
  case 6:
    {flag =flag%4;
    switch(flag)
    {
      case 0:
block[1][1]+=20;
block[3][0]+=20; block[3][1]+=40;
break;
      case 1:
block[1][0]+=20; block[1][1]+=20; break;
      case 2:
block[1][0]-=20; block[1][1]-=40;
block[3][1]-=20;
break;
      case 3:
block[3][0]-=20; block[3][1]-=20; break;
    }
    break;}
}
  for(i=0;i<4;i++)  if(cells[block[0]/20-2][block[1]/20-3]) judge=1;
  if(judge)
   {
     flag+=3;
     for(i=0;i<4;i++){block[0]=arg2[0];block[1]=arg2[1];}
   }
  draw();
}

void scangrid()
{
  int i,j,lines,k;
  for(i=0;i<4;i++)
    if((block[1]/20-3)<top)  /*如果现有图形低于原有的TOP所示行数,则更新TOP值.*/
      top=block[1]/20-3;
  if(top<1)
  {
    /*show_info(GAMELOSE);*/
    exit(1); /*退出程序*/
  }
  
  i=19;
  while((i-top)>=0)/*消行检测*/
  {
    lines =0;/*一个标记,用于指出某行是否有未填满的情况*/
            /* 循环语句检查是否有某一行全部被【方格】都填满  */
    for(j=1; j<=12; j++)
      {  if(!cells[j])
        {
          lines=1; /*若i行未被填满,则置标记为1*/
          i--;
          break;
        }
      }
    /* 若该行被填满,则将上一行的填充状态复制到该行,依此类推 */
    if(!lines)
    {
      for(j=1;j<13; j++)
        for(k=i; k>=top; k--)/*i行以上直到TOP+1行的标记全部下移!*/
          cells[j][k]=cells[j][k-1];
      repaint();            /*画静止方格*/
      top++;
      i=19;
      /*showscore(10);*/        /*每消一行加10分*/
    }
  }
}

void repaint()
/*-------------------------------------------------------------
//重画游戏区域及静止方格
//------------------------------------------------------------*/
{
  int i,j;
  for(i=1;i<=12;i++)
    for(j=3;j<=19;j++)
      if(!cells[j])
      {
        setfillstyle(1,LIGHTGRAY);
        floodfill(61+(i-1)*CELL,61+j*CELL,getmaxcolor());
      }
      else
      {
        setfillstyle(1,RED);
        floodfill(61+(i-1)*CELL,61+j*CELL,getmaxcolor());
      }
}


本来是还有一个word报告的,可能是这个附件加不上去,不知道是文件过大还是不支持offoce word 2010的格式.仅用于交流,有高见者可以给我留言或发邮件fred1564@qq.com






分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏0 顶!~顶!~0 扔鸡蛋~扔鸡蛋~0

78

主题

1

好友

1256

积分

榜眼

冬之王

Rank: 7Rank: 7Rank: 7

该用户从未签到

西工币
10405 枚
好评度
4 点
声望
270 点
注册时间
2007-7-25
帖子
1117
积分
1256
UID
11446

白羊座 卯兔

2#
发表于 2010-7-14 19:59:57 |只看该作者
巧克力的问题是:你把它吃了,它就没了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|xatubbs.com ( 苏ICP备11050183号 )

GMT+8, 2025-7-15 11:00 , Processed in 0.164173 second(s), 26 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部