• 第二次实验设计报告


    2019年春第二次课程设计实验报告
    一. 项目实验名称:消除砖块
    二.实验项目功能描述:用A与D键控制底板以反弹小球,每成功接住下落的小球一次,便加一分
    三.项目模块结构介绍:
    模块:本项目有定义坐标函数部分,定义各相关变量函数部分,相关运行A与D键移动底板操作的函数部分,相关墙体变换,小球移动的函数部分,以及最后游戏失败后,游戏退出,程序结束!
    总体结构:

     int ball_x,ball_y;//定义小球的x,y坐标
    int v_x,v_y;//定义小球的x,y的运动速度
    int high=20;
    int wideth=36;//定义画面大小
    int banzi_x,banzi_y;
    int banjing;
    int left,right;//定义下面板子的各种参数
    int score1=0;
    int score2=0;//定义两个得分
    int zhuankuai_x1,zhuankuai_y1;//定义砖块的位置
    void HideCursor()
    {
    CONSOLE_CURSOR_INFO cursor_info = {1, 0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    }
    void gotoxy(int x, int y) 
    {
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(hOut, pos);
    }
    void initialization()//初始化各数据
    {
    ball_x = 0;
    ball_y = wideth/2;//初始化小球的位置
    
    v_x = 1;
    v_y = 1;//初始化速度方向默认向右下角
    
    
    zhuankuai_x1 = 0;
    zhuankuai_y1 = 5;//初始化砖块位置
    
    
    banzi_y = 13;
    banzi_x = high-2;
    banjing = 3;
    left = banzi_y - banjing;
    right = banzi_y + banjing;//板子位置
    }
    
    
    void show()//显示的位置;
    {
    int i,j;
    gotoxy(0,0);//清屏函数
    for(i=0;i<=high;i++)
    {
    for(j=0;j<=wideth;j++)
    {
    if((i == ball_x) && (j == ball_y))
    printf("o");//输出小球
    else if((i == zhuankuai_x1) && (j == zhuankuai_y1))
    printf("B");//输出砖块
    else if(j == wideth)
    printf("|");//输出右边界
    else if((i == banzi_x) && (j <= right) && (j >= left))
    printf("*");//输出板子
    else if(i == high)
    printf("_");//输出下边界
    else
    printf(" ");
    }
    printf("
    ");
    }
    printf("你的得分:%d
    ",score1);
    printf("你的弹数是:%d",score2/15);//输出两个得分
    }
    void updatenowithkeyboard()//键盘输入无关的参量
    {
    if((ball_x == banzi_x-1) && (ball_y <= right) && (left <= ball_y))
    {
    v_x = (-1) * v_x;
    v_y = (-1) * v_y;
    score2++;
    }//小球弹到板子上时反弹,并且弹数得分增加
    
    
    static int speed=0;
    if(speed < 15)
    speed++;
    if(speed == 15)
    {
    ball_x = ball_x + v_x;
    ball_y = ball_y + v_y;
    speed=0;
    }//定义一个静态变量,使小球的速度变慢,板子速度不受影响,但是不知道为什么数字只能设置为15,其他的小球都显示不了
    
    
    if(ball_x == 0) 
    v_x = (-1) * v_x;
    if((ball_y == 0) || (ball_y == wideth))
    v_y = (-1) * v_y;//小球碰到上边界,左右边界时反弹
    
    
    if((ball_x == zhuankuai_x1) && (ball_y == zhuankuai_y1))
    {
    zhuankuai_x1 = rand() % wideth;
    score1++;
    }//小球碰到砖块时,砖块随机任意位置生成一个,得分+1
    
    
    if(ball_x > banzi_x)
    {
    printf("
    GAME OVER
    ");
    exit(0);//当小球落到板子下面时,游戏结束
    }
    
    }
    
    
    void updatewithkeyboard()//键盘输入有关的参量
    {
    char input;
    if(kbhit())
    {
    input = getch();
    if(input == 'a')
    banzi_y--;
    if(input == 'd')
    banzi_y++;
    left = banzi_y - banjing;
    right = banzi_y + banjing;
    }//用a和d来控制板子的左右移动
    }
    

    四.实现页面展示:

    五.代码托管链接:https://gitee.com/wonzenkei/Lucky-OJ/blob/master/消除砖块.cpp
    六.实验总结:
    1.问题:此程序开始运行的时候出现了[Error] cwindow.h: No such file or directory的报错
    以及compilation terminated的报错
    2.解决办法:后来尝试改cwindow为windows,程序顺利运行
    感想:本次第二次程序还是按照教本上的程序练习模板写的,所以出现的问题比较少,但是都是自行调试,慢慢摸索,才觉得其实控制物体的运动只需要使用for循环以及while循环即可,难度不大!在今后的项目设计课程中还需继续加油,不要松懈,因为虽然项目设计虽然和做题不同,但是难度不会比做题更小!

  • 相关阅读:
    Android 应用开发耗电量控制。。
    android优化从网络中加载图片速度。。
    SpringMVC 配置多视图解析器(velocity,jsp)
    linux mysql定时备份并压缩
    linux mysql定时备份并压缩
    mysql选择上一条、下一条数据记录,排序上移、下移、置顶
    MIT-CBCL Car Database 车辆训练数据集
    两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
    js实现ArrayList功能
    JXL.jar简单封装Excel读写操作
  • 原文地址:https://www.cnblogs.com/wonzenkei/p/10957550.html
Copyright © 2020-2023  润新知