代码如下~~

/*
俄罗斯方块v1.0bate2
by 千百度 2017-5-1请调整键盘高度为最低,或设置字号为8
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
//地图范围
#define H 21
#define W 16
typedef struct
{int x[4][4];int y[4][4];int type;
}TETRIS;
TETRIS t1,t2;//方块结构体TETRIS getxy();//随机获取一组方块坐标
void loading();
void gyrate();//旋转
void remove();//消除行得分
void initmap();//初始化地图
void drawmap();//绘制地图
void move();//向下移动
void gameover();//游戏结束
void *event(void *);//按键事件,独立线程
int x1[][4][4]=
{//方块横坐标{0,2,0,0,1,2,3,0},//T型方块{0,0,0,0,1,2,3,4},//I{1,2,0,0,1,2,0,0},//O{1,2,0,0,0,2,3,0},//Z{0,2,3,0,1,2,0,0},//S{1,0,0,0,1,2,3,0},//J{0,0,3,0,1,2,3,0}//L},y1[][4][4]=
{//方块纵坐标{0,1,0,0,2,2,2,0},//T型方块{0,0,0,0,2,2,2,2},//I{1,1,0,0,2,2,0,0},//O{1,1,0,0,0,2,2,0},//Z{0,1,1,0,2,2,0,0},//S{1,0,0,0,2,2,2,0},//J{0,0,1,0,2,2,2,0}//L
};
enum //DIRECTION
{UP  = '2',DOWN = '5',LEFT = '4',RIGHT = '6',PAUSE = '0'
};
//全局变量
volatile int kkk=0,kk=0,k=0,p=1,hs=0,score=0,w=4,h=4,hh,pt,t_sum[7],map[H+1][W+1],pau=1,star = 0;
//主函数
int main()
{loading();while (p){initmap();if (pau>0)move();drawmap();usleep(500000);clrscr();}
}
//加载界面
void loading()
{int k;printf("\033[?25l"); //隐藏光标pthread_t pid1, pid2;do{k=pthread_create(&pid1, NULL, event, NULL);}while (k);t2=getxy();for (int i=0;i<100;i++){printf("\033[47;34m\t   loading......%d%%",i);usleep(20000);drawmap();clrscr();}t1=getxy();star=1;initmap();drawmap();printf("\033[40;32m\t按任意键开始游戏……");getch();clrscr();
}
//初始化地图
void initmap(void)
{for (int i=0;i<=H;++i)//定义地图for (int j=0;j<W;++j){if ((i==H||i==0)&&j<=11)map[i][j]=3;else if (j==0||j==11)map[i][j]=2;elseif (map[i][j]<4)map[i][j]=0;}for (int i=0;i<w;i++)for (int j=0;j<h;j++){if (t1.y[i][j]!= 0&&t1.x[i][j]!= 0){map[t1.y[i][j]][t1.x[i][j]]=1;map[H][t1.x[i][j]]=11;}if (t2.y[i][j]!= 0&&t2.x[i][j]!= 0)map[t2.y[i][j]][t2.x[i][j]+8]=-1;}
}
//获取随机方块
TETRIS getxy()
{TETRIS a;srand(time(NULL));//初始化伪随机数生成器 int k = (double)rand()/RAND_MAX*7;
//  k=1;                 //单个调试a.type=k;for (int i=0;i<h;i++)for (int j=0;j<w;j++){a.x[i][j]=x1[k][i][j];a.y[i][j]=y1[k][i][j];if (a.y[i][j]!= 0&&a.x[i][j]!= 0)a.x[i][j]+=3;}return a;
}
/*消除判断和得分*/
void remove()
{int k[4]={0},sum=0;dd:int kk=0;for (int i=hh;i>hh-4;i--){k[kk++]=1;for (int j=1;j<11;j++)if (map[i][j]<4)k[kk-1]=0;}kk=0;for (int i=hh;i>hh-4;--i){if (k[kk++]==1){for (int kkk=i;kkk>1;--kkk){for (int j=1;j<11;++j)map[kkk][j]=map[kkk-1][j];}sum++;hs++;goto dd;}}score+=(sum*sum*100/2);
}
//方块右移
void right()
{for (int i=0;i<h;i++)for (int j=0;j<w;j++){if (map[t1.y[i][j]][t1.x[i][j]+1]==2||map[t1.y[i][j]][t1.x[i][j]+1]>3){kk=1;goto k2;}elsekk=0;}k2:if (!kk){for (int i=0;i<h;i++)for (int j=0;j<w;j++){if (t1.y[i][j]!= 0&&t1.x[i][j]!= 0)t1.x[i][j]++;}}k=0;
}
//方块左移
void left()
{   for (int i=0;i<h;i++)for (int j=0;j<w;j++){if (map[t1.y[i][j]][t1.x[i][j]-1]==2||map[t1.y[i][j]][t1.x[i][j]-1]>3){kk=1;goto k1;}elsekk=0;}k1:if (!kk){for (int i=0;i<h;i++)for (int j=0;j<w;j++){if (t1.y[i][j]!= 0&&t1.x[i][j]!= 0)t1.x[i][j]--;}}k=0;
}
//按键事件
void *event(void*)
{sleep(2);
while(p)
{usleep(10000);while (kbhit())//判断输入,有则循环{clrscr();int key = getch();//获取按键switch(key){case RIGHT:if (pau>0)right();break;   case LEFT:if (pau>0)left();break;case UP:if (pau>0)gyrate();k=0;break;case DOWN:if (pau>0)move();break;case PAUSE:pau=-pau;break;}initmap();drawmap();}
}
}
//方块下落
void move()
{if (!k){for (int i=0;i<h;i++){for (int j=0;j<w;j++){if (map[t1.y[i][j]+1][t1.x[i][j]]>=3){k=1;goto kk;}}}for (int i=0;i<h;i++){for (int j=0;j<w;j++){if (map[t1.y[i][j]][t1.x[i][j]]<2)t1.y[i][j]++;}}}else{for (int i=0;i<h;i++)for (int j=0;j<w;j++){if (t1.y[i][j]!= 0&&t1.x[i][j]!= 0){switch (t1.type){case 0:map[t1.y[i][j]][t1.x[i][j]]=4;break;case 1:map[t1.y[i][j]][t1.x[i][j]]=5;break;case 2:map[t1.y[i][j]][t1.x[i][j]]=6;break;case 3:map[t1.y[i][j]][t1.x[i][j]]=7;break;case 4:map[t1.y[i][j]][t1.x[i][j]]=8;break;case 5:map[t1.y[i][j]][t1.x[i][j]]=9;break;case 6:map[t1.y[i][j]][t1.x[i][j]]=10;break;}hh=t1.y[i][j];}}if (t1.y[1][1]-1==1){gameover();}score+=10;remove();t_sum[t1.type]++;t1=t2;t2=getxy();k=kk=kkk=0;}kk:;
}
//游戏结束
void gameover()
{clrscr();drawmap();    printf("游戏结束,任意键继续…\n您的分数为%d",score);
//  usleep(1000000);score=0;getch();for (int i=1;i<H;i++){for (int j=1;j<W;j++)map[i][j]=0;}
}
//绘制主界面
void drawmap()
{for (int i=0;i<=H;i++)//画地图{for (int j=0;j<W;j++){switch(map[i][j]){case 0:printf("\33[40;30m++\33[40;37m");//如果地图异常,请添加一个空格break;case 2:printf("\033[40;37m│ \33[40;37m");break;case 3:printf("\033[40;37m﹌\33[40;37m");break;case 11:printf("\033[47;3%dm==\33[40;37m",t1.type);break;case 1:printf("\033[47;3%dm■ \33[40;37m",t1.type);break;case -1:printf("\033[47;3%dm■ \33[40;37m",t2.type);break;case 4:printf("\033[47;30m■ \33[40;37m");break;case 5:printf("\033[47;31m■ \33[40;37m");break;case 6:printf("\033[47;32m■ \33[40;37m");break;case 7:printf("\033[47;33m■ \33[40;37m");break;case 8:printf("\033[47;34m■ \33[40;37m");break;case 9:printf("\033[47;35m■ \33[40;37m");break;case 10:printf("\033[47;36m■ \33[40;37m");break;}}if (i==8&&pau<0)printf("\033[47;34m暂停中");if (i==3)printf("\033[43;34m 得分: \033[40;37m  %d",score);   if (i==4)printf("\033[46;34m 行数: \033[40;37m  %d",hs);if (i==5)printf("\033[42;30m 级别: \033[40;37m  1");if (i==0&&star)printf("\033[47;30m 俄罗斯方块v1.2\033[40;37m");if (i==2)printf("\033[47;30m←下一个");if (i==10)printf("\033[47;30m■ T :\033[40;36m   %d",t_sum[0]);if (i==11)printf("\033[47;31m■ I :\033[40;36m   %d",t_sum[1]);if (i==12)printf("\033[47;32m■ O :\033[40;36m   %d",t_sum[2]);if (i==13)printf("\033[47;33m■ Z :\033[40;36m   %d",t_sum[3]);if (i==14)printf("\033[47;34m■ S :\033[40;36m   %d",t_sum[4]);if (i==15)printf("\033[47;35m■ J :\033[40;36m   %d",t_sum[5]);if (i==16)printf("\033[47;36m■ L :\033[40;36m   %d",t_sum[6]);if (i==17)printf("\033[47;30msum: \033[40;36m   %d",t_sum[0]+t_sum[1]+t_sum[2]+t_sum[3]+t_sum[4]+t_sum[5]+t_sum[6]);   if (i==19)printf("\033[43;34m 数字键: '4'左移'6'右移 ");if (i==20)printf("\033[43;34m '2'旋转;'8'下落;'0'暂停");printf("\n");}
}/*方块的旋转*/
void gyrate()
{kkk++;if (kkk>3)kkk=0;switch (t1.type){case 0:switch (kkk){case 1:if(!map[t1.y[1][1]+1][t1.x[1][1]]){t1.x[2][1]=t1.x[1][0]+1;t1.y[2][1]=t1.y[1][0]+1;t1.x[1][0]=t1.y[1][0]=0;}else kkk--;break;case 2:if(!map[t1.y[1][1]][t1.x[1][1]-1]){t1.x[1][0]=t1.x[0][1]-1;t1.y[1][0]=t1.y[0][1]+1;t1.x[0][1]=t1.y[0][1]=0;}else kkk--;break;case 3:if(!map[t1.y[1][1]][t1.x[1][1]+1]){t1.x[0][1]=t1.x[1][2]-1;t1.y[0][1]=t1.y[1][2]-1;t1.x[1][2]=t1.y[1][2]=0;}else kkk--;break;case 0:if(!map[t1.y[1][1]][t1.x[1][1]+1]){t1.x[1][2]=t1.x[2][1]+1;t1.y[1][2]=t1.y[2][1]-1;t1.x[2][1]=t1.y[2][1]=0;}else kkk--;break;}break;case 1:if (kkk>1)kkk-=2;switch (kkk){case 1:if (!(map[t1.y[1][1]+2][t1.x[1][1]]||map[t1.y[1][1]+1][t1.x[1][1]])){t1.x[0][1]=t1.x[1][0]+1;t1.y[0][1]=t1.y[1][0]-1;t1.x[2][1]=t1.x[1][2]-1;t1.y[2][1]=t1.y[1][2]+1;t1.x[3][1]=t1.x[1][3]-2;t1.y[3][1]=t1.y[1][3]+2;t1.x[1][0]=t1.y[1][0]=t1.x[1][2]=t1.y[1][2]=t1.x[1][3]=t1.y[1][3]=0;}else kkk--;break;case 0:if (!(map[t1.y[1][1]][t1.x[1][1]-1]||map[t1.y[1][1]][t1.x[1][1]+1]||map[t1.y[1][1]][t1.x[1][1]+2])){t1.x[1][0]=t1.x[0][1]-1;t1.y[1][0]=t1.y[0][1]+1;t1.x[1][2]=t1.x[2][1]+1;t1.y[1][2]=t1.y[2][1]-1;t1.x[1][3]=t1.x[3][1]+2;t1.y[1][3]=t1.y[3][1]-2;t1.x[0][1]=t1.y[0][1]=t1.x[2][1]=t1.y[2][1]=t1.x[3][1]=t1.y[3][1]=0;}else kkk--;break;}break;case 3:if (kkk>1)kkk-=2;switch (kkk){case 1:if (!map[t1.y[1][1]+1][t1.x[1][1]]){t1.x[0][2]=t1.x[0][0]+2;t1.y[0][2]=t1.y[0][0];t1.x[2][1]=t1.x[0][1];t1.y[2][1]=t1.y[0][1]+2;t1.x[0][0]=t1.x[0][1]=t1.y[0][0]=t1.y[0][1]=0;}else kkk--;break;case 0:if (!map[t1.y[1][1]-1][t1.x[1][1]-1]){t1.x[0][0]=t1.x[0][2]-2;t1.y[0][0]=t1.y[0][2];t1.x[0][1]=t1.x[2][1];t1.y[0][1]=t1.y[2][1]-2;t1.x[0][2]=t1.x[2][1]=t1.y[0][2]=t1.y[0][2]=0;}else kkk--;break;}break;case 4:if (kkk>1)kkk-=2;switch (kkk){case 1:if (!map[t1.y[1][1]+1][t1.x[1][1]]){t1.x[1][2]=t1.x[1][0]+2;t1.y[1][2]=t1.y[1][0];t1.x[2][2]=t1.x[0][2];t1.y[2][2]=t1.y[0][2]+2;t1.x[1][0]=t1.x[0][2]=t1.y[1][0]=t1.y[0][2]=0;}else kkk--;break;case 0:if (!map[t1.y[1][1]][t1.x[1][1]-1]){t1.x[1][0]=t1.x[1][2]-2;t1.y[1][0]=t1.y[1][2];t1.x[0][2]=t1.x[2][2];t1.y[0][2]=t1.y[2][2]-2;t1.x[1][2]=t1.x[2][2]=t1.y[1][2]=t1.y[2][2]=0;}else kkk--;break;}break;case 5:switch (kkk){case 1:if (!(map[t1.y[1][1]+1][t1.x[1][1]]||map[t1.y[1][1]+1][t1.x[1][1]+1])){t1.x[0][1]=t1.x[1][0]+1;t1.y[0][1]=t1.y[1][0]-1;t1.x[2][1]=t1.x[1][2]-1;t1.y[2][1]=t1.y[1][2]+1;t1.x[0][2]=t1.x[0][0]+2;t1.y[0][2]=t1.y[0][0];t1.x[1][0]=t1.y[1][0]=t1.x[1][2]=t1.y[1][2]=t1.x[0][0]=t1.y[0][0]=0;}else kkk--;break;case 2:if (!map[t1.y[1][1]][t1.x[1][1]-1]){t1.x[1][2]=t1.x[0][1]+1;t1.y[1][2]=t1.y[0][1]+1;t1.x[1][0]=t1.x[2][1]-1;t1.y[1][0]=t1.y[2][1]-1;t1.x[2][2]=t1.x[0][2];t1.y[2][2]=t1.y[0][2]+2;t1.x[0][1]=t1.y[0][1]=t1.x[2][1]=t1.y[2][1]=t1.x[0][2]=t1.y[0][2]=0;}else kkk--;break;case 3:if (!map[t1.y[1][1]][t1.x[1][1]-1]){t1.x[0][1]=t1.x[1][0]+1;t1.y[0][1]=t1.y[1][0]-1;t1.x[2][1]=t1.x[1][2]-1;t1.y[2][1]=t1.y[1][2]+1;t1.x[2][0]=t1.x[2][2]-2;t1.y[2][0]=t1.y[2][2];t1.x[1][0]=t1.y[1][0]=t1.x[1][2]=t1.y[1][2]=t1.x[2][2]=t1.y[2][2]=0;}else kkk--;break;case 0:if (!(map[t1.y[1][1]][t1.x[1][1]+1])){t1.x[1][2]=t1.x[0][1]+1;t1.y[1][2]=t1.y[0][1]+1;t1.x[1][0]=t1.x[2][1]-1;t1.y[1][0]=t1.y[2][1]-1;t1.x[0][0]=t1.x[2][0];t1.y[0][0]=t1.y[2][0]-2;t1.x[0][1]=t1.y[0][1]=t1.x[2][1]=t1.y[2][1]=t1.x[2][0]=t1.y[2][0]=0;}else kkk--;break;}break;case 6:switch (kkk){case 1:if (!(map[t1.y[1][1]+1][t1.x[1][1]]||map[t1.y[1][1]+1][t1.x[1][1]+1])){t1.x[0][1]=t1.x[1][0]+1;t1.y[0][1]=t1.y[1][0]-1;t1.x[2][1]=t1.x[1][2]-1;t1.y[2][1]=t1.y[1][2]+1;t1.x[2][2]=t1.x[0][2];t1.y[2][2]=t1.y[0][2]+2;t1.x[1][0]=t1.y[1][0]=t1.x[1][2]=t1.y[1][2]=t1.x[0][2]=t1.y[0][2]=0;}else kkk--;break;case 2:if (!map[t1.y[1][1]][t1.x[1][1]-1]){t1.x[1][2]=t1.x[0][1]+1;t1.y[1][2]=t1.y[0][1]+1;t1.x[1][0]=t1.x[2][1]-1;t1.y[1][0]=t1.y[2][1]-1;t1.x[2][0]=t1.x[2][2]-2;t1.y[2][0]=t1.y[2][2];t1.x[0][1]=t1.y[0][1]=t1.x[2][1]=t1.y[2][1]=t1.x[2][2]=t1.y[2][2]=0;}else kkk--;break;case 3:if (!map[t1.y[1][1]+1][t1.x[1][1]]){t1.x[0][1]=t1.x[1][0]+1;t1.y[0][1]=t1.y[1][0]-1;t1.x[2][1]=t1.x[1][2]-1;t1.y[2][1]=t1.y[1][2]+1;t1.x[0][0]=t1.x[2][0];t1.y[0][0]=t1.y[2][0]-2;t1.x[1][0]=t1.y[1][0]=t1.x[1][2]=t1.y[1][2]=t1.x[2][0]=t1.y[2][0]=0;}else kkk--;break;case 0:if (!(map[t1.y[1][1]][t1.x[1][1]+1]||map[t1.y[1][1]][t1.x[1][1]-1])){t1.x[1][2]=t1.x[0][1]+1;t1.y[1][2]=t1.y[0][1]+1;t1.x[1][0]=t1.x[2][1]-1;t1.y[1][0]=t1.y[2][1]-1;t1.x[0][2]=t1.x[0][0]+2;t1.y[0][2]=t1.y[0][0];t1.x[0][1]=t1.y[0][1]=t1.x[2][1]=t1.y[2][1]=t1.x[0][0]=t1.y[0][0]=0;}else kkk--;break;}break;}
}

俄罗斯方块C4droid相关推荐

  1. C4droid:安卓手机最强C/C++编译器

    C4droid:安卓手机最强C/C++编译器 C4droid 功能简介 C4droid 安装步骤 C4droid 调试.图形化设置 C4droid 图形化编程 C4doird 导出程序为手机应用 C4 ...

  2. python编的俄罗斯方块游戏下载_python写的俄罗斯方块游戏

    python写的俄罗斯方块游戏 功能包括:记录所花费时间;消去的总行数;总分;排行榜,最高记录查看等. 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等. from Tkinter ...

  3. GitHub开源的超逼真俄罗斯方块游戏

    俄罗斯方块一直是各类程序语言热衷实现的经典游戏,有很多JavaScript实现版本,本开源项目使用React实现. 项目试玩网址:https://chvin.github.io/react-tetri ...

  4. Python实现俄罗斯方块

    目录 1.外形设计 2.方块设计 3.停靠设计 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很难啊,等真正写完了发现 ...

  5. AI玩俄罗斯方块(Python实现)

    目录 1.环境 2.实现机制(Pierre Dellacherie算法) 3.代码实现 人工智能大火的今天,如果还是自己玩俄罗斯方块未免显得太LOW,为什么不对游戏升级,让机器自己去玩俄罗斯方块呢?有 ...

  6. 如何让AI教机器自己玩俄罗斯方块?

    作者 | Ahab 转载自公众号Ahab杂货铺(ID:PythonLearningCamp) 人工智能大火的今天,如果还是自己玩俄罗斯方块未免显得太 LOW,为什么不对游戏升级,让机器自己去玩俄罗斯方 ...

  7. 500行代码写一个俄罗斯方块游戏

    导读:本文我们要制作一个俄罗斯方块游戏. 01 俄罗斯方块 Tetris 俄罗斯方块游戏是世界上最流行的游戏之一.是由一名叫Alexey Pajitnov的俄罗斯程序员在1985年制作的,从那时起,这 ...

  8. 算法帖——用舞蹈链算法(Dancing Links)求解俄罗斯方块覆盖问题

    问题的提出:如下图,用13块俄罗斯方块覆盖8*8的正方形.如何用计算机求解? 解决这类问题的方法不一而足,然而核心思想都是穷举法,不同的方法仅仅是对穷举法进行了优化 用13块不同形状的俄罗斯方块(每个 ...

  9. python俄罗斯方块算法详解_用 Python 写一个俄罗斯方块游戏 (

    @@ -2,34 +2,34 @@ > * 原文作者:[Dr Pommes](https://medium.com/@pommes) > * 译文出自:[掘金翻译计划](https://g ...

  10. pygame简单的俄罗斯方块游戏和简单的打字游戏

    1.pygame简单的俄罗斯方块游戏 一.对战的方块管理 定义一个BlockManage管理对战的方块 根据BlockManage根据传入的玩家id返回方块,保证每个玩家拿到的方块序列是一致的,所以在 ...

最新文章

  1. [转]Ext Grid控件的配置与方法
  2. Google首席科学家Peyman 《计算成像去噪进展》斯坦福演讲报告,附视频与Slides
  3. 修复Linux系统内核TCP漏洞,修复Linux TCP SACK PANIC 远程拒绝服务漏洞
  4. SPOJ 375 树链剖分学习
  5. 7.利用级数展开式计算求cos(x) 的近似值(精度为10-6)。
  6. 带研发团队后的日常思考1 初级管理者的困惑
  7. 把 mysql 整个加载进内存磁盘中_MySQL 缓冲池 是什么?
  8. redis深度历险:核心原理与应用实践_玩转Redis,阿里技术带你从核心原理到应用实践,一份文档全掌握...
  9. npm 开发中 常用依赖包
  10. akka actor行为切换实现
  11. 华为P50 Pro渲染图再曝光:液态镜头、四曲面屏很吸睛
  12. python中脚本是指什么_【学习猿地】初识python脚本 #千万别看,我怕你控制不住...
  13. C++基础:造成多态性的原因是什么?
  14. java面试之String的理解(自我理解)
  15. 广金计算机网络有限公司怎么样,广东金融学院到底怎么样!?
  16. 如何创建git账户的chroot
  17. 《东周列国志》第九十七回 死范睢计逃秦国 假张禄廷辱魏使
  18. 记一次使用screw 生成MySQL数据库文档
  19. 怎么在计算机上搭建远程桌面,创建远程桌面连接的方法
  20. 改变手机状态栏颜色常见的2种方法

热门文章

  1. Python基础—文件操作
  2. Python分析王者峡谷中英雄信息
  3. 阅读笔记-JavaScript学习指南
  4. 使用非参数统计检验进行分析的指南
  5. HTML5 - WebSQL
  6. 重新理解创业:一个创业者的途中思考
  7. windows server 2008 R2 集成USB3.0驱动--成功实现
  8. 三菱PLC 串口通信开发心得经验
  9. 黄山旅游自助攻略住宿行程路线篇
  10. 微信小程序点餐系统需求分析与建模