⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 russia.c

📁 浙大《C语言设计基础课程设计》中的例程 有些比较好的代码!
💻 C
字号:
#include "Russia.h"	

int Gameboard[BOARD_WIDTH+2][BOARD_HEIGHT+2];
int nCurrent_block_index;/* 当前下落的方块的索引号*/
int nNext_block_index ; /*下一个方块的索引号*/
int nSpeed, nScore; /*速度和得分*/
int nSpeedUpScore = 1000; /*第一次要加速需达到的分数*/
int bAccel, bOver;
int nOriginX=5, nOriginY=1;/*某一形状的原点的绝对坐标*/
BLOCK arrayBlock[19]={
	/*x1,y1,x2,y2,x3,y3,x4,y4, color,   next*/
	{ 0,-2, 0,-1, 0, 0, 1, 0,  CYAN,    1}, /*        */  
	{-1, 0, 0, 0, 1,-1, 1, 0,  CYAN,    2}, /*   #    */
	{ 0,-2, 1,-2, 1,-1, 1, 0,  CYAN,    3}, /*   #    */
	{-1,-1,-1, 0, 0,-1, 1,-1,  CYAN,    0}, /*   ##   */

	{ 0,-2, 0,-1, 0, 0, 1,-2,MAGENTA,   5}, /*        */ 
	{-1,-1,-1, 0, 0, 0, 1, 0,MAGENTA,   6}, /*   ##   */
	{ 0, 0, 1,-2, 1,-1, 1, 0,MAGENTA,   7}, /*   #    */
	{-1,-1, 0,-1, 1,-1, 1, 0,MAGENTA,   4}, /*   #    */

	{-1, 0, 0,-1, 0, 0, 1, 0,YELLOW,    9}, /*        */
	{-1,-1, 0,-2, 0,-1, 0, 0,YELLOW,   10}, /*        */
	{-1,-1, 0,-1, 0, 0, 1,-1,YELLOW,   11}, /*   #    */
	{ 0,-2, 0,-1, 0, 0, 1,-1,YELLOW,    8}, /*  ###   */

	{-1, 0, 0,-1, 0, 0, 1,-1, BROWN,   13}, /*   ##   */
	{ 0,-2, 0,-1, 1,-1, 1, 0, BROWN,   12}, /*  ##    */

	{-1,-1, 0,-1, 0, 0, 1, 0, WHITE,   15}, /*   ##    */
	{ 0,-1, 0, 0, 1,-2, 1,-1, WHITE,   14}, /*   ##   */

	{ 0,-3, 0,-2, 0,-1, 0, 0,   RED,   17},/*  #     */
	{-1, 0, 0, 0, 1, 0, 2, 0,   RED,   16},/*  #     */
					               								/*  #     */
					               								/*  #     */
										                     
	{ 0,-1, 0, 0, 1,-1, 1, 0,  BLUE,   18},/*  ##    */
					               								/*  ##    */
};
/********************************************************** 
 *  函数原型:void StartGame ()																*
 *  传入参数:无                       												*
 *  返 回 值:无                            									*
 *  函数功能:游戏开始时调用的函数,其中绘制界面需调用函数  	*
 *            InitializeGameboard(), 接下来需初始化游戏面板的	*
 *            各个方块和一些全局变量的初值                   	*
 **********************************************************/
void StartGame()
{
	int i,j;

	/*设置游戏面板中每个方块的初始值*/
	for(j=0;j<=BOARD_HEIGHT;j++)
		for(i=0;i<BOARD_WIDTH+2;i++)
	{
		if(i==0 || i==BOARD_WIDTH+1)
			Gameboard[i][j] = FILLED;
		else
			Gameboard[i][j] = EMPTY;
	}
	for(i=0;i<BOARD_WIDTH+2;i++)
		Gameboard[i][BOARD_HEIGHT+1] = FILLED;
		
	InitializeGameboard();
	
	/*设置游戏变量的初值*/
	nNext_block_index = -1; /*游戏初始,没有下一个形状的索引号*/
	nSpeed = 0;
	nScore = 0;

}
/********************************************************** 
 *  函数原型:void ProcessInGame()																				*
 *  传入参数:无                       																		*
 *  返 回 值:无                            															*
 *  函数功能:核心函数,主要用于处理在游戏中的各种事件(如按下各种按键) 	*
 **********************************************************/
void ProcessInGame()
{
	int key;
	bioskey(0);
	randomize();
	while(1)
	{
		if(nNext_block_index==-1)
		{
			nCurrent_block_index = rand()%19;
			nNext_block_index = rand()%19;
			/*绘制下一个提示形状*/
			DrawBlock(nNext_block_index, 19,6,arrayBlock[nNext_block_index].nColor );
		}
		else
		{
			nCurrent_block_index = nNext_block_index;
			DrawBlock(nNext_block_index, 19,6,BGCOLOR ); /* 消除原来的提示形状 */
			nNext_block_index = rand()%19;
			DrawBlock(nNext_block_index, 19,6,arrayBlock[nNext_block_index].nColor ); /*绘制下一个提示形状 */
		}

		nOriginX=5, nOriginY=1;

		TimerCounter = 0;

		DrawBlock(nCurrent_block_index, nOriginX,nOriginY, arrayBlock[nCurrent_block_index].nColor );/*在面板内绘制当前形状*/

		while(1)
		{
			if (bioskey(1))
				key=bioskey(0);
			else key=0;

			bAccel = FALSE; 
			switch(key)
			{
				case VK_LEFT: /* 左移 */
					HandleLeft(nCurrent_block_index,&nOriginX,&nOriginY );
					break;
				case VK_RIGHT: /* 右移 */
					HandleRight(nCurrent_block_index,&nOriginX,&nOriginY );
					break;
				case VK_UP: /* 旋转 */
				case VK_SPACE:
					HandleUp(&nCurrent_block_index, &nOriginX,&nOriginY);
					break;
				case VK_DOWN: /* 下落加速键 */
						bAccel=TRUE;
					break;
				case VK_END: /* 暂停*/
					bioskey(0);
					break;
				case VK_ESC: /* 退出游戏 */
					bOver=TRUE;
					return;
			}
			if(bAccel || TimerCounter>(20-nSpeed*2))
				if(HandleDown(nCurrent_block_index,&nOriginX,&nOriginY))
					break;
			if(bOver)				
				return;
		}
	}
}
/********************************************************** 
 *  函数原型:void main()																	*
 *  传入参数:无                       										*
 *  返 回 值:无                            							*
 *  函数功能:入口函数,包含俄罗斯方块程序的主流程				*
 **********************************************************/
void main()
{
	InitializeGraph();
	SetTimer(newtimer); /*设置新的时钟中断*/
	while(1)
	{
		StartGame();
		ProcessInGame();
		if(GameOver())
			break;
		bOver = FALSE;
	}
	KillTimer();
	closegraph();
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -