前言

本来可以从俄罗斯方块控制台版改一版, 将UI接口换掉, 变成SDK版.

正好放假了, 有时间.

就用了一个星期来重头做一个新版, 享受一下静下心来, 有条不紊干活的感觉^_^

这个工程用来验证SDK编程中对消息循环, UI绘制, 局部刷新的理解.

做这么个东西, 以自己为用户, 玩起来还是挺耐玩.

完全靠4个箭头键实现左移, 右移, 旋转, 下落, 消行或固定

考虑到自己智商比较挫, 没有加自动落下的实现. 毕竟每个人都不喜欢输的感觉.

如果真是全心投入, 如果输了, 应该能总结出输的原因 : "做人心不能贪, 不能眼高手低, 如果有问题, 要立即解决, 不要指望时来运转".

反正输了之后, 能总结的失败原因能总结出来一堆.

正宗方块的资料

UI预览

工程下载

vc6sp6 + win7x64
工程下载点:俄罗斯方块SDK版

工程预览

4格骨牌数据,没有搞成内建数据类型的数组,封装成了类的数组, 如果要加入新的异形骨牌,容易维护.
我觉得这个数组比上次做的好, 增加再多的数据,也不会显的乱.
  1. CTetrominoData m_TetrominoData[TETROMINODATA_ARY_SIZE];
 
  1. void CRussiaBlock::TetrominoDataInit() {
  2. /// I型(方向0,90,180,270)
  3. m_TetrominoData[0] = CTetrominoDataI0();
  4. m_TetrominoData[1] = CTetrominoDataI90();
  5. m_TetrominoData[2] = CTetrominoDataI180();
  6. m_TetrominoData[3] = CTetrominoDataI270();
  7. m_TetrominoData[0].SetRotateL(&m_TetrominoData[3]);
  8. m_TetrominoData[0].SetRotateR(&m_TetrominoData[1]);
  9. m_TetrominoData[1].SetRotateL(&m_TetrominoData[0]);
  10. m_TetrominoData[1].SetRotateR(&m_TetrominoData[2]);
  11. m_TetrominoData[2].SetRotateL(&m_TetrominoData[1]);
  12. m_TetrominoData[2].SetRotateR(&m_TetrominoData[3]);
  13. m_TetrominoData[3].SetRotateL(&m_TetrominoData[2]);
  14. m_TetrominoData[3].SetRotateR(&m_TetrominoData[0]);
  15. /// O型(方向0,90,180,270)
  16. m_TetrominoData[4] = CTetrominoDataO0();
  17. m_TetrominoData[5] = CTetrominoDataO90();
  18. m_TetrominoData[6] = CTetrominoDataO180();
  19. m_TetrominoData[7] = CTetrominoDataO270();
  20. m_TetrominoData[4].SetRotateL(&m_TetrominoData[7]);
  21. m_TetrominoData[4].SetRotateR(&m_TetrominoData[5]);
  22. m_TetrominoData[5].SetRotateL(&m_TetrominoData[4]);
  23. m_TetrominoData[5].SetRotateR(&m_TetrominoData[6]);
  24. m_TetrominoData[6].SetRotateL(&m_TetrominoData[4]);
  25. m_TetrominoData[6].SetRotateR(&m_TetrominoData[7]);
  26. m_TetrominoData[7].SetRotateL(&m_TetrominoData[6]);
  27. m_TetrominoData[7].SetRotateR(&m_TetrominoData[4]);
  28. /// T型(方向0,90,180,270)
  29. m_TetrominoData[8] = CTetrominoDataT0();
  30. m_TetrominoData[9] = CTetrominoDataT90();
  31. m_TetrominoData[10] = CTetrominoDataT180();
  32. m_TetrominoData[11] = CTetrominoDataT270();
  33. m_TetrominoData[8].SetRotateL(&m_TetrominoData[11]);
  34. m_TetrominoData[8].SetRotateR(&m_TetrominoData[9]);
  35. m_TetrominoData[9].SetRotateL(&m_TetrominoData[8]);
  36. m_TetrominoData[9].SetRotateR(&m_TetrominoData[10]);
  37. m_TetrominoData[10].SetRotateL(&m_TetrominoData[9]);
  38. m_TetrominoData[10].SetRotateR(&m_TetrominoData[11]);
  39. m_TetrominoData[11].SetRotateL(&m_TetrominoData[10]);
  40. m_TetrominoData[11].SetRotateR(&m_TetrominoData[8]);
  41. /// J型(方向0,90,180,270)
  42. m_TetrominoData[12] = CTetrominoDataJ0();
  43. m_TetrominoData[13] = CTetrominoDataJ90();
  44. m_TetrominoData[14] = CTetrominoDataJ180();
  45. m_TetrominoData[15] = CTetrominoDataJ270();
  46. m_TetrominoData[12].SetRotateL(&m_TetrominoData[15]);
  47. m_TetrominoData[12].SetRotateR(&m_TetrominoData[13]);
  48. m_TetrominoData[13].SetRotateL(&m_TetrominoData[12]);
  49. m_TetrominoData[13].SetRotateR(&m_TetrominoData[14]);
  50. m_TetrominoData[14].SetRotateL(&m_TetrominoData[13]);
  51. m_TetrominoData[14].SetRotateR(&m_TetrominoData[15]);
  52. m_TetrominoData[15].SetRotateL(&m_TetrominoData[14]);
  53. m_TetrominoData[15].SetRotateR(&m_TetrominoData[12]);
  54. /// L型(方向0,90,180,270)
  55. m_TetrominoData[16] = CTetrominoDataL0();
  56. m_TetrominoData[17] = CTetrominoDataL90();
  57. m_TetrominoData[18] = CTetrominoDataL180();
  58. m_TetrominoData[19] = CTetrominoDataL270();
  59. m_TetrominoData[16].SetRotateL(&m_TetrominoData[19]);
  60. m_TetrominoData[16].SetRotateR(&m_TetrominoData[17]);
  61. m_TetrominoData[17].SetRotateL(&m_TetrominoData[16]);
  62. m_TetrominoData[17].SetRotateR(&m_TetrominoData[18]);
  63. m_TetrominoData[18].SetRotateL(&m_TetrominoData[17]);
  64. m_TetrominoData[18].SetRotateR(&m_TetrominoData[19]);
  65. m_TetrominoData[19].SetRotateL(&m_TetrominoData[18]);
  66. m_TetrominoData[19].SetRotateR(&m_TetrominoData[16]);
  67. /// S型(方向0,90,180,270)
  68. m_TetrominoData[20] = CTetrominoDataS0();
  69. m_TetrominoData[21] = CTetrominoDataS90();
  70. m_TetrominoData[22] = CTetrominoDataS180();
  71. m_TetrominoData[23] = CTetrominoDataS270();
  72. m_TetrominoData[20].SetRotateL(&m_TetrominoData[23]);
  73. m_TetrominoData[20].SetRotateR(&m_TetrominoData[21]);
  74. m_TetrominoData[21].SetRotateL(&m_TetrominoData[20]);
  75. m_TetrominoData[21].SetRotateR(&m_TetrominoData[22]);
  76. m_TetrominoData[22].SetRotateL(&m_TetrominoData[21]);
  77. m_TetrominoData[22].SetRotateR(&m_TetrominoData[23]);
  78. m_TetrominoData[23].SetRotateL(&m_TetrominoData[22]);
  79. m_TetrominoData[23].SetRotateR(&m_TetrominoData[20]);
  80. /// Z型(方向0,90,180,270)
  81. m_TetrominoData[24] = CTetrominoDataZ0();
  82. m_TetrominoData[25] = CTetrominoDataZ90();
  83. m_TetrominoData[26] = CTetrominoDataZ180();
  84. m_TetrominoData[27] = CTetrominoDataZ270();
  85. m_TetrominoData[24].SetRotateL(&m_TetrominoData[27]);
  86. m_TetrominoData[24].SetRotateR(&m_TetrominoData[25]);
  87. m_TetrominoData[25].SetRotateL(&m_TetrominoData[24]);
  88. m_TetrominoData[25].SetRotateR(&m_TetrominoData[26]);
  89. m_TetrominoData[26].SetRotateL(&m_TetrominoData[25]);
  90. m_TetrominoData[26].SetRotateR(&m_TetrominoData[27]);
  91. m_TetrominoData[27].SetRotateL(&m_TetrominoData[26]);
  92. m_TetrominoData[27].SetRotateR(&m_TetrominoData[24]);
  93. }

骨牌数据类

  1. // TetrominoData.h: interface for the CTetrominoData class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_TETROMINODATA_H__B5414B4A_2708_4A07_AD1D_7AAB52962115__INCLUDED_)
  5. #define AFX_TETROMINODATA_H__B5414B4A_2708_4A07_AD1D_7AAB52962115__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "common.h"
  10. class CTetrominoData
  11. {
  12. public:
  13. CTetrominoData();
  14. virtual ~CTetrominoData();
  15. void SetColor(COLORREF color) {m_color = color;}
  16. COLORREF GetColor() {return m_color;}
  17. void SetData(BYTE uc0, BYTE uc1, BYTE uc2, BYTE uc3,
  18. BYTE uc4, BYTE uc5, BYTE uc6, BYTE uc7,
  19. BYTE uc8, BYTE uc9, BYTE uc10, BYTE uc11,
  20. BYTE uc12, BYTE uc13, BYTE uc14, BYTE uc15);
  21. BYTE operator [](int iIndex);
  22. void SetRotateL(CTetrominoData* pIn) {m_RotateL = pIn;}
  23. void SetRotateR(CTetrominoData* pIn) {m_RotateR = pIn;}
  24. CTetrominoData* GetRotateL() {return m_RotateL;}
  25. CTetrominoData* GetRotateR() {return m_RotateR;}
  26. int GetDataRows(); ///< 得到数据行数, 从左上角到最下面的有数据的行数
  27. int GetDataCols(); ///< 得到数据列数, 从左上角到最右面的有数据的列数
  28. private:
  29. COLORREF m_color;
  30. BYTE m_ucData[16];
  31. CTetrominoData* m_RotateL; ///< 向左转是哪个骨牌
  32. CTetrominoData* m_RotateR; ///< 向右转是哪个骨牌
  33. };
  34. #endif // !defined(AFX_TETROMINODATA_H__B5414B4A_2708_4A07_AD1D_7AAB52962115__INCLUDED_)
  1. // TetrominoData.cpp: implementation of the CTetrominoData class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "TetrominoData.h"
  5. //////////////////////////////////////////////////////////////////////
  6. // Construction/Destruction
  7. //////////////////////////////////////////////////////////////////////
  8. CTetrominoData::CTetrominoData()
  9. {
  10. ZeroMemory(m_ucData, (sizeof(m_ucData) / sizeof(m_ucData[0])));
  11. m_color = RGB(0, 0, 0);
  12. }
  13. CTetrominoData::~CTetrominoData()
  14. {
  15. }
  16. void CTetrominoData::SetData(BYTE uc0, BYTE uc1, BYTE uc2, BYTE uc3,
  17. BYTE uc4, BYTE uc5, BYTE uc6, BYTE uc7,
  18. BYTE uc8, BYTE uc9, BYTE uc10, BYTE uc11,
  19. BYTE uc12, BYTE uc13, BYTE uc14, BYTE uc15) {
  20. m_ucData[0] = uc0;
  21. m_ucData[1] = uc1;
  22. m_ucData[2] = uc2;
  23. m_ucData[3] = uc3;
  24. m_ucData[4] = uc4;
  25. m_ucData[5] = uc5;
  26. m_ucData[6] = uc6;
  27. m_ucData[7] = uc7;
  28. m_ucData[8] = uc8;
  29. m_ucData[9] = uc9;
  30. m_ucData[10] = uc10;
  31. m_ucData[11] = uc11;
  32. m_ucData[12] = uc12;
  33. m_ucData[13] = uc13;
  34. m_ucData[14] = uc14;
  35. m_ucData[15] = uc15;
  36. }
  37. int CTetrominoData::GetDataRows() {
  38. if ((0 != m_ucData[12])
  39. || (0 != m_ucData[13])
  40. || (0 != m_ucData[14])
  41. || (0 != m_ucData[15])) {
  42. return 4;
  43. } else if ((0 != m_ucData[8])
  44. || (0 != m_ucData[9])
  45. || (0 != m_ucData[10])
  46. || (0 != m_ucData[11])) {
  47. return 3;
  48. } else if ((0 != m_ucData[4])
  49. || (0 != m_ucData[5])
  50. || (0 != m_ucData[6])
  51. || (0 != m_ucData[7])) {
  52. return 2;
  53. } else if ((0 != m_ucData[3])
  54. || (0 != m_ucData[2])
  55. || (0 != m_ucData[1])
  56. || (0 != m_ucData[0])) {
  57. return 1;
  58. }
  59. return 0;
  60. }
  61. int CTetrominoData::GetDataCols() {
  62. if ((0 != m_ucData[3])
  63. || (0 != m_ucData[7])
  64. || (0 != m_ucData[11])
  65. || (0 != m_ucData[15])) {
  66. return 4;
  67. } else if ((0 != m_ucData[2])
  68. || (0 != m_ucData[6])
  69. || (0 != m_ucData[10])
  70. || (0 != m_ucData[14])) {
  71. return 3;
  72. } else if ((0 != m_ucData[1])
  73. || (0 != m_ucData[5])
  74. || (0 != m_ucData[9])
  75. || (0 != m_ucData[13])) {
  76. return 2;
  77. } else if ((0 != m_ucData[0])
  78. || (0 != m_ucData[4])
  79. || (0 != m_ucData[8])
  80. || (0 != m_ucData[12])) {
  81. return 1;
  82. }
  83. return 0;
  84. }
  85. BYTE CTetrominoData::operator [](int iIndex) {
  86. BOOL bValid = (iIndex >= 0) && (iIndex < (sizeof(m_ucData) / sizeof(m_ucData[0])));
  87. return bValid ? m_ucData[iIndex] : m_ucData[0];
  88. }
  1. // TetrominoDataS0.h: interface for the CTetrominoDataS0 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_TetrominoDataS0_H__D23B94A8_C1F2_44A4_9ACD_2B934A82F86A__INCLUDED_)
  5. #define AFX_TetrominoDataS0_H__D23B94A8_C1F2_44A4_9ACD_2B934A82F86A__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "TetrominoData.h"
  10. class CTetrominoDataS0 : public CTetrominoData
  11. {
  12. public:
  13. CTetrominoDataS0();
  14. virtual ~CTetrominoDataS0();
  15. };
  16. #endif // !defined(AFX_TetrominoDataS0_H__D23B94A8_C1F2_44A4_9ACD_2B934A82F86A__INCLUDED_)
  1. // TetrominoDataS90.h: interface for the CTetrominoDataS90 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_TetrominoDataS90_H__4157546E_E5CA_4624_B8A5_63AE11EBCD5C__INCLUDED_)
  5. #define AFX_TetrominoDataS90_H__4157546E_E5CA_4624_B8A5_63AE11EBCD5C__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "TetrominoDataS0.h"
  10. class CTetrominoDataS90 : public CTetrominoDataS0
  11. {
  12. public:
  13. CTetrominoDataS90();
  14. virtual ~CTetrominoDataS90();
  15. };
  16. #endif // !defined(AFX_TetrominoDataS90_H__4157546E_E5CA_4624_B8A5_63AE11EBCD5C__INCLUDED_)
  1. // TetrominoDataS180.h: interface for the CTetrominoDataS180 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_TetrominoDataS180_H__FC5200AC_B7CC_4291_AE86_3C2E983BD4C9__INCLUDED_)
  5. #define AFX_TetrominoDataS180_H__FC5200AC_B7CC_4291_AE86_3C2E983BD4C9__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "TetrominoDataS0.h"
  10. class CTetrominoDataS180 : public CTetrominoDataS0
  11. {
  12. public:
  13. CTetrominoDataS180();
  14. virtual ~CTetrominoDataS180();
  15. };
  16. #endif // !defined(AFX_TetrominoDataS180_H__FC5200AC_B7CC_4291_AE86_3C2E983BD4C9__INCLUDED_)
  1. // TetrominoDataS270.h: interface for the CTetrominoDataS270 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_TetrominoDataS270_H__4DDC72B7_219B_4E7B_8573_EA98D82CD754__INCLUDED_)
  5. #define AFX_TetrominoDataS270_H__4DDC72B7_219B_4E7B_8573_EA98D82CD754__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "TetrominoDataS90.h"
  10. class CTetrominoDataS270 : public CTetrominoDataS90
  11. {
  12. public:
  13. CTetrominoDataS270();
  14. virtual ~CTetrominoDataS270();
  15. };
  16. #endif // !defined(AFX_TetrominoDataS270_H__4DDC72B7_219B_4E7B_8573_EA98D82CD754__INCLUDED_)
  1. // TetrominoDataS0.cpp: implementation of the CTetrominoDataS0 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "TetrominoDataS0.h"
  5. //////////////////////////////////////////////////////////////////////
  6. // Construction/Destruction
  7. //////////////////////////////////////////////////////////////////////
  8. CTetrominoDataS0::CTetrominoDataS0()
  9. {
  10. SetColor(RGB(10, 249, 10));
  11. SetData(
  12. 0, 1, 1, 0,
  13. 1, 1, 0, 0,
  14. 0, 0, 0, 0,
  15. 0, 0, 0, 0);
  16. }
  17. CTetrominoDataS0::~CTetrominoDataS0()
  18. {
  19. }
  1. // TetrominoDataS90.cpp: implementation of the CTetrominoDataS90 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "TetrominoDataS90.h"
  5. //////////////////////////////////////////////////////////////////////
  6. // Construction/Destruction
  7. //////////////////////////////////////////////////////////////////////
  8. CTetrominoDataS90::CTetrominoDataS90()
  9. {
  10. SetData(
  11. 1, 0, 0, 0,
  12. 1, 1, 0, 0,
  13. 0, 1, 0, 0,
  14. 0, 0, 0, 0);
  15. }
  16. CTetrominoDataS90::~CTetrominoDataS90()
  17. {
  18. }
  1. // TetrominoDataS180.cpp: implementation of the CTetrominoDataS180 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "TetrominoDataS180.h"
  5. //////////////////////////////////////////////////////////////////////
  6. // Construction/Destruction
  7. //////////////////////////////////////////////////////////////////////
  8. CTetrominoDataS180::CTetrominoDataS180()
  9. {
  10. SetData(
  11. 0, 1, 1, 0,
  12. 1, 1, 0, 0,
  13. 0, 0, 0, 0,
  14. 0, 0, 0, 0);
  15. }
  16. CTetrominoDataS180::~CTetrominoDataS180()
  17. {
  18. }
  1. // TetrominoDataS270.cpp: implementation of the CTetrominoDataS270 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "TetrominoDataS270.h"
  5. //////////////////////////////////////////////////////////////////////
  6. // Construction/Destruction
  7. //////////////////////////////////////////////////////////////////////
  8. CTetrominoDataS270::CTetrominoDataS270()
  9. {
  10. SetData(
  11. 1, 0, 0, 0,
  12. 1, 1, 0, 0,
  13. 0, 1, 0, 0,
  14. 0, 0, 0, 0);
  15. }
  16. CTetrominoDataS270::~CTetrominoDataS270()
  17. {
  18. }

http://blog.csdn.net/lostspeed/article/details/50643208

俄罗斯方块SDK版的更多相关文章

  1. Pascal小游戏 俄罗斯方块怀旧版

    俄罗斯方块怀旧版(注释版) {$APPTYPE GUI}{$MODE DELPHI}program WinPiece; usesWindows; constAppName = 'WinPiece';p ...

  2. python tkinter实现俄罗斯方块 基础版

    本项目最终效果见本人b站投稿av81480858 简介部分 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 .其中1 ...

  3. 俄罗斯方块C#版

    using System; using System.Windows.Forms; using System.Drawing; using System.Media; class me : Form ...

  4. android studio 编译sdk版降低报错解决方法

    解决办法如下: 步骤1:在gradle中修改 compile sdk 版本,比如 8. 步骤2:在gradle中删除v7包的依赖 步骤3:在manifest中修改theme,supportsRtl.t ...

  5. 俄罗斯方块 UWP 版

    UWP跟 WPF编程模型一致,不过UWP做了精简,而且不同的系统的API还略有不同.不同的地方有以下几点: 1.动画.动画除了故事版,还有其它的实现方式. 2.异步方法.UWP中的方法调用,大部分都是 ...

  6. .NET+MVC+Alipay的Sdk版单笔转账到支付宝账户接口

    public class AliPayController : Controller { // GET: AliPay public ActionResult Index() { return Red ...

  7. 转-android 支付宝SDK集成

    http://blog.csdn.net/kroclin/article/details/40746779 一.前言 最近做的项目刚好要集成支付宝,上网找了很多资料,介绍得感觉不是很全面,所以我经过这 ...

  8. 分析Cocos2d-x横版ACT手游源 1、登录

    我自己的游戏代码 因为 游戏源 盯着外面的 我们能够能够理解 /******************************************************************** ...

  9. 必应地图api文档,微软必应地图web开发版详解,可以在国内使用国外地图

    最近,公司项目要求在页面中嵌入地图,需求还算简单,但是由于必须具备响应式(主要是pc和移动端),而且由于公司业务是全球性的,要支持国外地点搜索.考虑到百度,腾讯,高德等等国内地图无法显示国外数据,谷歌 ...

随机推荐

  1. Kali Linux 安全渗透教程&lt;第三更&gt;1.2 安全渗透所需工具

    了解了渗透測试的概念后.接下来就要学习进行渗透測试所使用的各种工具.在做渗透測试之前.须要先了解渗透所需的工具.渗透測试所需的工具如表1-1所看到的: 表1-1  渗透所需工具 splint unhi ...

  2. 史上最全然oophper php文件上传之文件类型相应表,ie,火狐各一份。

    ie 火狐 id 后缀名 php识别出的文件类型 0 gif image/gif 1 jpg image/jpeg 2 png image/png 3 bmp image/bmp 4 psd appl ...

  3. 简单浮点数除法模拟-hdu-4493-Tutor

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4493 题目意思: 给小数点后两位的12个月的工资,求出平均工资,输出离小数点后第二位最近的两位小数, ...

  4. SPI通信

    SPI是由Motorola公司提出的一种同步串行外围接口:它在速度要求不高,低功耗,需要保存少量参数的智能化传感系统中得到了广泛应用: SPI是一个全双工的同步串行接口,在数据传输过程中,总线上只能是 ...

  5. Jquery ajax方法详解

    1.url: 要求为string类型的参数,(默认为当前页面地址)发送请求的地址. 2.type: 要求为String类型的参数,请方式(get/post)默认为get.注意其他HTTP请求方法,例如 ...

  6. Codeforces 484A - Bits 二进制找1

    这题可以根据l, r 在二进制下的长度进行分类. l  的长度小于 r 的时候,有两种可能,一种是r 在二进制下是 1* 这种样子,故答案取 r : 一种是取答案为  (1LL << (r ...

  7. IOS某个ViewController禁止自动旋转

    IOS屏幕自动旋转,强制横竖屏方法: - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientat ...

  8. 彻底理解浮动float CSS浮动详解 清除浮动的方法

    我们把网页的常用的布局格式分为以下三种: 1.标准流. 所谓的标准流就是,行内元素自己单独一行,而块级元素是上下显示的. 以前我们学习的都是标准流.   注意:标准流使我们网页布局中最稳定的一种结构 ...

  9. LDAP研究

    一.ldap介绍 ldap是轻量级的文件夹訪问协议.重点是文件夹訪问协议.更为重点的是协议.好吧他是一个协议.也就是一个标准. 那么实现这款协议的软件当中有一款就是openldap. 二.安装wind ...

  10. BZOJ 1072 [SCOI2007]安排perm 如压力DP

    意甲冠军:联系 方法:状压DP? 题解:这题事实上没啥好写的.不算非常难,推一推就能搞出来. 首先看到这个问题,对于被d整除这个条件,非常easy就想到是取余数为0,所以想到可能状态中刚開始含有取余数 ...