设为首页 加入收藏

TOP

C语言图形编程--俄罗斯方块制作(二)源代码(二)
2014-11-23 20:25:11 来源: 作者: 【 】 浏览:55
Tags:语言 图形 编程 俄罗斯 方块 制作 源代码
*************************************************** * Function Name : main * Description : Main program * Input : None * Output : None * Return : None *******************************************************************************/ int main(void) { //画出游戏界面 initgraph(WINDOW_WIDTH, WINDOW_HIGH) ; //初始化图形窗口 cleardevice() ; DrawGameGUI() ; //使用 API 函数修改窗口名称 HWND hWnd = GetHWnd(); SetWindowText(hWnd, 俄罗斯方块); //初始化参数 InitProcParameters() ; //游戏过程 PlayGame() ; closegraph() ; return 0 ; } 下面是源文件init.cpp---游戏运行前 初始化的一些方法
/************************ (C) COPYRIGHT 2013 yang_yulei ************************
* File Name          : init.cpp
* Author             : yang_yulei
* Date First Issued  : 12/18/2013
* Description        : 
*
********************************************************************************
* 
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include head.h

/* Variables -----------------------------------------------------------------*/
extern char g_gameBoard[][X_ROCK_SQUARE_NUM+2] ;
extern int  g_rockTypeNum ; 
extern RockType rockArray[] ;

/* Function prototypes -------------------------------------------------------*/
static int ReadRockShape(void) ;
static unsigned int ShapeStr2uInt(char* const);

/*******************************************************************************
* Function Name  : InitProcParameters
* Description    : 在正式开始运行游戏前,初始化一些参数:g_gameBoard
                   从配置文件中读取系统中俄罗斯方块的形状
* Be called      : main
* Input          : None
* Output         : g_gameBoard rockArray
* Return         : None
*******************************************************************************/
//初始化程序参数
int
InitProcParameters(void)
{
    int  i ;
    
    //初始化游戏板(把这个二维数组的四周置1,当作围墙,用于判断边界)
    for (i = 0; i < X_ROCK_SQUARE_NUM+2; i++)
    {
        g_gameBoard[0][i] = 1 ;
        g_gameBoard[Y_ROCK_SQUARE_NUM+1][i]= 1 ;
    }
    for (i = 0; i < Y_ROCK_SQUARE_NUM+2; i++)
    {
        g_gameBoard[i][0] = 1 ;
        g_gameBoard[i][X_ROCK_SQUARE_NUM+1]= 1 ;
    }

    //从配置文件中读取游戏中所有方块的形状点阵
    ReadRockShape() ;

    return 0 ;
}

/*******************************************************************************
* Function Name  : ReadRockShape
* Description    : 从配置文件中读取系统中俄罗斯方块的形状 把它记录在rockArray中
* Be called      : InitProcParameters
* Input          : rockshape.ini
* Output         : rockArray
* Return         : 成功返回0 失败返回1
*******************************************************************************/
int
ReadRockShape(void)
{
    FILE* fp ;
    int  i = 0 ;
    int  len = 0 ;
    int  rockArrayIdx = 0 ;
    int  shapeNumPerRock = 0 ; //一种方块的形态数目(用于计算方块的nextRockIndex)
    
    char rdBuf[128] ;
    char rockShapeBitsStr[128] = {0};
    
    unsigned int  shapeBits = 0 ;

    g_rockTypeNum  = 0 ;

    //打开配置文件 从中读取方块的形状
    fp = fopen(.\rockshape.ini, r) ;
    if (fp == NULL)
    {
        perror(open file error!
) ;
        return 1 ;
    }

    while (fgets(rdBuf, 128, fp) != NULL)
    {
        len = strlen(rdBuf) ;
        rdBuf[len-1] = '' ;

        switch (rdBuf[0])
        {
        case '@': case '#':
            strcat(rockShapeBitsStr, rdBuf) ;
        break ;

        case 0 : //一个方块读取结束
            shapeBits = ShapeStr2uInt(rockShapeBitsStr) ;
            rockShapeBitsStr[0] = 0 ;
            shapeNumPerRock++ ;
            rockArray[rockArrayIdx].rockShapeBits = shapeBits ;
            rockArray[rockArrayIdx].nextRockIndex = rockArrayIdx + 1 ;
            rockArrayIdx++ ;
            g_rockTypeNum++ ; //记录方块数量的全局变量+1
        break ;

        case '-'://一种方块读取结束(更新其nextRockIndex值)
            rockArray[rockArrayIdx-1].nextRockIndex = rockArrayIdx - shapeNumPerRock ;
            shapeNumPerRock = 0 ;
        break ;

        default :
        break ;
        }
    }//while()

    return 0 ;
}

/*******************************************************************************
* Function Name  : ShapeStr2uInt
* Description    : 把配置文件中的描述方块形状的字符串 转化为 unsigned int型
* Be called      : 
* Input          : shapeStr 描述方块形状的字符串(从文件中读取的)
* Output         : None
* Return         : unsigned int型的方块形状点阵(用其低16位表示)
*******************************************************************************/
unsigned int
ShapeStr2uInt(char* const shapeStr)
{
    unsigned int  shapeBitsRet = 0 ;
    char* p = shapeStr ;

    for (p += 15; p >= shapeStr; p--)
    {
        if (*p == '@')
        {
            shapeBitsRet |= ((unsigned int)1 << (&shapeStr[15]-p)) ;
        }
    }

    return shapeBitsRet ;
}
下面是源文件GUI.cpp---一些关于在界面上画出界面的一些方法
/************************ (C) COPYRIGHT 2013 yang_yulei ************************
* File Name          : GUI.cpp
* Author             : yang_yulei
* Date First Issued  : 12/18/2013
* Description        : 
*
********************************************************************************
* 
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include head.h

/* Variables -----------------------------------------------------------------*/
//预览区位置
RockLocation_t previewLocation = {GUI_WALL_SQUARE_WIDTH*GUI_xWALL_SQUARE_NUM+70, 50} ; 

extern RockType rockArray[] ;

/*******************************************************************************
* Function Name  : DrawRock
* Description    : 在游戏区画出编号为rockIndex的方块
* Be called      : PlayGame()
* Input          : rockIndex       :
                   currentLocatePtr: 此方块的位置
                   displayed       : 此方块是否显示
* Output         : None
* Return         : None
*******************************************************************************/
void
DrawRock(int rockIndex, const struct LOCATE * currentLocatePtr, BOOL displayed)
{
    int i ;
    int mask  ;
    int rockX ;     //俄罗斯方块的4*4模型的左上角点x轴的坐标
    int rockY ;     //俄罗斯方块的4*4模型的左上角点y轴的坐标
    int spaceFlag ; //占位标记(用于g_gameBoard,1表示某处有方块 0表示此处无方块)
    int color ;     //画出的方块的颜色
    
    //若此方块是用于显示的,则设置其颜色为白色,其占位标记设为1
    //否则设置其颜色为黑色(背景色),占位标记设为0
    displayed   (color = WHITE,spaceFlag = 1) 
              : (
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇objective-c基础教程读书笔记 下一篇C语言入门经典(第5版)之编程初步

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: