创新实验报告VC++案例开发十二生肖的俄罗斯方块智力游戏完整代码设计方案

一.项目名称

十二生肖俄罗斯方块

二.开发背景:

俄罗斯方块是一个很低古老的一个小游戏,到但今日它还有很大的魅力。

三.技术路线或工作原理:

采用的软件及开发平台

Micosoft Visual ++6.0

项目的总体方案

1.生成方块模块。通过随机函数生成随机数来确定生成方块的种类。

2.键盘输入模块。通过消息映射来处理各种从键盘传入的信息。包括方块左走,右走,快速下降和变形。

3.得分模块。当方块下到底后判断玩家有没得分。

4.游戏数据记录模块。保存方块的个数和地点。

5.游戏结束模块。判断游戏是否已经结束。

四.算法描述(程序部分源码或伪代码)

1.在CMy1View.h开始时加入:

#define heng 15

#define shu 30

#define size 20

2.在类CMy1View中增加成员变量:

       BITMAP bmfange;

       BITMAP bmbeijing;

       CBitmap bbeijing;

       CBitmap bfange;

       int score;     得分

       int y;        活动方块的Y坐标

       int x;        活动方块的X坐标

       int yanshi;    活动方块的方向式样

       int huodon;   活动方块的种类

       int fange[shu+2][heng+2];   记录游戏中每个方格中有没方块和方块的种类

3.在类CMy1View中增加成员函数:

       void getscore();   计算得分

       void gameover();   判断是否游戏结束

       void changeyanshi();   改变活动方块的方向式样

       void goright();       活动方块向右走

       void goleft();                活动方块向左走

       void godown();             活动方块响下走

       void gaiweizhi(int r);     改变活动方块的位置,用于函数goright(),goleft(),godown中

       void shengcheng();        生成新的活动方块

由于函数的内容过大,函数具体内容请老师见于工程

4,在类CMy1View中修改函数CMy1View::CMy1View():

CMy1View::CMy1View()

{

       // TODO: add construction code here

       for(int i=1;i<=heng;i++)

       {

              for(int j=1;j<=shu;j++)

                     fange[j][i]=0;

              fange[0][i]=9;

              fange[shu+1][i]=9;

       }

       for(int k=0;k<shu+2;k++)

       {

              fange[k][0]=9;

              fange[k][heng+1]=9;

       }

       score=0;

       bfange.LoadBitmap(IDB_fange);

       bfange.GetBitmap(&bmfange);

       bbeijing.LoadBitmap(IDB_beijing);

       bbeijing.GetBitmap(&bmbeijing);

}

5,在类CMy1View中修改函数CMy1View::OnDraw(CDC* pDC):

void CMy1View::OnDraw(CDC* pDC)

{

       CMy1Doc* pDoc = GetDocument();

       ASSERT_VALID(pDoc);

       // TODO: add draw code for native data here

       CDC mdc;

       mdc.CreateCompatibleDC(NULL);

       mdc.SelectObject(&bbeijing);

       pDC->BitBlt(0,0,bmbeijing.bmWidth,bmbeijing.bmHeight,&mdc,0,0,SRCCOPY);

       CFont font;

font.CreateFont(40,0,0,0,FW_NORMAL,FALSE,FALSE,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"华文行楷");

    CFont *pOldFont=pDC->SelectObject(&font);

       pDC->SetBkMode(TRANSPARENT);

       pDC->SetTextColor(RGB(255,0,0));

       CString str;

       str.Format("%d",score);

       pDC->TextOut((heng+4)*size/2,(shu+2)*size+size/2,str);

       pDC->SelectObject(pOldFont);

       mdc.SelectObject(&bfange);

       for(int j=0;j<shu+2;j++)

              for(int i=0;i<heng+2;i++)

              {

                     if(fange[j][i]!=0&&fange[j][i]!=9)

                     {

                            pDC->BitBlt((i+1)*size,(shu-j+2)*size,size,size,&mdc,(fange[j][i]<9?(fange[j][i]-1):(fange[j][i]-11))*size,0,SRCCOPY);

                     }

              }

}

6,在类CMy1View中生成消息函数CMy1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags):

void CMy1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

{

       // TODO: Add your message handler code here and/or call default

       switch(nChar)

       {

       case VK_UP:

              changeyanshi();

              break;

       case VK_LEFT:

              goleft();

              break;

       case VK_RIGHT:

              goright();

              break;

       case VK_DOWN:

              godown();

              break;

       }

       CView::OnKeyDown(nChar, nRepCnt, nFlags);

}

6,在类CMy1View中生成消息函数CMy1View::OnTimer(UINT nIDEvent):

void CMy1View::OnTimer(UINT nIDEvent)

{

       // TODO: Add your message handler code here and/or call default

       godown();

       CView::OnTimer(nIDEvent);

}

6,在菜单栏中加入菜单“开始”,在类CMy1View中生成与菜单“开始”相关联的消息函数CMy1View::OnKaishi():

void CMy1View::OnKaishi()

{

       // TODO: Add your command handler code here

       for(int i=1;i<=shu;i++)

              for(int j=1;j<=heng;j++)

                     fange[i][j]=0;

       shengcheng();

       SetTimer(0,500,NULL);

       Invalidate();

}

五.实验结果

六.测试分析:

1.首先每块方块活动的测试,用了一天时间,测试了方块的移动和变形

2.对开始游戏和当活动到达底部生成方块的测试,用了一天时间

3.对游戏结束和计分的测试,用了一天时间。

七.个人小结:

收获

1体会到写总体设计和部分设计的重要性

2从中体会到了运用VC++解决问题的快乐

3通过分析理解程序,对VC++的认识更为深入

4认识到更多的函数的使用

5对VC++的兴趣更为浓厚

教训

由于前期没有做好总体设计和各部分之间的关联的设计,所以会后期的工作产生影响

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机程序设计开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值