真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

sink函數(shù)c語(yǔ)言 c語(yǔ)言中的sin函數(shù)

C語(yǔ)言中,如何啟動(dòng)一個(gè)類?

C語(yǔ)言中沒(méi)有類這個(gè)概念的。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了偃師免費(fèi)建站歡迎大家使用!

不太明白啟動(dòng)是什么意思。

這個(gè)類中含有純虛函數(shù),屬于抽象類,只能通過(guò)具體子類對(duì)象來(lái)完成相關(guān)操作,可以使用Rtpart指針。

求一個(gè)用C語(yǔ)言編寫的小游戲代碼

#include graphics.h

#include conio.h

#include time.h

/////////////////////////////////////////////

// 定義常量、枚舉量、結(jié)構(gòu)體、全局變量

/////////////////////////////////////////////

#define WIDTH 10 // 游戲區(qū)寬度

#define HEIGHT 22 // 游戲區(qū)高度

#define SIZE 20 // 每個(gè)游戲區(qū)單位的實(shí)際像素

// 定義操作類型

enum CMD

{

CMD_ROTATE, // 方塊旋轉(zhuǎn)

CMD_LEFT, CMD_RIGHT, CMD_DOWN, // 方塊左、右、下移動(dòng)

CMD_SINK, // 方塊沉底

CMD_QUIT // 退出游戲

};

// 定義繪制方塊的方法

enum DRAW

{

SHOW, // 顯示方塊

HIDE, // 隱藏方塊

FIX // 固定方塊

};

// 定義七種俄羅斯方塊

struct BLOCK

{

WORD dir[4]; // 方塊的四個(gè)旋轉(zhuǎn)狀態(tài)

COLORREF color; // 方塊的顏色

} g_Blocks[7] = { {0x0F00, 0x4444, 0x0F00, 0x4444, RED}, // I

{0x0660, 0x0660, 0x0660, 0x0660, BLUE}, // 口

{0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA}, // L

{0x2260, 0x0E20, 0x0644, 0x0470, YELLOW}, // 反L

{0x0C60, 0x2640, 0x0C60, 0x2640, CYAN}, // Z

{0x0360, 0x4620, 0x0360, 0x4620, GREEN}, // 反Z

{0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; // T

// 定義當(dāng)前方塊、下一個(gè)方塊的信息

struct BLOCKINFO

{

byte id; // 方塊 ID

char x, y; // 方塊在游戲區(qū)中的坐標(biāo)

byte dir:2; // 方向

} g_CurBlock, g_NextBlock;

// 定義游戲區(qū)

BYTE g_World[WIDTH][HEIGHT] = {0};

/////////////////////////////////////////////

// 函數(shù)聲明

/////////////////////////////////////////////

void Init(); // 初始化游戲

void Quit(); // 退出游戲

void NewGame(); // 開始新游戲

void GameOver(); // 結(jié)束游戲

CMD GetCmd(); // 獲取控制命令

void DispatchCmd(CMD _cmd); // 分發(fā)控制命令

void NewBlock(); // 生成新的方塊

bool CheckBlock(BLOCKINFO _block); // 檢測(cè)指定方塊是否可以放下

void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); // 畫方塊

void OnRotate(); // 旋轉(zhuǎn)方塊

void OnLeft(); // 左移方塊

void OnRight(); // 右移方塊

void OnDown(); // 下移方塊

void OnSink(); // 沉底方塊

/////////////////////////////////////////////

// 函數(shù)定義

/////////////////////////////////////////////

// 主函數(shù)

void main()

{

Init();

CMD c;

while(true)

{

c = GetCmd();

DispatchCmd(c);

// 按退出時(shí),顯示對(duì)話框咨詢用戶是否退出

if (c == CMD_QUIT)

{

HWND wnd = GetHWnd();

if (MessageBox(wnd, _T("您要退出游戲嗎?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK)

Quit();

}

}

}

// 初始化游戲

void Init()

{

initgraph(640, 480);

srand((unsigned)time(NULL));

// 顯示操作說(shuō)明

setfont(14, 0, _T("宋體"));

outtextxy(20, 330, _T("操作說(shuō)明"));

outtextxy(20, 350, _T("上:旋轉(zhuǎn)"));

outtextxy(20, 370, _T("左:左移"));

outtextxy(20, 390, _T("右:右移"));

outtextxy(20, 410, _T("下:下移"));

outtextxy(20, 430, _T("空格:沉底"));

outtextxy(20, 450, _T("ESC:退出"));

// 設(shè)置坐標(biāo)原點(diǎn)

setorigin(220, 20);

// 繪制游戲區(qū)邊界

rectangle(-1, -1, WIDTH * SIZE, HEIGHT * SIZE);

rectangle((WIDTH + 1) * SIZE - 1, -1, (WIDTH + 5) * SIZE, 4 * SIZE);

// 開始新游戲

NewGame();

}

// 退出游戲

void Quit()

{

closegraph();

exit(0);

}

// 開始新游戲

void NewGame()

{

// 清空游戲區(qū)

setfillstyle(BLACK);

bar(0, 0, WIDTH * SIZE - 1, HEIGHT * SIZE - 1);

ZeroMemory(g_World, WIDTH * HEIGHT);

// 生成下一個(gè)方塊

g_NextBlock.id = rand() % 7;

g_NextBlock.dir = rand() % 4;

g_NextBlock.x = WIDTH + 1;

g_NextBlock.y = HEIGHT - 1;

// 獲取新方塊

NewBlock();

}

// 結(jié)束游戲

void GameOver()

{

HWND wnd = GetHWnd();

if (MessageBox(wnd, _T("游戲結(jié)束。\n您想重新來(lái)一局嗎?"), _T("游戲結(jié)束"), MB_YESNO | MB_ICONQUESTION) == IDYES)

NewGame();

else

Quit();

}

// 獲取控制命令

DWORD m_oldtime;

CMD GetCmd()

{

// 獲取控制值

while(true)

{

// 如果超時(shí),自動(dòng)下落一格

DWORD newtime = GetTickCount();

if (newtime - m_oldtime = 500)

{

m_oldtime = newtime;

return CMD_DOWN;

}

// 如果有按鍵,返回按鍵對(duì)應(yīng)的功能

if (kbhit())

{

switch(getch())

{

case 'w':

case 'W': return CMD_ROTATE;

case 'a':

case 'A': return CMD_LEFT;

case 'd':

case 'D': return CMD_RIGHT;

case 's':

case 'S': return CMD_DOWN;

case 27: return CMD_QUIT;

case ' ': return CMD_SINK;

case 0:

case 0xE0:

switch(getch())

{

case 72: return CMD_ROTATE;

case 75: return CMD_LEFT;

case 77: return CMD_RIGHT;

case 80: return CMD_DOWN;

}

}

}

// 延時(shí) (降低 CPU 占用率)

Sleep(20);

}

}

// 分發(fā)控制命令

void DispatchCmd(CMD _cmd)

{

switch(_cmd)

{

case CMD_ROTATE: OnRotate(); break;

case CMD_LEFT: OnLeft(); break;

case CMD_RIGHT: OnRight(); break;

case CMD_DOWN: OnDown(); break;

case CMD_SINK: OnSink(); break;

case CMD_QUIT: break;

}

}

// 生成新的方塊

void NewBlock()

{

g_CurBlock.id = g_NextBlock.id, g_NextBlock.id = rand() % 7;

g_CurBlock.dir = g_NextBlock.dir, g_NextBlock.dir = rand() % 4;

g_CurBlock.x = (WIDTH - 4) / 2;

g_CurBlock.y = HEIGHT + 2;

// 下移新方塊直到有局部顯示

WORD c = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];

while((c 0xF) == 0)

{

g_CurBlock.y--;

c = 4;

}

// 繪制新方塊

DrawBlock(g_CurBlock);

// 繪制下一個(gè)方塊

setfillstyle(BLACK);

bar((WIDTH + 1) * SIZE, 0, (WIDTH + 5) * SIZE - 1, 4 * SIZE - 1);

DrawBlock(g_NextBlock);

// 設(shè)置計(jì)時(shí)器,用于判斷自動(dòng)下落

m_oldtime = GetTickCount();

}

// 畫方塊

void DrawBlock(BLOCKINFO _block, DRAW _draw)

{

WORD b = g_Blocks[_block.id].dir[_block.dir];

int x, y;

int color = BLACK;

switch(_draw)

{

case SHOW: color = g_Blocks[_block.id].color; break;

case HIDE: color = BLACK; break;

case FIX: color = g_Blocks[_block.id].color / 3; break;

}

setfillstyle(color);

for(int i=0; i16; i++)

{

if (b 0x8000)

{

x = _block.x + i % 4;

y = _block.y - i / 4;

if (y HEIGHT)

{

if (_draw != HIDE)

bar3d(x * SIZE + 2, (HEIGHT - y - 1) * SIZE + 2, (x + 1) * SIZE - 4, (HEIGHT - y) * SIZE - 4, 3, true);

else

bar(x * SIZE, (HEIGHT - y - 1) * SIZE, (x + 1) * SIZE - 1, (HEIGHT - y) * SIZE - 1);

}

}

b = 1;

}

}

// 檢測(cè)指定方塊是否可以放下

bool CheckBlock(BLOCKINFO _block)

{

WORD b = g_Blocks[_block.id].dir[_block.dir];

int x, y;

for(int i=0; i16; i++)

{

if (b 0x8000)

{

x = _block.x + i % 4;

y = _block.y - i / 4;

if ((x 0) || (x = WIDTH) || (y 0))

return false;

if ((y HEIGHT) (g_World[x][y]))

return false;

}

b = 1;

}

return true;

}

// 旋轉(zhuǎn)方塊

void OnRotate()

{

// 獲取可以旋轉(zhuǎn)的 x 偏移量

int dx;

BLOCKINFO tmp = g_CurBlock;

tmp.dir++; if (CheckBlock(tmp)) { dx = 0; goto rotate; }

tmp.x = g_CurBlock.x - 1; if (CheckBlock(tmp)) { dx = -1; goto rotate; }

tmp.x = g_CurBlock.x + 1; if (CheckBlock(tmp)) { dx = 1; goto rotate; }

tmp.x = g_CurBlock.x - 2; if (CheckBlock(tmp)) { dx = -2; goto rotate; }

tmp.x = g_CurBlock.x + 2; if (CheckBlock(tmp)) { dx = 2; goto rotate; }

return;

rotate:

// 旋轉(zhuǎn)

DrawBlock(g_CurBlock, HIDE);

g_CurBlock.dir++;

g_CurBlock.x += dx;

DrawBlock(g_CurBlock);

}

// 左移方塊

void OnLeft()

{

BLOCKINFO tmp = g_CurBlock;

tmp.x--;

if (CheckBlock(tmp))

{

DrawBlock(g_CurBlock, HIDE);

g_CurBlock.x--;

DrawBlock(g_CurBlock);

}

}

// 右移方塊

void OnRight()

{

BLOCKINFO tmp = g_CurBlock;

tmp.x++;

if (CheckBlock(tmp))

{

DrawBlock(g_CurBlock, HIDE);

g_CurBlock.x++;

DrawBlock(g_CurBlock);

}

}

// 下移方塊

void OnDown()

{

BLOCKINFO tmp = g_CurBlock;

tmp.y--;

if (CheckBlock(tmp))

{

DrawBlock(g_CurBlock, HIDE);

g_CurBlock.y--;

DrawBlock(g_CurBlock);

}

else

OnSink(); // 不可下移時(shí),執(zhí)行“沉底方塊”操作

}

// 沉底方塊

void OnSink()

{

int i, x, y;

// 連續(xù)下移方塊

DrawBlock(g_CurBlock, HIDE);

BLOCKINFO tmp = g_CurBlock;

tmp.y--;

while (CheckBlock(tmp))

{

g_CurBlock.y--;

tmp.y--;

}

DrawBlock(g_CurBlock, FIX);

// 固定方塊在游戲區(qū)

WORD b = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];

for(i = 0; i 16; i++)

{

if (b 0x8000)

{

if (g_CurBlock.y - i / 4 = HEIGHT)

{ // 如果方塊的固定位置超出高度,結(jié)束游戲

GameOver();

return;

}

else

g_World[g_CurBlock.x + i % 4][g_CurBlock.y - i / 4] = 1;

}

b = 1;

}

// 檢查是否需要消掉行,并標(biāo)記

int row[4] = {0};

bool bRow = false;

for(y = g_CurBlock.y; y = max(g_CurBlock.y - 3, 0); y--)

{

i = 0;

for(x = 0; x WIDTH; x++)

if (g_World[x][y] == 1)

i++;

if (i == WIDTH)

{

bRow = true;

row[g_CurBlock.y - y] = 1;

setfillstyle(WHITE, DIAGCROSS2_FILL);

bar(0, (HEIGHT - y - 1) * SIZE + SIZE / 2 - 2, WIDTH * SIZE - 1, (HEIGHT - y - 1) * SIZE + SIZE / 2 + 2);

}

}

if (bRow)

{

// 延時(shí) 200 毫秒

Sleep(200);

// 擦掉剛才標(biāo)記的行

IMAGE img;

for(i = 0; i 4; i++)

{

if (row[i])

{

for(y = g_CurBlock.y - i + 1; y HEIGHT; y++)

for(x = 0; x WIDTH; x++)

{

g_World[x][y - 1] = g_World[x][y];

g_World[x][y] = 0;

}

getimage(img, 0, 0, WIDTH * SIZE, (HEIGHT - (g_CurBlock.y - i + 1)) * SIZE);

putimage(0, SIZE, img);

}

}

}

// 產(chǎn)生新方塊

NewBlock();

}

c語(yǔ)言在vc++下 編程的俄羅斯方源程序

以下代碼來(lái)自 easyx 官網(wǎng),已經(jīng)測(cè)試過(guò)可以用,支持各版本 vc。需要安裝 easyx 庫(kù)才能編譯。

項(xiàng)目直接建立控制臺(tái)項(xiàng)目就好了。

////////////////////////////////////////////

//?程序名稱:俄羅斯方塊

//?編譯環(huán)境:Visual?C++?6.0?/?2010,EasyX_v20131006(beta)

//?程序編寫:krissi?zhaoh1987@qq.com

//?更新記錄:2010-12-18 zhaoh1987@qq.com?編寫

//? 2011-9-28 yw80@qq.com?修改了下落超時(shí)的邏輯

//? 2013-10-7??zhaoh1987@qq.com?修改了繪制方法,將原來(lái)的立體效果修改為扁平效果

//

#include?easyx.h

#include?conio.h

#include?time.h

/////////////////////////////////////////////

//?定義常量、枚舉量、結(jié)構(gòu)體、全局變量

/////////////////////////////////////////////

#define WIDTH 10 //?游戲區(qū)寬度

#define HEIGHT 22 //?游戲區(qū)高度

#define UNIT 20 //?每個(gè)游戲區(qū)單位的實(shí)際像素

//?定義操作類型

enum?CMD

{

CMD_ROTATE, //?方塊旋轉(zhuǎn)

CMD_LEFT,?CMD_RIGHT,?CMD_DOWN, //?方塊左、右、下移動(dòng)

CMD_SINK, //?方塊沉底

CMD_QUIT //?退出游戲

};

//?定義繪制方塊的方法

enum?DRAW

{

SHOW, //?顯示方塊

CLEAR, //?擦除方塊

FIX //?固定方塊

};

//?定義七種俄羅斯方塊

struct?BLOCK

{

WORD?dir[4]; //?方塊的四個(gè)旋轉(zhuǎn)狀態(tài)

COLORREF?color; //?方塊的顏色

} g_Blocks[7]?=?{ {0x0F00,?0x4444,?0x0F00,?0x4444,?RED}, //?I

{0x0660,?0x0660,?0x0660,?0x0660,?BLUE}, //?口

{0x4460,?0x02E0,?0x0622,?0x0740,?MAGENTA}, //?L

{0x2260,?0x0E20,?0x0644,?0x0470,?YELLOW}, //?反L

{0x0C60,?0x2640,?0x0C60,?0x2640,?CYAN}, //?Z

{0x0360,?0x4620,?0x0360,?0x4620,?GREEN}, //?反Z

{0x4E00,?0x4C40,?0x0E40,?0x4640,?BROWN}}; //?T

//?定義當(dāng)前方塊、下一個(gè)方塊的信息

struct?BLOCKINFO

{

byte?id; //?方塊?ID

char?x,?y; //?方塊在游戲區(qū)中的坐標(biāo)

byte?dir:2; //?方向

} g_CurBlock,?g_NextBlock;

//?定義游戲區(qū)

BYTE?g_World[WIDTH][HEIGHT]?=?{0};

/////////////////////////////////////////////

//?函數(shù)聲明

/////////////////////////////////////////////

void?Init(); //?初始化游戲

void?Quit(); //?退出游戲

void?NewGame(); //?開始新游戲

void?GameOver(); //?結(jié)束游戲

CMD??GetCmd(); //?獲取控制命令

void?DispatchCmd(CMD?_cmd); //?分發(fā)控制命令

void?NewBlock(); //?生成新的方塊

bool?CheckBlock(BLOCKINFO?_block); //?檢測(cè)指定方塊是否可以放下

void?DrawUnit(int?x,?int?y,?COLORREF?c,?DRAW?_draw); //?畫單元方塊

void?DrawBlock(BLOCKINFO?_block,?DRAW?_draw?=?SHOW); //?畫方塊

void?OnRotate(); //?旋轉(zhuǎn)方塊

void?OnLeft(); //?左移方塊

void?OnRight(); //?右移方塊

void?OnDown(); //?下移方塊

void?OnSink(); //?沉底方塊

/////////////////////////////////////////////

//?函數(shù)定義

/////////////////////////////////////////////

//?主函數(shù)

void?main()

{

Init();

CMD?c;

while(true)

{

c?=?GetCmd();

DispatchCmd(c);

//?按退出時(shí),顯示對(duì)話框咨詢用戶是否退出

if?(c?==?CMD_QUIT)

{

HWND?wnd?=?GetHWnd();

if?(MessageBox(wnd,?_T("您要退出游戲嗎?"),?_T("提醒"),?MB_OKCANCEL?|?MB_ICONQUESTION)?==?IDOK)

Quit();

}

}

}

//?初始化游戲

void?Init()

{

initgraph(640,?480);

srand((unsigned)time(NULL));

setbkmode(TRANSPARENT); //?設(shè)置圖案填充的背景色為透明

//?顯示操作說(shuō)明

settextstyle(14,?0,?_T("宋體"));

outtextxy(20,?330,?_T("操作說(shuō)明"));

outtextxy(20,?350,?_T("上:旋轉(zhuǎn)"));

outtextxy(20,?370,?_T("左:左移"));

outtextxy(20,?390,?_T("右:右移"));

outtextxy(20,?410,?_T("下:下移"));

outtextxy(20,?430,?_T("空格:沉底"));

outtextxy(20,?450,?_T("ESC:退出"));

//?設(shè)置坐標(biāo)原點(diǎn)

setorigin(220,?20);

//?繪制游戲區(qū)邊界

rectangle(-1,?-1,?WIDTH?*?UNIT,?HEIGHT?*?UNIT);

rectangle((WIDTH?+?1)?*?UNIT?-?1,?-1,?(WIDTH?+?5)?*?UNIT,?4?*?UNIT);

//?開始新游戲

NewGame();

}

//?退出游戲

void?Quit()

{

closegraph();

exit(0);

}

//?開始新游戲

void?NewGame()

{

//?清空游戲區(qū)

setfillcolor(BLACK);

solidrectangle(0,?0,?WIDTH?*?UNIT?-?1,?HEIGHT?*?UNIT?-?1);

ZeroMemory(g_World,?WIDTH?*?HEIGHT);

//?生成下一個(gè)方塊

g_NextBlock.id?=?rand()?%?7;

g_NextBlock.dir?=?rand()?%?4;

g_NextBlock.x?=?WIDTH?+?1;

g_NextBlock.y?=?HEIGHT?-?1;

//?獲取新方塊

NewBlock();

}

//?結(jié)束游戲

void?GameOver()

{

HWND?wnd?=?GetHWnd();

if?(MessageBox(wnd,?_T("游戲結(jié)束。\n您想重新來(lái)一局嗎?"),?_T("游戲結(jié)束"),?MB_YESNO?|?MB_ICONQUESTION)?==?IDYES)

NewGame();

else

Quit();

}

//?獲取控制命令

DWORD?m_oldtime;

CMD?GetCmd()

{

//?獲取控制值

while(true)

{

//?如果超時(shí),自動(dòng)下落一格

DWORD?newtime?=?GetTickCount();

if?(newtime?-?m_oldtime?=?500)

{

m_oldtime?=?newtime;

return?CMD_DOWN;

}

//?如果有按鍵,返回按鍵對(duì)應(yīng)的功能

if?(kbhit())

{

switch(getch())

{

case?'w':

case?'W': return?CMD_ROTATE;

case?'a':

case?'A': return?CMD_LEFT;

case?'d':

case?'D': return?CMD_RIGHT;

case?'s':

case?'S': return?CMD_DOWN;

case?27: return?CMD_QUIT;

case?'?': return?CMD_SINK;

case?0:

case?0xE0:

switch(getch())

{

case?72: return?CMD_ROTATE;

case?75: return?CMD_LEFT;

case?77: return?CMD_RIGHT;

case?80: return?CMD_DOWN;

}

}

}

//?延時(shí)?(降低?CPU?占用率)

Sleep(20);

}

}

//?分發(fā)控制命令

void?DispatchCmd(CMD?_cmd)

{

switch(_cmd)

{

case?CMD_ROTATE: OnRotate(); break;

case?CMD_LEFT: OnLeft(); break;

case?CMD_RIGHT: OnRight(); break;

case?CMD_DOWN: OnDown(); break;

case?CMD_SINK: OnSink(); break;

case?CMD_QUIT: break;

}

}

//?生成新的方塊

void?NewBlock()

{

g_CurBlock.id?=?g_NextBlock.id, g_NextBlock.id?=?rand()?%?7;

g_CurBlock.dir?=?g_NextBlock.dir, g_NextBlock.dir?=?rand()?%?4;

g_CurBlock.x?=?(WIDTH?-?4)?/?2;

g_CurBlock.y?=?HEIGHT?+?2;

//?下移新方塊直到有局部顯示

WORD?c?=?g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];

while((c??0xF)?==?0)

{

g_CurBlock.y--;

c?=?4;

}

//?繪制新方塊

DrawBlock(g_CurBlock);

//?繪制下一個(gè)方塊

setfillcolor(BLACK);

solidrectangle((WIDTH?+?1)?*?UNIT,?0,?(WIDTH?+?5)?*?UNIT?-?1,?4?*?UNIT?-?1);

DrawBlock(g_NextBlock);

//?設(shè)置計(jì)時(shí)器,用于判斷自動(dòng)下落

m_oldtime?=?GetTickCount();

}

//?畫單元方塊

void?DrawUnit(int?x,?int?y,?COLORREF?c,?DRAW?_draw)

{

//?計(jì)算單元方塊對(duì)應(yīng)的屏幕坐標(biāo)

int?left?=?x?*?UNIT;

int?top?=?(HEIGHT?-?y?-?1)?*?UNIT;

int?right?=?(x?+?1)?*?UNIT?-?1;

int?bottom?=?(HEIGHT?-?y)?*?UNIT?-?1;

//?畫單元方塊

switch(_draw)

{

case?SHOW:

//?畫普通方塊

setlinecolor(0x006060);

roundrect(left?+?1,?top?+?1,?right?-?1,?bottom?-?1,?5,?5);

setlinecolor(0x003030);

roundrect(left,?top,?right,?bottom,?8,?8);

setfillcolor(c);

setlinecolor(LIGHTGRAY);

fillrectangle(left?+?2,?top?+?2,?right?-?2,?bottom?-?2);

break;

case?FIX:

//?畫固定的方塊

setfillcolor(RGB(GetRValue(c)?*?2?/?3,?GetGValue(c)?*?2?/?3,?GetBValue(c)?*?2?/?3));

setlinecolor(DARKGRAY);

fillrectangle(left?+?1,?top?+?1,?right?-?1,?bottom?-?1);

break;

case?CLEAR:

//?擦除方塊

setfillcolor(BLACK);

solidrectangle(x?*?UNIT,?(HEIGHT?-?y?-?1)?*?UNIT,?(x?+?1)?*?UNIT?-?1,?(HEIGHT?-?y)?*?UNIT?-?1);

break;

}

}

//?畫方塊

void?DrawBlock(BLOCKINFO?_block,?DRAW?_draw)

{

WORD?b?=?g_Blocks[_block.id].dir[_block.dir];

int?x,?y;

for(int?i?=?0;?i??16;?i++,?b?=?1)

if?(b??0x8000)

{

x?=?_block.x?+?i?%?4;

y?=?_block.y?-?i?/?4;

if?(y??HEIGHT)

DrawUnit(x,?y,?g_Blocks[_block.id].color,?_draw);

}

}

//?檢測(cè)指定方塊是否可以放下

bool?CheckBlock(BLOCKINFO?_block)

{

WORD?b?=?g_Blocks[_block.id].dir[_block.dir];

int?x,?y;

for(int?i?=?0;?i??16;?i++,?b?=?1)

if?(b??0x8000)

{

x?=?_block.x?+?i?%?4;

y?=?_block.y?-?i?/?4;

if?((x??0)?||?(x?=?WIDTH)?||?(y??0))

return?false;

if?((y??HEIGHT)??(g_World[x][y]))

return?false;

}

return?true;

}

//?旋轉(zhuǎn)方塊

void?OnRotate()

{

//?獲取可以旋轉(zhuǎn)的?x?偏移量

int?dx;

BLOCKINFO?tmp?=?g_CurBlock;

tmp.dir++; if?(CheckBlock(tmp)) { dx?=?0; goto?rotate; }

tmp.x?=?g_CurBlock.x?-?1; if?(CheckBlock(tmp)) { dx?=?-1; goto?rotate; }

tmp.x?=?g_CurBlock.x?+?1; if?(CheckBlock(tmp)) { dx?=?1; goto?rotate; }

tmp.x?=?g_CurBlock.x?-?2; if?(CheckBlock(tmp)) { dx?=?-2; goto?rotate; }

tmp.x?=?g_CurBlock.x?+?2; if?(CheckBlock(tmp)) { dx?=?2; goto?rotate; }

return;

rotate:

//?旋轉(zhuǎn)

DrawBlock(g_CurBlock,?CLEAR);

g_CurBlock.dir++;

g_CurBlock.x?+=?dx;

DrawBlock(g_CurBlock);

}

//?左移方塊

void?OnLeft()

{

BLOCKINFO?tmp?=?g_CurBlock;

tmp.x--;

if?(CheckBlock(tmp))

{

DrawBlock(g_CurBlock,?CLEAR);

g_CurBlock.x--;

DrawBlock(g_CurBlock);

}

}

//?右移方塊

void?OnRight()

{

BLOCKINFO?tmp?=?g_CurBlock;

tmp.x++;

if?(CheckBlock(tmp))

{

DrawBlock(g_CurBlock,?CLEAR);

g_CurBlock.x++;

DrawBlock(g_CurBlock);

}

}

//?下移方塊

void?OnDown()

{

BLOCKINFO?tmp?=?g_CurBlock;

tmp.y--;

if?(CheckBlock(tmp))

{

DrawBlock(g_CurBlock,?CLEAR);

g_CurBlock.y--;

DrawBlock(g_CurBlock);

}

else

OnSink(); //?不可下移時(shí),執(zhí)行“沉底方塊”操作

}

//?沉底方塊

void?OnSink()

{

int?i,?x,?y;

//?連續(xù)下移方塊

DrawBlock(g_CurBlock,?CLEAR);

BLOCKINFO?tmp?=?g_CurBlock;

tmp.y--;

while?(CheckBlock(tmp))

{

g_CurBlock.y--;

tmp.y--;

}

DrawBlock(g_CurBlock,?FIX);

//?固定方塊在游戲區(qū)

WORD?b?=?g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];

for(i?=?0;?i??16;?i++,?b?=?1)

if?(b??0x8000)

{

if?(g_CurBlock.y?-?i?/?4?=?HEIGHT)

{ //?如果方塊的固定位置超出高度,結(jié)束游戲

GameOver();

return;

}

else

g_World[g_CurBlock.x?+?i?%?4][g_CurBlock.y?-?i?/?4]?=?1;

}

//?檢查是否需要消掉行,并標(biāo)記

BYTE?remove?=?0; //?低?4?位用來(lái)標(biāo)記方塊涉及的?4?行是否有消除行為

for(y?=?g_CurBlock.y;?y?=?max(g_CurBlock.y?-?3,?0);?y--)

{

i?=?0;

for(x?=?0;?x??WIDTH;?x++)

if?(g_World[x][y]?==?1)

i++;

if?(i?==?WIDTH)

{

remove?|=?(1??(g_CurBlock.y?-?y));

setfillcolor(LIGHTGREEN);

setlinecolor(LIGHTGREEN);

setfillstyle(BS_HATCHED,?HS_DIAGCROSS);

fillrectangle(0,?(HEIGHT?-?y?-?1)?*?UNIT?+?UNIT?/?2?-?5,?WIDTH?*?UNIT?-?1,?(HEIGHT?-?y?-?1)?*?UNIT?+?UNIT?/?2?+?5);

setfillstyle(BS_SOLID);

}

}

if?(remove) //?如果產(chǎn)生整行消除

{

//?延時(shí)?300?毫秒

Sleep(300);

//?擦掉剛才標(biāo)記的行

IMAGE?img;

for(i?=?0;?i??4;?i++,?remove?=?1)

{

if?(remove??1)

{

for(y?=?g_CurBlock.y?-?i?+?1;?y??HEIGHT;?y++)

for(x?=?0;?x??WIDTH;?x++)

{

g_World[x][y?-?1]?=?g_World[x][y];

g_World[x][y]?=?0;

}

getimage(img,?0,?0,?WIDTH?*?UNIT,?(HEIGHT?-?(g_CurBlock.y?-?i?+?1))?*?UNIT);

putimage(0,?UNIT,?img);

}

}

}

//?產(chǎn)生新方塊

NewBlock();

}

數(shù)據(jù)結(jié)構(gòu) c語(yǔ)言編寫順序表合并

/*

**太多錯(cuò)誤了,包括語(yǔ)法和邏輯上的錯(cuò)誤都有。。。。

**我修改了一下,現(xiàn)在可以了。

**請(qǐng)注意,下面我說(shuō)的字符串均指純數(shù)字字符串,這個(gè)程序中是以字符方式來(lái)處理成數(shù)字的

**輸入的時(shí)候,第一次輸入的必須是順序串(否則還要加一個(gè)排序算法),

**不是順序串的話輸入也沒(méi)有問(wèn)題,但是第一個(gè)字符串不會(huì)被排序

**第二個(gè)字符串不要求順序。因?yàn)槭且粋€(gè)個(gè)插入第一個(gè)字符串的對(duì)應(yīng)位置

**而且這里輸入的會(huì)被按照單個(gè)字符來(lái)錄入

**(即數(shù)組元素只能為0~9中的任一個(gè)整數(shù)),

**如果想要以多位數(shù)(比如一個(gè)數(shù)組元素為67、345、2351等)來(lái)作為一個(gè)數(shù)組元素,

**則要修改判斷輸入的部分(我只是根據(jù)你的來(lái)改的,不知道是不是你想要的結(jié)果)。

*/

#includeiostream

//可去掉#includestdlib.h

using namespace std;

typedef int datatype;

#define maxsize 1024

typedef struct

{

datatype data[maxsize];

int last;

}sequenlist;

sequenlist *combine (sequenlist *scrptr,sequenlist *sinkptr);//添加函數(shù)聲明

void main ()

{

sequenlist *Aptr,*Bptr,*Cptr;

Aptr = new sequenlist;//注意,要申請(qǐng)空間,初始化指針,下同

Bptr = new sequenlist;

Cptr = NULL;

//Cptr不用申請(qǐng)空間,因?yàn)楹竺嬗蟹祷刂羔?,這里初始為NULL,以防非法操作

char ch; //注意這里

int i=0;

//注意這里

do

{

ch = getchar();

Aptr-data[i]= ch - '0';//*Aptr.data[i]——Aptr-data[i]

i++;

}

while (ch!='\n' imaxsize);

Aptr-last = i-1; //添加這句

i = 0;

do

{

ch = getchar();

Bptr-data[i]= ch - '0';//*Aptr.data[i]——Aptr-data[i]

i++;

}

while (ch!='\n' imaxsize);

Bptr-last = i-1;

Cptr=combine(Aptr,Bptr);//注意這里

for(i=0;iCptr-last;i++)//注意

printf("%d",Cptr-data[i]);

delete Aptr;//前面new的,現(xiàn)在要delete,否則內(nèi)存泄漏(雖然編譯可通過(guò))

delete Bptr;

Aptr = Bptr = Cptr = NULL;//這句可要可不要,只是一個(gè)習(xí)慣,即delete掉的指針要置空,以防非法操作。

}

void insertlist (sequenlist *lstptr,int x)//istpter——lstptr

{

int i=0,j=0;

//沒(méi)有do....until ();應(yīng)用while

while(ilstptr-last)

{

if (x=lstptr-data[i])

break;

else i++;

}

if (lstptr-last=maxsize)

{

printf ("overflow");

exit(0);//exit (overflow);overflow不是一個(gè)整數(shù)值

}

for (j=lstptr-last-1;j=i;j--)//注意,j=lstptr-last-1

{

lstptr-data[j+1]=lstptr-data[j];

// lstptr-data[i]=x;

// lstptr-last++;

//這兩句要放for外面

}

lstptr-data[i]=x;

lstptr-last++;

}

sequenlist *combine (sequenlist *scrptr,sequenlist *sinkptr)

{

//int x;不需要

int j;

for (j=0;jsinkptr-last;j++)

insertlist (scrptr,sinkptr-data[j]);

return scrptr;//注意

}

打字不易,如滿意,望采納。


當(dāng)前文章:sink函數(shù)c語(yǔ)言 c語(yǔ)言中的sin函數(shù)
文章源于:http://weahome.cn/article/dodiddd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部