亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? block.txt

?? block for c language
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
大概在最近兩天之內編碼完成,但此前一天開始構思。第一天晚上主要完成了方塊旋轉算法,第二天也就是今天加了消方塊的處理算法。但是可能還有一些考慮不周的地方,比如,沒有采用定時中斷,而是圖方便采用了和cpu頻率有關的delay()函數來模擬時間間隔,這是需要改進的地方。
其中的主要邏輯有:
(1)由于c的隨機性函數不好,所以每次游戲開始根據bios時間設置種子。
(2)得分越高,方塊下降速度越快(每200分為單位)。
(3)每下落一個方塊加1分,每消除一行加10分,兩行加30分,三行加70分,四行加150分。初試分數為100分。
游戲控制:
   up-旋轉;空格-下落到底; 左右下方向鍵-控制方向。P-開始或暫停游戲。 ESC-退出。
特點:
(1)由于tc不支持中文,所以基本都是英文注釋。
(2)函數命名盡可能規范的表達其內部處理目的和過程。
(3)代碼加上注釋僅有577行。(我下載過的兩個俄羅斯方塊代碼一個在1087行,一個在993行,我的比它們代碼少)。
(4)除了消除空格時算法比較復雜,其他算法都比較簡單易讀。
(5)繪圖效率和局部代碼效率扔有待提高。
(6)FrameTime參數可能依據不同硬件環境進行具體設置,InitGame需要正確的TC路徑。

    俄羅斯方塊源于大約9年前上大一時的一個夢,我們在學習c語言時,我的同寢室友邀請我合作一起完成俄羅斯方塊(課外作業性質),但是當時限于我們的水平比較菜和學習狀態比較懶散,我們沒有完成。大一的時候我在機房里無意發現別人留下的俄羅斯方塊程序,運行,老師發現后激動的問我是我寫的嗎,我慚愧的搖搖頭。那時看到別人做c的大程序深感羨慕(自己只是寫幾十行的程序)。數年后我仍然看到有不同樣式的實現,但是我一直沒有實現它,知道今天忽然有這個想法去做,算是彌補多年前的遺憾和心愿吧。
-----------------------【以下是我的代碼文件:】-----------------------------------------------
/********************************/
/* Desc:    俄羅斯方塊游戲                */
/* By:        hoodlum1980                */
/* Email:    jinfd@126.com            */
/* Date:    2008.03.12 22:30            */
/********************************/
#include <stdio.h>
#include <bios.h>
#include <dos.h>
#include <graphics.h>
#include <string.h>
#include <stdlib.h>
#define true         1
#define false         0
#define BoardWidth    12
#define BoardHeight     23
#define _INNER_HELPER /*inner helper method */
/*Scan Codes Define*/
enum KEYCODES
{
    K_ESC                =0x011b,
    K_UP                =0x4800,        /* upward arrow */
    K_LEFT            =0x4b00,
    K_DOWN            =0x5000,
    K_RIGHT            =0x4d00,
    K_SPACE            =0x3920,
    K_P                =0x1970
};

/* the data structure of the block */
typedef struct tagBlock
{
    char c[4][4];    /* cell fill info array, 0-empty, 1-filled */
    int x;                /* block position cx [ 0,BoardWidht -1] */
    int y;                /* block position cy [-4,BoardHeight-1] */
    char color;        /* block color */
    char size;        /* block max size in width or height */
    char name;        /* block name (the block's shape) */
} Block;

/* game's global info */
int FrameTime= 1300;
int CellSize= 18;
int BoardLeft= 30;
int BoardTop=    30;

/* next block grid */
int NBBoardLeft= 300;
int NBBoardTop=    30;
int NBCellSize=  10;

/* score board position */
int ScoreBoardLeft= 300;
int ScoreBoardTop=100;
int ScoreBoardWidth=200; 
int ScoreBoardHeight=35;
int ScoreColor=LIGHTCYAN;

/* infor text postion */
int InfoLeft=300;
int InfoTop=200;
int InfoColor=YELLOW;

int BorderColor=DARKGRAY;
int BkGndColor=BLACK;
int GameRunning=true;
int TopLine=BoardHeight-1;    /* top empty line */
int TotalScore=100;
char info_score[20];
char info_help[255];
char info_common[255];

/* our board, Board[x][y][0]-isFilled, Board[x][y][1]-fillColor */
unsigned char Board[BoardWidth][BoardHeight][2];
char BufferCells[4][4];    /* used to judge if can rotate block */
Block curBlock;        /* current moving block */
Block nextBlock;    /* next Block to appear */

/* function list */
int GetKeyCode();
int CanMove(int dx,int dy);
int CanRotate();
int RotateBlock(Block *block);
int MoveBlock(Block *block,int dx,int dy);
void DrawBlock(Block *block,int,int,int);
void EraseBlock(Block *block,int,int,int);
void DisplayScore();
void DisplayInfo(char* text);
void GenerateBlock(Block *block);
void NextBlock();
void InitGame();
int PauseGame();
void QuitGame();

/*Get Key Code */
int GetKeyCode()
{
    int key=0;
    if(bioskey(1))
    {
        key=bioskey(0);
    }
    return key;
}

/* display text! */
void DisplayInfo(char *text)
{
    setcolor(BkGndColor);
    outtextxy(InfoLeft,InfoTop,info_common);
    strcpy(info_common,text);
    setcolor(InfoColor);
    outtextxy(InfoLeft,InfoTop,info_common);
}

/* create a new block by key number,
* the block anchor to the top-left corner of 4*4 cells
*/
void _INNER_HELPER GenerateBlock(Block *block)
{
    int key=(random(13)*random(17)+random(1000)+random(3000))%7;
    block->size=3;/* because most blocks' size=3 */
    memset(block->c,0,16);
    switch(key)
    {
        case 0:
            block->name='T';
            block->color=RED;
            block->c[1][0]=1;
            block->c[1][1]=1, block->c[2][1]=1;
            block->c[1][2]=1;
            break;
        case 1:
            block->name='L';
            block->color=YELLOW;
            block->c[1][0]=1;
            block->c[1][1]=1;
            block->c[1][2]=1, block->c[2][2]=1;
            break;
        case 2:
            block->name='J';
            block->color=LIGHTGRAY;
            block->c[1][0]=1;
            block->c[1][1]=1;
            block->c[1][2]=1, block->c[0][2]=1;
            break;
        case 3:
            block->name='z';
            block->color=CYAN;
            block->c[0][0]=1, block->c[1][0]=1;
            block->c[1][1]=1, block->c[2][1]=1;
            break;
        case 4:
            block->name='5'; 
block->color=LIGHTBLUE;
            block->c[1][0]=1, block->c[2][0]=1;
            block->c[0][1]=1, block->c[1][1]=1;
            break;
        case 5:
            block->name='o';
            block->color=BLUE;
            block->size=2;
            block->c[0][0]=1, block->c[1][0]=1;
            block->c[0][1]=1, block->c[1][1]=1;
            break;
        case 6:
            block->name='I';
            block->color=GREEN;
            block->size=4;
            block->c[1][0]=1;
            block->c[1][1]=1;
            block->c[1][2]=1;
            block->c[1][3]=1;
            break;
    }
}

/* get next block! */
void NextBlock()
{
    /* copy the nextBlock to curBlock */
    curBlock.size=nextBlock.size;
    curBlock.color=nextBlock.color;
    curBlock.x=(BoardWidth-4)/2;
    curBlock.y=-curBlock.size;
    memcpy(curBlock.c,nextBlock.c,16);
    /* generate nextBlock and show it */
    EraseBlock(&nextBlock,NBBoardLeft,NBBoardTop,NBCellSize);
    GenerateBlock(&nextBlock);
    nextBlock.x=1,nextBlock.y=0;
    DrawBlock(&nextBlock,NBBoardLeft,NBBoardTop,NBCellSize);
}

/* rotate the block, update the block struct data */
int _INNER_HELPER RotateCells(char c[4][4],char blockSize)
{
    char temp,i,j;
    switch(blockSize)
    {
        case 3:
            temp=c[0][0];
            c[0][0]=c[2][0], c[2][0]=c[2][2],    c[2][2]=c[0][2], c[0][2]=temp;
            temp=c[0][1];
            c[0][1]=c[1][0], c[1][0]=c[2][1],    c[2][1]=c[1][2], c[1][2]=temp;
            break;
        case 4:    /* only 'I' block arived here! */
            c[1][0]=1-c[1][0], c[1][2]=1-c[1][2], c[1][3]=1-c[1][3];
            c[0][1]=1-c[0][1], c[2][1]=1-c[2][1],    c[3][1]=1-c[3][1];
            break;
    }
}

/* judge if the block can move toward the direction */
int CanMove(int dx,int dy)
{
    int i,j,tempX,tempY;
    for(i=0;i<curBlock.size;i++)
    {
        for(j=0;j<curBlock.size;j++)
        {
            if(curBlock.c[i][j])
            {
                /* cannot move leftward or rightward */
                tempX = curBlock.x + i + dx;
                if(tempX<0 || tempX>(BoardWidth-1))    return false; /* make sure x is valid! */ 
/* cannot move downward */
                tempY = curBlock.y + j + dy;
                if(tempY>(BoardHeight-1))    return false; /* y is only checked lower bound, maybe negative!!!! */
                /* the cell already filled, we must check Y's upper bound before check cell ! */
                if(tempY>=0 && Board[tempX][tempY][0]) return false;
            }
        }
    }
    return true;
}

/* judge if the block can rotate */
int CanRotate()
{
    int i,j,tempX,tempY;
    /* update buffer */
    memcpy(BufferCells, curBlock.c, 16);
    RotateCells(BufferCells,curBlock.size);
    for(i=0;i<curBlock.size;i++)
    {
        for(j=0;j<curBlock.size;j++)
        {
            if(BufferCells[i][j])
            {
                tempX=curBlock.x+i;
                tempY=curBlock.y+j;
                if(tempX<0 || tempX>(BoardWidth-1))
                    return false;
                if(tempY>(BoardHeight-1))
                    return false;
                if(tempY>=0 && Board[tempX][tempY][0])
                    return false;
            }
        }
    }
    return true;
}

/* draw the block */
void _INNER_HELPER DrawBlock(Block *block,int bdLeft,int bdTop,int cellSize)
{
    int i,j;
    setfillstyle(SOLID_FILL,block->color);
    for(i=0;i<block->size;i++)
    {
        for(j=0;j<block->size;j++)
        {
            if(block->c[i][j] && (block->y+j)>=0)
            {
                floodfill(
                    bdLeft+cellSize*(i+block->x)+cellSize/2,
                    bdTop+cellSize*(j+block->y)+cellSize/2,
                    BorderColor);
            }
        }
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本亚洲免费观看| 欧美在线不卡视频| 91福利精品第一导航| 精品久久久久久久久久久久久久久久久 | 国产在线播放一区三区四| 99国产精品国产精品久久| 日韩一区二区三区三四区视频在线观看 | 日韩一区二区三区电影 | 久久精品国产亚洲高清剧情介绍 | 欧美一二三区在线| 亚洲综合精品久久| 成人美女在线观看| 久久综合色天天久久综合图片| 亚洲制服丝袜av| 91美女片黄在线观看| 日本一区二区三区视频视频| 麻豆精品视频在线观看| 欧美日韩高清影院| 一区二区三区久久| 色婷婷久久综合| 国产精品视频一区二区三区不卡| 狠狠色综合日日| 日韩免费性生活视频播放| 日韩精品免费视频人成| 精品视频色一区| 亚洲午夜视频在线| 色噜噜夜夜夜综合网| 国产精品高潮久久久久无| 丁香婷婷综合激情五月色| 久久久三级国产网站| 国产成人精品免费网站| 欧美高清在线一区二区| 国产99精品视频| 国产精品久久久久久久久免费丝袜| 国产中文字幕精品| 国产欧美一区视频| 国产白丝精品91爽爽久久| 国产欧美一区二区在线观看| www.亚洲国产| 亚洲免费在线电影| 在线观看不卡一区| 午夜a成v人精品| 欧美一区二区三区视频免费 | 亚洲人成网站色在线观看| 99re成人精品视频| 亚洲综合久久久久| 日韩一区二区在线观看视频| 国内外成人在线| 国产日韩精品一区| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲视频免费在线观看| 欧美日免费三级在线| 日韩和欧美的一区| 国产日韩v精品一区二区| 本田岬高潮一区二区三区| 一区二区三区日本| 精品国精品国产| 成人高清免费观看| 亚洲一区在线看| 精品久久久久久久人人人人传媒| 高清beeg欧美| 性做久久久久久| 久久嫩草精品久久久精品一| 91麻豆.com| 六月丁香婷婷久久| 亚洲精品中文字幕乱码三区| 91精品国产91久久久久久一区二区 | 91精品视频网| 丰满白嫩尤物一区二区| 亚洲国产中文字幕| 欧美国产国产综合| 日韩欧美一二三四区| 成人福利电影精品一区二区在线观看| 亚洲最新视频在线观看| 久久综合中文字幕| 欧美午夜在线观看| 成人蜜臀av电影| 日韩国产成人精品| 亚洲精品高清视频在线观看| 欧美成人猛片aaaaaaa| 91国偷自产一区二区三区观看| 精品亚洲aⅴ乱码一区二区三区| 亚洲视频一区二区免费在线观看| 日韩欧美综合一区| 欧美影片第一页| 成人精品免费看| 麻豆精品新av中文字幕| 亚洲在线成人精品| 国产精品美女一区二区三区| 欧美电影精品一区二区| 欧美日韩一区二区在线视频| 本田岬高潮一区二区三区| 激情综合亚洲精品| 蜜臀av性久久久久av蜜臀妖精| 亚洲激情男女视频| 亚洲人妖av一区二区| 久久久久久久久久看片| 日韩一区二区三区四区| 在线不卡欧美精品一区二区三区| 91色.com| 99v久久综合狠狠综合久久| 国产成人精品免费网站| 国内成人免费视频| 激情综合色播激情啊| 欧美96一区二区免费视频| 亚洲国产精品久久久久秋霞影院 | 麻豆久久久久久| 另类中文字幕网| 美女视频第一区二区三区免费观看网站 | 琪琪一区二区三区| 日韩成人精品在线| 石原莉奈一区二区三区在线观看| 一区二区在线观看不卡| 亚洲欧美一区二区视频| 国产精品电影一区二区三区| 国产精品视频免费| 国产精品久久久久久久岛一牛影视| 国产欧美一区二区三区在线看蜜臀 | **性色生活片久久毛片| 国产精品视频yy9299一区| 久久久久久久久久看片| 中文字幕不卡三区| 国产精品久久久久国产精品日日| 国产精品卡一卡二卡三| 自拍偷在线精品自拍偷无码专区 | 日韩成人免费在线| 日本va欧美va精品| 久久99国产精品麻豆| 狠狠狠色丁香婷婷综合激情| 国产iv一区二区三区| av在线不卡电影| 欧美色区777第一页| 日韩亚洲欧美成人一区| 精品第一国产综合精品aⅴ| 久久精品在线观看| 一区在线中文字幕| 亚洲成人动漫在线免费观看| 麻豆传媒一区二区三区| 久久99精品国产.久久久久 | 久久精品日韩一区二区三区| 国产欧美日韩精品在线| 1区2区3区欧美| 亚洲成人先锋电影| 国产成人免费在线视频| 色婷婷av一区| 日韩三级伦理片妻子的秘密按摩| 国产人成亚洲第一网站在线播放| 亚洲国产成人在线| 夜夜夜精品看看| 极品少妇一区二区| 色婷婷综合久久久久中文一区二区 | 久久久亚洲精品石原莉奈| 亚洲欧洲性图库| 亚洲1区2区3区4区| 国产成人精品免费一区二区| 精品视频一区二区不卡| 久久精品一区蜜桃臀影院| 夜夜嗨av一区二区三区四季av| 免费成人在线网站| 91在线视频播放| 日韩视频在线观看一区二区| 国产精品欧美极品| 日本最新不卡在线| 成人激情黄色小说| 日韩你懂的在线播放| 亚洲精品成人在线| 国产精品一二三四五| 欧美三级日韩三级| 日韩久久一区二区| 国产剧情av麻豆香蕉精品| 欧美日韩综合在线| 国产精品成人一区二区艾草| 美脚の诱脚舐め脚责91 | 国产日韩欧美精品一区| 午夜国产精品一区| 97精品国产露脸对白| 国产亚洲1区2区3区| 蜜桃av噜噜一区| 欧美视频一区二区| 亚洲欧美一区二区三区孕妇| 麻豆一区二区三| 欧美放荡的少妇| 午夜视黄欧洲亚洲| 日本韩国一区二区三区| 中文字幕日本不卡| 成人午夜激情在线| 久久久久久久精| 精品一区二区免费视频| 欧美一级生活片| 日本中文一区二区三区| 欧美日韩大陆在线| 午夜久久福利影院| 欧美日韩激情在线| 亚洲成人精品在线观看| 色视频欧美一区二区三区| 亚洲欧洲在线观看av| 96av麻豆蜜桃一区二区| 国产精品久久久久aaaa樱花| 97精品电影院| 亚洲午夜在线视频|