tft每日頭條

 > 遊戲

 > 俄羅斯方塊小遊戲的程序設計報告

俄羅斯方塊小遊戲的程序設計報告

遊戲 更新时间:2024-10-11 12:00:32

這篇文章主要為大家詳細介紹了C語言實現俄羅斯方塊小遊戲,具有一定的參考價值,感興趣的小夥伴們可以參考一下

俄羅斯方塊小遊戲的程序設計報告(CC編程入門基礎系列)1

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]。

俄羅斯方塊小遊戲的程序設計報告(CC編程入門基礎系列)2

#include <stdio.h>

#include <windows.h>

#include <conio.h>

#include <time.h>

//遊戲窗口

#define FrameX 4 //遊戲窗口左上角的X軸坐标

#define FrameY 4 //遊戲窗口左上角的Y軸坐标

#define Frame_height 20 //遊戲窗口的高度

#define Frame_width 18 //遊戲窗口的寬度

//定義全局變量

int i,j,temp,temp1,temp2; //temp,temp1,temp2用于記住和轉換方塊變量的值

int a[80][80]={0}; //标記遊戲屏幕的圖案:2,1,0分别表示該位置為遊戲邊框、方塊、無圖案;初始化為無圖案

int b[4]; //标記4個"口"方塊:1表示有方塊,0表示無方塊

//聲明俄羅斯方塊的結構體

struct Tetris

{

int x; //中心方塊的x軸坐标

int y; //中心方塊的y軸坐标

int flag; //标記方塊類型的序号

int next; //下一個俄羅斯方塊類型的序号

int speed; //俄羅斯方塊移動的速度

int count; //産生俄羅斯方塊的個數

int score; //遊戲的分數

int level; //遊戲的等級

};

//函數原型聲明

//光标移到指定位置

void gotoxy(HANDLE hOut, int x, int y);

//制作遊戲窗口

void make_frame();

//随機産生方塊類型的序号

void get_flag(struct Tetris *);

//制作俄羅斯方塊

void make_tetris(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;i<Frame_height;i )

{

gotoxy(hOut,FrameX 2*Frame_width-2,FrameY i);

printf("║"); //打印右豎框

a[FrameX 2*Frame_width-2][FrameY i]=2; //記住右豎框有圖案

}

}

/******制作俄羅斯方塊********************************************************************/

void make_tetris(struct Tetris *tetris)

{

a[tetris->x][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() 1; //記住第一個方塊的序号

}

tetris->next = rand() 1; //記住下一個方塊的序号

}

/******打印俄羅斯方塊**********************************************************************/

void print_tetris(HANDLE hOut,struct Tetris *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);

}

以上就是分享給大家的俄羅斯方塊源碼,希望對大家有幫助~

最後,學習C/C 編程知識,想要成為一個更加優秀的程序員,或者你學習C/C 的時候有難度,可以關注 私信小編【C/C 編程】,裡面不僅有學習視頻和文件資料,還有更多志同道合的朋友,和大家一起交流成長會比自己琢磨更快哦!

俄羅斯方塊小遊戲的程序設計報告(CC編程入門基礎系列)3

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关遊戲资讯推荐

热门遊戲资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved