理想下载站 手游攻略 软件教程 C/C++编程基础系列:俄罗斯方块小游戏制作,源码直接分享

C/C++编程基础系列:俄罗斯方块小游戏制作,源码直接分享

时间:2024-10-25 22:29:28 来源: 浏览:27

大家好,关于C/C++编程基础系列:俄罗斯方块小游戏制作,源码直接分享很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

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. 绘制矩形:矩形(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]。

包括

包括

包括

包括

//游戏窗口

#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分别表示该位置为游戏边框、正方形、或无图案;初始化为无模式

整数b[4]; //标记4个‘口’块:1表示有块,0表示无块

俄罗斯方块结构体

{

整数x; //中心方块的x轴坐标

整数y; //中心方块的Y轴坐标

int 标志; //标记块类型的序号

整数下一个; //下一个俄罗斯方块类型的序号

内部速度; //俄罗斯方块移动的速度

整数计数; //生成的俄罗斯方块数量

分数; //游戏得分

整数级别; //游戏等级

};

//移动光标到指定位置

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

//创建游戏窗口

无效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 俄罗斯方块*);

//判断该行是否已满,删除整行俄罗斯方块

void del_full(HANDLE hOut,struct Tetris *);

//开始游戏

无效start_game();

无效主()

{

//创建游戏窗口

make_frame();

//开始游戏

开始游戏();

}

/*****移动光标到指定位置**************************************** ****** **********************/

void Gotoxy(HANDLE hOut, int x, int y)

{

坐标位置;

pos.X=x; //横坐标

pos.Y=y; //垂直坐标

SetConsoleCursorPosition(hOut, pos);

}

/*****创建游戏窗口**************************************** **************************/

无效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;i2*Frame_width-2;i+=2)

{

Gotoxy(hOut,FrameX+i,FrameY);

printf(''); //打印上方水平框

}

for(i=2;i2*Frame_width-2;i+=2)

{

Gotoxy(hOut,FrameX+i,FrameY+Frame_height);

printf(''); //打印下方水平框

a[FrameX+i][FrameY+Frame_height]=2; //记住下面的横框里有一个图案

}

对于(i=1;i

{

Gotoxy(hOut,FrameX,FrameY+i);

printf(''); //打印左竖框

a[FrameX][FrameY+i]=2; //记住左边的竖框有一个图案

}

对于(i=1;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[俄罗斯方块-x][俄罗斯方块-y]=b[0]; //图形状态中心方块位置:1-是,0-否

switch(tetris-flag) //共6类,19种

{

case 1: //田字坊

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x+2][俄罗斯方块-y-1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[3];

休息;

}

case 2: //直线块:----

{

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[1];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[2];

a[俄罗斯方块-x+4][俄罗斯方块-y]=b[3];

休息;

}

case 3: //直线块: |

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x][俄罗斯方块-y-2]=b[2];

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[3];

休息;

}

case 4: //T形方形

{

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[1];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[2];

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[3];

休息;

}

case 5: //T字符顺时针旋转90度到正方形

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[2];

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[3];

休息;

}

case 6: //T字符顺时针旋转180度

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[3];

休息;

}

case 7: //T形顺时针旋转270度

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[3];

休息;

}

case 8: //Z形正方形

{

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[1];

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y+1]=b[3];

休息;

}

case 9: //Z字符将正方形顺时针旋转90度

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[2];

a[俄罗斯方块-x-2][俄罗斯方块-y+1]=b[3];

休息;

}

case 10: //Z字符将正方形顺时针旋转180度

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x-2][俄罗斯方块-y-1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[3];

休息;

}

case 11: //Z形将正方形顺时针旋转270度

{

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[1];

a[俄罗斯方块-x+2][俄罗斯方块-y-1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[3];

休息;

}

case 12: //7个字符的方块

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[2];

a[俄罗斯方块-x-2][俄罗斯方块-y-1]=b[3];

休息;

}

case 13: //7个字符将正方形顺时针旋转90度

{

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[1];

a[俄罗斯方块-x-2][俄罗斯方块-y+1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[3];

休息;

}

case 14: //7个字符将正方形顺时针旋转180度

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y+1]=b[3];

休息;

}

case 15: //7个字符顺时针旋转270度正方形

{

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[1];

a[俄罗斯方块-x+2][俄罗斯方块-y-1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[3];

休息;

}

case 16: //倒7字方块

{

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[1];

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y-1]=b[3];

休息;

}

case 17: //反转7个字符并将正方形顺时针旋转90度

{

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[1];

a[俄罗斯方块-x-2][俄罗斯方块-y-1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[3];

休息;

}

case 18: //将7数字反转,将正方形顺时针旋转180度

{

a[俄罗斯方块-x][俄罗斯方块-y-1]=b[1];

a[俄罗斯方块-x][俄罗斯方块-y+1]=b[2];

a[俄罗斯方块-x-2][俄罗斯方块-y+1]=b[3];

休息;

}

case 19: //将7数字反转,将正方形顺时针旋转270度

{

a[俄罗斯方块-x-2][俄罗斯方块-y]=b[1];

a[俄罗斯方块-x+2][俄罗斯方块-y+1]=b[2];

a[俄罗斯方块-x+2][俄罗斯方块-y]=b[3];

休息;

}

}

}

//*****判断是否可移动**************************************** ***** *****************************************/

int if_moveable(struct 俄罗斯方块*俄罗斯方块)

{

if(a[tetris-x][tetris-y]!=0)//当中心方块上有图案时,返回值为0,即不能移动

{

返回0;

}

别的

{

if( //当是田形方块且口形方块上除中心方块外没有图案时,返回值为1,可以移动。

(俄罗斯方块标志==1 (a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x+2][俄罗斯方块-y-1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y]==0 ) ) ||

//或者如果是直块,除了中心块位置以外,其他“口”块位置上没有图案,则返回值为1,可以移动。

(俄罗斯方块标志==2 (a[俄罗斯方块-x-2][俄罗斯方块-y]==0

a[俄罗斯方块-x+2][俄罗斯方块-y]==0 a[俄罗斯方块-x+4][俄罗斯方块-y]==0 ) ) ||

(俄罗斯方块标志==3 (a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x][俄罗斯方块-y-2]==0 a[俄罗斯方块-x][俄罗斯方块-y+1]==0 ) ) ||

(俄罗斯方块标志==4 (a[俄罗斯方块-x-2][俄罗斯方块-y]==0

a[俄罗斯方块-x+2][俄罗斯方块-y]==0 a[俄罗斯方块-x][俄罗斯方块-y+1]==0 ) ) ||

(俄罗斯方块标志==5 (a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x][俄罗斯方块-y+1]==0 a[俄罗斯方块-x-2][俄罗斯方块-y]==0 ) ) ||

(俄罗斯方块标志==6(a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x-2][俄罗斯方块-y]==0 a[俄罗斯方块-x+2][俄罗斯方块-y]==0 ) ) ||

(俄罗斯方块标志==7 (a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x][俄罗斯方块-y+1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y]==0 ) ) ||

(俄罗斯方块标志==8 (a[俄罗斯方块-x][俄罗斯方块-y+1]==0

a[俄罗斯方块-x-2][俄罗斯方块-y]==0 a[俄罗斯方块-x+2][俄罗斯方块-y+1]==0 ) ) ||

(俄罗斯方块标志==9(a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x-2][俄罗斯方块-y]==0 a[俄罗斯方块-x-2][俄罗斯方块-y+1]==0 ) ) ||

(俄罗斯方块标志==10(a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x-2][俄罗斯方块-y-1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y]==0 ) ) ||

(俄罗斯方块标志==11 (a[俄罗斯方块-x][俄罗斯方块-y+1]==0

a[俄罗斯方块-x+2][俄罗斯方块-y-1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y]==0 ) ) ||

(俄罗斯方块标志==12(a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x][俄罗斯方块-y+1]==0 a[俄罗斯方块-x-2][俄罗斯方块-y-1]==0 ) ) ||

(俄罗斯方块标志==13(a[俄罗斯方块-x-2][俄罗斯方块-y]==0

a[俄罗斯方块-x-2][俄罗斯方块-y+1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y]==0 ) ) ||

(俄罗斯方块标志==14(a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x][俄罗斯方块-y+1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y+1]==0 ) ) ||

(俄罗斯方块标志==15(a[俄罗斯方块-x-2][俄罗斯方块-y]==0

a[俄罗斯方块-x+2][俄罗斯方块-y-1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y]==0 ) ) ||

(俄罗斯方块标志==16(a[俄罗斯方块-x][俄罗斯方块-y+1]==0

a[俄罗斯方块-x][俄罗斯方块-y-1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y-1]==0 ) ) ||

(俄罗斯方块标志==17(a[俄罗斯方块-x-2][俄罗斯方块-y]==0

a[俄罗斯方块-x-2][俄罗斯方块-y-1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y]==0 ) ) ||

(俄罗斯方块标志==18(a[俄罗斯方块-x][俄罗斯方块-y-1]==0

a[俄罗斯方块-x][俄罗斯方块-y+1]==0 a[俄罗斯方块-x-2][俄罗斯方块-y+1]==0 ) ) ||

(俄罗斯方块标志==19(a[俄罗斯方块-x-2][俄罗斯方块-y]==0

a[俄罗斯方块-x+2][俄罗斯方块-y+1]==0 a[俄罗斯方块-x+2][俄罗斯方块-y]==0 ) ) )

{

返回1;

}

}

返回0;

}

/*****随机生成俄罗斯方块类型序列号**************************************** * **********************/

void get_flag(struct 俄罗斯方块*俄罗斯方块)

{

俄罗斯方块计数++; //记住生成的区块数量

srand((无符号)时间(NULL)); //初始化随机数

if(俄罗斯方块数量==1)

{

俄罗斯方块标志=rand()%19+1; //记住第一个块的序号

}

俄罗斯方块下一个=rand()%19+1; //记住下一个块的序号

}

/*****打印俄罗斯方块******************************************** * ******************************/

void print_tetris(HANDLE hOut,struct Tetris *tetris)

{

for(i=0;i4;i++)

{

b[i]=1; //数组b[4]每个元素的值为1

}

make_tetris(俄罗斯方块); //制作俄罗斯方块

for( i=俄罗斯方块-x-2; i=俄罗斯方块-x+4; i+=2 )

{

for(j=俄罗斯方块-y-2;j=俄罗斯方块-y+1;j++)

{

if( a[i][j]==1 jFrameY )

{

Gotoxy(hOut,i,j);

printf(''); //打印边框内的正方形

}

}

}

//打印菜单信息

Gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+1);

printf('级别: %d',俄罗斯方块级别);

Gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+3);

printf('分数: %d',俄罗斯方块分数);

Gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+5);

printf('速度: %dms',俄罗斯方块速度);

}

用户评论

孤单*无名指

感觉这个标题很有诱惑力,想学C/C++可以做个俄罗斯方块,很上手!

    有17位网友表示赞同!

陌離

终于找到什么东西学习C++的动力了,俄罗斯方块我玩得太多!

    有13位网友表示赞同!

坏小子不坏

直接源代码分享是不是太方便了吗?完全不需要从零开始弄代码啊。

    有6位网友表示赞同!

经典的对白

对于编程入门小白来说,这可是个很好的选择!游戏有趣又简单易懂,更容易学习编程语言。

    有13位网友表示赞同!

心亡则人忘

终于能自己实现一下经典的俄罗斯方块了,想想就 exciting!

    有12位网友表示赞同!

■孤独像过不去的桥≈

C/C++好像难度比较高,做一个小游戏是不是可以轻松入门?

    有15位网友表示赞同!

未来未必来

这种直观的学习方法很适合我,我喜欢实践操作型的学习方式!

    有11位网友表示赞同!

安陌醉生

我已经好久没尝试玩俄罗斯方块了,顺便学点技术,真是两全其美。

    有16位网友表示赞同!

一别经年

标题说的“入门基础系列”,应该适合没有任何编程经验的人吧?

    有17位网友表示赞同!

黑夜漫长

这套课程包含源代码分享的话,应该还能学习到具体的代码细节和技巧吧?

    有15位网友表示赞同!

窒息

想找一个简单的项目练练C++手 Feel good!

    有17位网友表示赞同!

那伤。眞美

我以前就想过自己做一个俄罗斯方块游戏,现在有机会了!

    有18位网友表示赞同!

_心抽搐到严重畸形っ°

这套课程适合想要从入门基础开始学习C/C++的人吗?

    有11位网友表示赞同!

非想

看名字就知道是俄罗斯方块啦! 应该还是挺有趣的!

    有17位网友表示赞同!

优雅的叶子

我对做游戏的热情已经很久没有被唤醒,这个标题就特别吸引我。

    有5位网友表示赞同!

初阳

如果代码简单易懂的话,那就一定会吸引我去下载学习的!

    有11位网友表示赞同!

半梦半醒半疯癫

希望这个游戏能够帮助我学习C/C++的基础知识

    有15位网友表示赞同!

巷雨优美回忆

学习新事物总是一件让人兴奋的事情!期待这个课程能够带来新的挑战和收获!

    有10位网友表示赞同!

金橙橙。-

这种类型的教程一直比较受欢迎,肯定有很多人都想跟着学做俄罗斯方块的游戏!

    有6位网友表示赞同!

标题:C/C++编程基础系列:俄罗斯方块小游戏制作,源码直接分享
链接:https://www.ltthb.com/news/rj/132593.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
怎么不让快递放菜鸟驿站

菜鸟裹裹怎么禁止放快递?经常网购的小伙伴都知道,如果附近有菜鸟驿站,那么驿站的快递员会默认选择放在驿站中,并

2024-10-25
菜鸟驿站怎么送货上门

菜鸟裹裹怎么送货上门?有过菜鸟驿站拿快递的小伙伴都知道,很多菜鸟驿站在派送快递时,默认是放在菜鸟驿站,需要我

2024-10-25
蚂蚁庄园2021年3月4日最新答案

蚂蚁庄园3月4日答案最新是什么?在支付宝蚂蚁庄园每日一题中,每天都会有多个问题等着大家来回答,回答正确后即可

2024-10-25
一起学APP海星商城在哪里

一起学APP海星商城在哪里?在最近,很多用户都在问一起学APP的海星商店在哪里,一起学APP海星商城在哪里,怎么进入

2024-10-25