91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言Turbo C下實現俄羅斯方塊

發布時間:2020-10-15 18:18:07 來源:腳本之家 閱讀:165 作者:lijiao 欄目:編程語言

本文實例為大家分享了C語言俄羅斯方塊的具體代碼,供大家參考,具體內容如下

#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>

#ifdef __cplusplus 
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
#define MINBOXSIZE 15 /* 單方塊的大小 */
#define BGCOLOR 7 /* 背景著色 */
#define GAMEX 200
#define GAMEY 10
#define LEVA 300 /* 每當玩家打到三百分等級加一級*/

/* 按鍵碼*/
#define VK_LEFT 0x4b00
#define VK_RIGHT 0x4d00
#define VK_DOWN 0x5000
#define VK_UP 0x4800
#define VK_HOME 0x4700
#define VK_END 0x4f00
#define VK_SPACE 0x3920
#define VK_ESC 0x011b
#define VK_ENTER 0x1c0d

/* 定義俄羅斯方塊的方向*/
#define F_S 0
#define STARTCOL 20 /* 要出的下一個方塊的縱坐標*/
#define STARTROW 12 /* 要出的下一個方塊的橫從標*/
#define WINSROW 14 /* 游戲屏幕大小*/
#define WINSCOL 20
#define LWINSCOL 100 /*游戲屏幕大顯示器上的相對位置*/
#define LWINSROW 60


int gwins[22][16]; /* 游戲屏幕坐標*/
int col=1,row=7; /* 當前方塊的橫縱坐標*/
int nbx=0,nbs=0; /* 當前寺塊的形壯和方向*/
int nextnbx=0,nextnbs=0,maxcol=22;/*下一個方塊的形壯和方向*/
int minbscolor=6,nextminbscolor=6;
int num=0; /*游戲分*/
int leav=0,gameleav[10]={18,16,14,12,10,8,6,4,2,1};/* 游戲等級*/
/* 以下我用了一個3維數組來紀錄方塊的最初形狀和方向*/
int boxstastu[7][4][16]={{
{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},
{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0}},
{
{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},
{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0}},
{
{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0},
{1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0},
{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0}},
{
{1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},
{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},
{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0}},
{
{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0},
{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0},
{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0}},
{
{1,1,0,0,1,1,0,0,0,0,0,0.0,0,0,0},
{1,1,0,0,1,1,0,0,0,0,0,0.0,0,0,0},
{1,1,0,0,1,1,0,0,0,0,0,0.0,0,0,0},
{1,1,0,0,1,1,0,0,0,0,0,0.0,0,0,0}},
{
{0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0},
{1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0},
{0,1,0,0,1,1,1,0,0,0,0,0.0,0,0,0},
{0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0}}

};

/* 隨機得到當前方塊和下一個方塊的形狀和方向*/
void boxrad(){
  minbscolor=nextminbscolor;
  nbs=nextnbs;
  nbx=nextnbx;
  nextminbscolor=random(14)+1;
  if(nextminbscolor==4||nextminbscolor==7||nextminbscolor==8)
   nextminbscolor=9;
  nextnbx=F_S;
  nextnbs=random(7);
}
/*初始化圖形模試*/
void init(int gdrive,int gmode){
  int errorcode;
  initgraph(&gdrive,&gmode,"c:\tc");
  errorcode=graphresult();
  if(errorcode!=grOk){
   printf("error of: %s",grapherrormsg(errorcode));
   exit(1);
  }
}

/* 在圖形模式下的清屏 */
void cls()
{
  setfillstyle(SOLID_FILL,0);
  setcolor(0);
  bar(0,0,640,480);
}
/*在圖形模式下的高級清屏*/
void clscr(int a,int b,int c,int d,int color)
{
  setfillstyle(SOLID_FILL,color);
  setcolor(color);
  bar(a,b,c,d);
}
/*最小方塊的繪制*/
void onebox(int asc,int bsc,int color,int bdcolor)
{
  int a=0,b=0;
  a=LWINSCOL+asc;
  b=LWINSROW+bsc;
  clscr(a+1,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE,color);
  if(color!=BGCOLOR)
  {
   setcolor(bdcolor);
   line(a+1,b+1,a-1+MINBOXSIZE,b+1);
   line(a+1,b+1,a+1,b-1+MINBOXSIZE);
   line(a-1+MINBOXSIZE,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE);
   line(a+1,b-1+MINBOXSIZE,a-1+MINBOXSIZE,b-1+MINBOXSIZE);
  }
}

/*游戲中出現的文字*/
void texts(int a,int b,char *texts,int font,int color)
{
  setcolor(color);
  settextstyle(0,0,font);
  outtextxy(a,b,texts);
}
/*windows 繪制*/
void win(int a,int b,int c,int d,int bgcolor,int bordercolor)
{
  clscr(a,b,c,d,bgcolor);
  setcolor(bordercolor);
  line(a,b,c,b);
  line(a,b,a,d);
  line(a,d,c,d);
  line(c,b,c,d);
}

/* 當前方塊的繪制*/
void funbox(int a,int b,int color,int bdcolor)
{
  int i,j;
  int boxz[4][4];
  for(i=0;i<16;i++)
   boxz[i/4][i%4]=boxstastu[nbs][nbx][i];
  for(i=0;i<4;i++)
  for(j=0;j<4;j++)
  if(boxz[i][j]==1)
   onebox((j+row+a)*MINBOXSIZE,(i+col+b)*MINBOXSIZE,color,bdcolor);
}
/*下一個方塊的繪制*/
void nextfunbox(int a,int b,int color,int bdcolor)
{
  int i,j;
  int boxz[4][4];
  for(i=0;i<16;i++)
   boxz[i/4][i%4]=boxstastu[nextnbs][nextnbx][i];
  for(i=0;i<4;i++)
  for(j=0;j<4;j++)
  if(boxz[i][j]==1)
   onebox((j+a)*MINBOXSIZE,(i+b)*MINBOXSIZE,color,bdcolor);
}
/*時間中斷定義*/
#define TIMER 0x1c
int TimerCounter=0;
void interrupt( *oldhandler)(__CPPARGS);

void interrupt newhandler(__CPPARGS)
{
  TimerCounter++;
  oldhandler();
}
void SetTimer(void interrupt (*IntProc)(__CPPARGS))
{
  oldhandler=getvect(TIMER);
  disable();
  setvect(TIMER,IntProc);
  enable();
}
/*由于游戲的規則,消掉都有最小方塊的一行*/
void delcol(int a)
{
  int i,j;
  for(i=a;i>1;i--)
  for(j=1;j<15;j++)
  {
   onebox(j*MINBOXSIZE,i*MINBOXSIZE,BGCOLOR,BGCOLOR);
   gwins[i][j]=gwins[i-1][j];
   if(gwins[i][j]==1)
    onebox(j*MINBOXSIZE,i*MINBOXSIZE,minbscolor,0);
  }
}

/*消掉所有都有最小方塊的行*/
void delete(){
  int i,j,zero,delgx=0;
  char *nm="00000";
  for(i=1;i<21;i++){
   zero=0;
   for(j=1;j<15;j++)
   if(gwins[i][j]==0)
    zero=1;
   if(zero==0){
    delcol(i);
    delgx++;
    }
   }
   num=num+delgx*delgx*10;
   leav=num/10000;

   sprintf(nm,"%d",num);
   clscr(456,173,500,200,4);
   texts(456,173,"Number:",1,15);
   texts(456,193,nm,1,15);
}
/*時間中斷結束*/
void KillTimer()
{
  disable();
  setvect(TIMER,oldhandler);
  enable();
}
/* 測試當前方塊是否可以向下落*/
int downok()
{
 int i,j,k=1,a[4][4];
 for(i=0;i<16;i++)
  a[i/4][i%4]=boxstastu[nbs][nbx][i];
 for(i=0;i<4;i++)
 for(j=0;j<4;j++)
   if(a[i][j] && gwins[col+i+1][row+j])
    k=0;
 return(k);
}
/* 測試當前方塊是否可以向左行*/
int leftok()
{
 int i,j,k=1,a[4][4];
 for(i=0;i<16;i++)
  a[i/4][i%4]=boxstastu[nbs][nbx][i];
 for(i=0;i<4;i++)
 for(j=0;j<4;j++)
   if(a[i][j] && gwins[col+i][row+j-1])
   k=0;
 return(k);
}
/* 測試當前方塊是否可以向右行*/
int rightok()
{
 int i,j,k=1,a[4][4];
 for(i=0;i<16;i++)
   a[i/4][i%4]=boxstastu[nbs][nbx][i];
 for(i=0;i<4;i++)
 for(j=0;j<4;j++)
  if(a[i][j] && gwins[col+i][row+j+1])
   k=0;
 return(k);
}
/* 測試當前方塊是否可以變形*/
int upok()
{
 int i,j,k=1,a[4][4];
 for(i=0;i<4;i++)
 for(i=0;i<16;i++)
   a[i/4][i%4]=boxstastu[nbs][nbx+1][i];
 for(i=3;i>=0;i--)
 for(j=3;j>=0;j--)
   if(a[i][j] && gwins[col+i][row+j])
    k=0;
 return(k);
}
/*當前方塊落下之后,給屏幕坐標作標記*/
void setgwins()
{
  int i,j,a[4][4];
  funbox(0,0,minbscolor,0);
  for(i=0;i<16;i++)
   a[i/4][i%4]=boxstastu[nbs][nbx][i];
  for(i=0;i<4;i++)
  for(j=0;j<4;j++)
   if(a[i][j])
   gwins[col+i][row+j]=1;
  col=1;row=7;
}
/*游戲結束*/
void gameover()
{
  int i,j;
  for(i=20;i>0;i--)
  for(j=1;j<15;j++)
   onebox(j*MINBOXSIZE,i*MINBOXSIZE,2,0);
  texts(103,203,"Game Over",3,10);
}
/*按鍵的設置*/
void call_key(int keyx)
{
  switch(keyx){
   case VK_DOWN: { /*下方向鍵,橫坐標加一。*/
    if(downok()){
      col++;
      funbox(0,0,minbscolor,0);
    }
    else{
      funbox(0,0,minbscolor,0);
      setgwins();
      nextfunbox(STARTCOL,STARTROW,4,4);
      boxrad();
      nextfunbox(STARTCOL,STARTROW,nextminbscolor,0);
      delete();
    }
    break;
   }
   case VK_UP: { /*上方向鍵,方向形狀旋轉90度*/
    if(upok())
      nbx++;
    if(nbx>3)
      nbx=0;
    funbox(0,0,minbscolor,0);
    break;
   }
   case VK_LEFT:{ /*左方向鍵,縱坐標減一*/
    if(leftok())
     row--;
    funbox(0,0,minbscolor,0);
    break;
   }
   case VK_RIGHT:{ /*右方向鍵,縱坐標加一*/
    if(rightok())
      row++;
    funbox(0,0,minbscolor,0);
    break;
   }
   case VK_SPACE: /*空格鍵,直接落到最后可以落到的們置*/
    while(downok())
      col++;
    funbox(0,0,minbscolor,0);
    setgwins();
    nextfunbox(STARTCOL,STARTROW,4,4);
    boxrad();
    nextfunbox(STARTCOL,STARTROW,nextminbscolor,0);
    delete();
    break;
    default:
    {
      texts(423,53,"worng key!",1,4);
      texts(428,80,"Plese Enter Anly Key AG!",1,4);
      getch();
      clscr(420,50,622,97,BGCOLOR);
    }
   }
}

/*時間中斷開始*/
void timezd(void)
{
  int key;
  SetTimer(newhandler);
  boxrad();
  nextfunbox(STARTCOL,STARTROW,nextminbscolor,0);
  for(;;){
   if(bioskey(1)){
    key=bioskey(0);
    funbox(0,0,BGCOLOR,BGCOLOR);
    if(key==VK_ESC)
     break;
     call_key(key);
   }
   if(TimerCounter>gameleav[leav]){
    TimerCounter=0;
    if(downok()){
     funbox(0,0,BGCOLOR,BGCOLOR);
     col++;
     funbox(0,0,minbscolor,0);
    }
    else {
     if(col==1){
      gameover();
      getch();
      break;
     }
     setgwins();
     delete();
     funbox(0,0,minbscolor,0);
     col=1;row=7;
     funbox(0,0,BGCOLOR,BGCOLOR);
     nextfunbox(STARTCOL,STARTROW,4,4);
     boxrad();
     nextfunbox(STARTCOL,STARTROW,nextminbscolor,0);
    }
   }
  }
}

/*主程序開始*/
void main(void)
{
  int i,j;
  char *nm="00000";
  init(VGA,VGAHI);
  cls();
  /*屏幕坐標初始化*/
  for(i=0;i<=WINSCOL+1;i++)
  for(j=0;j<=WINSROW+1;j++)
  gwins[i][j]=0;
  for(i=0;i<=WINSCOL+1;i++) {
   gwins[i][0]=1;
   gwins[i][15]=1;
  }
  for(j=1;j<=WINSROW;j++){
   gwins[0][j]=1;
   gwins[21][j]=1;
  }
  clscr(0,0,640,480,15);
  win(1,1,639,479,4,15);
  win(LWINSCOL+MINBOXSIZE-2,LWINSROW+MINBOXSIZE-2,LWINSCOL+15*MINBOXSIZE+2,LWINSROW+21*MINBOXSIZE+2,BGCOLOR,0);
  nextnbs=random(8);
  nextnbx=random(4);
  sprintf(nm,"%d",num);
  texts(456,173,"Number:",1,15);
  texts(456,193,nm,1,15);
  texts(456,243,"Next Box:",1,15);
  timezd();
  KillTimer();
  closegraph();
} 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宝丰县| 逊克县| 依兰县| 卢龙县| 淅川县| 玉龙| 盘锦市| 宜丰县| 玉环县| 来凤县| 集贤县| 舟曲县| 康定县| 衡山县| 郸城县| 牡丹江市| 东乡族自治县| 元阳县| 奈曼旗| 拉萨市| 赤峰市| 黑河市| 白城市| 繁峙县| 桐庐县| 江阴市| 夏津县| 滁州市| 深州市| 太保市| 湛江市| 阳谷县| 西藏| 金川县| 勃利县| 沙湾县| 安化县| 军事| 遂平县| 怀柔区| 全州县|