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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

俄罗斯方块c语言游戏代码大全,C语言实现俄罗斯方块小游戏

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

C語言實現(xiàn)俄羅斯方塊小游戲的制作代碼,具體內(nèi)容如下

#include

#include

#include

#define TTY_PATH "/dev/tty"

#define STTY_ON "stty raw -echo -F"

#define STTY_OFF "stty -raw echo -F"

int map[21][14];

char direct;

int node[7][4][16]={

{{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},//長方形

{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0},

{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},

{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0}},

{{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},//正方形

{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},

{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},

{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0}},

{{0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},//3邊加一中點

{0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0},

{0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0},

{0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0}},

{{0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0},//右鋤頭型

{0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0},

{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},

{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0}},

{{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0},//左鋤頭型

{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0},

{0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0},

{0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0}},

{{0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0},//右曲折型

{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},

{0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0},

{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0}},

{{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},//左曲折型

{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},

{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},

{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0}}

};

typedef struct block

{

int x;

int y;

int blockType;

int blockDirect;

}Block;

Block bl;

void init_map()//初始化邊框

{

int i,j;

for(i=0; i<21; i++)

for(j=0; j<14; j++)

{

if(j==0 || j==13)

map[i][j] = 200;

else if(i==20)

map[i][j] = 201;

else

map[i][j] = 0;

}

}

void new_block()//生成隨機的俄羅斯方塊

{

int blockType = rand()%7;

int blockDirect = rand()%4;

int x = 1;

int y = 5;

bl.x = x;

bl.y = y;

bl.blockType = blockType;

bl.blockDirect = blockDirect;

}

void input()//將移動后的俄羅斯方塊,導(dǎo)入地圖中作標記

{

int i, j;

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

for(j=0; j<4; j++)

if(node[bl.blockType][bl.blockDirect][i*4+j]==1)

{

map[bl.x+i][bl.y+j] = 1;

}

}

void output()//移動時,將之前俄羅斯方塊在地圖信息清空。

{

int i, j;

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

for(j=0; j<4; j++)

if(node[bl.blockType][bl.blockDirect][i*4+j]==1)

{

map[bl.x+i][bl.y+j] = 0;

}

}

void change()//俄羅斯方格在碰撞后融入,固定

{

int i, j;

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

for(j=0; j<4; j++)

if(node[bl.blockType][bl.blockDirect][i*4+j]==1)

{

map[bl.x+i][bl.y+j] = 10;

}

for(j=1; j<13; j++)

if(map[5][j] == 10)

{

system("clear");

printf("game over !!!!!!!!!\n");

exit(1);

}

}

void print_map()//打印地圖,顯示信息

{

int i,j;

for(i=5; i<21; i++)

{

for(j=0; j<14; j++)

{

if(map[i][j]==200)//左右邊界

printf("#");

else if(map[i][j]==201)//下邊界

printf(" # ");

else if(map[i][j]==0)//空白地

printf(" ");

else if(map[i][j]==1)//移動的俄羅斯方塊

printf(" * ");

else if(map[i][j]==10)//固定的俄羅斯方塊

printf(" @ ");

}

printf("\n");

}

}

void delLine(int n)//消行

{

int i,j;

for(j = 1; j<13; j++)

map[n][j] = 0;

for(i = n; i>5 ; i--)

for(j = 1; j<13; j++)

if(map[i-1][j] != 1)

map[i][j] = map[i-1][j];

}

void isFillLine()//是否滿足消行條件

{

int i,j;

int fals;

for(i=19; i>5; i--)

{

fals = 1;

for(j=1; j<13; j++)

{

if(map[i][j] != 10)

{

fals = 0;

continue;

}

}

if(fals)

{

delLine(i);

}

}

}

void down()//下移

{

int i, j;

int fale = 1;

for(i=3; i>=0; i--)

for(j=0; j<4; j++)

if(node[bl.blockType][bl.blockDirect][i*4+j] == 1)

if(map[bl.x+i+1][bl.y+j] == 10 || map[bl.x+i+1][bl.y+j] == 201)

{

change();

fale = 0;

new_block();

isFillLine();

return;

}

if(fale)

{

output();

bl.x += 1;

input();

}

}

void right()//右移

{

int i, j;

int fale = 1;

for(i=3; i>=0; i--)

for(j=0; j<4; j++)

if(node[bl.blockType][bl.blockDirect][i*4+j] == 1)

if(map[bl.x+i][bl.y+j+1] == 10 || map[bl.x+i][bl.y+j+1] == 200)

{

fale = 0;

return;

}

if(fale)

{

output();

bl.y += 1;

input();

}

}

void left()//左移

{

int i, j;

int fale = 1;

for(i=3; i>=0; i--)

for(j=0; j<4; j++)

if(node[bl.blockType][bl.blockDirect][i*4+j] == 1)

if(map[bl.x+i][bl.y+j-1] == 10 || map[bl.x+i][bl.y+j-1] == 200)

{

fale = 0;

return;

}

if(fale)

{

output();

bl.y -= 1;

input();

}

}

void change_block()//俄羅斯方塊變形

{

int i,j;

output();

int fals = 1;

bl.blockDirect += 1;

bl.blockDirect %= 4;

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

for(j=0; j<4; j++)

if(node[bl.blockType][bl.blockDirect][i*4+j]==1)

if(map[bl.x+i][bl.y+j] != 0 )

{

fals = 0;

break;

}

if(fals)

{

input();

}else

{

bl.blockDirect -= 1;

input();

}

}

char in_direct()//非堵塞輸入

{

fd_set fd;

struct timeval tv;

char ch;

FD_ZERO(&fd);

FD_SET(0, &fd);

tv.tv_sec = 0;

tv.tv_usec = 10;

if(select(1, &fd ,NULL, NULL, &tv) > 0)

{

ch = getchar();

}

return ch;

}

int main()//q 退出游戲,a,d 左右移動,空格變形

{

srand(time(NULL));

init_map();

new_block();

input();

char ch;

int num = 0;

while(1)

{

usleep(500000);

system(STTY_ON TTY_PATH);

ch = in_direct();

system(STTY_OFF TTY_PATH);

system("clear");

if(ch == 'a' && num <= 1)

{

left();

print_map();

num++;

continue;

}else if(ch == 'd' && num <= 1)

{

right();

print_map();

num++;

continue;

}else if(ch == ' ' && num <= 1 )

{

change_block();

print_map();

num++;

continue;

}else if(ch == 'q')

{

system("clear");

printf("gave over!!!!!\n");

exit(0);

}

down();

print_map();

num = 0;

}

return 0;

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

總結(jié)

以上是生活随笔為你收集整理的俄罗斯方块c语言游戏代码大全,C语言实现俄罗斯方块小游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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