找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 9948|回复: 0

俄罗斯方块

[复制链接]
发表于 2009-5-11 14:01:46 | 显示全部楼层 |阅读模式
TETRIS
大概一年半以前闲着无聊,于是就写了一个俄罗斯方块自娱自乐,程序运行如下图1所示:
" {( V% D  ]- T
1! G) D3 n/ G* E% N
完整的source code可以在附件下载。该程序使用WTL实现的,代码本身非常简单,无非是一些碰撞,变形等情况的判断调整。比较有意思的是程序使用了Factory Method用于创建方块,控制方块的变形。创建方块部分的设计类图如下所示:
9 O3 y3 w! a4 m
8 Q- W. \" t6 Z/ p/ `) y
& R/ ?. J; x- W
Factorycode如下:; c1 N+ w$ o$ B1 ~: `; T
/ U! f. O. s' b) g) J
/*************************************. l5 A" G" F$ U# y; q/ E
" k! d0 `( _  R/ j
* author:hgf_starlovecpp@hotmail.com

, c6 {3 e8 t1 E/ b8 F, ~+ o1 o, q3 D, A5 e$ L5 F( i# t3 q
* version:1.0

! E4 _# s4 i! j! W% L2 t2 c0 `1 Q1 S
* description: just for fun

1 W1 K8 n' \; B+ H0 |. Q
* ]. f4 A+ G* y1 Q/ r$ ^* todo: hard code exists need to fixed
" @1 C( ~4 z, |& a5 v

' {/ `$ y, e1 v; Y**************************************/
4 X' ^( C- Q% w

% V( z. [3 r* W# A#pragma once' N- K% }* ]9 W* k# n8 M- k( W( b
#include <map>/ U2 s6 C$ Z& H+ \6 J
#include "Tetris.h"5 X0 Z+ g( z7 Z: F
#include "OneTetris.h"
# Y! Z- N3 T+ u1 c: Z#include "TwoTetris.h"
0 c! M# [) ]. ^3 t" s#include "ThreeTetris.h") w9 K9 x1 s  u* u. c
#include "FourTetris.h"
: d  h2 r9 B1 r#include "FiveTetris.h"3 z$ N2 N  |; t- K3 d
#include "SixTetris.h"
! L/ W& Z7 B- N4 e" r+ L#include "SevenTetris.h"% C, v) O, e; e

3 L6 Q0 X; u! u& [; D! ^: H( iclass TetrisFactory) ?; C  Y; k0 r! F. C
{
! @7 O1 y0 K2 u7 R4 _' Q$ j  h; Hpublic:
% X6 Q5 d4 H2 f  A; C # g0 I+ q, V2 b
- c* j& |: s9 O7 ?  d& G
TetrisFactory(
void)
/ [! ~; w2 E: X

7 C; ]- H/ V: U1 _/ b{

/ ~$ I5 F% Y0 U; B( {9 I2 w
+ |1 \+ ~+ h" jm_sel2TetrisMap[0] = &TetrisFactory::CreateOneTetris;

$ H& r' [2 \! A) t( J7 J7 }  T) [) Q4 y4 V
m_sel2TetrisMap[1] = &TetrisFactory::CreateTwoTetris;

! z# q4 _  Y$ }5 M( ~7 j+ @) C7 A. j: p2 D1 h0 m. J
m_sel2TetrisMap[2] = &TetrisFactory::CreateThreeTetris;
3 B" V3 [) p+ H8 \$ U
7 K. `2 D4 l! f# |5 k
m_sel2TetrisMap[3] = &TetrisFactory::CreateFourTetris;
* w* h+ `1 ]! G* h" b7 p5 v3 h
& T6 N! [  f2 a. y
m_sel2TetrisMap[4] = &TetrisFactory::CreateFiveTetris;

( h, U  e& H. L5 [% {/ @% r. {0 w$ |( o  L8 \- s  H
m_sel2TetrisMap[5] = &TetrisFactory::CreateSixTetris;

- n# \; m  S3 @) `1 Z7 M1 v7 C7 Q" F5 J
m_sel2TetrisMap[6] = &TetrisFactory::CreateSevenTetris;

; W; j8 C9 p1 I# \7 Z4 G, k: t. P
}

6 a5 R$ f3 ~( i9 N- c& I/ [public:" z7 T; I5 f; n* I  z
9 U( ]6 l3 I- ^0 H3 X
7 C0 ^3 Y6 _% J4 u
~TetrisFactory(
void)
! r& Q8 l/ |- U$ Q& p
% P2 P2 t, g1 B! o, l6 S
{

% P! M, s$ S- M2 C/ p8 Y6 x5 J" H* J/ @* l: @& z' B1 n
}

% G. l( g5 p  ^5 X: D* f& q3 q* S2 p2 X, ]. O3 _
Tetris* CreateTetris(
char sel)
' o/ Q9 [, @2 E- C( ]3 U
* C. ]! _2 c: {4 k: \3 M# q5 O
{

4 V8 H. e, ]; j! ?  X  w" N& m                        return (this->*(m_sel2TetrisMap.find(sel)->second))();
5 Z2 d: o  I% N( [
0 F6 k7 a- Q" ~+ _# Z}
7 g4 _/ C8 r( f, _( a
private:
6 d7 F5 G; c3 y. _, `% J% {) A  t% h  N' k! \; z

! @1 y, O( _7 l& r( u( _  a
) r( O; N3 w! L  G! T! mTetris* CreateOneTetris()
% M: O  h& w  u! j. V& ~* G

0 A1 E0 F. d% t{

2 G5 D( q% s6 I$ a, ^  I7 T                        static OneTetris tetris;+ \3 R9 N0 d0 _& v  I

9 Q, S" Z5 D  n, d# [tetris.InitPos();

1 H1 N' I/ T/ c# K. I8 p0 \                        return & tetris;' [) g- ~: [. Z5 Z- f3 S) v, y3 w

% ~( y/ A+ ^* T* w}
' G# F. r; Z2 }9 `) E5 l- G- h" `- ^

" ~* Q( C; @  Q" [! q% q3 C& ^

; a! W% b( |0 l+ q% }
. V7 }( J8 K# s, yTetris* CreateTwoTetris()
" I# ?* w. J4 A: j# ?. k

6 `  m+ J$ j. _1 K4 Q{
, O- x# ~" J. j4 ^: {5 b
                        static TwoTetris tetris;
# f7 B  U2 @/ ~, ~6 N9 t! _+ g0 V
: D* e. }0 o4 ktetris.InitPos();

0 ?4 ]% B* \: i+ c2 E) U                        return & tetris;
6 O; V# s+ X6 _# [
  D7 ]- n( A0 g) X4 O6 W/ O4 [" f}
& F- L) ^( y9 [0 u, P4 `

% @: z# C- P  _! \$ o

* Y- N3 l1 n& [! q- U" e9 B* G
7 d! s& {3 j7 T" d' F; hTetris* CreateThreeTetris()
6 v4 ^+ ?9 f, \, H4 j

0 c8 h3 ~/ T6 @9 o$ _3 {: {{

7 x" \. @; A! e' x: E1 @1 \5 j                        static ThreeTetris tetris;
2 t  w9 _- d# q. b: K! w
+ q; i/ r4 I  xtetris.InitPos();
, l& z6 H$ |0 M3 l. S0 I& F

) d7 s4 i* c# t# p* q! Z
0 d+ A. J* C6 b( Z% y
return & tetris;
8 u. M( h$ w$ h7 P

! H7 p5 O6 o% o. X; J0 {$ d; _}

# j: t( t! J: T" e" s" f& \& |' o4 E2 j" Y( P9 v
! A5 g' {; i/ n" P' j% [* ?
/ {9 u9 M0 h& y. [9 i- X
Tetris* CreateFourTetris()
. ?7 I- ?. O) u3 P1 _6 i

* y" s1 q# V+ F4 E{

+ z( s  a2 z* D" b                        static FourTetris tetris;0 o- x# o' _5 v

$ i2 a& ~. O) g0 U' n2 a- Ftetris.InitPos();
: H& L! U, a" o8 O) ?) T; t3 c9 Z$ \7 B0 l
                        return & tetris;
# m, B. S0 @; @" ~( [7 h
2 H* r& J+ S0 P}
# Q+ m, O8 N  ^6 |

7 E' v, s- v7 C9 W/ ], G$ [
" E- q( L4 V. \: Y$ p2 M% F9 G

2 c( S5 T# O# }3 ]& KTetris* CreateFiveTetris()

# A+ k6 Y; i5 M* _, V# h  F% W' K" K  B8 S5 E  }
{

- R; _0 r. g2 G, u/ D                        static FiveTetris tetris;+ p8 [+ ]  {5 x

7 I9 U5 r) c& ?) ]# Jtetris.InitPos();

" u2 l! g/ ]) u& S" z  M                        return & tetris;
2 z' h( u7 G0 n( E# C* p& z* f  w1 a, O9 w% `9 ?
}
6 {8 r& U2 m' B  {
' p# U1 ?- Q. Q0 V) T8 F. ?- G
9 h& h  H0 b, S/ E2 L) Q
Tetris* CreateSixTetris()
+ l9 `) a; k9 }  P" G* B
) S8 F; `7 j/ f) c# x8 |9 u
{

6 L; O+ q7 y! V7 d, h# B: D                        static SixTetris tetris;, A1 n' q1 G# S& E! w
5 O7 F0 B$ U) L! D0 S- J6 O
tetris.InitPos();
" w# R+ {5 n' I# O  A; C
                        return & tetris;1 Q( z$ \" r  k3 C
" W' A) z; a/ n+ |# ~7 E
}

8 ?9 ]* _6 _$ k% R/ b* Y/ J- D7 g ; H$ T6 A2 Q5 \$ H& p
3 u8 Q+ R6 V* v4 F) g
+ {4 n$ L# |, P+ O& v
- N2 q2 t. Q; l& _0 w2 j
Tetris* CreateSevenTetris()
. T6 b; r4 I9 B; I( p! c' Z# R9 p

9 V0 ^$ \: I2 V6 f* }- [{
& g4 t5 x1 e+ D" S9 x: x# e* u/ A& B
                        static SevenTetris tetris;
. }. z6 S+ O" g
! e$ M& i# _" p  G' ~/ _tetris.InitPos();

% U* Q3 r! r3 q0 N                        return & tetris;
- A% l8 P  P( I( F
( J6 }5 P) g# L- p- L}
# a; o1 T8 N% d- [
) Q4 i# G! k  s( L. ~3 ^
private:
! a- a9 g- \6 p4 |! s& w
; o, A- z; _+ i) D* {' W6 T' s            typedef Tetris*(TetrisFactory::*PMA)();
7 r& c2 S9 H. j0 z) `
# R7 ?+ v5 M4 T; _9 u$ l4 Cstd::map<
char,PMA> m_sel2TetrisMap;

5 Z- K. T6 Z+ W
5 m  k; o* u9 o3 ^
" H& z4 U/ ?- e- X5 Q0 E
};3 t, V. p& B' U; `) i9 a5 n, D7 u3 X
9 H5 X' b5 a, t+ ~7 _  S, ]
有兴趣的朋友可以下下来改改玩玩。
, h% [: g" a# J9 k" o* {9 I( Z9 I" ? 9 _1 J. ~) N( o- [
That’s all!
  x/ O! I) p1 \
0 V% O1 X) E. w7 N/ BPeter 3 F) t. g0 r8 Z; O  t8 i

5 O: K6 e* w0 t. Z[ 本帖最后由 peterhu 于 2009-5-20 09:51 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入计匠网

×
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-3-5 12:44 , Processed in 0.128110 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表