鱼C论坛

 找回密码
 立即注册
查看: 7736|回复: 127

[技术交流] 俄罗斯方块

  [复制链接]
发表于 2017-8-15 17:17:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
做不好请提出
#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[SIZE_N][SIZE_M],Gamespeed=300;

int shape[28][6]={
        {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[1][j]!=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[j]==2) printf("■");
                                else if(i==cur_x+shape[id][0] && j==cur_y+shape[id][1] ||
                                        i==cur_x+shape[id][2] && j==cur_y+shape[id][3] ||
                                        i==cur_x+shape[id][4] && j==cur_y+shape[id][5] ||
                                        i==cur_x && j==cur_y)
                                        printf("■");
                                else if(map[j]==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[j]==2) printf("■");
                                else if(map[j]==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[id][i+1],6+shape[id]); printf("  ");
        }
        gotoxy(30,6); printf("■");
        for(i=0;i<6;i=i+2)
        {
                gotoxy(30+2*shape[next][i+1],6+shape[next]); 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[j]=-1;
        }
        cur_x=0; cur_y=5;
        ShowMap(id);
}

int judge_in(int x,int y,int id)
{
    int i;
        if(map[x][y]!=0)return 0;
        for(i=0;i<6;i=i+2)
        {
                if(map[ x+shape[id] ][ y+shape[id][i+1] ]!=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[j]!=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[ii]==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[ii][jj]=map[ii-1][jj];
                        }
                        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[cur_x][cur_y]=2;
                        for(i=0;i<6;i=i+2)
                              map[ cur_x+shape[id] ][ cur_y+shape[id][i+1] ]=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[cur_x][cur_y]=2;
                  for(i=0;i<6;i=i+2)
                        map[ cur_x+shape[id] ][ cur_y+shape[id][i+1] ]=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;
      }
}
截图20170815548516.png



截图20170815548516.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-15 19:17:23 | 显示全部楼层
很神奇  看看研究一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-15 19:22:12 | 显示全部楼层
问一下楼主是用什么IDE编写的程序 是VC6.0吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-15 20:26:47 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-15 22:36:58 | 显示全部楼层
本帖最后由 「神」 于 2017-8-15 22:47 编辑

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

用那个编译啊

用那个编译啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-16 16:31:59 | 显示全部楼层
Rat 发表于 2017-8-15 19:22
问一下楼主是用什么IDE编写的程序 是VC6.0吗

小甲鱼老师用的编译器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-16 16:47:33 | 显示全部楼层
我用的是小甲鱼老师的编译器
可以在进入鱼c7周年主页,点“视频”


点“软件下载

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-16 16:48:03 | 显示全部楼层
就可以找到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-20 11:51:11 | 显示全部楼层
感受感受
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-22 20:56:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-25 13:56:14 | 显示全部楼层
俄罗斯方块,童年回忆啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-25 18:31:24 From FishC Mobile | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-26 10:08:46 | 显示全部楼层
看看是什么回事。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-1 19:39:57 | 显示全部楼层
厉害了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-2 00:11:15 From FishC Mobile | 显示全部楼层
kankan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-10 19:53:44 | 显示全部楼层
谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-11 20:52:39 | 显示全部楼层
研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-12 20:30:44 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-17 18:42:27 | 显示全部楼层
xx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-17 21:12:14 | 显示全部楼层
赞一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 08:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表