這篇作品重要為大師精細引見了C談話實行俄羅斯方塊小玩耍,具備確定的參考價格,感愛好的小搭檔們不妨參考一下
1.要先載入一個graphics.h的頭文獻來畫圖。
2.初始化窗口:initgraph(x,y);這是先創造一個窗口的因變量,以左上角為(0,0),向右為x軸,向下為y軸,個中x表白長x個單元,y表白寬y個單元。
3.封閉圖像窗口:closegraph();中斷時用來封閉用的。
4.按大肆鍵連接:getch();這個就和getchar();差不離,為了提防以運轉完就關了,如許能中斷一下,他的頭文獻是:conio.h。
5.畫線:line(x1,y1,x2,y2);在你創造的那么窗口里以(x1,y1)和(x2,y2)為兩個端點畫線。
6.畫矩形:rectangle(x1,y1,x2,y2);以(x1,y1)和(x2,y2)為對角畫一個矩形。
7.畫圓:circle(x,y,r);以(x,y)為圓點,r為半徑畫圓。
8.臉色:setcolor(x);用來樹立臉色的,個中x是你要樹立的臉色,不妨填這16種:黑BLACK、藍BLUE、綠GREEN、青CYAN、紅RED、紫MAGENTA、棕BROWN、淺灰LIGHTGRAY、暗灰DARKGRAY、亮藍LIGHTBLUE、亮綠LIGHTGREEN、亮青LIGHTCYAN、亮紅LIGHTRED、亮紫LIGHTMAGENTA、黃YELLOW、白WHITE;固然,你也不妨按照光的三原色來調本人愛好的臉色,本領是:setcolor(RGB(x,y,z));個中RGB辨別代辦紅綠藍,對應的x,y,z是你選的該臉色的幾何,范疇是[0,255]。
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
//玩耍窗口
#defineFrameX4//玩耍窗口左上角的X軸坐標
#defineFrameY4//玩耍窗口左上角的Y軸坐標
#defineFrame_height20//玩耍窗口的莫大
#defineFrame_width18//玩耍窗口的寬窄
//設置全部變量
inti,j,temp,temp1,temp2;//temp,temp1,temp2用來記取和變換方塊變量的值
inta[80][80]={0};//標志玩耍屏幕的圖案:2,1,0辨別表白該場所為玩耍邊框、方塊、無圖案;初始化為無圖案
intb[4];//標志4個”口”方塊:1表白有方塊,0表白有門兒塊
//證明俄羅斯方塊的構造體
structTetris
{
intx;//重心方塊的x軸坐標
inty;//重心方塊的y軸坐標
intflag;//標志方塊典型的序號
intnext;//下一個俄羅斯方塊典型的序號
intspeed;//俄羅斯方塊挪動的速率
intcount;//爆發俄羅斯方塊的個數
intscore;//玩耍的分數
intlevel;//玩耍的等第
};
//因變量原形證明
//光標移到指定場所
voidgotoxy(HANDLEhOut,intx,inty);
//創造玩耍窗口
voidmake_frame();
//隨機爆發方塊典型的序號
voidget_flag(structTetris*);
//創造俄羅斯方塊
voidmake_tetris(structTetris*);
//打字與印刷俄羅斯方塊
voidprint_tetris(HANDLEhOut,structTetris*);
//廢除俄羅斯方塊的陳跡
voidclear_tetris(HANDLEhOut,structTetris*);
//確定能否能挪動,歸來值為1,能挪動,要不,不動
intif_moveable(structTetris*);
//確定能否滿行,并簡略滿行的俄羅斯方塊
voiddel_full(HANDLEhOut,structTetris*);
//發端玩耍
voidstart_game();
voidmain()
{
//創造玩耍窗口
make_frame();
//發端玩耍
start_game();
}
/******光標移到指定場所**************************************************************/
voidgotoxy(HANDLEhOut,intx,inty)
{
COORDpos;
pos.X=x;//橫坐標
pos.Y=y;//橫坐標
SetConsoleCursorPosition(hOut,pos);
}
/******創造玩耍窗口******************************************************************/
voidmake_frame()
{
HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);//設置表露器句柄變量
gotoxy(hOut,FrameX+Frame_width-5,FrameY-2);//打字與印刷玩耍稱呼
printf(“俄羅斯方塊”);
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7);//打字與印刷采用菜單
printf(“**********下一個方塊:”);
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);
printf(“**********”);
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);
printf(“↑鍵:變體”);
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);
printf(“空格:休憩玩耍”);
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);
printf(“Esc:退出玩耍”);
gotoxy(hOut,FrameX,FrameY);//打字與印刷框角并記取該處已有圖案
printf(“╔”);
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);
printf(“╗”);
gotoxy(hOut,FrameX,FrameY+Frame_height);
printf(“╚”);
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);
printf(“╝”);
a[FrameX][FrameY+Frame_height]=2;
a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;
for(i=2;i<2*Frame_width-2;i+=2)
{
gotoxy(hOut,FrameX+i,FrameY);
printf(“═”);//打字與印刷上橫框
}
for(i=2;i<2*Frame_width-2;i+=2)
{
gotoxy(hOut,FrameX+i,FrameY+Frame_height);
printf(“═”);//打字與印刷下橫框
a[FrameX+i][FrameY+Frame_height]=2;//記取下橫框有圖案
}
for(i=1;i<Frame_height;i++)
{
gotoxy(hOut,FrameX,FrameY+i);
printf(“║”);//打字與印刷左豎框
a[FrameX][FrameY+i]=2;//記取左豎框有圖案
}
for(i=1;i<Frame_height;i++)
{
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);
printf(“║”);//打字與印刷右豎框
a[FrameX+2*Frame_width-2][FrameY+i]=2;//記取右豎框有圖案
}
}
/******創造俄羅斯方塊********************************************************************/
voidmake_tetris(structTetris*tetris)
{
a[tetris->x][tetris->y]=b[0];//重心方塊場所的圖形勢態:1-有,0-無
switch(tetris->flag)//共6大類,19種典型
{
case1://田字方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x+2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case2://曲線方塊:—-
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x+2][tetris->y]=b[2];
a[tetris->x+4][tetris->y]=b[3];
break;
}
case3://曲線方塊:|
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y-2]=b[2];
a[tetris->x][tetris->y+1]=b[3];
break;
}
case4://T字方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x+2][tetris->y]=b[2];
a[tetris->x][tetris->y+1]=b[3];
break;
}
case5://T字順時針轉90度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x-2][tetris->y]=b[3];
break;
}
case6://T字順時針轉180度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case7://T字順時針轉270度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case8://Z字方塊
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x+2][tetris->y+1]=b[3];
break;
}
case9://Z字順時針轉90度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x-2][tetris->y+1]=b[3];
break;
}
case10://Z字順時針轉180度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case11://Z字順時針轉270度方塊
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x+2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case12://7字方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x-2][tetris->y-1]=b[3];
break;
}
case13://7字順時針轉90度方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x-2][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case14://7字順時針轉180度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y+1]=b[3];
break;
}
case15://7字順時針轉270度方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x+2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case16://倒7字方塊
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y-1]=b[3];
break;
}
case17://倒7字順南針轉90度方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x-2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case18://倒7字順時針轉180度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x-2][tetris->y+1]=b[3];
break;
}
case19://倒7字順時針轉270度方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x+2][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
}
}
//******確定能否可動*************************************************************************/
intif_moveable(structTetris*tetris)
{
if(a[tetris->x][tetris->y]!=0)//當重心方塊場所上有圖案時,歸來值為0,即不行挪動
{
return0;
}
else
{
if(//當為田字方塊且除重心方塊場所外,其余”口”字方塊場所上無圖案時,歸來值為1,即可挪動
(tetris->flag==1&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x+2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==0))||
//或為曲線方塊且除重心方塊場所外,其余”口”字方塊場所上無圖案時,歸來值為1,即可挪動
(tetris->flag==2&&(a[tetris->x-2][tetris->y]==0&&
a[tetris->x+2][tetris->y]==0&&a[tetris->x+4][tetris->y]==0))||
(tetris->flag==3&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x][tetris->y-2]==0&&a[tetris->x][tetris->y+1]==0))||
(tetris->flag==4&&(a[tetris->x-2][tetris->y]==0&&
a[tetris->x+2][tetris->y]==0&&a[tetris->x][tetris->y+1]==0))||
(tetris->flag==5&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x][tetris->y+1]==0&&a[tetris->x-2][tetris->y]==0))||
(tetris->flag==6&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x-2][tetris->y]==0&&a[tetris->x+2][tetris->y]==0))||
(tetris->flag==7&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x][tetris->y+1]==0&&a[tetris->x+2][tetris->y]==0))||
(tetris->flag==8&&(a[tetris->x][tetris->y+1]==0&&
a[tetris->x-2][tetris->y]==0&&a[tetris->x+2][tetris->y+1]==0))||
(tetris->flag==9&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x-2][tetris->y]==0&&a[tetris->x-2][tetris->y+1]==0))||
(tetris->flag==10&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x-2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==0))||
(tetris->flag==11&&(a[tetris->x][tetris->y+1]==0&&
a[tetris->x+2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==0))||
(tetris->flag==12&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x][tetris->y+1]==0&&a[tetris->x-2][tetris->y-1]==0))||
(tetris->flag==13&&(a[tetris->x-2][tetris->y]==0&&
a[tetris->x-2][tetris->y+1]==0&&a[tetris->x+2][tetris->y]==0))||
(tetris->flag==14&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x][tetris->y+1]==0&&a[tetris->x+2][tetris->y+1]==0))||
(tetris->flag==15&&(a[tetris->x-2][tetris->y]==0&&
a[tetris->x+2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==0))||
(tetris->flag==16&&(a[tetris->x][tetris->y+1]==0&&
a[tetris->x][tetris->y-1]==0&&a[tetris->x+2][tetris->y-1]==0))||
(tetris->flag==17&&(a[tetris->x-2][tetris->y]==0&&
a[tetris->x-2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==0))||
(tetris->flag==18&&(a[tetris->x][tetris->y-1]==0&&
a[tetris->x][tetris->y+1]==0&&a[tetris->x-2][tetris->y+1]==0))||
(tetris->flag==19&&(a[tetris->x-2][tetris->y]==0&&
a[tetris->x+2][tetris->y+1]==0&&a[tetris->x+2][tetris->y]==0)))
{
return1;
}
}
return0;
}
/******隨機爆發俄羅斯方塊典型的序號**********************************************************/
voidget_flag(structTetris*tetris)
{
tetris->count++;//記取爆發方塊的個數
srand((unsigned)time(NULL));//初始化隨機數
if(tetris->count==1)
{
tetris->flag=rand()%19+1;//記取第一個方塊的序號
}
tetris->next=rand()%19+1;//記取下一個方塊的序號
}
/******打字與印刷俄羅斯方塊**********************************************************************/
voidprint_tetris(HANDLEhOut,structTetris*tetris)
{
for(i=0;i<4;i++)
{
b[i]=1;//數組b[4]的每個元素的值都為1
}
make_tetris(tetris);//創造俄羅斯方塊
for(i=tetris->x-2;i<=tetris->x+4;i+=2)
{
for(j=tetris->y-2;j<=tetris->y+1;j++)
{
if(a[i][j]==1&&j>FrameY)
{
gotoxy(hOut,i,j);
printf(“□”);//打字與印刷邊框內的方塊
}
}
}
//打字與印刷菜單消息
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+1);
printf(“level:%d”,tetris->level);
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+3);
printf(“score:%d”,tetris->score);
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+5);
printf(“speed:%dms”,tetris->speed);
}
之上即是瓜分給大師的俄羅斯方塊源碼,蓄意對大師有扶助~