目录

  • 一、项目描述和最终的成果展示
  • 二、封装后的弹跳小球
  • 三、显示移动挡板
  • 四、反弹小球
  • 五、添加砖块并实现打砖块操作

一、项目描述和最终的成果展示

这是在上一次弹跳小项目上进行了一系列的优化和封装。项目: 弹跳的小球
上次没有用函数进行的封装。这次在上次的基础上进行封装和一些功能的优化。
最终效果图如下:

二、封装后的弹跳小球

代码如下:

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>//全局变量
int high,width; //游戏画面大小
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}void startup()//数据的初始化
{high =  15;width = 20;ball_x = 0;ball_y = width/2;ball_vx = 1;ball_vy = 1;
}void show()//显示画面
{gotoxy(0,0);//光标移动到原点位置,以下重画清屏int i,j;for(i=0;i<=high;i++){for(j=0;j<=width;j++){if( ( i == ball_x) && ( j == ball_y ) )printf("O");//输出小球else if( j == width)printf("+");//输出右边框else if( i == high)printf("-");//输出下边框elseprintf(" ");//输出空格}printf("\n");}
}void updateWithoutInput()//与用户输入无关的更新
{ball_x = ball_x + ball_vx;ball_y = ball_y + ball_vy;if( (ball_x == 0 ) || (ball_x == high-1 ))ball_vx = -ball_vx;if( (ball_y == 0 ) || (ball_y == width-1 ))ball_vy = -ball_vy;Sleep(50);
}void updateWithInput()//与用户输入有关的更新
{}
int main(void)
{startup();//数据的初始化while(1){show();//显示画面updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}

效果图如下:

三、显示移动挡板

代码如下:

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>//全局变量
int high,width; //游戏画面大小
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int position_x,position_y;//挡板的中心坐标
int ridus;//挡板的半径大小
int left,right;//挡板的左右位置void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}void startup()//数据的初始化
{high =  15;width = 20;ball_x = 0;ball_y = width/2;ball_vx = 1;ball_vy = 1;ridus = 5;position_x = high;position_y = width/2;left = position_y -ridus;right = position_y + ridus;
}void show()//显示画面
{gotoxy(0,0);//光标移动到原点位置,以下重画清屏int i,j;for(i=0;i<=high+1;i++){for(j=0;j<=width;j++){if( ( i == ball_x) && ( j == ball_y ) )printf("O");//输出小球else if( j == width)printf("+");//输出右边框else if( i == high+1)printf("-");//输出下边框else if ( (i==high)&&(j>=left)&&(j<=right))printf("*");elseprintf(" ");//输出空格}printf("\n");}
}void updateWithoutInput()//与用户输入无关的更新
{ball_x = ball_x + ball_vx;ball_y = ball_y + ball_vy;if( (ball_x == 0 ) || (ball_x == high-1 ))ball_vx = -ball_vx;if( (ball_y == 0 ) || (ball_y == width-1 ))ball_vy = -ball_vy;Sleep(50);
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input = getch();if( input == 'a' || input == 'A' ){position_y--;//位置左移left = position_y-ridus;right = position_y+ridus;}if( input == 'd' || input == 'D' ){position_y++;left = position_y - ridus;right = position_y + ridus;}}
}
int main(void)
{startup();//数据的初始化while(1){show();//显示画面updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}

效果图如下:

四、反弹小球

代码如下:

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>//全局变量
int high,width; //游戏画面大小
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int position_x,position_y;//挡板的中心坐标
int ridus;//挡板的半径大小
int left,right;//挡板的左右位置
int ball_number;//反弹小球的次数void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}void startup()//数据的初始化
{high =  15;width = 20;ball_x = 0;ball_y = width/2;ball_vx = 1;ball_vy = 1;ridus = 5;position_x = high;position_y = width/2;left = position_y -ridus;right = position_y + ridus;ball_number=0;
}void show()//显示画面
{gotoxy(0,0);//光标移动到原点位置,以下重画清屏int i,j;for(i=0;i<=high+1;i++){for(j=0;j<=width;j++){if( ( i == ball_x) && ( j == ball_y ) )printf("O");//输出小球else if( j == width)printf("+");//输出右边框else if( i == high+1)printf("-");//输出下边框else if ( (i==high)&&(j>=left)&&(j<=right))printf("*");elseprintf(" ");//输出空格}printf("\n");}printf("反弹小球数:%d\n",ball_number);
}void updateWithoutInput()//与用户输入无关的更新
{if( ball_x == high -1){if( (ball_y>=left) && (ball_y<=right) ){ball_number++;printf("\a");//响铃}else{printf("游戏失败\n");system("pause");exit(0);}}ball_x = ball_x + ball_vx;ball_y = ball_y + ball_vy;if( (ball_x == 0 ) || (ball_x == high-1 ))ball_vx = -ball_vx;if( (ball_y == 0 ) || (ball_y == width-1 ))ball_vy = -ball_vy;Sleep(50);
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input = getch();if( input == 'a' || input == 'A' ){position_y--;//位置左移left = position_y-ridus;right = position_y+ridus;}if( input == 'd' || input == 'D' ){position_y++;left = position_y - ridus;right = position_y + ridus;}}
}
int main(void)
{startup();//数据的初始化while(1){show();//显示画面updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}

效果图如下:

五、添加砖块并实现打砖块操作

代码如下:

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>//全局变量
int high,width; //游戏画面大小
int ball_x,ball_y;//小球的坐标
int ball_vx,ball_vy;//小球的速度
int position_x,position_y;//挡板的中心坐标
int ridus;//挡板的半径大小
int left,right;//挡板的左右位置
int ball_number;//反弹小球的次数
int block_x1,block_y1;//砖块1的位置
int block_x2,block_y2;//砖块2的位置
int block_x3,block_y3;//砖块3的位置
int score;//消掉砖块的个数void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}void startup()//数据的初始化
{high =  15;width = 20;ball_x = 0;ball_y = width/2;ball_vx = 1;ball_vy = 1;ridus = 5;position_x = high;position_y = width/2;left = position_y -ridus;right = position_y + ridus;ball_number=0;block_x1 = 0;block_y1 = 1;block_x2 = 0;block_y2 = 2;block_x3 = 0;block_y3 = 3;score=0;
}void show()//显示画面
{gotoxy(0,0);//光标移动到原点位置,以下重画清屏int i,j;for(i=0;i<=high+1;i++){for(j=0;j<=width;j++){if( ( i == ball_x) && ( j == ball_y ) )printf("O");//输出小球else if( j == width)printf("+");//输出右边框else if( i == high+1)printf("-");//输出下边框else if ( (i==high)&&(j>=left)&&(j<=right))printf("*");else if( (i==block_x1) && (j==block_y1) )printf("A");//输出砖块1else if( (i==block_x2) && (j==block_y2) )printf("B");//输出砖块2else if( (i==block_x3) && (j==block_y3) )printf("C");//输出砖块3elseprintf(" ");//输出空格}printf("\n");}printf("反弹小球数:%d\n",ball_number);printf("消掉的砖块数: %d\n",score);
}void updateWithoutInput()//与用户输入无关的更新
{if( ball_x == high -1){if( (ball_y>=left) && (ball_y<=right) )//被挡板挡住了{ball_number++;printf("\a");//响铃}else{printf("游戏失败\n");system("pause");exit(0);}}if( (ball_x == block_x1) && (ball_y ==block_y1) )//小球击中砖块1{score++;//分数加1block_y1=rand()%width;//产生新的砖块while((block_y1==block_y2) || ( block_y1==block_y3))//当新产生的砖块和其他砖块重合时{block_y1=rand()%width;//产生新的砖块}}if( (ball_x == block_x2) && (ball_y ==block_y2) )//小球击中砖块2{score++;//分数加1block_y2=rand()%width;//产生新的砖块while((block_y2==block_y1) || ( block_y2==block_y3))//当新产生的砖块和其他砖块重合时{block_y2=rand()%width;//产生新的砖块}}if( (ball_x == block_x3) && (ball_y ==block_y3) )//小球击中砖块3{score++;//分数加1block_y3=rand()%width;//产生新的砖块while((block_y3==block_y1) || ( block_y3==block_y2))//当新产生的砖块和其他砖块重合时{block_y3=rand()%width;//产生新的砖块}}ball_x = ball_x + ball_vx;ball_y = ball_y + ball_vy;if( (ball_x == 0 ) || (ball_x == high-1 ))ball_vx = -ball_vx;if( (ball_y == 0 ) || (ball_y == width-1 ))ball_vy = -ball_vy;Sleep(66);
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input = getch();if( input == 'a' || input == 'A' ){position_y--;//位置左移left = position_y-ridus;right = position_y+ridus;}if( input == 'd' || input == 'D' ){position_y++;left = position_y - ridus;right = position_y + ridus;}}
}
int main(void)
{startup();//数据的初始化while(1){show();//显示画面updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}

效果图如下:

项目: 用函数实现反弹球消砖块相关推荐

  1. 项目: 用数组实现反弹球消砖块

    项目:用数组实现反弹球消砖块 一.效果展示: 二.代码如下: 一.效果展示: 二.代码如下: #include<stdio.h> #include<string.h> #inc ...

  2. C语言实现【小游戏——反弹球消砖块】

    目录: 1.目标要求: 2.C语言代码: 3.运行结果: 1.目标要求: 1.击中上方方块'H',分数加1 2.下方控制线没有接到小球时,游戏结束 2.C语言代码: #include<stdio ...

  3. 【C语言】数组反弹球消砖块

    数组反弹球消砖块 一.模板 二.反弹球 三.增加挡板 四.消砖块和计数功能 五.最终成果 一.模板 简单的模板,目前由头文件,全局变量,清屏函数,初始化数据,显示画面,与用户有关的更新,与用户无关的更 ...

  4. C语言——反弹球消砖块

    目录 前言 一.小球代码的重构 函数 二. 实现游戏的边框 三.显示移动挡板 四.反弹小球 五.消除砖块 六.玩家输入 getchar() kbhit() 七.结尾--最后实现的代码 #define ...

  5. 【C语言】反弹球消砖块游戏

    目录 0. 前期准备 1. 打印小球 2. 显示边界 3. 显示挡板 Tip one Tip two 4. 控制挡板

  6. 项目: 用easyx实现消砖块

    目录 一.最终效果展示 二.绘制静态的挡板 三.控制挡板 四.消砖块 五.鼠标交互 一.最终效果展示 效果图如下: 这个项目还是有很多的细节漏洞的.例如: 边界控制这里还是有点问题的. 二.绘制静态的 ...

  7. VUE+Canvas 实现桌面弹球消砖块小游戏

    大家都玩过弹球消砖块游戏,左右键控制最底端的一个小木板平移,接住掉落的小球,将球弹起后消除画面上方的一堆砖块. 那么用VUE+Canvas如何来实现呢?实现思路很简单,首先来拆分一下要画在画布上的内容 ...

  8. c语言1000内亲密对数,《C语言程序的设计上机指导》项目五函数及其应用.pptx

    <C语言程序的设计上机指导>项目五函数及其应用.pptx 项目五 函数及其应用 本章重点 文本 C语言程序结构. 函数定义与函数声明. 函数的调用. 变量的存储属性. 任务一 关于函数应用 ...

  9. Vue项目—请求函数的封装

    Vue项目-请求函数的封装 import axios from 'axios'export const post = (url, data = {}) => {return new Promis ...

最新文章

  1. python 装饰器 参数-python装饰器的详细解析
  2. 出错页面webpar的t删除
  3. php json返回sql,php – 如何从我的特定SQL查询中返回json?
  4. 能让你的Intellij IDEA 起飞的几个设置(设置背景 字体 快捷键 鼠标悬停提示 提示忽略大小写 取消单行显示)
  5. windows下JAVA环境变量配置
  6. 演示Go语言多返回值功能
  7. linux中split分割文件打开方式,Linux系统下使用split命令分割大文件 (转载)
  8. js fmt 时间失败,解决方案
  9. android studio获取数字签名,Android应用开发Android Studio数字签名打包apk图文步骤教程...
  10. eclipse java字体 太小,如何在Eclipse for Java文本编辑器中更改字体大小?
  11. python qq群_用Python玩转QQ群论坛
  12. SDK开发技术规范总结
  13. java openxml word_C#采用OpenXml实现给word文档添加文字
  14. 2022-2028全球全盘加密软件行业调研及趋势分析报告
  15. neo4j java 模糊搜索,Neo4j 使用cypher语言进行查询
  16. 用例图、活动图和顺序图的关系
  17. vuex入门到实战——实现一个todoList待办清单【学习记录】
  18. 如何找回删除的文件?挺高的恢复率!
  19. MarkDown编辑器 - MarkText使用文档
  20. 日历函数单元 (转)

热门文章

  1. 利用T-SQL语句创建数据表
  2. 浅谈JS的数组遍历方法
  3. SQLSERVER单表CRUD通用方法
  4. Hadoop集群_Eclipse开发环境设置
  5. ps里面的批处理教程
  6. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结
  7. Linux workqueue工作原理
  8. C++ Primer 5th笔记(chap 13 拷贝控制)=default
  9. [HDCTF2019]MFC
  10. 设计模式--门面(Facade)模式