日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言实现简单俄罗斯方块

發(fā)布時(shí)間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言实现简单俄罗斯方块 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、摘要
目的:做一個(gè)俄羅斯方塊,能基本實(shí)現(xiàn)變換形態(tài)、方塊顏色變化、行滿消除。
二、過程
基于c語言寫一個(gè)俄羅斯方塊,由于本人比較菜,有借鑒別人的代碼,下面是項(xiàng)目的一些代碼和效果。
- 總體效果

- 代碼注釋
1. 主函數(shù),開始是初始屏幕的設(shè)置,打印游戲界面的邊框,游戲提示。BlockRand()函數(shù)隨機(jī)產(chǎn)生一種形態(tài)的方塊。

int main() {DeawMap();//畫地圖打印邊框函數(shù)code_y = rand() % 7 + 1;//在7種形態(tài)中產(chǎn)生1種形態(tài)賦值給code_ywhile (1) ? ? ? ? ? ? ? ? ? ??{Return = BlockRand(code_y);//隨機(jī)主方塊生成code_y = rand() % 7 + 1;Show(code_y);// 顯示游戲信息,下一個(gè)方塊得分情況.ShowBlock(&Return);//顯示完整形態(tài)}system("pause>nul");return 0; }

2. 初始化界面,畫地圖,上下左右打印方塊形成邊界,其他為空格。

void DeawMap() {for (int i = 0; i < WIDTH; i++)PRINTF LINE ?//上邊框for (int i = 1; i < HEIGHT - 1; i++) ? ? ? ? ?//打印左右邊框{for (int j = 0; j < WIDTH; j++){if (j == 0 || j == WIDTH - 1){PRINTF?? ?//打印方塊的宏定義if (j == WIDTH - 1)LINE}else EMPTY?? ?//打印空格的宏定義}}for (int i = 0; i < WIDTH; i++)PRINTF LINE ?//下邊框system("color 03");//屏幕顯示顏色 }

3.俄羅斯方塊要隨機(jī)產(chǎn)生一種形態(tài)的方塊,主要用到了srand()函數(shù)是隨機(jī)數(shù)發(fā)生器的初始化函數(shù),srand和rand()配合使用產(chǎn)生偽隨機(jī)數(shù)序列。

Tetris* BlockRand(int code_y) {srand((int)time(0));Tetris* Block = (Tetris*)malloc(sizeof(Tetris)); ? ?//用malloc動(dòng)態(tài)分配空間賦值給新指針Block-&gt;x_1 = 8;Block-&gt;y_1 = 4; //規(guī)定初始中心方塊的坐標(biāo)為(8,4)Block-&gt;code = code_y;if (Phead == NULL)?? ?Phead = Block;?? ??? ?//用鏈表儲(chǔ)存數(shù)據(jù)else Pend-&gt;next = Block;Block-&gt;next = NULL;Pend = Block;return Block; }


4.按鍵響應(yīng),調(diào)用GetAsyncKeystate()函數(shù)對(duì)按鍵操作進(jìn)行響應(yīng),就是調(diào)用GetAsyncKeystate函數(shù)得到某個(gè)按鍵的狀態(tài),判斷返回值的最高位是不是1,如果是表示處于按下狀態(tài)。
?

void JudgeDirection(Tetris** Block) {if (GetAsyncKeyState(VK_UP) &amp;&amp; 0x8000){form += 1;//按向上鍵方塊形態(tài)改變一次if (form == 4){form = 0;//到第四次返回剛開始的形態(tài)}Form(&amp;Return);}if (GetAsyncKeyState(VK_DOWN) &amp;&amp; 0x8000){//加速向下 ?時(shí)間加速UP = 1;}if (GetAsyncKeyState(VK_LEFT) &amp;&amp; 0x8000){//向左移動(dòng)if (JudgeWall(&amp;Return) != -1) Location_y(&amp;Return, -1, 0, -1, 0, -1, 0, -1, 0);}if (GetAsyncKeyState(VK_RIGHT) &amp;&amp; 0x8000){//向右移動(dòng)if (JudgeWall(&amp;Return) != -2) Location_y(&amp;Return, 1, 0, 1, 0, 1, 0, 1, 0);}if (GetAsyncKeyState(VK_ESCAPE) &amp;&amp; 0x0D){MoveCursor(27, 15);printf("游戲暫停");//判斷Escwhile (1){if (GetAsyncKeyState(VK_ESCAPE) &amp;&amp; 0x0D){MoveCursor(27, 15);printf(" ? ? ? ");break;}}} }

5.設(shè)置方塊顏色

void SetColour(int c) {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);//API函數(shù)可以改變控制臺(tái)顏色 }


屏幕顏色的符號(hào)常數(shù)表
符號(hào)常數(shù)?? ? 數(shù)值 ??? ?含義? ? ? ? ?符號(hào)常數(shù)? ? ? ? ? ? ? ? ?數(shù)值? ? ? ? ? ?含義
BLACK?? ??? ? ? 0?? ? ? ?黑色? ? ? ? ? DARKGRAY? ? ? ? ? ? ?8? ? ? ? ? ? ?深灰
BLUE? ? ? ? ? ? ?1? ? ? ? 蘭色? ? ? ? ? ?LIGHTBLUE? ? ? ? ? ? 9? ? ? ? ? ? ?深蘭
GREEN? ? ? ? ? 2?? ??? ?綠色? ? ? ? ? ?LIGHTGREEN? ? ? ?10? ? ? ? ? ? 淡綠
CYAN? ? ? ? ? ? ?3?? ??? ?青色? ? ? ? ? ?LIGHTCYAN? ? ? ? ? 11? ? ? ? ? ??淡青
RED? ? ? ? ? ? ? ?4?? ??? ?紅色? ? ? ? ? ?LIGHTRED? ? ? ? ? ? 12? ? ? ? ? ? ?淡紅
MAGENTA?? ? 5?? ??? ?洋紅? ? ? ? ? ?LIGHTMAGENTA? ?13? ? ? ? ? ? 淡洋紅
BROWN? ? ? ? ?6?? ??? 棕色? ? ? ? ? ?YELLow? ? ? ? ? ? ? ? ? 14? ? ? ? ? ? ?黃色
LIGHTGRAY? ?7? ? ? ?淡灰? ? ? ? ???WHITE? ? ? ? ? ? ? ? ? ?15? ? ? ? ?? ? 白色

本內(nèi)容轉(zhuǎn)載至:

http://blog.bools.cn/archives/581

總結(jié)

以上是生活随笔為你收集整理的c语言实现简单俄罗斯方块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。