还差几 发表于 2017-8-15 17:17:39

俄罗斯方块

做不好请提出{:5_92:}
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
#include<conio.h>

#define MOD 28
#define SIZE_N 19
#define SIZE_M 12

int cur_x,cur_y;
int score,mark,next,map,Gamespeed=300;

int shape={
      {0,-1,0,-2,1,0}, {0,1,1,0,2,0}, {-1,0,0,1,0,2}, {0,-1,-1,0,-2,0},
      {0,-1,0,1,-1,0}, {0,1,1,0,-1,0}, {1,0,0,-1,0,1}, {1,0,-1,0,0,-1},
      {-1,1,0,1,1,0}, {0,-1,1,0,1,1}, {-1,0,0,-1,1,-1}, {-1,-1,-1,0,0,1},
      {-1,0,0,1,1,1}, {0,1,1,-1,1,0}, {-1,0,0,1,1,1}, {0,1,1,-1,1,0},
      {-1,0,0,-1,0,-2}, {-1,0,-2,0,0,1}, {0,1,0,2,1,0}, {0,-1,1,0,2,0},
      {0,1,1,0,1,1}, {0,-1,1,0,1,-1}, {-1,0,0,-1,-1,-1}, {-1,0,-1,1,0,1},
      {0,1,0,2,0,3}, {1,0,2,0,3,0}, {0,-1,0,-2,0,-3}, {-1,0,-2,0,-3,0}
};

void gotoxy(int x,int y){
      COORD c;
      c.X=x-1; c.Y=y-1;
      SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void Gameover(){
      int i,j,flag=0;
      for(j=1;j<SIZE_M-1;j++){
                if(map!=0){
                        flag=1;break;
                }
      }
      if(flag==1){
                for(i=1;i<SIZE_N-1;i++){
                        gotoxy(2,i+1);
                        for(j=1;j<SIZE_M-1;j++){
                              printf("□");
                        }puts("");
                }
                gotoxy(7,9);
                printf("GAME OVER!");
                gotoxy(1,SIZE_N+1);
                exit(0);
      }
}
void ShowMap(int id){
      int i,j;
      gotoxy(1,1);
      if(id!=-1){
                for(i=0;i<SIZE_N;i++){
                        for(j=0;j<SIZE_M;j++){
                              if(i==0&&j==0 || i==0&&j==SIZE_M-1 || j==0&&i==SIZE_N-1 || j==SIZE_M-1&&i==SIZE_N-1)printf(" ");
                              else if(i==0 || i==SIZE_N-1)printf("--");
                              else if(j==0 || j==SIZE_M-1)printf("|");
                              else if(map==2) printf("■");
                              else if(i==cur_x+shape && j==cur_y+shape ||
                                        i==cur_x+shape && j==cur_y+shape ||
                                        i==cur_x+shape && j==cur_y+shape ||
                                        i==cur_x && j==cur_y)
                                        printf("■");
                              else if(map==0) printf("");      
                        }
                        if(i==1)printf("   下一个 :");
                        if(i==11)printf("   等分 :   %d",score);
                        if(i==14)printf("   速度 :   %d",score/100+1);
                        puts("");
                }
      }
      else {
                mark=1;
                for(i=0;i<SIZE_N;i++)
                {
                        for(j=0;j<SIZE_M;j++)
                        {
                              if(i==0&&j==0 || i==0&&j==SIZE_M-1 || j==0&&i==SIZE_N-1 || j==SIZE_M-1&&i==SIZE_N-1)printf(" ");
                              else if(i==0 || i==SIZE_N-1)printf("--");
                              else if(j==0 || j==SIZE_M-1)printf("|");
                              else if(map==2) printf("■");
                              else if(map==0) printf("");      
                        }
                        if(i==1)printf("   next:");
                        if(i==11)printf("   score :   %d",score);
                        if(i==14)printf("   speed :   %d",score/100+1);
                        puts("");
                }
      }
         
      gotoxy(30,6); printf("");
      for(i=0;i<6;i=i+2){
                gotoxy(30+2*shape,6+shape); printf("");
      }
      gotoxy(30,6); printf("■");
      for(i=0;i<6;i=i+2)
      {
                gotoxy(30+2*shape,6+shape); printf("■");
      }
      Sleep(Gamespeed);
}

void init(int id)
{
    int i,j;
      memset(map,0,sizeof(map));
      for(i=0;i<SIZE_N;i++){
                for(j=0;j<SIZE_M;j++)
                        if(i==SIZE_N-1 || j==0 || j==SIZE_M-1)
                              map=-1;
      }
      cur_x=0; cur_y=5;
      ShowMap(id);
}

int judge_in(int x,int y,int id)
{
    int i;
      if(map!=0)return 0;
      for(i=0;i<6;i=i+2)
      {
                if(map[ x+shape ][ y+shape ]!=0)return 0;
      }return 1;
}

void fun_score()
{
    int i,j,ii,jj;
      for(i=1;i<SIZE_N-1;i++)
      {
                int flag=0;
                for(j=1;j<SIZE_M-1;j++)
                {
                        if(map!=2){ flag=1;break; }
                }
                if(flag==0)
                {
                        int k=3;
                        while(k--)
                        {
                              gotoxy(2,i+1);
                              for(ii=1;ii<SIZE_M-1;ii++)
                              {
                                        if(map==2)
                                        {
                                                if(k%2==1)printf("");
                                                else printf("■");
                                        }
                              }
                              Sleep(100);
                        }
                        for(ii=i;ii>1;ii--)
                        {
                              for(jj=1;jj<SIZE_M-1;jj++) map=map;
                        }
                        ShowMap(-1);
                        score+=10;
                        if(score%100==0 && score!=0)Gamespeed-=50;
                }
      }
}

int main(){
      int i,id,set=1;
      int pan;
      
      printf("按1开始游戏,其他结束。\n");
      scanf("%d",&pan);
MNBVCXZ:
      if(pan==1)
      {
            srand(time(NULL));
            id=rand()%MOD; id=(id+MOD)%MOD;
            next=rand()%MOD; next=(next+MOD)%MOD;
            
            init(id);
            
            while(1)
            {
Here:      
            mark=0;
            if(set==0)
            {
                  id=next;
                  next=rand()%MOD; next=(next+MOD)%MOD;
                  cur_x=0;cur_y=5;
                  set=1;
            }
            
            while(!kbhit()){
                  Gameover();
                  if(judge_in(cur_x+1,cur_y,id)==1) cur_x++;
                  else
                  {
                        map=2;
                        for(i=0;i<6;i=i+2)
                              map[ cur_x+shape ][ cur_y+shape ]=2;
                        fun_score();
                        set=0;
                  }
                  if(mark!=1)ShowMap(id);
                  goto Here;
            }
            
            char key;
            key=getch();
            
            if(key==72)
            {
                  int tmp=id;
                  id++;
                  if( id%4==0 && id!=0 )id=id-4;
                  if(judge_in(cur_x,cur_y,id)!=1)id=tmp;
            }
            else if(key==80 && judge_in(cur_x+1,cur_y,id)==1)cur_x++;
            else if(key==75 && judge_in(cur_x,cur_y-1,id)==1)cur_y--;
            else if(key==77 && judge_in(cur_x,cur_y+1,id)==1)cur_y++;
            else if(key==27){gotoxy(1,SIZE_N+1);exit(0);}
            }
      }
      else
      {
            printf("你真的要退出吗?按1开始游戏,其他结束。\n");
            scanf("%d",&pan);
            goto MNBVCXZ;
      }
      
      
      srand(time(NULL));
      id=rand()%MOD; id=(id+MOD)%MOD;
      next=rand()%MOD; next=(next+MOD)%MOD;
      
      init(id);
      
      while(1)
      {
HERE:      
      mark=0;
      if(set==0){
            id=next;
            next=rand()%MOD; next=(next+MOD)%MOD;
            cur_x=0;cur_y=5;
            set=1;
      }
      
      while(!kbhit()){
            Gameover();
            if(judge_in(cur_x+1,cur_y,id)==1) cur_x++;
            else
            {
                  map=2;
                  for(i=0;i<6;i=i+2)
                        map[ cur_x+shape ][ cur_y+shape ]=2;
                  fun_score();
                  set=0;
            }
            if(mark!=1)ShowMap(id);
            goto HERE;
      }
      
      char key;
      key=getch();
      
      if(key==72)
      {
            int tmp=id;
            id++;
            if( id%4==0 && id!=0 )id=id-4;
            if(judge_in(cur_x,cur_y,id)!=1)id=tmp;
      }
      else if(key==80 && judge_in(cur_x+1,cur_y,id)==1)cur_x++;
      else if(key==75 && judge_in(cur_x,cur_y-1,id)==1)cur_y--;
      else if(key==77 && judge_in(cur_x,cur_y+1,id)==1)cur_y++;
      else if(key==27){gotoxy(1,SIZE_N+1);exit(0);}

      system("pause");

      getch();

      return 0;
      }
}


{:5_92:}

Rat 发表于 2017-8-15 19:17:23

很神奇看看研究一下

Rat 发表于 2017-8-15 19:22:12

问一下楼主是用什么IDE编写的程序 是VC6.0吗

灭·世 发表于 2017-8-15 20:26:47

看看

「神」 发表于 2017-8-15 22:36:58

本帖最后由 「神」 于 2017-8-15 22:47 编辑

不错很有搞头!!!!!!!!!!

还差几 发表于 2017-8-16 16:31:59

Rat 发表于 2017-8-15 19:22
问一下楼主是用什么IDE编写的程序 是VC6.0吗

小甲鱼老师用的编译器

还差几 发表于 2017-8-16 16:47:33

我用的是小甲鱼老师的编译器
可以在进入鱼c7周年主页,点“视频”


点“软件下载

还差几 发表于 2017-8-16 16:48:03

就可以找到

tear 发表于 2017-8-20 11:51:11

感受感受

yang2017 发表于 2017-8-22 20:56:21

邹新宇 发表于 2017-8-25 13:56:14

俄罗斯方块,童年回忆啊

木一 发表于 2017-8-25 18:31:24

厉害

椰城路客 发表于 2017-8-26 10:08:46

看看是什么回事。

wjp 发表于 2017-9-1 19:39:57

厉害了

秋风qq 发表于 2017-9-2 00:11:15

kankan

takki 发表于 2017-9-10 19:53:44

谢谢分享

埃菲尔 发表于 2017-9-11 20:52:39

研究

莎士比亚先生 发表于 2017-9-12 20:30:44

厉害

idol 发表于 2017-9-17 18:42:27

xx

小楼shine 发表于 2017-9-17 21:12:14

赞一个
页: [1] 2 3 4 5 6 7
查看完整版本: 俄罗斯方块