文档库 最新最全的文档下载
当前位置:文档库 › 俄罗斯方块网上代码

俄罗斯方块网上代码

俄罗斯方块网上代码
俄罗斯方块网上代码

1/***************************************************************************

***

2 **文件:Tetris.c

3 **编写者:huangminqiang

4 **编写日期:2010年12月8号

5 **简要描述:俄罗斯方块游戏

6 **修改者:

7 **修改日期:2012年12月12号第3次修改

8 **注:后期功能有些不太完善,主要因为时间原因。VC6.0环境能正常的跑起来。

9

*******************************************************************************/ 10#include

11#include

12#include

13#include

14

15//游戏窗口

16#define FrameX 4 //游戏窗口左上角的X轴坐标

17#define FrameY 4 //游戏窗口左上角的Y轴坐标

18#define Frame_height 20 //游戏窗口的高度

19#define Frame_width 18 //游戏窗口的宽度

20

21//定义全局变量

22int i,j,temp,temp1,temp2; //temp,temp1,temp2用于记住和转换方块变量的值

23int a[80][80]={0}; //标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无

图案;初始化为无图案

24int b[4]; //标记4个"口"方块:1表示有方块,0表示无方块

25

26//声明俄罗斯方块的结构体

27struct Tetris

28{

29int x; //中心方块的x轴坐标

30int y; //中心方块的y轴坐标

31int flag; //标记方块类型的序号

32int next; //下一个俄罗斯方块类型的序号

33int speed; //俄罗斯方块移动的速度

34int count; //产生俄罗斯方块的个数

35int score; //游戏的分数

36int level; //游戏的等级

37};

38

39//函数原型声明

40//光标移到指定位置

41void gotoxy(HANDLE hOut, int x, int y);

42//制作游戏窗口

43void make_frame();

44//随机产生方块类型的序号

45void get_flag(struct Tetris *);

46//制作俄罗斯方块

47void make_tetris(struct Tetris *);

48//打印俄罗斯方块

49void print_tetris(HANDLE hOut,struct Tetris *);

50//清除俄罗斯方块的痕迹

51void clear_tetris(HANDLE hOut,struct Tetris *);

52//判断是否能移动,返回值为1,能移动,否则,不动

53int if_moveable(struct Tetris *);

54//判断是否满行,并删除满行的俄罗斯方块

55void del_full(HANDLE hOut,struct Tetris *);

56//开始游戏

57void start_game();

58

59

60void main()

61{

62 //制作游戏窗口

63 make_frame();

64 //开始游戏

65 start_game();

66}

67

68/******光标移到指定位置

**************************************************************/

69void gotoxy(HANDLE hOut, int x, int y)

70{

71 COORD pos;

72 pos.X = x; //横坐标

73 pos.Y = y; //纵坐标

74 SetConsoleCursorPosition(hOut, pos);

75}

76

77/******制作游戏窗口

******************************************************************/ 78void make_frame()

79{

80HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //定义显示器句柄变量81

82 gotoxy(hOut,FrameX+Frame_width-5,FrameY-2); //打印游戏名称

83 printf("俄罗斯方块");

84 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7); //打印选择菜单

85 printf("**********下一个方块:");

86 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);

87 printf("**********");

88 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);

89 printf("↑键:变体");

90 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);

91 printf("空格:暂停游戏");

92 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);

93 printf("Esc :退出游戏");

94

95 gotoxy(hOut,FrameX,FrameY); //打印框角并记住该处已有图案

96 printf("╔");

97 gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);

98 printf("╗");

99 gotoxy(hOut,FrameX,FrameY+Frame_height);

100 printf("╚");

101 gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height); 102 printf("╝");

103 a[FrameX][FrameY+Frame_height]=2;

104 a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;

105

106for(i=2;i<2*Frame_width-2;i+=2)

107 {

108 gotoxy(hOut,FrameX+i,FrameY);

109 printf("═"); //打印上横框

110 }

111for(i=2;i<2*Frame_width-2;i+=2)

112 {

113 gotoxy(hOut,FrameX+i,FrameY+Frame_height);

114 printf("═"); //打印下横框

115 a[FrameX+i][FrameY+Frame_height]=2; //记住下横框有图案116 }

117for(i=1;i

118 {

119 gotoxy(hOut,FrameX,FrameY+i);

120 printf("║"); //打印左竖框

121 a[FrameX][FrameY+i]=2; //记住左竖框有图案

122 }

123for(i=1;i

124 {

125 gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);

126 printf("║"); //打印右竖框

127 a[FrameX+2*Frame_width-2][FrameY+i]=2; //记住右竖框有图案

129}

130

131/******制作俄罗斯方块

********************************************************************/ 132void make_tetris(struct Tetris *tetris)

133{

134 a[tetris->x][tetris->y]=b[0]; //中心方块位置的图形状态:1-有,0-无135switch(tetris->flag) //共6大类,19种类型

136 {

137case 1: //田字方块

138 {

139 a[tetris->x][tetris->y-1]=b[1];

140 a[tetris->x+2][tetris->y-1]=b[2];

141 a[tetris->x+2][tetris->y]=b[3];

142break;

143 }

144case 2: //直线方块:----

145 {

146 a[tetris->x-2][tetris->y]=b[1];

147 a[tetris->x+2][tetris->y]=b[2];

148 a[tetris->x+4][tetris->y]=b[3];

149break;

150 }

151case 3: //直线方块: |

152 {

153 a[tetris->x][tetris->y-1]=b[1];

154 a[tetris->x][tetris->y-2]=b[2];

155 a[tetris->x][tetris->y+1]=b[3];

156break;

157 }

158case 4: //T字方块

159 {

160 a[tetris->x-2][tetris->y]=b[1];

161 a[tetris->x+2][tetris->y]=b[2];

162 a[tetris->x][tetris->y+1]=b[3];

163break;

164 }

165case 5: //T字顺时针转90度方块

166 {

167 a[tetris->x][tetris->y-1]=b[1];

168 a[tetris->x][tetris->y+1]=b[2];

169 a[tetris->x-2][tetris->y]=b[3];

170break;

172case 6: //T字顺时针转180度方块173 {

174 a[tetris->x][tetris->y-1]=b[1]; 175 a[tetris->x-2][tetris->y]=b[2]; 176 a[tetris->x+2][tetris->y]=b[3]; 177break;

178 }

179case 7: //T字顺时针转270度方块180 {

181 a[tetris->x][tetris->y-1]=b[1]; 182 a[tetris->x][tetris->y+1]=b[2]; 183 a[tetris->x+2][tetris->y]=b[3]; 184break;

185 }

186case 8: //Z字方块

187 {

188 a[tetris->x][tetris->y+1]=b[1]; 189 a[tetris->x-2][tetris->y]=b[2]; 190 a[tetris->x+2][tetris->y+1]=b[3]; 191break;

192 }

193case 9: //Z字顺时针转90度方块194 {

195 a[tetris->x][tetris->y-1]=b[1]; 196 a[tetris->x-2][tetris->y]=b[2]; 197 a[tetris->x-2][tetris->y+1]=b[3]; 198break;

199 }

200case 10: //Z字顺时针转180度方块201 {

202 a[tetris->x][tetris->y-1]=b[1]; 203 a[tetris->x-2][tetris->y-1]=b[2]; 204 a[tetris->x+2][tetris->y]=b[3]; 205break;

206 }

207case 11: //Z字顺时针转270度方块208 {

209 a[tetris->x][tetris->y+1]=b[1]; 210 a[tetris->x+2][tetris->y-1]=b[2]; 211 a[tetris->x+2][tetris->y]=b[3]; 212break;

213 }

214case 12: //7字方块

216 a[tetris->x][tetris->y-1]=b[1]; 217 a[tetris->x][tetris->y+1]=b[2]; 218 a[tetris->x-2][tetris->y-1]=b[3]; 219break;

220 }

221case 13: //7字顺时针转90度方块222 {

223 a[tetris->x-2][tetris->y]=b[1]; 224 a[tetris->x-2][tetris->y+1]=b[2]; 225 a[tetris->x+2][tetris->y]=b[3]; 226break;

227 }

228case 14: //7字顺时针转180度方块229 {

230 a[tetris->x][tetris->y-1]=b[1]; 231 a[tetris->x][tetris->y+1]=b[2]; 232 a[tetris->x+2][tetris->y+1]=b[3]; 233break;

234 }

235case 15: //7字顺时针转270度方块236 {

237 a[tetris->x-2][tetris->y]=b[1]; 238 a[tetris->x+2][tetris->y-1]=b[2]; 239 a[tetris->x+2][tetris->y]=b[3]; 240break;

241 }

242case 16: //倒7字方块

243 {

244 a[tetris->x][tetris->y+1]=b[1]; 245 a[tetris->x][tetris->y-1]=b[2]; 246 a[tetris->x+2][tetris->y-1]=b[3]; 247break;

248 }

249case 17: //倒7字顺指针转90度方块250 {

251 a[tetris->x-2][tetris->y]=b[1]; 252 a[tetris->x-2][tetris->y-1]=b[2]; 253 a[tetris->x+2][tetris->y]=b[3]; 254break;

255 }

256case 18: //倒7字顺时针转180度方块257 {

258 a[tetris->x][tetris->y-1]=b[1];

259 a[tetris->x][tetris->y+1]=b[2];

260 a[tetris->x-2][tetris->y+1]=b[3];

261break;

262 }

263case 19: //倒7字顺时针转270度方块

264 {

265 a[tetris->x-2][tetris->y]=b[1];

266 a[tetris->x+2][tetris->y+1]=b[2];

267 a[tetris->x+2][tetris->y]=b[3];

268break;

269 }

270 }

271}

272

273//******判断是否可动

*************************************************************************/ 274int if_moveable(struct Tetris *tetris)

275{

276if(a[tetris->x][tetris->y]!=0)//当中心方块位置上有图案时,返回值为0,即不可移动277 {

278return 0;

279 }

280else

281 {

282if( //当为田字方块且除中心方块位置外,其他"口"字方块位置上无图案时,返回值为1,即可移动

283 ( tetris->flag==1 && ( a[tetris->x][tetris->y-1]==0 &&

284 a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) || 285 //或为直线方块且除中心方块位置外,其他"口"字方块位置上无图案时,返回值为1,即可移动

286 ( tetris->flag==2 && ( a[tetris->x-2][tetris->y]==0 &&

287 a[tetris->x+2][tetris->y]==0 && a[tetris->x+4][tetris->y]==0 ) ) || 288

289 ( tetris->flag==3 && ( a[tetris->x][tetris->y-1]==0 &&

290 a[tetris->x][tetris->y-2]==0 && a[tetris->x][tetris->y+1]==0 ) ) || 291

292 ( tetris->flag==4 && ( a[tetris->x-2][tetris->y]==0 &&

293 a[tetris->x+2][tetris->y]==0 && a[tetris->x][tetris->y+1]==0 ) ) || 294

295 ( tetris->flag==5 && ( a[tetris->x][tetris->y-1]==0 &&

296 a[tetris->x][tetris->y+1]==0 && a[tetris->x-2][tetris->y]==0 ) ) || 297

298 ( tetris->flag==6 && ( a[tetris->x][tetris->y-1]==0 &&

299 a[tetris->x-2][tetris->y]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||

300

301 ( tetris->flag==7 && ( a[tetris->x][tetris->y-1]==0 &&

302 a[tetris->x][tetris->y+1]==0 && a[tetris->x+2][tetris->y]==0 ) ) || 303

304 ( tetris->flag==8 && ( a[tetris->x][tetris->y+1]==0 &&

305 a[tetris->x-2][tetris->y]==0 && a[tetris->x+2][tetris->y+1]==0 ) ) || 306

307 ( tetris->flag==9 && ( a[tetris->x][tetris->y-1]==0 &&

308 a[tetris->x-2][tetris->y]==0 && a[tetris->x-2][tetris->y+1]==0 ) ) || 309

310 ( tetris->flag==10 && ( a[tetris->x][tetris->y-1]==0 &&

311 a[tetris->x-2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) || 312

313 ( tetris->flag==11 && ( a[tetris->x][tetris->y+1]==0 &&

314 a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) || 315

316 ( tetris->flag==12 && ( a[tetris->x][tetris->y-1]==0 &&

317 a[tetris->x][tetris->y+1]==0 && a[tetris->x-2][tetris->y-1]==0 ) ) || 318

319 ( tetris->flag==13 && ( a[tetris->x-2][tetris->y]==0 &&

320 a[tetris->x-2][tetris->y+1]==0 && a[tetris->x+2][tetris->y]==0 ) ) || 321

322 ( tetris->flag==14 && ( a[tetris->x][tetris->y-1]==0 &&

323 a[tetris->x][tetris->y+1]==0 && a[tetris->x+2][tetris->y+1]==0 ) ) || 324

325 ( tetris->flag==15 && ( a[tetris->x-2][tetris->y]==0 &&

326 a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) || 327

328 ( tetris->flag==16 && ( a[tetris->x][tetris->y+1]==0 &&

329 a[tetris->x][tetris->y-1]==0 && a[tetris->x+2][tetris->y-1]==0 ) ) || 330

331 ( tetris->flag==17 && ( a[tetris->x-2][tetris->y]==0 &&

332 a[tetris->x-2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) || 333

334 ( tetris->flag==18 && ( a[tetris->x][tetris->y-1]==0 &&

335 a[tetris->x][tetris->y+1]==0 && a[tetris->x-2][tetris->y+1]==0 ) ) || 336

337 ( tetris->flag==19 && ( a[tetris->x-2][tetris->y]==0 &&

338 a[tetris->x+2][tetris->y+1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ) 339

340 {

341return 1;

342 }

343 }

344return 0;

345}

346

347/******随机产生俄罗斯方块类型的序号

**********************************************************/

348void get_flag(struct Tetris *tetris)

349{

350 tetris->count++; //记住产生方块的个数

351 srand((unsigned)time(NULL)); //初始化随机数

352if(tetris->count==1)

353 {

354 tetris->flag = rand()%19+1; //记住第一个方块的序号

355 }

356 tetris->next = rand()%19+1; //记住下一个方块的序号

357}

358

359/******打印俄罗斯方块

**********************************************************************/ 360void print_tetris(HANDLE hOut,struct Tetris *tetris)

361{

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

363 {

364 b[i]=1; //数组b[4]的每个元素的值都为1

365 }

366 make_tetris(tetris); //制作俄罗斯方块

367for( i=tetris->x-2; i<=tetris->x+4; i+=2 )

368 {

369for(j=tetris->y-2;j<=tetris->y+1;j++)

370 {

371if( a[i][j]==1 && j>FrameY )

372 {

373 gotoxy(hOut,i,j);

374 printf("□"); //打印边框内的方块

375 }

376 }

377 }

378 //打印菜单信息

379 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+1);

380 printf("level : %d",tetris->level);

381 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+3);

382 printf("score : %d",tetris->score);

383 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+5);

384 printf("speed : %dms",tetris->speed);

385}

386

387/******清除俄罗斯方块的痕迹

****************************************************************/ 388void clear_tetris(HANDLE hOut,struct Tetris *tetris)

389{

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

391 {

392 b[i]=0; //数组b[4]的每个元素的值都为0

393 }

394 make_tetris(tetris); //制作俄罗斯方块

395for( i=tetris->x-2; i<=tetris->x+4; i+=2 )

396 {

397for(j=tetris->y-2;j<=tetris->y+1;j++)

398 {

399if( a[i][j]==0 && j>FrameY )

400 {

401 gotoxy(hOut,i,j);

402 printf(" "); //清除方块

403 }

404 }

405 }

406}

407

408/******判断是否满行并删除满行的俄罗斯方块

****************************************************/

409void del_full(HANDLE hOut,struct Tetris *tetris)

410{ //当某行有Frame_width-2个方块时,则满行

411int k,del_count=0; //分别用于记录某行方块的个数和删除方块的行数的变量412for(j=FrameY+Frame_height-1;j>=FrameY+1;j--)

413 {

414 k=0;

415for(i=FrameX+2;i

416 {

417if(a[i][j]==1) //竖坐标依次从下往上,横坐标依次由左至右判断是否满行418 {

419 k++; //记录此行方块的个数

420if(k==Frame_width-2)

421 {

422for(k=FrameX+2;k

423 { //删除满行的方块

424 a[k][j]=0;

425 gotoxy(hOut,k,j);

426 printf(" ");

427 Sleep(1);

428 }

429for(k=j-1;k>FrameY;k--)

430 { //如果删除行以上的位置有方块,则先清除,再将方块下移一个位置

431for(i=FrameX+2;i

432 {

433if(a[i][k]==1)

434 {

435 a[i][k]=0;

436 gotoxy(hOut,i,k);

437 printf(" ");

438 a[i][k+1]=1;

439 gotoxy(hOut,i,k+1);

440 printf("□");

441 }

442 }

443 }

444 j++; //方块下移后,重新判断删除行是否满行

445 del_count++; //记录删除方块的行数

446 }

447 }

448 }

449 }

450 tetris->score+=100*del_count; //每删除一行,得100分

451if( del_count>0 && ( tetris->score%1000==0 ||

tetris->score/1000>tetris->level-1 ) )

452 { //如果得1000分即累计删除10行,速度加快20ms并升一级

453 tetris->speed-=20;

454 tetris->level++;

455 }

456}

457

458/******开始游戏

******************************************************************************/ 459void start_game()

460{

461HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //定义显示器句柄变量

462struct Tetris t,*tetris=&t; //定义结构体的指针并指向结构体变量

463 unsigned char ch; //定义接收键盘输入的变量

464

465 tetris->count=0; //初始化俄罗斯方块数为0个

466 tetris->speed=300; //初始移动速度为300ms

467 tetris->score=0; //初始游戏的分数为0分

468 tetris->level=1; //初始游戏为第1关

469

470while(1)

471 {//循环产生方块,直至游戏结束

472 get_flag(tetris); //得到产生俄罗斯方块类型的序号473 temp=tetris->flag; //记住当前俄罗斯方块序号

474

475 //打印下一个俄罗斯方块的图形(右边窗口)

476 tetris->x=FrameX+2*Frame_width+6;

477 tetris->y=FrameY+10;

478 tetris->flag = tetris->next;

479 print_tetris(hOut,tetris);

480

481 tetris->x=FrameX+Frame_width; //初始中心方块x坐标482 tetris->y=FrameY-1; //初始中心方块y坐标

483 tetris->flag=temp; //取出当前的俄罗斯方块序号484

485while(1)

486 {//控制方块方向,直至方块不再下移

487 label:print_tetris(hOut,tetris);//打印俄罗斯方块488 Sleep(tetris->speed); //延缓时间

489 clear_tetris(hOut,tetris); //清除痕迹

490 temp1=tetris->x; //记住中心方块横坐标的值

491 temp2=tetris->flag; //记住当前俄罗斯方块序号

492if(kbhit())

493 { //判断是否有键盘输入,有则用ch↓接收

494 ch=getch();

495if(ch==75) //按←键则向左动,中心横坐标减2 496 {

497 tetris->x-=2;

498 }

499if(ch==77) //按→键则向右动,中心横坐标加2 500 {

501 tetris->x+=2;

502 }

503if(ch==72) //按↑键则变体即当前方块顺时针转90度504 {

505if( tetris->flag>=2 && tetris->flag<=3 )

506 {

507 tetris->flag++;

508 tetris->flag%=2;

509 tetris->flag+=2;

510 }

511if( tetris->flag>=4 && tetris->flag<=7 )

512 {

513 tetris->flag++;

514 tetris->flag%=4;

515 tetris->flag+=4;

516 }

517if( tetris->flag>=8 && tetris->flag<=11 )

518 {

519 tetris->flag++;

520 tetris->flag%=4;

521 tetris->flag+=8;

522 }

523if( tetris->flag>=12 && tetris->flag<=15 )

524 {

525 tetris->flag++;

526 tetris->flag%=4;

527 tetris->flag+=12;

528 }

529if( tetris->flag>=16 && tetris->flag<=19 )

530 {

531 tetris->flag++;

532 tetris->flag%=4;

533 tetris->flag+=16;

534 }

535 }

536if(ch==32) //按空格键,暂停

537 {

538 print_tetris(hOut,tetris);

539while(1)

540 {

541if(kbhit()) //再按空格键,继续游戏

542 {

543 ch=getch();

544if(ch==32)

545 {

546goto label;

547 }

548 }

549 }

550 }

551if(if_moveable(tetris)==0) //如果不可动,上面操作无效552 {

553 tetris->x=temp1;

554 tetris->flag=temp2;

555 }

556else //如果可动,执行操作

557 {

558goto label;

559 }

560 }

561 tetris->y++; //如果没有操作指令,方块向下移动

562if(if_moveable(tetris)==0) //如果向下移动且不可动,方块放在此处563 {

564 tetris->y--;

565 print_tetris(hOut,tetris);

566 del_full(hOut,tetris);

567break;

568 }

569 }

570

571for(i=tetris->y-2;iy+2;i++)

572 {//游戏结束条件:方块触到框顶位置

573if(i==FrameY)

574 {

575 j=0; //如果游戏结束,j=0

576 }

577 }

578if(j==0)

579 {

580 system("cls");

581 getch();

582break;

583 }

584 //清除下一个俄罗斯方块的图形(右边窗口)

585 tetris->flag = tetris->next;

586 tetris->x=FrameX+2*Frame_width+6;

587 tetris->y=FrameY+10;

588 clear_tetris(hOut,tetris);

589 }

590}

591

592

俄罗斯方块游戏的开发需求分析

俄罗斯方块游戏的开发 组长:XXX 组员:XXX XXX XXX XXX 05软件工程一班 一、课程设计的目的和意义 俄罗斯方块游戏是一个经典的小游戏,由于它简单有趣,因而得到了广泛的流行,男女老幼都适合。而俄罗斯方块游戏的设计工作复杂且富有挑战性,它包含的内容多,涉及的知识广泛,与图形界面联系较大,包括界面的显示与更新、数据收集等,在设计的过程中,必将运用到各方面的知识,这对于visualbasi语言设 计者而言,是个很好的锻炼机会。 二、系统功能设计 本系统主要设计以下几种功能 1、游戏难度选择功能 游戏难度选择界面设置在程序运行开始时,一共有九种难度供玩家选择,每选一级难度,都会相应地显示出代表该难度的图片。开始时不设置任何默认的难度,如果玩家不选难度直接按“Enter”进入,将会弹出提示框,提示其先选难度再 进入。 2、方块下落、变形功能 在整个俄罗斯方块游戏中,方块的设计是核心。这里设计了一个方块类:Square(),用来生成方块以及实现块的左移、右移、向下、变形、重画、同步显 示、初始化新块等。 3、自动升级功能 当分数累积到一定大小时,系统将自动为玩家提高难度。这里设置了每消除10行方块,就增加一级难度。当难度增加的时候,方块会相应地改变颜色,以作为 对玩家的提示。 4、游戏音乐功能 游戏开始音乐就自动播放,游戏暂停与结束时音乐相应消除。 5、获取帮助功能 这里设置了一个类,用来显示帮助,按F1键就能弹出窗口,显示游戏规则。

三、系统功能设计分析 俄罗斯方块游戏根据功能的不同,设置了如下12个类:Square,Command, GameArea,GameSetting,GameOver,Help,ImagePanel,JieMian,MyPanel, MyTimer,PlayMidi,WinListener,每个类的描述如下: 1、Square,方块类。这个类中定义了生成方块的方法,用二维数组int[][]pattern,存放7种方块的四种状态。在构造方法中以随机的形式生成方块,同时提供了以下几种方法:reset(),leftTurn(),leftMove(),rightMove(),fallDown(),assertValid(int t,int s,int row,int col),dispBlock(int s)。分别实现方块的重画、翻转、 左移、右移、下落、同步显示等功能。 2、Command,处理控制类。这是一个实现ActionListener接口的类,主要处理点击按钮事件。类中定义了三个int型变量:button_play,button_quit,button_pause,和一个boolean型的变量:pause_resume,并赋值。在GameArea类中通过事件响应,在按钮执行方法中调用其值,使用switch语句,根据不同按钮不同的值, 来响应不同的事件。 3、GameArea,游戏界面类。GameArea继承了JFrame,是俄罗斯方块的主要游 戏界面。这个类定义了GameSetting类的gameScr对象和ImagePanel类的imagepanel对象作为游戏区域面板和控制区域面板。在游戏区域,主要是根据相应格子的设置标志来显示相应的图形图片,这样就实现了俄罗斯方块的实时显 示。 4、GameSetting,游戏画布类。这个类生成的对象将作为游戏界面的方块下落区域,画布的设置为15行10列,当中的方格边长为30,类中还定义了一个二维数组int[][]scrArr作为屏幕数组,表示每一个方格。游戏区域中每一个方格是否存在游戏方块是由该方格的值来决定的,如果该方格的值为1,则表示该方格中存在游戏方块;如果该方格中的值为0,则表示该方格中不存在游戏方块,因此二维数组用于记录游戏区域中每个小方格的值。此外,类中还定义了画方块的方法,根据不同的难度画出不同颜色的方块。单击Play按钮时,系统调用initScr()方法,初始化屏幕,将屏幕数组清零。当满足满行删除的条件时,系统调用deleteFullLine()方法,进行删行加分,而且每删除十行,难度自动增加一级,方块颜色改变,并在难度显示框中相应显示。 5、GameOver,游戏结束弹出提示框类。当游戏结束时,系统弹出提示,包括玩 家分数以及询问玩家要继续游戏还是退出。 6、Help,帮助类。在游戏界面,按F1键,弹出提示窗口,获取帮助。 7、ImagePanel,背景图片类。这个类继承了JPanel类,用来作为游戏界面中控 制区域的容器,并添加图片。 8、JieMian,主界面类。这个类继承了JPanel类,作为游戏的第一个界面,也是难度选择界面。定义了9个单选按钮,当玩家未选任何难度就按Enter时,系统会弹出一个提示框,提示玩家先选难度再进入。 9、MyPanel,重写MyPanel类,使Panel的四周留空间。

C语言俄罗斯方块游戏源代码

/*学无止境*/ #include #include #include #define ESC 27 #define UP 328 #define DOWN 336 #define LEFT 331 #define RIGHT 333 #define BLANK 32 #define BOTTOM 2 #define CANNOT 1 #define CAN 0 #define MAX 30 #define F1 315 #define ADD 43 #define EQUAL 61 #define DEC 45 #define SOUNDs 115 #define SOUNDS 83 #define PAUSEP 80 #define PAUSEp 112

void Init(); void Down(); void GoOn(); void ksdown(); void Display(int color); void Give(); int Touch(int x,int y,int dx,int dy); int GeyKey(); void Select(); void DetectFill(); void GetScores(); void Fail(); void Help(); void Quit(); void DrawBox(int x,int y,int Color); void OutTextXY(int x,int y,char *String); void DispScore(int x,int y,char Ch); void DrawNext(int Color); int Heng=12,Shu=20; /*横竖*/ int Position[MAX][MAX]; int middle[MAX][MAX]; int ActH,ActS;

俄罗斯方块C语言代码

【转载】88行代码实现俄罗斯方块游戏(含讲解) 来源:https://www.wendangku.net/doc/136162889.html,/p/8 在正式阅读本文之前,请你记得你应该用娱乐的心态来看, 本代码所使用到的技巧,在工作了的人眼里会觉得很纠结,很蛋疼,很不可理喻,很丑, 注意,是你蛋疼,不关我的事 通常,写一个俄罗斯方块,往往动不动就几百行,甚至上千行,而这里只有88行 正所谓头脑风暴,打破常规。这里将使用很多不平常的手段来减少代码 以下是Win-TC可以成功编译并执行的代码(代码保证单行长度不超过80字符,如果你是Win7系统,那请看后文): 程序代码: #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 < 7; ++j) for (i = 0; i < 4; ++i) for (b = 0; b < 16; ++b) gt.tmap[j+1][i][b] = (sp[j][i] & 1) * (j + 1), sp[j][i] >>= 1; memset(gt._pool, -1, sizeof(gt._pool));

C++俄罗斯方块代码(北邮版)

#include #include #include #include #include #include "colorConsole.h" //老师的文件 void begin(); //开始游戏 void frame(); //边框设定 int * getblocks(); //方块产生 void move(int line); //移动 void drawblocks(int line); //方块显示 void clearsquare(int line); //方块擦出 void turn(int line); //方块旋转 bool isavailable(int line); //判断是否能下落 void remember(int line); //记忆方块位置 void deleteline(int line); //方块满一行消除 bool ifgameover(); //判断是否游戏结束 void end(); //游戏结束 #define up 72 #define down 80 #define left 75 #define right 77 #define esc 27 HANDLE handle; int a1[4][4]={{1},{1,1,1}}; //七种方块的二维数组 int a2[4][4]={{0,1},{1,1,1}}; int a3[4][4]={{1,1},{0,1,1}}; int a4[4][4]={{0,0,1},{1,1,1}}; int a5[4][4]={{0,1,1},{1,1}}; int a6[4][4]={{1,1,1,1}}; int a7[4][4]={{1,1},{1,1}}; int row=0; //列数 int score=0; int level=0; int * block1=NULL; int * block2=NULL; int * block3=NULL; int coordinate[12][18]={0}; //坐标数组,边框12*18(最后一行,两边边框计算在内) int judge=0;

俄罗斯方块C语言程序设计报告

C语言课程设计报告 俄罗斯方块程序设计报告 一、问题描述 俄罗斯方块(Tetris,俄文:Тетрис)是一款电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。 在本次设计中,要求支持键盘操作和若干种不同类型方块的旋转变换,并且界面上显示下一个方块的提示以及当前的玩家的得分,随着游戏的进行,等级越高,游戏难度越大,即方块的下落速度越快,相应的等级,等级越高,为玩家提供了不同的选择。 二、功能分析 I、俄罗斯方块游戏需要解决的问题包括: ⑴、随机产生方块并自动下移 ⑵、用Esc键退出游戏 ⑶、用键变体 ⑷、用键和键左右移动方块 ⑸、用空格键使游戏暂停

⑹、能正确判断满行并消行、计分、定级别 ⑺、设定游戏为不同级别,级别越高难度越大 II、俄罗斯方块游戏需要设计的功能函数包括: ⑴、声明俄罗斯方块的结构体 ⑵、函数原型声明 ⑶、制作游戏窗口 ⑷、制作俄罗斯方块 ⑸、判断是否可动 ⑹、随机产生俄罗斯方块类型的序号 ⑺、打印俄罗斯方块 ⑻、清除俄罗斯方块的痕迹 ⑼、判断是否满行并删除满行的俄罗斯方块 三、程序设计 1、程序总体结构设计 (1)、游戏方块预览功能。在游戏过程中,游戏界面右侧会有预览区。由于在此游戏中存在多种不同的游戏方块,所以在游戏方块预览区域中显示随机生成的游戏方块有利于游戏玩家控制游戏的策略。 (2)、游戏方块控制功能。通过各种条件的判断,实现对游戏方块的左移、右移、自由下落、旋转功能,以及行满消除行的功能。 (3)、游戏数据显示功能。在游戏玩家进行游戏过程中,需要按照一定的游戏规则给玩家计算游戏分数。例如,消除一行加100分,游戏分数达到一定数量

俄罗斯方块游戏设计

俄罗斯方块游戏设计 俄罗斯方块游戏设计 JAVA语言 Eclipse平台开发 以下为开发过程需要使用的packages及其中classes and methods JAVA语言和C语言、C++语言很接近,它是一种面向对象、独立于开发平台的高级编程语言。它独特的语法规则和类库是组成JAVA技术的两个重要部分。 假期总结: 坦白讲,这个暑假我没花多少时间在学习计算机编程技术上面。在刚放暑假的时候,我去图书馆借了七八本编程书,有Visual C++、C#、以及JAVA方面的书,信誓旦旦这个暑假要好好研究技术。然而,执行力是我很缺乏的一个缺陷吧。在家贪图一时之爽,基本上没去翻书学习,久而久之,就越害怕打开书本。后期提前回学校,学了一点点JAVA。回想整个大一,包括这个暑假,我很羞愧。自己在过去的一年里浪费了太多的时间,对成绩抱着一种比较无所谓的心态,对于学习也是,可想而知,与别人的差距也就越来越大,这也是我现在不愿意看到的。在往后的日子,我不敢保证自己能如何刻苦勤奋地学习,但是,至少我会尽力做到问心无愧,我会清楚自己要什么,并且行动起来。 一、Package cn.itcast.tetris.controller 控制器 控制Ground, Snake, Food 负责游戏的逻辑 处理按键事件

一、Package cn.itcast.tetris.entities

1、Class Ground: public class Ground extends https://www.wendangku.net/doc/136162889.html,ng.Object 可以叫做地形, 或地面 维护障碍物的信息 可以使用提供的 addObstacle(int, int) 和addStubbornObstacle(int ,int) 方法添加障碍物。 可以通过setObstacleColor(), setStubbornObstacleColor() 或setGriddingColor()方法更改障碍物或网格的颜色 通过setDrawGridding() 方法设置是否画空白(网格) 用 setColorfulSupport() 方法设置是否支持彩色显示 覆盖 drawObstacle(Graphics, int, int, int, int) 方法可以改变障碍物的显示方式

用vb编写图形

来个房子的吧: Private Sub Command1_Click() Dim i As Integer, n As Integer Cls n = 5 For i = 1 To 3 Print String(4 - i, " ") & String(2 * i - 1, "*") & String(10, "*") Next For i = 1 To 4 Print " * *" & String(9, " ") & "*" Next Print " " & String(15, "*") End Sub VB 填充封闭区间 Private Declare Function FloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Sub Command1_Click() Dim hBrush As Long Dim OldhBrush As Long hBrush = CreateSolidBrush(RGB(0, 0, 255))'要填充的颜色 OldhBrush = SelectObject(Me.hdc, hBrush) Me.Line (10, 10)-(100, 100), RGB(255, 0, 0), B FloodFill Me.hdc, 20, 20, RGB(255, 0, 0)'区间边界颜色 SelectObject Me.hdc, OldhBrush DeleteObject hBrush End Sub

基于Java语言的俄罗斯方块游戏课程设计

基于Java语言的 俄罗斯方块游戏课程设计 学院:X 专业:X 班级:X 姓名:X 学号:X 指导老师:X

摘要 第一章引言 1.1 设计的课题背景 1.2 研究课题的任务,目的和意义 1.2.1 课题的任务 1.2.2 课题的目的 1.2.3 课题的意义 1.3 系统的主要功能和特色 1.3.1 系统的主要功能 1.3.2 系统的特色 第二章系统需求分析 2.1 本课题研究现状分析 2.2 要解决的问题及解决方法 2.3 系统设计的主要内容、目标 2.3.1 系统设计的主要内容 2.3.2 设计的目标 2.4 使用的关键技术 第三章系统的详细设计 3.1 系统的总体系结构 3.2 系统各模块的界面设计及实现 3.2.1 主窗体程序模块设计与实现 3.2.2 方块变换模块设计与实现 3.2.3 满行消除并计分模块设计与实现第四章系统的安装与测试 4.1 系统的安装 4.1.1 系统的运行环境 4.1.2 系统的安装 4.2 系统的测试 结束语

参考文献 附录:有关程序代码

摘要: 在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。为此,我设计了一款简单的俄罗斯方块JAVA 游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我学到编程技术。 关键字:俄罗斯方块游戏、Java语言、编程

俄罗斯方块游戏设计报告

C语言课程设计 报告 设计题目:俄罗斯方块游戏设计 院系: 班级: 学号: 姓名: 指导教师: 设计地点: 开课时间:

学生姓名成绩 评语: 指导教师(签名) 年月日

目录 1.设计目的和任务....................................................................................................................................... - 1 - 1.1目的: .............................................................................................................................................. - 1 - 1.2任务: .............................................................................................................................................. - 1 - 2.开发环境.................................................................................................................................................... - 1 - 2.1硬件环境:.................................................................................................................................... - 1 - 2.2软件环境:.................................................................................................................................... - 1 - 3.设计题目...................................................................................................................................................... - 2 - 3.1题目名称:.................................................................................................................................... - 2 - 3.2题目详细描述: ........................................................................................................................... - 2 - 3.3功能要求: ............................................................................................................................................ - 2 - 4.相关技术以及知识点.......................................................................................................................... - 3 - 4.1编写BLOCK类:............................................................................................................................... - 3 - 4.2 PATHGRADIENTBRUSH 类: ........................................................................................................ - 3 - 4.3 RANDOM类:.................................................................................................................................. - 3 - 4.4 GDI图形处理: ........................................................................................................................... - 3 - 5. 设计与实现 .............................................................................................................................................. - 4 - 5.1 设计流程图................................................................................................................................... - 4 - 5.2 游戏主体界面 .............................................................................................................................. - 4 - 5.3 游戏图形界面 ............................................................................................................................ - 11 - 5.4 图形的移动与消行 ................................................................................................................... - 13 - 5.5 得分的实现................................................................................................................................. - 15 -6.总结 ........................................................................................................................................................ - 16 -7.参考资料................................................................................................................................................ - 16 -

C语言课程设计俄罗斯方块源代码

1、新建“.h”头文件,将“头文件” 代码粘贴至其中, 2、新建“.c”源文件,将“源代码” 代码粘贴到其中。 3、新建空白工程,将头文件和源代码 添加进去,调试使用。 //头文件 //1.自定义枚举类型,定义7种形态的游戏方块 typedef enum tetris_shape { ZShape=0, SShape, LineShape, TShape, SquareShape, LShape, MirroredLShape }shape; //2.函数声明 //(1)操作方块函数 int maxX();//取得当前方块的最大x坐标 int minX();//取得当前方块的最小x坐标 void turn_left();//当前方块逆时针旋转90度 void turn_right(); int out_of_table(); void transform(); int leftable(); int rightable(); int downable(); void move_left(); void move_right(); //(2)操作游戏桌面的函数 int add_to_table();

void remove_full(); //(3)控制游戏函数 void new_game(); void run_game(); void next_shape(); int random(int seed); //(4)绘图函数 void paint(); void draw_table(); //(5)其他功能函数 void key_down(WPARAM wParam); void resize(); void initialize(); void finalize(); //(6)回调函数,用来处理Windows消息 LRESULT CALLBACK WndProc (HWND,UINT,WPARAM,LPARAM); //源代码 //1.文件包含 #include #include #include #include"tetris.h" //2.常量定义 #define APP_NAME "TETRIS" #define APP_TITLE "Tetris Game" #define GAMEOVER "GAME OVER" #define SHAPE_COUNT 7 #define BLOCK_COUNT 4 #define MAX_SPEED 5 #define COLUMS 10 #define ROWS 20 #define RED RGB(255,0,0)

俄罗斯方块完整源代码

//不多说,直接可以拷贝下面的东西,就可以运行。 package day04; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.applet.*; import https://www.wendangku.net/doc/136162889.html,ng.String.*; import https://www.wendangku.net/doc/136162889.html,ng.*; import java.io.*; public class ERSBlock extends JPanel implements ActionListener,KeyListener//应该是继承JPanel { static Button but[] = new Button[6]; static Button noStop = new Button("取消暂停"); static Label scoreLab = new Label("分数:"); static Label infoLab = new Label("提示:"); static Label speedLab = new Label("级数:"); static Label scoreTex = new Label("0"); static Label infoTex = new Label(" "); static Label speedTex = new Label("1");

static JFrame jf = new JFrame(); static MyTimer timer; static ImageIcon icon=new ImageIcon("resource/Block.jpg"); static JMenuBar mb = new JMenuBar(); static JMenu menu0 = new JMenu("游戏 "); static JMenu menu1 = new JMenu("帮助 "); static JMenuItem mi0 = new JMenuItem("新游戏"); static JMenuItem mi1 = new JMenuItem("退出"); static JMenuItem mi1_0 = new JMenuItem("关于"); static JDialog dlg_1; static JTextArea dlg_1_text = new JTextArea(); static int startSign= 0;//游戏开始标志 0 未开始 1 开始 2 暂停 static String butLab[] = {"开始游戏","重新开始","降低级数","提高级数","游戏暂停","退出游戏"}; static int game_body[][] = new int[19][10]; static int game_sign_x[] = new int[4];//用于记录4个方格的水平位置 static int game_sign_y[] = new int[4];//用于记录4个方格的垂直位置

俄罗斯方块游戏

课程设计说明书 课程名称:高级语言程序设计 设计题目:俄罗斯方块游戏 院部:计算机科学与信息工程学院 学生姓名: 学号: 专业班级:物联网工程 指导教师: 2015年6月 课程设计任务书

目录 一前言 (4) 二需求分析 (4) 三概要设计 (5) 四详细设计 (7) 五改进或增加功能模块说明 (8) 六程序测试 (8) 七课程设计总结 (11) 八致谢 (11) 九参考文献 (12) 十源程序 (12)

俄罗斯方块游戏 一前言 C++程序设计牵涉到面向对象程序设计的理论、C++语言的语法以及算法等3个方面的内容,其中每一方面都包含十分丰富的内容,都可以分别单独成论。显然在一个程序中深入、详细地介绍以上3个方面的知识是不可能的,必须把它们有机地结合起来,综合应用。不同的书对此采取不同的写法,侧重点有所不同,各有道理,也各有优缺点,适合于不同的读者。需要在教学实践中检验,取长补短,不断完善。 作者认为:要进行C++程序设计当然需要了解面向对象程序设计的有关概念,但是本课程毕竟不是一门面向对象程序设计的理论课程,在本书中不是抽象地介绍面向对象程序设计的理论,而是在介绍C++语言的特点和应用过程中自然地引出面向对象程序设计的有关概念,通过C++的编程过程理解面向对象程序设计方法。在介绍程序设计过程中,介绍有关的算法,引导读者思考怎样构造一个算法。编写程序的过程就是设计算法的过程。 要用C++编程序,最基本的要求是正确掌握和运用C++。由于C++语法复杂,内容又多,如果对它缺乏系统的了解,将难以真正应用,编出来的程序将会错误百出,编译出错,事倍功半。本书的做法是全面而系统地介绍C++的主要特点和功能,引导读者由简而繁地学会编写C++程序。有了C++编程的初步基础后,再进一步提高,掌握更多更深入的算法。这样的方法可能符合大多数学习者的情况,降低了学习难度。 程序设计是一门实践性很强的课程,只靠听课和看书是学不好的。衡量学习好坏的标准不是“懂不懂”,而是“会不会干”。因此必须强调多编程,多上机实践。考虑到不同学校、不同专业、不同读者对学习C++有不同的要求。 二需求分析 1 要求 (1)用C语言实现程序设计;

俄罗斯方块源代码

1. using System; using System.Collections.Generic; using System.Text; using System.Drawing;//add namespace俄罗斯方块 { public class Block { private short width; private short height; private short top; private short left; private int ID; //方块部件的ID public int[,] shape;//存储方块部件的形状,0为空白,1为有砖块 public Block()//构造函数 { Random randomGenerator = new Random(); int randomBlock = randomGenerator.Next(1, 6);//产生1—4的数 this.ID = randomBlock; switch (this.ID) { case 1: //横条形 this.Width = 4; this.Height = 1; this.Top = 0; this.Left = 3; shape = new int[this.Width, this.Height]; shape[0, 0] = 1; shape[1, 0] = 1; shape[2, 0] = 1; shape[3, 0] = 1; break; case 2://正方形 this.Width = 2; this.Height = 2; this.Top = 0; this.Left = 4; // Creates the new shape for this block. shape = new int[this.Width, this.Height]; shape[0, 0] = 1; shape[0, 1] = 1; shape[1, 0] = 1;shape[1, 1] = 1; break; case 3://T形 this.Width = 3; this.Height = 3; this.Top = 0; this.Left = 4; // Creates the new shape for this block. shape = new int[this.Width, this.Height]; shape[0, 0] = 1; shape[1, 0] = 1; shape[2, 0] = 1; shape[1, 1] = 1; shape[1, 2] = 1; break; case 4://L形 this.Width = 2; this.Height = 3; this.Top = 0; this.Left = 4;

VC++ 6.0 MFC 俄罗斯方块 自动求解 代码 源程序

#include #include #include #include #define tDown 1 //方块下落定时器的标识(编号) #define tPaint 2 //重绘定时器的标识(编号) #define tDownTime 500 //方块下落一行位置的时间间隔 #define tPaintTime 50 //窗口重绘的时间间隔 #define ROW 24 //地图的行数目(第23行不用) #define COL 14 //地图的列数目(第0列和第13列不用) #define MAX_CLASS 7 //方块形状数目 #define LEN 20 //每个方格大小为20×20像素 #define StartY -1 * LEN + 5 //-15,绘制俄罗斯方块地图时的边界起始位置#define StartX -1 * LEN + 5 //-15 int iDeleteRows = 0; //总共清除的行 int iTotalNum = 0; //总得分 char WindowTxt[100] = "俄罗斯方块游戏自动求解已关闭"; //窗口标题 char s1[] = "关闭", s2[] = "启动"; //用于启动/关闭自动求解功能时显示不同的标题

bool bAuto; //是否自动求解的标志 bool Pause; //是否暂停的标志 int Map[ROW][COL]; //俄罗斯方块的地图(被占据的方格为1,否则为0) int CurrentBox[4][4]; //当前落下的方块 int CurrentY, CurrentX; //当前落下方块的当前位置(指左上角位置) int NextBox[4][4]; //下一个将落下的方块 int Box[MAX_CLASS][4][4] = //7种方块形状 { { {0,0,0,0}, {1,1,1,1}, {0,0,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}, {1,1,0,0}, {0,1,1,0}, {0,0,0,0} }, { {0,0,0,0}, {0,1,1,0}, {1,1,0,0}, {0,0,0,0} }, { {0,1,1,0}, {0,0,1,0}, {0,0,1,0}, {0,0,0,0} }, { {0,1,1,0}, {0,1,0,0}, {0,1,0,0}, {0,0,0,0}

俄罗斯方块

俄罗斯方块

俄罗斯方块小游戏姓名:罗君 学号:102054221 指导老师:孔老师 日期:2011/12/22

1设计描述 这个程序是由MFC所做的小游戏:俄罗斯方块,俄罗斯方块也就是人们广泛称为积木的游戏,它是利用一些形状各异小方块却是用正方形组成的方块,当然在我所做的这个程序里,我用了有着7种不同的方块。,经过不同位置不同角度的变化之后,堆积在一起的一种智力游戏。而当同一行被小方格填满时,那一行也就跟着消失,此时玩家就可以得到一分,这里所设置的分值为,没消去一行,便可以得到一分,而主界面的背景被设为了12行及18列,当所堆积的小方块的垂直高度等于界面背景的高度时,这时就会在视图类中弹出一个消息对话框“游戏已经结束”。这里所要实现的就是这样一个小游戏,不过出于达到为了更加使游戏玩家得到娱乐的放松,我已经为此游戏添加了动听的游戏的背景音乐。还有就是当程序运行时,首先出现在客户区的是一幅封面位图,当游戏玩家点击文件菜单中的开始子菜单时,游戏正式进入游戏界面。 而从我们编程的角度讲,我们只需要提供各种方块的图形,提供几个键盘操作键以供方块的形状和位置的变化,提供几个功能函数以供游戏的正常进行。各种方块图形:利用数组定形,然后利用随机函数随机地不按顺序地按游戏的需要而出现。键盘操作键:就是四个方向键。其中左、右、下三个键意思一样,上键的功能不是使方块向上,而是使方块的下落角度改变。 2设计分析 2.1由于所选封面的位图的大小的限制,贴的客户区的位图不能完全覆盖整个客户区,考虑到游戏运行的效果,所以必须对运行后客户区大小重新作出界定,处于这种原因,所以应该在CMainFrame类中的PreCreateWindow (CREATESTRUCT& cs)函数中添加代码:cs.cx=500,cs.cy=590;再者就是一个有戏必须有开始,暂停和结束的按钮,为了实现这一功能,我做了如下程序,将菜单栏中的文件菜单项下的子菜单项都删除,重新为该菜单项添加3个子菜单项,分别为开始(IDC_MENU_START),暂停(IDC_MENU_PAUSE),退出(IDC_MENU_EXIT).并分别给这三个菜单项添加Command命令响应,并让CView类接收此命令响应消息。 2.2 资源编辑 添加位图: 封面:IDB_BITMAP1

相关文档
相关文档 最新文档