弹跳小球

关键

1.清屏函数,system("cls");,来自于conio.h函数库

#include<conio.h>

结合循环达到刷新的目的。

2.利用两个for循环,将(x,y)位置的小球打印出来

int i,j;
int x=N;               //常熟N
int y=M;               //常数M
for(i=0;i<x;i++)       printf("\n");      //第x行
for(j=0;j<y;j++)       printf(" ");       //第y列
printf("o");           //打印出小球

3.利用小球的位置等于边界值更改速度正负达到弹跳的目的

if(x==top||x==bottom) velocity_x=-velocity_x;
if(y==left||y==right) velocity_y=-velocity_y;

4.控制小球弹跳的速度:Sleep(int n)函数(windows.h库),n的含义为暂停n毫秒。

5.在初始化小球的位置时,注意x不能大于bottom,y不能大于right,这两个边界值,否则一开始就超出边界无法达到弹跳的目的

完整代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
int main(){int i,j;int x=1;int y=5;int left=0;int right=20;int top=0;int bottom=10;int velocity_x=1;int velocity_y=1;while(1){x+=velocity_x;y+=velocity_y;system("cls");for(i=0;i<x;i++)printf("\n");for(j=0;j<y;j++)printf(" ");printf("o");printf("\n");Sleep(50);if(x==top||x==bottom) velocity_x=-velocity_x;if(y==left||y==right) velocity_y=-velocity_y;}return 0;
} 

进阶

1.利用printf("\a")实现小球碰到边界时响铃的效果。

2.为反弹小球绘制边框。

解答

1.只需在达到边界值if语句中的执行语句加入printf("\a")即可。

2.难度最大的是第二个进阶。

1)光标

是输出的小窗口中,开始输出显示的小光标。

2)移动光标函数

#include<windows.h>
void gotoxy(int x,int y)
{COORD pos;                                             //定义结构体变量pHANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);       //获取当前函数句柄pos.X=x;pos.Y=y;                                               //将光标到达的位置传递给结构体SetConsoleCursorPosition(handle,pos)  ;                //移动光标
}

这里可以联系到system函数的清屏操作,也是移动光标到(0,0)的位置将窗口缓冲区全部填充为空格并填充为默认颜色(清屏)

3)显示光标函数

void ShowCursor(bool visible) {            //显示或隐藏光标CONSOLE_CURSOR_INFO cursor_info = {20, visible};//CONSOLE_CURSOR_INFO结构体包含控制台光标信息,成员分别表示光标百分比厚度和是否可见SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);//SetConsoleCursorInfo设定控制台窗口的光标大小和是否可见
}

即在程序中,执行ShowCursor(true)为显示光标,ShowCursor(false)为隐藏光标。

隐藏光标的目的为减少光标闪烁的干扰

问题:

1.利用for循环绘制出边框

for(j=0;j<=right;j++) printf("_"); printf("\n");//输出上边框
for(i=1;i<bottom;i++){printf("|");                                //循环输出左边框for(j=0;j<right-1;j++) printf(" ");printf("|\n");                              //循环输出右边框
}
for(j=0;j<=right;j++) printf("=");              //输出下边框  

2.将小球那一行的左边框会被覆盖,因此在打印小球时重新输出。

for(j=0;j<y;j++){if(j==0)printf("|");       //重新输出左边框else printf(" ");
}

3.保证边框和小球不会重合

if(x==top+1||x==bottom-1){velocity_x=-velocity_x;printf("\a");}
if(y==left+1||y==right-1){velocity_y=-velocity_y;printf("\a");
}
//对左边界+1,右边界值-1

最终进阶后的完整代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
void gotoxy(int x,int y)//光标定位函数
{COORD pos;//定义结构体变量pHANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);//获取当前函数句柄pos.X=x;pos.Y=y;//将光标的目标移动位置传递给结构体SetConsoleCursorPosition(handle,pos);//移动光标
}
void ShowCursor(bool visible) {            //显示或隐藏光标CONSOLE_CURSOR_INFO cursor_info = {20, visible};//CONSOLE_CURSOR_INFO结构体包含控制台光标信息,成员分别表示光标百分比厚度和是否可见SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);//SetConsoleCursorInfo设定控制台窗口的光标大小和是否可见
}int main(){int i,j;int x=1;int y=5;int left=0;int right=20;int top=0;int bottom=10;ShowCursor(false); int velocity_x=1;int velocity_y=1;while(1){x+=velocity_x;y+=velocity_y;system("cls");for(j=0;j<=right;j++) printf("_"); printf("\n");for(i=1;i<bottom;i++){printf("|");for(j=0;j<right-1;j++) printf(" ");printf("|\n"); }for(j=0;j<=right;j++) printf("=");gotoxy(0, 0);for(i=0;i<x;i++)printf("\n");for(j=0;j<y;j++){if(j==0)printf("|");else printf(" ");}printf("o");printf("\n");Sleep(50);if(x==top+1||x==bottom-1){velocity_x=-velocity_x;printf("\a");}if(y==left+1||y==right-1){velocity_y=-velocity_y;printf("\a");}}return 0;
} 

1.1弹跳小球||大一C语言实现相关推荐

  1. 做游戏,学编程(C语言) 1 实现弹跳小球

    没想到这里的一篇文章(对于一个大一计科新生,有什么代码行数在500~1000的程序(c语言)可以试着写来练手? - 计算机科学 - 知乎),有这么多的同学点赞,谢谢大家的支持! 知乎我玩的比较少,应不 ...

  2. c语言大作业-弹跳小球

    前言,我是一名大一新生 c语言入门新手 这是我第一次分享代码,记录一下我大学c语言学习过程 这个弹跳小球代码是我们小组的大作业 主要实现的功能是,小球在框内弹跳,碰壁响铃反馈 底部玩家使用键盘ad控制 ...

  3. 【C语言练习】1.1弹跳小球

    [C语言练习]1.1弹跳小球 声明: 此片作为博主学习记录 #程序代码 实现限定区域内小球弹跳的效果 #include<stdio.h> #include<stdlib.h> ...

  4. c语言初级小游戏 · 弹跳小球 | 激发你的编程兴趣(约50行代码)

    目录 前言 需要的知识点 清屏函数system("cls") Sleep函数 标识符的命名 先浅做一个会跳的小球 再让小球完整的跳 前言 声明:本游戏参考<c语言课程设计与游 ...

  5. c语言程序设计小球弹跳,c语言小游戏程序之弹跳小球的实现代码

    现在说一下其中一个最简单的小程序:弹跳小球 ---------------LINE---------------- 首先我们知道,在窗口的坐标系原点是在窗口左上角的,如图所示 然后我们如果想在这个坐标 ...

  6. C语言小游戏快速入门--弹跳小球

    目录 一.前言 二.弹跳小球的实现 2.1.界面设置 2.2.弹跳逻辑 1. game.h 2. game.c 3. test.c 三.总结 一.前言 相信很多小伙伴在学习完C语言语法之后就想要做几个 ...

  7. c语言编写双人弹跳小球游戏

    /*日期:2019年3月2日项目:双人弹跳球游戏 */ #include<stdio.h> #define MAX 100 #include<windows.h> #inclu ...

  8. 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc

    昆明理工大学大一C语言大作业题目 综合性实践排序求平均值(包括将数拆散求最大最小值).函数ReadDat()随机产生100个存放到数组aa中00个jsSort()函数的功能是:进行降序排列.最后调用函 ...

  9. 大学c语言程序设计期末考试试卷,大学大一c语言程序设计期末考试试卷及答案.doc...

    大学大一c语言程序设计期末考试试卷及答案.doc 计算机科学学院C语言程序设计试卷A第1页(共8页)四川师范大学计算机科学学院20122013学年度第二学期期末考试C语言程序设计试卷试卷A答卷说明1. ...

最新文章

  1. linux cpu频率软件,linux cpu频率控制
  2. 木马爱修改的常见注册表项及其功能
  3. c语言中 %s 占几个字节,printf(%*s%s%*s,——)是什么?
  4. 75-100-020-测试-MySQL 单表优化案例
  5. matlab单机带负荷系统模型,用MATLAB仿真实现电力系统静态稳定性分析
  6. NYOJ-非洲小孩(贪心)
  7. php 重写sessionid,PHP 重置 phpsessionid
  8. 思科中如何给服务器添加个人信息,使用 RADIUS 服务器进行的外部 Web 身份验证...
  9. Chapter3.3:时域分析法
  10. 2019年计算机一级考试pdf,2019年计算机一级考试试题及答案.pdf
  11. inurl:faq.php?action=,什么是财富等级 | 帮助 | 酷狗直播 | 就是歌手多
  12. 在ESC云服务器中部署KodCloud云盘系统(四)
  13. 各个编程语言都有哪些「黑点」?
  14. 如何给图片降噪?看完你就学会了
  15. 34岁程序员面试美团被拒绝:只招30岁以下,卖力能加班工资又少的
  16. 如何进行音频录制?实用的音频录制方法合集
  17. oracle v backup,睿备份oracle下载
  18. 牛逼!百度大佬深度分享AI助力RNA二级结构预测!
  19. Eclipse-sdcc学习(fedoar 14)
  20. 新浪财经新闻爬取并进行舆情分析

热门文章

  1. 使用集中式身份管理服务详解
  2. 优秀团队建设-美国式团队!
  3. 读书笔记 - 《合伙人:如何发掘高潜力人才》
  4. 软件设计模块之间7种耦合关系
  5. 数据中心低压配电系统能耗分析与PUE计算
  6. 删除OCR文字识别软件中的机密信息的教程
  7. rt_thread 如何修改单个串口波特率
  8. 设计模式之内功心法-设计原则
  9. python场景文字识别_chineseocr
  10. error 2059 C语言,求助大神指点,error C2059: syntax error : 'constant'