基于C/C++语言的俄罗斯方块小游戏代码编写

一、运行截图

在这里插入图片描述
选2
在这里插入图片描述
选3
在这里插入图片描述
选1
在这里插入图片描述
在这里插入图片描述

二、相关代码

//宏定义 
#define FrameX 13
#define FrameY 3//定义游戏窗口的X和Y轴坐标
#define Frame_height 20
#define Frame_width 18//定义游戏窗口的长和宽

//定义全局变量
int i, j, Temp, Temp1, Temp2;//Temp, Temp1, Temp2是用于记住和转换方块变量的值
int a[80][80] = {
    
    0};
int b[4];//标记4个“口 ”方块:1表示有方块 ,0表示无方块

//结构体
struct Tetris//声明俄罗斯方块的结构体 
{
    
    
	int x;			
	int y;		//中心方块的x和y轴坐标	
	int flag;	//标记方块类型的序号 
	int next;	//下一个俄罗斯方块的类型的序号 
	int speed;	//俄罗斯方块移动的速度 
	int number;	//产生俄罗斯方块的个数 
	int score;	//游戏的分数 
	int level;  //游戏的等级 
} ;
HANDLE hOut;	//控制台句柄 

//函数声明
int color(int c);						
void gotoxy(int x,int y);				//光标移动到指定位置 
void DrwaGameframe();					//绘制游戏边框 
void Flag(struct Tetris *);			//随机产生方块类型的序号 
void MakeTeris(struct Tetris *);		//制作俄罗斯方块 
void PrintTeteris(struct Tetris *);	//打印俄罗斯方块 
void CleanTeteris(struct Tetris *);	//清除俄罗斯方块的痕迹 
int ifMove(struct Tetris *);			//判断是否能移动,返回值为1时能移动,否则不能移动 
void Del_Fullline(struct Tetris *);	//判断是否满行,并删除满行的俄罗斯方块 
void Gameplay();						//开始游戏 
void regulation();						//游戏规则 
void explation();						//按键说明 
void welcome();							//欢迎界面 
void Replay(struct Tetris * tetris);	//重新开始游戏 
void title();							//欢迎界面上方的标题 
void flower();							//欢迎界面上的字符装饰花 
void close();							//关闭游戏

/* 
*设置文字颜色
*/ 
int color(int c) 
{
    
    
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); 
	//SetConsoleTextAttribute是设置控制台窗口字体颜色和背景颜色的函数 
	return 0;
 } 
 
 /* 
*设置文字显示位置
*/ 
void gotoxy(int x,int y)
{
    
    
	COORD pos;//是一个结构体变量,x和y是它的成员 ,是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标 
	pos.X = x;//横坐标 
	pos.Y = y;//纵坐标 
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
	//SetConsoleCursorPosition函数用来定位光标位置 
}
 
/* 
*欢迎界面上的标题
*/
void title()
{
    
    
	color(15);
	gotoxy(24, 3);
	printf("趣 味 俄 罗 斯 方 块\n"); 
	
	color(11);
	gotoxy(18, 5); 
	printf("■");
	gotoxy(18, 6);
	printf("■■");
	gotoxy(18, 7);
	printf("■");

	color(14);
	gotoxy(26, 6); 
	printf("■■");
	gotoxy(28, 7);
	printf("■■");
	
	color(10);
	gotoxy(36, 6);
	printf("■■");
	gotoxy(36, 7);
	printf("■■");
	
	color(13);
	gotoxy(45, 5);
	printf("■");
	gotoxy(45, 6);
	printf("■");
	gotoxy(45, 7);
	printf("■");
	gotoxy(45, 8);
	printf("■");
	
	color(12);
	gotoxy(56, 6);
	printf("■");
	gotoxy(52, 7);
	printf("■■■");
}

/*
*绘制字符花 
*/
void flower()
{
    
    
	gotoxy(66, 11);
	color(12);
	printf("(_)");
	
	gotoxy(64, 12);
	printf("(_)");
	
	gotoxy(68, 12);
	printf("(_)");
	
	gotoxy(66, 13);
	printf("(_)");
	
	gotoxy(67, 12);
	color(6);
	printf("@");
	
	gotoxy(72, 10);
	color(13);
	printf("(_)");
	
	gotoxy(76, 10);
	printf("(_)");
	
	gotoxy(74, 9);
	printf("(_)");
	
	gotoxy(74, 11);
	printf("(_)");
	
	gotoxy(75, 10);
	color(6);
	printf("@");
	
	gotoxy(71, 12);
	printf("|");
	
	gotoxy(72, 11);
	printf("/");
	
	gotoxy(70, 13);
	printf("\\|");
	
	gotoxy(70, 14);
	printf("'|/");
	
	gotoxy(70, 15);
	printf("\\|");
	
	gotoxy(71, 16);
	printf("| /");
	
	gotoxy(71, 17);
	printf("|");
	
	gotoxy(67, 17);
	color(10);
	printf("\\\\\\\\");
	
	gotoxy(73, 17);
	printf("//");
	
	gotoxy(67, 18);
	color(2);
	printf("^^^^^^^^");
	
	gotoxy(65, 19);
	color(5);
	printf("鱼 蛋 科 技");
	
	gotoxy(68, 20);
	printf("钟荣钊");
	
	printf("\n"); 
 } 
 
/*
*菜单项边框 
*/ 
void welcome()
{
    
    
	int n;
	int i, j = 1;
	
	color(14);
	
	for (i = 9; i <= 20; i++)
	{
    
    
		for(j = 15; j <= 60; j++)
		{
    
    
			gotoxy(j, i);
			
			if (i == 9 || i == 20) printf("=");
			
			else if (j == 15 || j == 59) printf("||");
			
		}
	}
	
	/*
	*菜单选项的文字 
	*/ 
	color(12);
	
	gotoxy(25, 12);
	printf("1.开始游戏");
	
	gotoxy(40, 12);
	printf("2.案件说明");
	
	gotoxy(25, 17);
	printf("3.游戏规则");
	
	gotoxy(40, 17);
	printf("4.退出");
	
	gotoxy(21, 22);
	color(3);
	printf("请选择【1 2 3 4】:【  】\b\b");
	color(14);
	scanf("%d", &n);
	
	switch (n)
	{
    
    
		case 1:
			system("cls");
			DrwaGameframe(); 
			Gameplay();
			break;
			
		case 2:
			explation();
			break;
		
		case 3:
			regulation();
			break;
		
		case 4:
			close();
			break;	
	 } 
 } 
 
  /**
 * 制作游戏窗口
 */
void DrwaGameframe()
{
    
    
 	gotoxy(FrameX+Frame_width-5,FrameY-2);   				//设置游戏名称的显示位置
	color(11);								//将字体颜色设置为亮蓝色
	printf("趣味俄罗斯方块");						//打印游戏名称
 	gotoxy(FrameX+2*Frame_width+3,FrameY+7); 				//设置上边框的显示位置
 	color(2);								//将字体颜色设置为深绿色
	printf("**********");							//打印下一个出现方块的上边框
	gotoxy(FrameX+2*Frame_width+13,FrameY+7); 
 	color(3);								//将字体颜色设置为深蓝绿色
	printf("下一出现方块:");
 	gotoxy(FrameX+2*Frame_width+3,FrameY+13);
 	color(2);
	printf("**********");							//打印下一个出现方块的下边框
	gotoxy(FrameX+2*Frame_width+3,FrameY+17);
	color(14);								//将字体颜色设置为黄色
	printf("↑键:旋转");
	gotoxy(FrameX+2*Frame_width+3,FrameY+19);
	printf("空格:暂停游戏");
 	gotoxy(FrameX+2*Frame_width+3,FrameY+15);
 	printf("Esc :退出游戏");
 	gotoxy(FrameX,FrameY);
	color(12);
	printf("╔");									//打印框角
 	gotoxy(FrameX+2*Frame_width-2,FrameY);
 	printf("╗");
 	gotoxy(FrameX,FrameY+Frame_height);
 	printf("╚");
 	gotoxy(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(FrameX+i,FrameY);
  		printf("═");         						//打印上横框
 	}
 	for(i=2;i<2*Frame_width-2;i+=2)
 	{
    
    
  		gotoxy(FrameX+i,FrameY+Frame_height);
  		printf("═");         						//打印下横框
  		a[FrameX+i][FrameY+Frame_height]=2;    	//标记下横框为游戏边框,防止方块出界
 	}
 	for(i=1;i<Frame_height;i++)
	{
    
    
  		gotoxy(FrameX,FrameY+i);
  		printf("║");        	 					//打印左竖框
  		a[FrameX][FrameY+i]=2;       			//标记左竖框为游戏边框,防止方块出界
 	}
 	for(i=1;i<Frame_height;i++)
 	{
    
    
  		gotoxy(FrameX+2*Frame_width-2,FrameY+i);
  		printf("║");         						 //打印右竖框
  		a[FrameX+2*Frame_width-2][FrameY+i]=2;   //标记右竖框为游戏边框,防止方块出界	
    }
}

猜你喜欢

转载自blog.csdn.net/qq_55433305/article/details/128447428
今日推荐