新俄罗斯方块

栏目:游戏资讯  时间:2022-11-10
手机版

  邦邦小剧场给的灵感,之前也看过各种各样的俄罗斯方块,是经典,就在于它总能hold住各种各样类型,就像经典的书总能运用在各种各样的场合,而这经典的游戏总能改编结合成各种各样类型的新游,合适又创新。这次制作分了两步,先是把原来的俄罗斯方块改成简易型,就是把原来各种各样的方块类型归一化成两个格子拼起来,规则还是铺满一层就消除,然后下沉;再是改成消消乐型,给每次的两个格子不同颜色,相同颜色的十个格子消除,然后下沉,铺满不再消除,但是combo效果的功能没有加上,有机会可以加。

  简易型俄罗斯方块代码:

  #include <iostream>

  #include <cstdlib>

  #include <ctime>

  #include <ctype.h>

  #include <vector>

  #include <math.h>

  #include <iomanip>

  #include <graphics.h>

  #include <conio.h>

  #include <windows.h>

  #include <fstream>

  #include <string>

  using namespace std;

  struct Node

  {

  int posx,posy;

  int num;

  int lifenum;

  int colornum;

  };

  Node box[211];

  int exit1,exit2,exit3;

  clock_t t1,t2,t3;

  int flag,flag1;

  int speed;

  int seed1;

  int point;

  void W()

  {

  int i,j,k;

  if(flag==flag1-1&&box[flag-10].lifenum==0){

  if(box[flag-10].lifenum==0){box[flag-10].lifenum=1;box[flag-10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag-10;}

  }

  else if(flag==flag1+1&&box[flag+10].lifenum==0){

  if(box[flag+10].lifenum==0){box[flag+10].lifenum=1;box[flag+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag+10;}

  }

  else if(flag==flag1-10&&box[flag+1].lifenum==0&&flag%10<9){

  if(box[flag+1].lifenum==0){box[flag+1].lifenum=1;box[flag+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag+1;}

  }

  else if(flag==flag1+10&&flag%10>0){

  if(box[flag-1].lifenum==0){box[flag-1].lifenum=1;box[flag-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag-1;}

  }

  }

  void A()

  {

  int i,j,k;

  if(flag%10>0&&flag1%10>0){

  if(flag==flag1-1&&box[flag-1].lifenum==0){

  box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;flag--;

  box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1--;

  }

  else if(flag1==flag-1&&box[flag1-1].lifenum==0){

  box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1--;

  box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;flag--;

  }

  else if(box[flag-1].lifenum==0&&box[flag1-1].lifenum==0){

  box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;flag--;

  box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1--;

  }

  }

  }

  void D()

  {

  int i,j,k;

  if(flag%10<9&&flag1%10<9){

  if(flag==flag1+1&&box[flag+1].lifenum==0){

  box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;flag++;

  box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1++;

  }

  else if(flag1==flag+1&&box[flag1+1].lifenum==0){

  box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1++;

  box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;flag++;

  }

  else if(box[flag+1].lifenum==0&&box[flag1+1].lifenum==0){

  box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;flag++;

  box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1++;

  }

  }

  }

  void check()

  {

  int i,j,k,t;

  for(i=19;i>=1;i--){

  t=0;

  for(j=0;j<=9;j++){

  if(box[i*10+j].lifenum==0){

  t=1;

  break;

  }

  }

  if(t==0){

  for(j=0;j<=9;j++){

  box[i*10+j].lifenum=0;

  }

  for(i=189;i>=0;i--){

  if(box[i+10].lifenum==0&&box[i].lifenum!=0){

  box[i+10].lifenum=1;

  box[i+10].colornum=box[i].colornum;

  box[i].lifenum=0;

  }

  }

  i=20;

  point=point+10;

  }

  }

  }

  void draw()

  {

  int i,j,k;

  FlushBatchDraw();

  clearrectangle(0,0,400,400);

  line(98,0,98,400);

  line(302,0,302,400);

  for(i=0;i<200;i++){

  if(box[i].lifenum==1){

  fillrectangle(box[i].posx,box[i].posy,box[i].posx+20,box[i].posy+20);

  }

  }

  }

  void create()

  {

  int i,j;

  if(box[4].lifenum!=0||box[14].lifenum!=0){

  exit1=1;exit2=1;exit3=1;

  }

  else{

  box[4].colornum=1;

  box[14].colornum=box[4].colornum;

  box[4].lifenum=1;

  box[14].lifenum=1;

  }

  flag=4;flag1=14;

  }

  void S()

  {

  int i,j,k;

  if(flag==flag1+10&&box[flag+10].lifenum==0){

  box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;flag+=10;

  box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1+=10;

  }

  else if(flag==flag1-10&&box[flag1+10].lifenum==0){

  box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1+=10;

  box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;flag+=10;

  }

  else if(box[flag+10].lifenum==0&&box[flag1+10].lifenum==0){

  box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1+=10;

  box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;flag+=10;

  }

  else{

  check();

  create();

  }

  draw();

  }

  void initialization()

  {

  int i,j,k;

  exit1=0;exit2=0;exit3=0;

  seed1=0;

  speed=300;

  point=0;

  initgraph(400, 400,SHOWCONSOLE);

  setlinecolor(GREEN);

  line(98,0,98,400);

  line(302,0,302,400);

  for(i=0;i<200;i++){

  box[i].num=i;

  box[i].posx=100+20*(i%10);

  box[i].posy=20*(i/10);

  box[i].lifenum=0;

  box[i].colornum=0;

  }

  for(i=200;i<210;i++){

  box[i].lifenum=1;

  }

  }

  void move()

  {

  int i;

  char j;

  BeginBatchDraw();

  create();

  draw();

  while(exit1==0){

  Sleep(1000);

  t1=clock();

  t2=clock();

  while(exit2==0){

  if (_kbhit()){

  j=_getch();

  fflush(stdin);

  switch(j){

  case 'w':W();break;

  case 'a':A();break;

  case 'd':D();break;

  case 's':S();break;

  case 'o':speed=0xffffff;break;

  case 'i':speed=300;break;

  case 'p':exit2=1;exit1=1;break;

  default:break;

  }

  fflush(stdin);

  }

  t2=clock();

  while(t2-t1>=speed){

  t1=clock();

  S();

  }

  }

  }

  EndBatchDraw();

  }

  void carry()

  {

  int i,j,k;

  initialization();

  while(exit3==0){

  move();

  }

  _getch();

  closegraph();

  cout<<"得分:"<<point<<endl;

  }

  int main()

  {

  carry();

  return 0;

  }

  消消乐俄罗斯方块代码:

  #include <iostream>

  #include <cstdlib>

  #include <ctime>

  #include <ctype.h>

  #include <vector>

  #include <math.h>

  #include <iomanip>

  #include <graphics.h>

  #include <conio.h>

  #include <windows.h>

  #include <fstream>

  #include <string>

  using namespace std;

  struct Node

  {

  int posx,posy;

  int num;

  int lifenum;

  int colornum;

  };

  struct Node1

  {

  int num;

  int lifenum;

  int flagnum,flag1num;

  };

  struct Node2

  {

  int num;

  int lifenum;

  int boxnum;

  };

  Node box[211];

  Node1 eat[100];

  Node2 box1[200];

  int exit1,exit2,exit3,exit4;

  clock_t t1,t2,t3;

  int flag,flag1;

  int speed;

  int seed1;

  int point;

  COLORREF img[8];

  void W()

  {

  int i,j,k;

  if(flag==flag1-1&&box[flag-10].lifenum==0){

  if(box[flag-10].lifenum==0){box[flag-10].lifenum=1;box[flag-10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag-10;}

  }

  else if(flag==flag1+1&&box[flag+10].lifenum==0){

  if(box[flag+10].lifenum==0){box[flag+10].lifenum=1;box[flag+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag+10;}

  }

  else if(flag==flag1-10&&box[flag+1].lifenum==0&&flag%10<9){

  if(box[flag+1].lifenum==0){box[flag+1].lifenum=1;box[flag+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag+1;}

  }

  else if(flag==flag1+10&&flag%10>0){

  if(box[flag-1].lifenum==0){box[flag-1].lifenum=1;box[flag-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag-1;}

  }

  }

  void A()

  {

  int i,j,k;

  if(flag%10>0&&flag1%10>0){

  if(flag==flag1-1&&box[flag-1].lifenum==0){

  box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag--;

  box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1--;

  }

  else if(flag1==flag-1&&box[flag1-1].lifenum==0){

  box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1--;

  box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag--;

  }

  else if(box[flag-1].lifenum==0&&box[flag1-1].lifenum==0){

  box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag--;

  box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1--;

  }

  }

  }

  void D()

  {

  int i,j,k;

  if(flag%10<9&&flag1%10<9){

  if(flag==flag1+1&&box[flag+1].lifenum==0){

  box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag++;

  box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1++;

  }

  else if(flag1==flag+1&&box[flag1+1].lifenum==0){

  box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1++;

  box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag++;

  }

  else if(box[flag+1].lifenum==0&&box[flag1+1].lifenum==0){

  box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag++;

  box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1++;

  }

  }

  }

  void check(int x)

  {

  int i,j,k,t,flag2;

  for(i=0;i<200;i++){

  box1[i].num=i;

  box1[i].lifenum=0;

  box1[i].boxnum=101;

  }

  i=eat[x].flagnum;

  box1[0].boxnum=eat[x].flagnum;

  flag2=1;

  for(i=0;i<flag2;i++){

  j=box1[i].boxnum;

  if(j%10!=0){

  j=j-1;

  for(j;j%10!=9&&j>=0;j--){

  if(box[j].colornum==box[eat[x].flagnum].colornum){

  exit3=0;

  for(k=0;k<flag2;k++){

  if(box1[k].boxnum==j){

  exit3=1;break;

  }

  }

  if(exit3==0){box1[flag2].boxnum=j;flag2++;}

  }

  else{

  break;

  }

  }

  }

  j=box1[i].boxnum;

  if(j%10!=9){

  j=j+1;

  for(j;j%10!=0&&j<=199;j++){

  if(box[j].colornum==box[eat[x].flagnum].colornum){

  exit3=0;

  for(k=0;k<flag2;k++){

  if(box1[k].boxnum==j){

  exit3=1;break;

  }

  }

  if(exit3==0){box1[flag2].boxnum=j;flag2++;}

  }

  else{

  break;

  }

  }

  }

  j=box1[i].boxnum;

  if(j/10!=0){

  j=j-10;

  for(j;j>=0;j-=10){

  if(box[j].colornum==box[eat[x].flagnum].colornum){

  exit3=0;

  for(k=0;k<flag2;k++){

  if(box1[k].boxnum==j){

  exit3=1;break;

  }

  }

  if(exit3==0){box1[flag2].boxnum=j;flag2++;}

  }

  else{

  break;

  }

  }

  }

  j=box1[i].boxnum;

  if(j/10!=9){

  j=j+10;

  for(j;j<=199;j+=10){

  if(box[j].colornum==box[eat[x].flagnum].colornum){

  exit3=0;

  for(k=0;k<flag2;k++){

  if(box1[k].boxnum==j){

  exit3=1;break;

  }

  }

  if(exit3==0){box1[flag2].boxnum=j;flag2++;}

  }

  else{

  break;

  }

  }

  }

  }

  if(flag2>=10){

  point+=flag2;

  for(i=0;i<flag2;i++){

  box[box1[i].boxnum].lifenum=0;

  box[box1[i].boxnum].colornum=0;

  j=0;

  while(box1[i].boxnum!=eat[j].flagnum&&box1[i].boxnum!=eat[j].flag1num){

  j++;

  }

  eat[j].lifenum=0;

  }

  j=1;

  while(j!=0){

  j=0;

  for(i=0;i<100;i++){

  if(eat[i].lifenum==1){

  if(eat[i].flagnum==eat[i].flag1num+10&&box[eat[i].flagnum+10].lifenum==0){

  box[eat[i].flagnum+10].lifenum=1;box[eat[i].flagnum+10].colornum=box[eat[i].flagnum].colornum;box[eat[i].flagnum].lifenum=0;box[eat[i].flagnum].colornum=0;eat[i].flagnum+=10;

  box[eat[i].flag1num+10].lifenum=1;box[eat[i].flag1num+10].colornum=box[eat[i].flag1num].colornum;box[eat[i].flag1num].lifenum=0;box[eat[i].flag1num].colornum=0;eat[i].flag1num+=10;

  j++;

  }

  else if(eat[i].flagnum==eat[i].flag1num-10&&box[eat[i].flag1num+10].lifenum==0){

  box[eat[i].flag1num+10].lifenum=1;box[eat[i].flag1num+10].colornum=box[eat[i].flag1num].colornum;box[eat[i].flag1num].lifenum=0;box[eat[i].flag1num].colornum=0;eat[i].flag1num+=10;

  box[eat[i].flagnum+10].lifenum=1;box[eat[i].flagnum+10].colornum=box[eat[i].flagnum].colornum;box[eat[i].flagnum].lifenum=0;box[eat[i].flagnum].colornum=0;eat[i].flagnum+=10;

  j++;

  }

  else if(box[eat[i].flagnum+10].lifenum==0&&box[eat[i].flag1num+10].lifenum==0){

  box[eat[i].flag1num+10].lifenum=1;box[eat[i].flag1num+10].colornum=box[eat[i].flag1num].colornum;box[eat[i].flag1num].lifenum=0;box[eat[i].flag1num].colornum=0;eat[i].flag1num+=10;

  box[eat[i].flagnum+10].lifenum=1;box[eat[i].flagnum+10].colornum=box[eat[i].flagnum].colornum;box[eat[i].flagnum].lifenum=0;box[eat[i].flagnum].colornum=0;eat[i].flagnum+=10;

  j++;

  }

  }

  }

  }

  }

  }

  void draw()

  {

  int i,j,k;

  FlushBatchDraw();

  clearrectangle(0,0,400,400);

  line(98,0,98,400);

  line(302,0,302,400);

  for(i=0;i<200;i++){

  if(box[i].lifenum==1&&box[i].colornum!=0){

  setfillcolor(img[box[i].colornum]);

  fillrectangle(box[i].posx,box[i].posy,box[i].posx+20,box[i].posy+20);

  }

  else if(box[i].lifenum==1&&box[i].colornum==0){

  box[i].lifenum=0;

  }

  }

  }

  void create()

  {

  int i,j;

  if(box[4].lifenum!=0||box[14].lifenum!=0){

  exit1=1;exit2=1;exit4=1;

  }

  else{

  seed1++;

  srand(seed1);

  box[4].colornum=rand()%5+1;

  box[14].colornum=box[4].colornum;

  box[4].lifenum=1;

  box[14].lifenum=1;

  }

  flag=4;flag1=14;

  }

  void S()

  {

  int i,j,k,t;

  if(flag==flag1+10&&box[flag+10].lifenum==0){

  box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag+=10;

  box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1+=10;

  }

  else if(flag==flag1-10&&box[flag1+10].lifenum==0){

  box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1+=10;

  box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag+=10;

  }

  else if(box[flag+10].lifenum==0&&box[flag1+10].lifenum==0){

  box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1+=10;

  box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag+=10;

  }

  else{

  i=0;

  while(eat[i].lifenum!=0){

  i++;

  }

  eat[i].lifenum=1;

  eat[i].flagnum=flag;

  eat[i].flag1num=flag1;

  check(i);

  create();

  }

  draw();

  }

  void initialization()

  {

  int i,j,k;

  exit1=0;exit2=0;exit3=0;exit4=0;

  seed1=0;

  speed=300;

  point=0;

  initgraph(400, 400,SHOWCONSOLE);

  img[1]=LIGHTRED;

  img[2]=YELLOW;

  img[3]=LIGHTGREEN;

  img[4]=LIGHTBLUE;

  img[5]=LIGHTMAGENTA;

  setlinecolor(GREEN);

  line(98,0,98,400);

  line(302,0,302,400);

  for(i=0;i<200;i++){

  box[i].num=i;

  box[i].posx=100+20*(i%10);

  box[i].posy=20*(i/10);

  box[i].lifenum=0;

  box[i].colornum=0;

  }

  for(i=200;i<210;i++){

  box[i].lifenum=1;

  }

  }

  void move()

  {

  int i;

  char j;

  BeginBatchDraw();

  create();

  draw();

  while(exit1==0){

  Sleep(1000);

  t1=clock();

  t2=clock();

  while(exit2==0){

  if (_kbhit()){

  j=_getch();

  fflush(stdin);

  switch(j){

  case 'w':W();break;

  case 'a':A();break;

  case 'd':D();break;

  case 's':S();break;

  case 'o':speed=0xffffff;break;

  case 'i':speed=300;break;

  case 'p':exit2=1;exit1=1;break;

  default:break;

  }

  fflush(stdin);

  }

  t2=clock();

  while(t2-t1>=speed){

  t1=clock();

  S();

  }

  }

  }

  EndBatchDraw();

  }

  void carry()

  {

  int i,j,k;

  initialization();

  while(exit4==0){

  move();

  }

  _getch();

  closegraph();

  cout<<"得分:"<<point<<endl;

  }

  int main()

  {

  carry();

  return 0;

  }

  演示视频1:

  演示视频2:

上一篇:星际战甲高斯配卡推荐
下一篇:第二届英雄联盟手游联赛进行中,全面升级看点十足