怎么用c语言写俄罗斯方块( 二 )


本游戏中就是让方块以一定的速度下落 。并响应键盘事件 , 实行左右移动 , 和向下加速功能 。
(代码见源码) 声音播放: 音效是游戏不可缺少的一部分 。在.Net2.0中已经提供了一个类来播放声音 。
在using System.Media;命名空间 。本游戏中播放声音的代码如下:(在 GameField类中) using System.Media; public static SoundPlayer sound = new SoundPlayer(); /*播放声音*/ public static void PlaySound(string soundstr) { switch (soundstr) { case "FinishOneLine": //消除一行的声音 if (!File.Exists("FinishOneLine.wav")) return; sound.SoundLocation = "FinishOneLine.wav"; break; case "CanNotDo": //当无法操作时 if (!File.Exists("CanNotDo.wav")) return; sound.SoundLocation = "CanNotDo.wav"; break; } sound.Play(); } 要播放的时候调用PlaySound()方法即可 。
其实步骤很简单 , 先引用System.Media空间 , 然后创建一个SoundPlayer 对象 , 用SoundLocation 属性设置声音文件的地址 , 然后调用Play()方法即可播放 。不过注意 , 这个类可以播放的声音格式只有Wav文件 。
保存游戏设置: 在游戏中经常要保存用户自定义的设置 。本游戏通过写进ini文件来保存 。
2.怎样用C语言写俄罗斯方块,求指教,谢谢首先你要下载vc++ , 初学者可以用vs98安装好后在项目中可以添加如下代码#include "graphics.h"#include #include int gcW = 20, gcColor[] = {DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA,MAGENTA, YELLOW};struct tetris { int _pool[16][32], (*pool)[32], tmap[8][4][16]; int x, y, s, st, t;}gt;void trsInit() { int sp[8][4] = {{15,4369},{23,785,116,547},{71,275,113,802}, {39,305,114,562},{54,561},{99,306},{51,51},{-1}}; int *p, i, j, b; for (p = sp[0]; *p >= 0; ++p) if ( *p == 0 ) *p = p[-2]; gt.pool = >._pool[4]; for (j = 0; j >= 1; memset(gt._pool, -1, sizeof(gt._pool)); for (i = 0; i > 5), cy = y + (m[i] & 31); if (gt.pool[cx][cy]) if (c == 2) gt.pool[cx][cy] = 0; else return 0; if (c==1) gt.pool[cx][cy] = sp[i]; } return 1;}int trsScene() { int x, y = 0; gt.s = random(7) + 1, gt.st = gt.t = 0; gt.x = 4, gt.y = 0; for (--gt.t ; ; delay(10), --gt.t) { int k = 0; while (kbhit()) { k = getch(); if (k == 27) return 0; if (k == 'A' || k == 'a') { if (trsCopy(gt.tmap[gt.s][gt.st], gt.x-1, gt.y, 0)) --gt.x; } else if (k == 'D' || k == 'd') { if (trsCopy(gt.tmap[gt.s][gt.st], gt.x+1, gt.y, 0)) ++gt.x; } else if (k == 'W' || k == 'w') { if (trsCopy(gt.tmap[gt.s][(gt.st+1) % 4], gt.x, gt.y, 0)) gt.st = (gt.st+1) % 4; } } if (k == 'S' || k == 's' || gt.t 0; --y) { for (x = 0; gt.pool[x][y] > 0; ++x); if (gt.pool[x][y] 0; --k) for (x = 0; gt.pool[x][0] >= 0; ++x) gt.pool[x][k] = gt.pool[x][k-1]; } return 1; } } trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y, 1); for (x = 0; gt.pool[x][0] >= 0; ++x) { for (y = 1; gt.pool[x][y] >= 0; ++y) { setfillstyle(1, gcColor[gt.pool[x][y]]); bar(201 + x*gcW, 1 + y*gcW, 200 + gcW + x*gcW, gcW + y*gcW); } } trsCopy(gt.tmap[gt.s][gt.st], gt.x, gt.y, 2); }}int main() { int g = DETECT, m = 0; initgraph(&g, &m, ""); randomize(); trsInit(); while (trsScene()); return 0;} 。
3.用c语言编写俄罗斯方块程序 求详解俄罗斯方块C源代码#include #include #include #include #define ZL 4 //坐标增量 ,  不使游戏窗口靠边#define WID 36 //游戏窗口的宽度#define HEI 20 //游戏窗口的高度int i,j,Ta,Tb,Tc; // Ta,Tb,Tc用于记住和转换方块变量的值int a[60][60]={0}; //标记游戏屏幕各坐标点:0,1,2分别为空、方块、边框int b[4]; //标记4个"口"方块:1有 , 0无 , 类似开关int x,y, level,score,speed; //方块中心位置的x,y坐标 , 游戏等级、得分和游戏速度int flag,next; //当前要操作的方块类型序号 , 下一个方块类型序号void gtxy(int m, int n); //以下声明要用到的自编函数void gflag( ); //获得下一方块序号void csh( ); //初始化界面void start( ); //开始部分void prfk ( ); //打印方块void clfk( ); //清除方块void mkfk( ); //制作方块void keyD( ); //按键操作int ifmov( ); //判断方块能否移动或变体void clHA( ); //清除满行的方块void clNEXT( ); //清除边框外的NEXT方块int main( ){ csh( ); while(1) {start( ); //开始部分 while(1) { prfk( ); Sleep(speed); //延时 clfk( ); Tb=x;Tc=flag; //临存当前x坐标和序号 , 以备撤销操作 keyD( ); y++; //方块向下移动 if (ifmov( )==0) { y--; prfk( ); dlHA( ); break;} //不可动放下 , 删行 , 跨出循环 } for(i=y-2;i