北邮计算机实习报告

时间:2024.4.20

计算机实习报告

                 班级:

                 姓名:

                 学号:

                 日期:

    小学期计算机实习实验报告

一.功能说明

1.1总体功能说明

 主要实现俄罗斯方块游戏,添加了音乐文件

1.2用户界面

这两个界面可以实现显示分数,当前等级,以及下一个将会出现的图形

如果按下esc键或到顶时会出现第二个图中的界面,并根据提示选择

消行后实现加分数即score,当消行30行后level加1

1.3使用方法

     在游戏中,利用a键,s键,d键,w键分别控制向左,向下,向右,变形。

每消一行就加一分,当满30分时,level1,游戏的方块落下速度就会加快。

还添加了音乐,可以一边万游戏一边听音乐

二.程序设计说明

2.1 总体设计框架

 北邮计算机实习报告

2.2 关键算法描述

2.3 程序设计的难点和关键点

难点:在工作界面上有一个实际坐标,我们定义一个map数组以后要将实际坐标呵map        第几个元素的坐标对应

void Init();

主要实现界面的的编译,显示score,level,next等

void  drawBlocks( int m[][24],int a[][4],int w,int h,int mapx,int mapy,WORD wColors[],int nColors ,int c);

主要实现显现方块

void  Clearsquare( int m[][24],int a[][4],int w,int h,int mapx,int mapy,WORD wColors[],int nColors );

主要实现消除方块

void Judge(int m[][24] ,int a[][4],int w,int h,int *mx,int *my,int *mapxy,WORD wColors[],int nColors);

判断方块是否可以移动

void  Cls(WORD wColors[],int nColors);

当游戏结束再来一次是清除屏幕上的方块

void Disappear(int m[][24],int a[][4],int w,int h,int mapx,int mapy,WORD wColors[],int nColors,int c ) ;

当满一行时消除一行并实现加分和level变化

bool IsAvaiable(int m[][24],int a[][4],int mapx ,int mapy,int *mx,int*my,int w,int h,WORD wColors[],int nColors);

判断方块是否可以下落

void  Turn(int a[][4],int w,int h,int mapx,int mapy,int* mx ,int *my, int m[][24] ,WORD wColors[],int nColors ,int c);

实现方块的旋转,变形

bool DrawBlocks(int m[][24] ,int a[][4],int w,int h,int mapx,int mapy,WORD wColors[],int nColors,int i);

插入以上的某些函数,可以实现方块下落时各种功能

关键点

主要是界面的编译;

方块的显现及擦除;

方块下落时向左或向右移动不会到框外面;

方块满一行自动消除并使分数加1并判断是否改变level;

暂停游戏或退出游戏

Gameover后怎么再来一次,再来一次之前怎么清除原来方框的方块,并把分数归0和level归一

2.4 调试的方法

调试时可以逐语句调试,也可以逐过程调试,当执行时出现错误时,双击错误,到出错的地方进性更改或是设置断点,进性调试,观察函数中参数的变化并根据错误修改程序

在调试的过程中,我出现的bug如下:

  错误                                        解决方法

1.方块不能擦除                         添加了一个擦除函数 Clearsquare;

2.方块下落时会覆盖已经停下的方块           添加一个判断函数看是否可以下落

3方块从左边出来                            改变方块的横纵坐标以及其他参数

4.按退出键没有反应                         添加判断语句

5.方块无法消行                         添加函数Disappear

6方块消行后,其他方块无法下移,           在Disappear中添加语句实现方块的下移

7.分数无法累计                             将score定义为全局变量

[过程中出现的问题和解决方法]

2.5 程序性能评价

优点:

界面比较清晰,有各种提示,运行过程中比较容易控制,游戏的方块是不同的颜色,比较美观,添加了音乐功能,可以边玩游戏边听音乐。

缺点:、

消行后原来方块的颜色不能保存

三.心得体会

在编完俄罗斯方块后,最大的感触就是自己还要学的知识还有很多。

在这次编写俄罗斯方块代码的体验中,我遇到了很多困难,甚至有时候连书上的东西都看不懂了,有时候感觉很沮丧,想不做了,但是想到别人能做的,我为什么不能做。所以就一步一步通过看书查资料以及向别人请教,终于有了成果。

在最开始时1,我是一脸迷茫,不知道该怎么动手,看见同学们都有进展,就特别召集,所以一步步尝试编译,设计,调试,修改函数一直到实现一个一个功能。每当一个功能实现时心情时无比激动,想到那么多天的付出终于有回报了!!!

  通过这次实习,我学会了怎样查找资料怎


第二篇:北邮小学期计算机实习报告


计算机实习报告

        

   

姓名: 大学霸

班级: xxxxxxxxx

学号: xxxxxxxxx

小班序号:xx

指导老师:苗建松

题目:基于mfc的科学计算器

邮箱:xxxxxxxxx@qq.com

题目mfc科学计算器实验报告

一.功能说明

1.1总体功能说明

科学计算器包括双目运算和单目运算功能。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,反正余弦,对数,开方,百分数,整数的进制转换等运算。可对输入任意操作数或直接点击常数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。

1.2用户界面

界面功能:此计算器与现实中的科学计算器类似,每个键都有负责的功能,分为数字键(0,1,……),运算键(+,-,……),功能键(sin,cos,……),进制转换按钮(二进制,……)及界面顶部的编辑框。数字键负责输入操作数,功能键负责执行不同的功能,进制转换按钮可以把结果转换至不同的进制并显示出来,点击等号键输出结果。点击左上方红叉可退出此计算器程序

1.3使用方法

操作数输入:第一种方法,通过单击数字键,正负号,小数点,百分号或常数输入所需的操作数输入结果会在编辑框中显示;第二种方法,单击编辑框,当编辑框中出现I型光标时,直接使用键盘输入所需的操作数。

四则运算及幂:在进行四则运算及幂此类双目运算时,先输入第一个操作数,然后单击所需的双目操作符,接着输入第二个操作数,运算完成。接下来要是点击等号“=”则输出运算结果;输入数字就进行新的运算;再单击双目操作符就是进行连算,将结果第一个操作数进行新的运算。

三角函数,乘方开方,对数运算:此类属于单目运算,输入操作数,单击操作符,进行单目类运算,运算结果会直接显示在编辑框内。特色之处在于当操作数不在运算符运算函数的定义域内时,程序会弹出消息框报错并清楚错误数据。

进制转换按钮:使用方法与单目操作符类似,先输入要转换的十进制数,点击其他进制,屏幕上就会显示转换后的结果。此功能仅限于整数的转换。

退格及清除数据按钮(CE,C:如果数据输入有误,点击CE会将编辑框中的数据的最后一位消去,点击C会清除当前存储的数据,重新进行计算。

二.程序设计说明

2.1 总体设计框架

计算器总流程图

2.2 关键算法描述

2.2.1数字键的程序:

void CTestDlg::OnBnClickedBtn0()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("0");

}

void CTestDlg::OnBnClickedBtn1()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("1");

}

void CTestDlg::OnBnClickedBtn2()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("2");

}

void CTestDlg::OnBnClickedBtn3()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("3");

}

void CTestDlg::OnBnClickedBtn6()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("6");

}

void CTestDlg::OnBnClickedBtn4()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("4");

}

void CTestDlg::OnBnClickedBtn5()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("5");

}

void CTestDlg::OnBnClickedBtn7()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("7");

}

void CTestDlg::OnBnClickedBtn8()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("8");

}

void CTestDlg::OnBnClickedBtn9()

{

    // TODO: 在此添加控件通知处理程序代码

    ClickNum("9");

}

2.2.2 ClickNum函数

void CTestDlg::ClickNum(const char* strNum)

{

    UpdateData(TRUE);

if (m_IsFirstNum)

    {

        m_strResult = "";                                  

        m_IsFirstNum = FALSE;                                //若是数值的第一个数字,则清空编辑框,显示第一个数字

    }

m_strResult = m_strResult+strNum;                        //若是后续数字,则直接添加到原有数字后面

    UpdateData(FALSE);

}

2.2.3四则运算及幂的程序

void CTestDlg::OnBnClickedBtnAdd()                           //加号函数控件

{

    // TODO: 在此添加控件通知处理程序代码

Compute(m_chOper);

    m_chOper = '+';

}

void CTestDlg::OnBnClickedBtnResult()                        //等号函数控件

{

    // TODO: 在此添加控件通知处理程序代码

Compute(m_chOper);

    m_chOper = '=';

}

void CTestDlg::OnBnClickedBtnMult()                          //乘号函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    Compute(m_chOper);

m_chOper = '*';

}

void CTestDlg::OnBnClickedBtnSub()                           //减号函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    Compute(m_chOper);

m_chOper = '-';

}

void CTestDlg::OnBnClickedBtnDiv()                           //除号函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    Compute(m_chOper);

m_chOper = '/';

}

void CTestDlg::OnBnClickedBtnPow()                           //幂函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    Compute(m_chOper);

    m_chOper = 'P';

}

2.2.4 compute函数

void CTestDlg::Compute(char chOper)                          //操作符函数       

{

    UpdateData(TRUE);

    m_nTemp2 = atof(m_strResult);                            //将CString类型化为浮点型

    switch(chOper)

    {

    case '+':

        m_nTemp2 = m_nTemp1 + m_nTemp2;

        break;

    case '-':

        m_nTemp2 = m_nTemp1 - m_nTemp2;

        break;

    case '*':

        m_nTemp2 = m_nTemp1 * m_nTemp2;

        break;  

    case '/':

        if(m_nTemp2)                                         //判断被除数是否为零

            m_nTemp2 = m_nTemp1 / m_nTemp2;

        else{

            MessageBox("ERROR:被除数不能为0");

            OnBnClickedBtnC();}

        break;

    case 'P':

        if(m_nTemp1<0&&modf(m_nTemp2,&m_nTemp2)!=0){       

            MessageBox("ERROR:负数只有整数幂");

            OnBnClickedBtnC();}   

        else

        m_nTemp2 = pow(m_nTemp1 , m_nTemp2);

    default:

        break;

    }

m_nTemp1 = m_nTemp2;

m_strResult.Format("%g",m_nTemp2);                       //将浮点型化为CString型

m_IsFirstNum = TRUE;

m_point=FALSE;

UpdateData(FALSE);

}

2.2.5正负号的程序

void CTestDlg::OnBnClickedBtnSign()                          //正负号控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    m_nTemp2=atof(m_strResult)*(-1);

    m_strResult.Format("%g",m_nTemp2);

    m_nTemp2=0;

    UpdateData(FALSE);

}

2.2.6百分号的程序

void CTestDlg::OnBnClickedBtnPercent()                       //百分数函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    m_nTemp2=atof(m_strResult)/100;

    m_strResult.Format("%g",m_nTemp2);

    m_nTemp2=0;

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

2.2.7小数点的程序

void CTestDlg::OnBnClickedBtnPoint()                         //小数点函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    if(m_point){}

    else

    {

        ClickNum(".");m_point=TRUE;

    }

}

2.2.8三角函数数的程序

void CTestDlg::OnBnClickedBtnSin()                           //正弦函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    double ang=atof(m_strResult)/180*pi;  //弧度转换

    m_nTemp2=sin(ang);

    m_strResult.Format("%g",m_nTemp2);

    m_nTemp2=0;

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

void CTestDlg::OnBnClickedBtnCos()                           //余弦函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    double ang=atof(m_strResult)/180*pi;  //弧度转换

    m_nTemp2=cos(ang);

    m_strResult.Format("%g",m_nTemp2);

    m_nTemp2=0;

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

void CTestDlg::OnBnClickedBtnTan()                           //正切函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    double ang=atof(m_strResult)/180*pi;  //弧度转换

    m_nTemp2=tan(ang);

    m_strResult.Format("%g",m_nTemp2);

    m_nTemp2=0;

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

2.2.9反三角函数的程序

void CTestDlg::OnBnClickedBtnArcsin()                        //反正弦函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    if((atof(m_strResult))>=(-1)&&(atof(m_strResult))<=1)    //定义域判断

    {

        m_nTemp2=asin(atof(m_strResult))/pi*180;  //角度转换

        m_strResult.Format("%g",m_nTemp2);

        m_nTemp2=0;

    }

    else

    {

        MessageBox("ERROR:定义域[-1,1]");

        OnBnClickedBtnC();

    }

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

void CTestDlg::OnBnClickedBtnArccos()                        //反余弦函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    if((atof(m_strResult))>=(-1)&&(atof(m_strResult))<=1)    //定义域判断

    {

        m_nTemp2=acos(atof(m_strResult))/pi*180;  //角度转换

        m_strResult.Format("%g",m_nTemp2);

        m_nTemp2=0;

    }

    else

    {

        MessageBox("ERROR:定义域[-1,1]");

        OnBnClickedBtnC();

    }

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

void CTestDlg::OnBnClickedBtnArctan()                        //反正切函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    m_nTemp2=atan(atof(m_strResult))/pi*180;  //角度转换

    m_strResult.Format("%g",m_nTemp2);

    m_nTemp2=0;

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

2.2.10平方的程序

void CTestDlg::OnBnClickedBtnSquare()                        //平方函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    m_nTemp2=pow(atof(m_strResult),2);

    m_strResult.Format("%g",m_nTemp2);

    m_nTemp2=0;

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

2.2.11开方的程序

void CTestDlg::OnBnClickedBtnSqrt()                          //开方函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    if(atof(m_strResult)<0)                                  //定义域判断

    {

        MessageBox("ERROR:操作数应不小于0");

        OnBnClickedBtnC();

    }

    else

    {

        m_nTemp2=sqrt(atof(m_strResult));

        m_strResult.Format("%g",m_nTemp2);

        m_nTemp2=0;

    }

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

2.2.12对数的程序

void CTestDlg::OnBnClickedBtnLn()                            //自然对数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    if(atof(m_strResult)<=0)                                 //定义域判断

    {

        MessageBox("ERROR:操作数应大于0");

        OnBnClickedBtnC();

    }

    else

    {

        m_nTemp2=log(atof(m_strResult));

        m_strResult.Format("%g",m_nTemp2);

        m_nTemp2=0;

    }

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

2.2.13常数的程序

void CTestDlg::OnBnClickedBtnExp()                           //超越数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    m_strResult.Format("%g",e);

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

void CTestDlg::OnBnClickedBtnPi()                            //圆周率常数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    m_strResult.Format("%g",pi);

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

2.2.14进制转换的程序

    voidCTestDlg::OnBnClickedRadioBin()                          //二进制转换控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    int m_nTemp2=atof(m_strResult),i;

    m_strResult="";

    while(m_nTemp2!=0){

        i=m_nTemp2%2;

        m_strResult=char('0'+i)+m_strResult;

        m_nTemp2/=2;

    }

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

void CTestDlg::OnBnClickedRadioOct()                         //八进制转换控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    int m_nTemp2=atof(m_strResult);

    m_strResult.Format("%o",m_nTemp2);

    m_nTemp2=0;

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

void CTestDlg::OnBnClickedRadioHex()                         //十六进制转换控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    int m_nTemp2=atof(m_strResult);

    m_strResult.Format("%X",m_nTemp2);

    m_nTemp2=0;

    m_IsFirstNum=TRUE;

    UpdateData(FALSE);

}

2.2.15 CE&C的程序

void CTestDlg::OnBnClickedBtnCe()                            //退格函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    m_strResult = m_strResult.Left(m_strResult.GetLength()-1);

    UpdateData(FALSE);

}

void CTestDlg::OnBnClickedBtnC()                             //清除所有数据函数控件

{

    // TODO: 在此添加控件通知处理程序代码

    UpdateData(TRUE);

    m_nTemp1 = 0;

    m_nTemp2 = 0;

    m_chOper = ' ';

    m_strResult = "0";

    m_IsFirstNum = TRUE;

    m_point=FALSE;

    UpdateData(FALSE);

}

2.3 程序设计的难点和关键点

单目操作符和双目操作符的运算顺序及逻辑不同

某些函数有特定的定义域,操作数是否在定义域要进行判断,如有错误,进行提示

避免输入多个小数点,加入小数点判断变量m_point

    编辑框与CString类型变量关联,在计算时用atof函数转化为浮点数,计算结果用format函数格式化输出

2.4 调试的方法

调试报告

2.5 程序性能评价

优点:使用mfc与类的编程方法,面向过程;在课本原有程序上进行功能拓展,加入了指数对数,三角函数,进制转换等功能,并且能进行连续运算。

不足:时间仓促,进制转换只能从十进制的整数转换成其他进制,有待改进;进行连算时不能按运算符的优先级来算。

三.心得体会

经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。

正所谓“纸上谈兵终觉浅,觉知此事要躬行。”所以在本学期课程设计是很及时、很必要的。这样不仅能加深我们对MFC程序设计的掌握,而且还及时、真正的做到了学以致用。主要是以下几点。

基本功要过硬。不能马虎经常犯犯小错误。提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。

要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。

要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。

更多相关推荐:
北邮计算机实习报告

北京邮电大学计算机实习指导教师方莉北京邮电大学信息与通信工程学院计算机实习计划书信息与通信工程学院20xx级20xx年暑期第1页北京邮电大学计算机实习指导教师方莉1教学目标北京邮电大学信息与通信工程学院20xx...

北邮计算机实习报告

北京邮电大学20xx年计算机实习报告20xx211205王旋北京邮电大学计算机实习报告学院电子工程学院班号20xx211205学号20xx210986姓名王旋北京邮电大学20xx年计算机实习报告20xx2112...

北京邮电大学电子工程学院计算机实习报告,题目基本历年都一样

暑期实习报告1由数字信号处理原理可知计算有限长数字序列线性卷积的公式为xn0nN1若xnelse0则ynnhn0nM1hn0elsem0xmhnm0nNM105n0nN2hn0else10nN1取xnelse0...

北邮计算机实习报告

电子工程学院计算机实习设计报告班级姓名学号一魔方阵1设计流程第一步确定实现魔方阵的算法魔方阵是个很古老的问题无数优秀的数学家创造了很多巧妙且高效的算法魔方阵的实现算法分三个部分奇数2n1单偶数4n2双偶数4nn...

北邮电子工艺实习报告

北京邮电大学实习报告北京邮电大学电子工艺实习报告附页1焊接工艺11焊接工艺的基本知识焊接是通过加热或加压力或两者并用使被焊金属原子之间互相溶解与扩散使分离的金属材料牢固地连结在一起的工艺方法111电烙铁简介外热...

北京邮电大学实习报告封面格式

北京邮电大学实习报告

北京邮电大学实习报告

北京邮电大学实习报告北京邮电大学实习报告集20xx20xx学年实习题目指导教师学院班计算机学院班级范围日期范围20xx年月日到20xx年月日

北京邮电大学大三实习报告模版

北京邮电大学实习报告

北京邮电大学实习报告模版

北京邮电大学实习报告

北邮电子工艺实习报告

北京邮电大学实习报告附页:实习中总结任务要求:根据所给的小车电路和所给的器件进行智能小车的制作,首先根据电路图以及电路板进行小车所需的元器件的焊接,要求焊接点要符合要求,不能虚焊,焊接完成之后再安装小车的一些基…

计算机专业实习实习报告模板

HEBEIUNITEDUNIVERSITY计算机专业实习实习报告班级11计算机班学号20xx14600112姓名张伟指导教师卢朝辉专业名称计算机科学与技术信息工程学院20xx年6月27日河北联合大学实习报告An...

计算机组成原理实习报告

福建农林大学计算机与信息学院课程名称实习题目姓名系专业年级学号指导教师职称计算机类课程实习报告计算机组成原理简单模型机设计计算机计算机科学与技术张旭玲讲师20xx年06月25日1福建农林大学计算机与信息学院计算...

北邮计算机实习报告(24篇)