編程遊戲代碼大全簡單,遊戲代碼怎麼編寫
2023-04-02 05:02:13 2
本文主要詳細介紹了C語言的俄羅斯方塊遊戲,有一定的參考價值,感興趣的朋友可以參考一下。
1.先下載一個graphics.h的頭文件來畫。
2.初始化窗口:initgraph(x,y);這是先創建一個窗口的功能,左上角為(0,0),右軸為X軸,下軸為Y軸,其中X代表X單位的長度,Y代表Y單位的寬度。
3.關閉圖像窗口:close graph;這是用來結尾的。
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.顏色:set color(x);用於設置顏色,其中X是要設置的顏色。可以填這16種:黑色黑色、藍色藍色、綠色、青色、紅色、紫色品紅色、棕色、淺灰色、深灰色、亮藍色淺藍色、亮綠色淺綠色、亮綠色淺青色、亮紅色淺紅色、亮紫色淺品紅色、黃色、黃色。當然,你也可以根據光線的三原色來調整自己喜歡的顏色。方法是:setcolor(RGB(x,y,z));RGB分別代表紅、綠、藍,對應的x、Y、z Y、Z就是你選擇了多少種顏色,範圍是[0,255]。
#包含stdio.h
#包含windows.h
#包含conio.h
#包含時間. h
//遊戲窗口
#定義FrameX 4 //遊戲窗口左上角的X軸坐標
#定義FrameY 4 //遊戲窗口左上角的Y軸坐標
#define Frame_height 20 //遊戲窗口的高度
#define Frame_width 18 //遊戲窗口的寬度
//定義全局變量
int i,j,temp,temp1,temp 2;//temp,temp1,temp2用於記憶和轉換square變量的值。
int a[80][80]={ 0 };//標記遊戲畫面的圖案:2、1、0分別表示位置為遊戲框、正方形、無圖案;初始化為無模式。
int b[4];//標記4個「打開」的方塊:1表示有方塊,0表示沒有方塊。
//聲明俄羅斯方塊的結構
結構俄羅斯方塊
{
int x;//中心正方形的x軸坐標
int y;//中心正方形的Y軸坐標
int標誌;//標記框類型的序列號
int next//下一個俄羅斯方塊類型的序列號
int速度;//俄羅斯方塊移動的速度
int計數;//生成俄羅斯方塊的數量
int分數;//比賽的比分
int級別;//遊戲的水平
};
//函數原型聲明
//將光標移動到指定位置
void gotoxy(HANDLE hOut,int x,int y);
//製作遊戲窗口
void make _ frame;
//隨機生成塊類型的序列號
void get_flag(結構俄羅斯方塊*);
//製作俄羅斯方塊
void make _俄羅斯方塊(struct Tetris *);
//列印俄羅斯方塊
void print_tetris(HANDLE hOut,struct Tetris *);
//清除俄羅斯方塊的痕跡
void clear_tetris(HANDLE hOut,struct Tetris *);
//判斷是否可以移動,返回值為1,如果可以移動,否則不移動。
int if _ moveable(struct Tetris *);
//確定行是否滿,刪除俄羅斯方塊的整行。
void del_full(HANDLE hOut,struct Tetris *);
//開始遊戲
void start _ game;
void main
{
//製作遊戲窗口
make _ frame;
//開始遊戲
start_game。
}
/* * * * * *將光標移動到指定位置* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
void gotoxy(HANDLE hOut, int x, int y)
{
COORD pos;
pos.X = x; //橫坐標
pos.Y = y; //縱坐標
SetConsoleCursorPosition(hOut, pos);
}
/******製作遊戲窗口******************************************************************/
void make_frame
{
HANDLE hOut = 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;ix][tetris->y]=b[0]; //中心方塊位置的圖形狀態:1-有,0-無
switch(tetris->flag) //共6大類,19種類型
{
case 1: //田字方塊
{
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;
}
case 2: //直線方塊:—-
{
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;
}
case 3: //直線方塊:
{
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;
}
case 4: //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;
}
case 5: //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;
}
case 6: //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;
}
case 7: //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;
}
case 8: //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;
}
case 9: //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;
}
case 10: //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;
}
case 11: //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;
}
case 12: //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;
}
case 13: //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;
}
case 14: //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;
}
case 15: //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;
}
case 16: //倒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;
}
case 17: //倒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;
}
case 18: //倒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;
}
case 19: //倒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;
}
}
}
//******判斷是否可動*************************************************************************/
int if_moveable(struct Tetris *tetris)
{
if(a[tetris->x][tetris->y]!=0)//當中心方塊位置上有圖案時,返回值為0,即不可移動
{
return 0;
}
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 ) ) )
{
return 1;
}
}
return 0;
}
/******隨機產生俄羅斯方塊類型的序號**********************************************************/
void get_flag(struct Tetris *tetris)
{
tetris->count++; //記住產生方塊的個數
srand((unsigned)time(NULL)); //初始化隨機數
if(tetris->count==1)
{
tetris->flag = rand%19+1; //記住第一個方塊的序號
}
tetris->next = rand%19+1; //記住下一個方塊的序號
}
/******列印俄羅斯方塊**********************************************************************/
void print_tetris(HANDLE hOut,struct Tetris *tetris)
{
for(i=0;ix-2; ix+4; i+=2 )
{
for(j=tetris->y-2;jy+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);
}
以上就是分享給大家的俄羅斯方塊源碼,希望對大家有幫助~