C语言实现俄罗斯方块小游戏的制作代码,具体内容如下
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #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()//将移动后的俄罗斯方块,导入地图中作标记 { 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; }
更多俄罗斯方块精彩文章请点击专题:俄罗斯方块游戏集合 进行学习。
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
JavaScript经典游戏 玩不停
java经典小游戏汇总
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍C语言代码实现俄罗斯方块,包括了C语言代码实现俄罗斯方块的使用技巧和注意事项,需要的朋友参考一下 这里为大家敲写一段怎样用C语言实现俄罗斯方块: 首先推荐大家使用CodeBlocks这个软件,方便添加不同的工程。 代码中有很多注释便于理解! 下面是效果图和全部的代码以及注释,大家可以观看并自己新增内容! 1、首先是main.c文件: 2、然后是mywindows.h文件: 3、接下来
本文向大家介绍C语言源码实现俄罗斯方块,包括了C语言源码实现俄罗斯方块的使用技巧和注意事项,需要的朋友参考一下 介绍 俄罗斯方块(Tetris, 俄文:Тетрис)是一款电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。
本文向大家介绍C语言实现俄罗斯方块源代码,包括了C语言实现俄罗斯方块源代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现俄罗斯方块的具体代码,供大家参考,具体内容如下 GitHub:【C语言】实现俄罗斯方块源代码 Head.h Draw.h Init.h game.h main.cpp 配置文件:RockShape.ini 更多关于俄罗斯方块的文章,请点击查看专题:《俄罗
本文向大家介绍javascript+css实现俄罗斯方块小游戏,包括了javascript+css实现俄罗斯方块小游戏的使用技巧和注意事项,需要的朋友参考一下 俄罗斯方块,一个很有趣的一个小游戏,此次基于html+css+javaScript实现,包含在一个方块落地后自动生成方块、操控方块的移动以及方块变形等。 部分代码: 游戏截图: 源码可参考:js俄罗斯方块 更多有趣的经典小游戏实现专题,分享
本文向大家介绍pyqt5实现俄罗斯方块游戏,包括了pyqt5实现俄罗斯方块游戏的使用技巧和注意事项,需要的朋友参考一下 本章我们要制作一个俄罗斯方块游戏。 Tetris 译注:称呼:方块是由四个小方格组成的 俄罗斯方块游戏是世界上最流行的游戏之一。是由一名叫Alexey Pajitnov的俄罗斯程序员在1985年制作的,从那时起,这个游戏就风靡了各个游戏平台。 俄罗斯方块归类为下落块迷宫游戏。游戏
本文向大家介绍C++控制台实现俄罗斯方块游戏,包括了C++控制台实现俄罗斯方块游戏的使用技巧和注意事项,需要的朋友参考一下 之前学了些C++的课程,一直想着说编点小游戏,可是MFC又不想学,所以就只能变成控制台的小游戏。 俄罗斯方块一定是很多人小时候玩过的游戏。接下来就说说设计想法。 主要实现,选择游戏的等级,加速下降,不同形状不同颜色,暂停和退出功能。 首先是类的设计。 接下来就是一些常量和光标