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

📄 game.c

📁 brew版本的,简易俄罗斯方块.源代码说明清晰.
💻 C
📖 第 1 页 / 共 3 页
字号:
/*===========================================================================

FILE: Game.c
  
/*===============================================================================
INCLUDES AND VARIABLE DEFINITIONS
=============================================================================== */
#include "AEEModGen.h"// Module interface definitions
#include "AEEAppGen.h"// Applet interface definitions
#include "AEEShell.h"// Shell interface definitions
#include "game.bid"		// Applet-specific header that contains class ID
#include "game_h.bid"
#include "AEEStdLib.h" 
#include "game_res.h"

#define MAP_WIDTH  11
#define MAP_HEIGHT 20

#ifdef COLOR_DISPLAY

#define RED_COLOR MAKE_RGB(0xC0, 0x00, 0x00)
#define BLUE_COLOR MAKE_RGB(0, 0, 255)
#define GREEN_COLOR MAKE_RGB(0x00, 0x60, 0x00)
#define LIGHT_RED_COLOR MAKE_RGB(255, 0, 0)
#define LIGHT_BLUE_COLOR MAKE_RGB(128, 255, 255)
#define DARK_GREEN_COLOR MAKE_RGB(0, 128, 64)
#define ORANGE_COLOR MAKE_RGB(255, 128, 0)
#define PURPLE_COLOR MAKE_RGB(179, 21, 206)
#define YELLOW_GREEN_COLOR MAKE_RGB(158, 152, 69)
#define GREY_COLOR MAKE_RGB(80, 80, 80)

#endif
#define noblack FALSE
#define black TRUE
/*----------------------------------------------
 Structrue definition
------------------------------------------------*/
typedef struct _CGametype{
AEEApplet a;
AEERect   m_Rect;
unsigned char block_width;
unsigned char block_height;
RGBVAL frame_color;
int difficult_level;
int a0;
int dels;
int next_block;
int block[4][4];
int map[MAP_WIDTH][MAP_HEIGHT];
int map_line;
int map_col;
int x_size;
int y_size;
int block_x;
int block_y;
int current_block;
int gameover;
word score;
boolean pause;
RGBVAL color_table[10];
int32 r_color;
int32 g_color;
int32 b_color;
}CGametype;
/*-------------------------------------------------------------------
Static function prototypes
-------------------------------------------------------------------*/
static boolean game_HandleEvent(CGametype * pme, AEEEvent eCode,uint16 wParam, uint32 dwParam);
static boolean game_InitApp(CGametype * pMe);
void DeleteRow(CGametype * pMe); 
int CanPut(CGametype * pMe);   
void RotateBlock(CGametype * pMe); 
void PutBlock(CGametype * pMe);  
void ClearBlock(CGametype * pMe);
/*-----------------------------------------------------------------
 static variable definition
----------------------------------------------------------------*/

/*translate an integer into decimal sting*/
unsigned int up_Itoa(AECHAR * buffer, int eger)
{
	int len, ueger;
	unsigned char minusP;

	minusP = (eger < 0);

	if(minusP)
	{
		if(buffer) 
		{
			*(buffer++) = '-';
		}
		ueger = (int)(0 - eger);
	}
	else
	{
		ueger = (unsigned int)eger;
	}

	{
		unsigned int tmp;

		tmp = ueger;
		len = 1;
		while ( (tmp /= 10) ) len += 1;
	}

	{
		unsigned int pt;

		pt = len;
		if (buffer) buffer[pt] = 0;

		while(pt--) 
		{
			if (buffer)
			{
				buffer[pt] = (char)('0' + (ueger % 10));
			}
			ueger /= 10;
		}
	}
	return (len + 1 + minusP);
}
//=====================================================================
// the following code for Russia frame
//Function: clearblock
//Description: clear a block
//Side effect: none
//=====================================================================
void ClearBlock(CGametype * pMe) /*clear the data within the block*/
{int i,j;
 	for (i=0; i<4; i++)  for (j=0; j<4; j++) pMe->block[i][j] = 0;
}
//====================================================================
// Function: write_video
// Description: draw a frame
// input value position(x,y)
// Side effect: play the bitmap_buf
//====================================================================
void write_video
(
      CGametype * pMe, 
      int x,
      int y,
      RGBVAL color,
      unsigned char full
 )
{
     AEERect rect;
     rect.x=x;
     rect.y=y;
     rect.dx=pMe->block_width;
     rect.dy=pMe->block_width;
     if(full)
	 {

 	    IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           RGB_BLACK,// RGBVAL 
                           color,// RGBVAL 
                           IDF_RECT_FRAME | IDF_RECT_FILL);
		SETAEERECT(&rect,x+1,y+1,pMe->block_width-2,1);
		IDISPLAY_FillRect(pMe->a.m_pIDisplay,&rect,RGB_WHITE);
		SETAEERECT(&rect,x+1,y+1,1,pMe->block_width-2);
		IDISPLAY_FillRect(pMe->a.m_pIDisplay,&rect,RGB_WHITE);
     }	
 	 else
	 {
 	 	IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           RGB_WHITE,// RGBVAL 
                           RGB_WHITE,// RGBVAL 
                           IDF_RECT_FRAME | IDF_RECT_FILL);
	 }
}
/*===================================================================
Function: generateblock
Description: generate a block
input: block class
Side effect: none
====================================================================*/
void GenerateBlock(CGametype * pMe,int kind)   /*generate a block*/
{
      int val;
	  val=kind%10;
 	ClearBlock(pMe);
	switch (kind) {
	case  1: pMe->block[1][0] = pMe->block[2][0] = pMe->block[0][1] = pMe->block[1][1] = val; break;
   case 11: pMe->block[0][0] = pMe->block[0][1] = pMe->block[1][1] = pMe->block[1][2] = val; break;
   case 21: pMe->block[1][0] = pMe->block[2][0] = pMe->block[0][1] = pMe->block[1][1] = val; break;
   case 31: pMe->block[0][0] = pMe->block[0][1] = pMe->block[1][1] = pMe->block[1][2] = val; break;

   case  2:	pMe->block[0][0] = pMe->block[1][0] = pMe->block[1][1] = pMe->block[2][1] = val; break;
	case 12:	pMe->block[1][0] = pMe->block[1][1] = pMe->block[0][1] = pMe->block[0][2] = val; break;
	case 22:	pMe->block[0][0] = pMe->block[1][0] = pMe->block[1][1] = pMe->block[2][1] = val; break;
	case 32:	pMe->block[1][0] = pMe->block[1][1] = pMe->block[0][1] = pMe->block[0][2] = val; break;

	case  3: pMe->block[0][0] = pMe->block[0][1] = pMe->block[1][0] = pMe->block[1][1] = val; break;
	case 13: pMe->block[0][0] = pMe->block[0][1] = pMe->block[1][0] = pMe->block[1][1] = val; break;
	case 23: pMe->block[0][0] = pMe->block[0][1] = pMe->block[1][0] = pMe->block[1][1] = val; break;
	case 33: pMe->block[0][0] = pMe->block[0][1] = pMe->block[1][0] = pMe->block[1][1] = val; break;

	case  4: pMe->block[1][0] = pMe->block[0][1] = pMe->block[1][1] = pMe->block[2][1] = val; break;
	case 14: pMe->block[0][0] = pMe->block[0][1] = pMe->block[0][2] = pMe->block[1][1] = val; break;
   case 24: pMe->block[0][0] = pMe->block[1][0] = pMe->block[2][0] = pMe->block[1][1] = val; break;
   case 34: pMe->block[0][1] = pMe->block[1][0] = pMe->block[1][1] = pMe->block[1][2] = val; break;

   case  5: pMe->block[2][0] = pMe->block[0][1] = pMe->block[1][1] = pMe->block[2][1] = val; break;
   case 15: pMe->block[0][0] = pMe->block[0][1] = pMe->block[0][2] = pMe->block[1][2] = val; break;
   case 25: pMe->block[0][0] = pMe->block[1][0] = pMe->block[2][0] = pMe->block[0][1] = val; break;
	case 35: pMe->block[0][0] = pMe->block[1][0] = pMe->block[1][1] = pMe->block[1][2] = val; break;

	case  6: pMe->block[0][0] = pMe->block[0][1] = pMe->block[1][1] = pMe->block[2][1] = val; break;
	case 16: pMe->block[0][0] = pMe->block[1][0] = pMe->block[0][1] = pMe->block[0][2] = val; break;
   case 26: pMe->block[0][0] = pMe->block[1][0] = pMe->block[2][0] = pMe->block[2][1] = val; break;
   case 36: pMe->block[1][0] = pMe->block[1][1] = pMe->block[1][2] = pMe->block[0][2] = val; break;

   case  7: pMe->block[0][0] = pMe->block[1][0] = pMe->block[2][0] = pMe->block[3][0] = val; break;
	case 17: pMe->block[0][0] = pMe->block[0][1] = pMe->block[0][2] = pMe->block[0][3] = val; break;
   case 27: pMe->block[0][0] = pMe->block[1][0] = pMe->block[2][0] = pMe->block[3][0] = val; break;
	case 37: pMe->block[0][0] = pMe->block[0][1] = pMe->block[0][2] = pMe->block[0][3] = val; break;
	
	case  8: pMe->block[0][1] = pMe->block[1][0] = pMe->block[1][1] = pMe->block[1][2] = pMe->block[2][1] = val; break;
	case 18: pMe->block[0][1] = pMe->block[1][0] = pMe->block[1][1] = pMe->block[1][2] = pMe->block[2][1] = val; break;
    case 28: pMe->block[0][1] = pMe->block[1][0] = pMe->block[1][1] = pMe->block[1][2] = pMe->block[2][1] = val; break;
	case 38: pMe->block[0][1] = pMe->block[1][0] = pMe->block[1][1] = pMe->block[1][2] = pMe->block[2][1] = val; break;

	case  9: pMe->block[0][0] = pMe->block[0][1] = pMe->block[1][1] = pMe->block[2][0] = pMe->block[2][1] = val; break;
	case 19: pMe->block[0][0] = pMe->block[0][2] = pMe->block[1][0] = pMe->block[1][1] = pMe->block[1][2] = val; break;
    case 29: pMe->block[0][0] = pMe->block[0][1] = pMe->block[1][0] = pMe->block[2][0] = pMe->block[2][1] = val; break;
	case 39: pMe->block[0][0] = pMe->block[0][1] = pMe->block[0][2] = pMe->block[1][0] = pMe->block[1][2] = val; break;	
	default:  break;
	}

   if ((kind == 7) || (kind == 27)) {pMe->x_size = 4; pMe->y_size = 1; }
	else if ((kind == 17) || (kind == 37)) {pMe->x_size = 1; pMe->y_size = 4;}
	else if (kind % 10 == 3) {pMe->x_size = 2; pMe->y_size = 2; }
	else if (kind % 10 == 8) {pMe->x_size = 3; pMe->y_size = 3; }
	else if ((kind / 10 == 0) || (kind / 10 == 2)) {pMe->x_size = 3; pMe->y_size = 2;}
	else if ((kind / 10 == 1) || (kind / 10 == 3)) {pMe->x_size = 2; pMe->y_size = 3;}
   pMe->current_block = kind;
}
//================================================================
//Funciton initialmemory
//Description: initial memory
//Side effect: none
//================================================================
void initialmemory(CGametype * pMe)
{
	int i,j;
	AEERect rect;
	AECHAR szText[] ={'N','e','x','t','\0','S','c','o','r','e','\0'},game_title[30]={0};
	uint32   dwTime = GET_UPTIMEMS();
	ISHELL_LoadResString(pMe->a.m_pIShell, GAME_RES_FILE, IDS_GAME_TITLE, game_title, sizeof(game_title)); 
     rect.x=0;
     rect.y=0;
     rect.dx=pMe->m_Rect.dx; //screen width
     rect.dy=pMe->block_height;
 	 IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           pMe->frame_color,// RGBVAL 
                           pMe->frame_color,// RGBVAL 
                           IDF_RECT_FRAME | IDF_RECT_FILL);
     rect.x=0;
     rect.y=MAP_HEIGHT*pMe->block_height+pMe->block_height;
     rect.dx=pMe->m_Rect.dx;//screen width
     rect.dy=pMe->block_height;
 	 IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           pMe->frame_color,// RGBVAL 
                           pMe->frame_color,// RGBVAL 
                           IDF_RECT_FRAME | IDF_RECT_FILL);
     rect.x=MAP_WIDTH*pMe->block_width+pMe->block_width;
     rect.y=pMe->block_height;
     rect.dx=pMe->block_width;
     rect.dy=MAP_HEIGHT*pMe->block_height;
	
 	 IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           pMe->frame_color,
                           pMe->frame_color,
                           IDF_RECT_FRAME | IDF_RECT_FILL);
     rect.x=0;
     rect.y=pMe->block_height;
     rect.dx=pMe->block_width;
     rect.dy=MAP_HEIGHT*pMe->block_height;
 	 IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           pMe->frame_color,// RGBVAL 
                           pMe->frame_color,// RGBVAL 
                           IDF_RECT_FRAME | IDF_RECT_FILL);
     rect.x=pMe->m_Rect.dx-pMe->block_width;
     rect.y=pMe->block_height;
     rect.dx=pMe->block_width;
     rect.dy=MAP_HEIGHT*pMe->block_height;
 	 IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           pMe->frame_color,// RGBVAL 
                           pMe->frame_color,// RGBVAL 
                           IDF_RECT_FRAME | IDF_RECT_FILL);
      IDISPLAY_DrawText(pMe->a.m_pIDisplay,    // Display instance
                           AEE_FONT_BOLD,       // Use BOLD font
                           szText,              // Text - Normally comes from resource
                           -1,                  // -1 = Use full string length
                           MAP_WIDTH*pMe->block_width+1+pMe->block_width+pMe->block_width,   // x-cordinate
                           pMe->block_height+8,                   // y-cordinate
                           NULL,                // No clipping
                           0);//IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
      IDISPLAY_DrawText(pMe->a.m_pIDisplay,    // Display instance
                           AEE_FONT_BOLD,       // Use BOLD font
                           szText+5,              // Text - Normally comes from resource
                           -1,                  // -1 = Use full string length

⌨️ 快捷键说明

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