C语言实现俄罗斯方块
本文实例为大家分享了C语言俄罗斯方块的具体代码,供大家参考,具体内容如下
本代码运行环境是Windows下的VS2013
首先创建tetris.cpp
然后依次创建view.h以及view.cpp、model.h以及model.cpp。
代码如下:
view.h
#pragmaonce #includevoidShowBackground(); voidShowBrick(); voidShowGame(); voidOnLeft(); voidOnRight(); voidOnUp(); voidOnDown();
view.cpp
#include#include"view.h" #include"model.h" voidOnLeft() {//如果能够左移,则左移 if(IsCanMove(g_nRow,g_nCol-1)) { g_nCol--; ShowGame(); } } voidOnRight() { if(IsCanMove(g_nRow,g_nCol+1)) { g_nCol++; ShowGame(); } } voidOnUp() { if(IsCanRotate()) { Rotate(); ShowGame(); } } voidOnDown() { if(IsCanMove(g_nRow+1,g_nCol)) { g_nRow++; ShowGame(); } else { //固定方块至背景,并且产生新方块 CombineBgBrick(); GetNewBrick(); //判断游戏是否结束,并给出对应提示 } } voidShowGame() { system("cls"); CombineBgBrick(); ShowBackground(); DetachBgBrick(); } voidShowBrick() { for(size_ti=0;i<4;i++) { for(size_tj=0;j<4;j++) { if(g_chBrick[i][j]==1) { printf("■"); } } printf("\r\n"); } } voidShowBackground() { for(size_tnRow=0;nRow model.cpp
#include#include #include #include"model.h" charg_chBackground[GAME_ROWS][GAME_COLS]; charg_chBrick[4][4]; intg_nShape=0;//是长条还是方块,系数为16 intg_nRotate=0;//朝向,系数为4 intg_nRow=0; intg_nCol=0; charg_chBrickPool[][4]={ //长条 1,1,1,1, 0,0,0,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, 1,1,1,1, 0,0,0,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, //T形 1,1,1,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0, 0,1,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0, 1,0,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0, //L形状 1,0,0,0, 1,0,0,0, 1,1,0,0, 0,0,0,0, 1,1,1,0, 1,0,0,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, }; intIsCanRotate() { charchNextShape[4][4]={0}; intnNextRotate=(g_nRotate+1)%4; intnPoolRows=g_nShape*16+nNextRotate*4; for(size_tnRow=0;nRow<4;nRow++) { for(size_tnCol=0;nCol<4;nCol++) { chNextShape[nRow][nCol]=g_chBrickPool[nRow+nPoolRows][nCol]; } } for(size_tnRow=0;nRow<4;nRow++) { for(size_tnCol=0;nCol<4;nCol++) { if(chNextShape[nRow][nCol]==1) { if(g_chBackground[nRow+g_nRow][nCol+g_nCol]==1) { return0;//不能移动 } } } } return1; } voidRotate() { g_nRotate=(g_nRotate+1)%4; intnPoolRows=g_nShape*16+g_nRotate*4; for(size_tnRow=0;nRow<4;nRow++) { for(size_tnCol=0;nCol<4;nCol++) { g_chBrick[nRow][nCol]=g_chBrickPool[nRow+nPoolRows][nCol]; } } } intIsCanMove(intnToRow,intnToCol) { for(size_tnRow=0;nRow<4;nRow++) { for(size_tnCol=0;nCol<4;nCol++) { if(g_chBrick[nRow][nCol]==1) { if(g_chBackground[nRow+nToRow][nCol+nToCol]==1) { return0;//不能移动 } } } } return1; } voidGetNewBrick() { srand((unsigned)time(NULL)); g_nRow=0; g_nCol=GAME_COLS/2-1; intnShapeCount=sizeof(g_chBrickPool)/sizeof(g_chBrickPool[0])/16; g_nShape=rand()%nShapeCount; g_nRotate=rand()%4; intnPoolRows=g_nShape*16+g_nRotate*4; for(size_tnRow=0;nRow<4;nRow++) { for(size_tnCol=0;nCol<4;nCol++) { g_chBrick[nRow][nCol]=g_chBrickPool[nRow+nPoolRows][nCol]; } } } voidDetachBgBrick() { for(size_tnRow=0;nRow<4;nRow++) { for(size_tnCol=0;nCol<4;nCol++) { if(g_chBrick[nRow][nCol]==1) { g_chBackground[nRow+g_nRow][nCol+g_nCol]=0; } } } } voidCombineBgBrick() {//组合块 for(size_tnRow=0;nRow<4;nRow++) { for(size_tnCol=0;nCol<4;nCol++) { if(g_chBrick[nRow][nCol]==1) { g_chBackground[nRow+g_nRow][nCol+g_nCol]=1; } } } } voidInitBackground() {//初始化背景 for(size_tnRow=0;nRow model.h
#pragmaonce #defineGAME_ROWS20 #defineGAME_COLS12 externcharg_chBackground[GAME_ROWS][GAME_COLS]; externcharg_chBrick[4][4]; externintg_nRow; externintg_nCol; voidInitBackground(); voidGetNewBrick(); voidCombineBgBrick(); voidDetachBgBrick(); intIsCanMove(intnToRow,intnToCol); voidRotate(); intIsCanRotate();tetris.cpp
#include"stdafx.h" #include#include #include #include"model.h" #include"view.h" intmain(intargc,char*argv[]) { InitBackground(); GetNewBrick(); CombineBgBrick(); ShowBackground(); DetachBgBrick(); charchInput=0; clock_tclkStart=clock(); clock_tclkEnd=clock(); while(1) { clkEnd=clock(); if(clkEnd-clkStart>1000) { clkStart=clkEnd; OnDown(); } if(_kbhit()!=0) { chInput=_getch(); } switch(chInput) { case'a': OnLeft(); break; case'w': OnUp(); break; case's': OnDown(); break; case'd': OnRight(); break; default: break; } chInput=0; } return0; } 更多关于俄罗斯方块的文章,请点击查看专题:《俄罗斯方块》
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。