做游戏,学编程(C语言) 1 实现弹跳小球
没想到这里的一篇文章(对于一个大一计科新生,有什么代码行数在500~1000的程序(c语言)可以试着写来练手? - 计算机科学 - 知乎),有这么多的同学点赞,谢谢大家的支持!
知乎我玩的比较少,应不少同学的要求,开始试着开一个系列的教程:做游戏,学编程。有问题大家可以反馈给我改进。
首先,这个教程不会讲解C语言的基础知识,大家可以找些经典的教材,在每次教程前,我会写上所需的基础语法知识,大家可以事先学习。主要会给多个步骤的代码,每个步骤提供对应的要求,以及相应的参考代码。大家可以先在前一个步骤代码的基础上,自己尝试实现下一个步骤的要求;如果有困难的话,再参考我们给出的代码。
这次教程,我们实现一个弹跳小球。缺省编译器为VC,需要学习完基础的变量、运算符、表达式,printf、scanf输入输出函数的用法,if-else、while、for语句的用法。
第1步,显示静止的小球。效果为:
// 在坐标(x,y)处输出一个小球
#include <stdio.h>
void main()
{int i,j;int x = 5;int y = 10; // 输出小球上面的空行
for(i=0;i<x;i++)printf("\n");// 输出小球左边的空格
for (j=0;j<y;j++)printf(" ");printf("o"); // 输出小球o
printf("\n");
}
第二步,通过改变小球坐标的变量,让小球下落
#include <stdio.h>
#include <stdlib.h>
void main()
{int i,j;int x = 1;int y = 10;for (x=1;x<10;x++){system("cls"); // 清屏函数
// 输出小球上面的空行
for(i=0;i<x;i++)printf("\n");// 输出小球左边的空格
for (j=0;j<y;j++)printf(" ");printf("o"); // 输出小球o
printf("\n"); }
}
这里利用了一个清屏函数system("cls");,只需要加上头文件#include <stdlib.h>即可。
第三步,实现小球的上下弹跳,在上面一步代码的基础上,增加记录速度的变量,小球的新位置=旧位置+速度。判断小球到达上下边界时,速度改变方向,即改变正负号。
#include <stdio.h>
#include <stdlib.h>
void main()
{int i,j;int x = 5;int y = 10;int hight = 20;int velocity = 1;while (1){x=x+velocity;system("cls"); // 清屏函数
// 输出小球前的空行
for(i=0;i<x;i++)printf("\n");for (j=0;j<y;j++)printf(" ");printf("o"); // 输出小球o
printf("\n"); if (x==hight)velocity = -velocity;if (x==0){velocity = -velocity;} }
}
第四步,让程序更有趣,让小球斜着弹跳。主要思路是增加x,y两个方向的速度控制变量,一个碰到上下边界后改变正负号,一个碰到左右边界后改变正负号。
#include <stdio.h>
#include <stdlib.h>
void main()
{int i,j;int x = 0;int y = 5;int velocity_x = 1;int velocity_y = 1;int left = 0;int right = 20;int top = 0;int bottom = 10;while (1){x = x+velocity_x;y = y+velocity_y;system("cls"); // 清屏函数
// 输出小球前的空行
for(i=0;i<x;i++)printf("\n");for (j=0;j<y;j++)printf(" ");printf("o"); // 输出小球o
printf("\n"); if ((x==top)||(x==bottom))velocity_x = -velocity_x;if ((y==left)||(y==right))velocity_y = -velocity_y; }
}
大家尽量养成良好的编码习惯,上面的边界坐标尽量不要在程序中写数字,可以用定义的变量或常量。这样程序可读性更好,后面也更容易调整。
第五步,介绍一个Sleep函数,可以让游戏中间等待,从而可以控制小球弹跳的速度。使用这个函数,需要#include<windows.h>
#include <stdio.h>
#include <stdlib.h>
#include<windows.h>
void main()
{int i,j;int x = 0;int y = 5;int velocity_x = 1;int velocity_y = 1;int left = 0;int right = 20;int top = 0;int bottom = 10;while (1){x = x + velocity_x;y = y + velocity_y;system("cls"); // 清屏函数
// 输出小球前的空行
for(i=0;i<x;i++)printf("\n");for (j=0;j<y;j++)printf(" ");printf("o"); // 输出小球o
printf("\n"); Sleep(50); // 等待若干毫秒
if ((x==top)||(x==bottom))velocity_x = -velocity_x;if ((y==left)||(y==right))velocity_y = -velocity_y; }
}
这里出个思考题,如果没有sleep函数的话,能否利用循环,实现小球速度变慢的效果?
另外,大家可以尝试下 printf("\a"); 实现小球碰到边界时响铃。
下一个教程:最简单的飞机游戏: 知乎专栏
做游戏,学编程(C语言) 1 实现弹跳小球相关推荐
- 视频教程-做游戏学Python-Python语言快速入门-Python
做游戏学Python-Python语言快速入门 20年软件项目开发管理经验 工信部人才交流中心特聘专家讲师 日本U-CAN在线教育特聘主任讲师 国家十二·五规划软件工程教材作者(书:清华大学出版社出版 ...
- 教孩子学编程 python语言版_教孩子学编程 PYTHON语言版 PDF_IT教程网
资源名称:教孩子学编程 PYTHON语言版 PDF 资源目录: 第1章Python基础--认识环境1 1.1认识Python3 1.2用Python编写程序5 1.3运行Python程序5 1.4本章 ...
- python教孩子学编程,教孩子学编程(Python语言版)
教孩子学编程(Python语言版) 第1 章 Python 基础:认识环境 #NiceHexSpiral.py #运行后,挺奇特,整个作画过程,完全呈现. import turtle colors=[ ...
- 但凡原神有二十树脂,我也不会来学编程(c语言)
但凡原神有二十树脂,我也不会来学编程(c语言)<第一天> 编程小白一只,从今天开始,将在本专栏记录本人学习编程的过程与心得~来自甘肃,普通双非,由于地域影响,想要在计算机方面得到好的出路, ...
- c语言大作业-弹跳小球
前言,我是一名大一新生 c语言入门新手 这是我第一次分享代码,记录一下我大学c语言学习过程 这个弹跳小球代码是我们小组的大作业 主要实现的功能是,小球在框内弹跳,碰壁响铃反馈 底部玩家使用键盘ad控制 ...
- 少儿编程python线上课程-少儿编程课堂|python – 用游戏学编程
学习编程是很快乐的事情.当我们自己开发出一套时下流行的游戏时,这满满的成就感比玩儿游戏本身高出了不知道会有多少倍. 接下来一段时间我们就python从0开始学习怎么开发 flappy brid 游戏. ...
- python编程少儿游戏编程_少儿编程课堂|python – 用游戏学编程
学习编程是很快乐的事情.当我们自己开发出一套时下流行的游戏时,这满满的成就感比玩儿游戏本身高出了不知道会有多少倍. 接下来一段时间我们就python从0开始学习怎么开发 flappy brid 游戏. ...
- 优的python少儿编程课_少儿编程课堂|python – 用游戏学编程
学习编程是很快乐的事情.当我们自己开发出一套时下流行的游戏时,这满满的成就感比玩儿游戏本身高出了不知道会有多少倍. 接下来一段时间我们就python从0开始学习怎么开发 flappy brid 游戏. ...
- 学编程c语言高考能加分吗,学好编程,中高考都能加分,还能保送清华北大!...
原标题:学好编程,中高考都能加分,还能保送清华北大! 前段时间,我跟一位母亲聊起现在的中考.高考,她大是不以为然,为什么?这位母亲跟我诉苦,说她家老大上半年备战中考,每天都早起晚睡地复习,全家都跟着一 ...
- 做软件学c易语言可以吗,怎么样做一个易语言程序:
呵呵,楼主和我当初一样的迷惑. 我当初啃C语言的时候,也是想用C语言做界面出来,走了很多冤枉路,这里希望能给楼主一些提示. 如果你想用"纯"C来做界面的话,那么我会很肯定的告诉你, ...
最新文章
- 深入理解分布式技术 - 微服务为什么需要API 网关
- 256qam调制星座图_5G调制怎么实现的?一文读懂
- NET问答: 如果动态构建 Query 查询 EntityFramework
- post 请求 argument type mismatch_Flask-RESTful 请求解析
- 《三国志》生僻人名读法集(zz)
- ICP算法(Iterative Closest Point迭代最近点算法)
- 2013-07-23 IT 要闻速记快想
- 又是一岁,又是一年,又是新的开端【我与51CTO的故事】
- SQL Server 两个时间段的差and时间截取到时分
- java网络编程小结(黑马程序员基础java总结)
- LiveGBS国标GB/T28181|GB35114流媒体服务(LiveSMS)如何配置节点集群
- 【信息安全导论】HIT2022春季学期《信息安全导论》复习概要
- 3D打印gcode命令大全及解析
- MCGrating光栅设计软件
- 游戏策划笔记:记忆点的构造
- 温哥华岛大学计算机科学,温哥华有哪些知名大学排名(温哥华地区大学排名一览)...
- 中易云 易云系统 电镀废水处理远程监控解决方案
- NotePad++安装HEX-Editor插件
- 怎么下载老版本android,剪映旧版下载
- 入行程序员培训还是不培训
热门文章
- 【less-6】sqli-labs靶场第六关(类似less-5)
- 求不小于N且二进制串包含K个1的最小的数字
- VMware中linux访问共享文件夹设置流程
- 机器学习之降维方法(LDA、PCA)小结
- JS小技巧 ----- 遍历一个对象中所有属性
- leetcode944. Delete Columns to Make Sorted
- leetcode946. Validate Stack Sequences
- 敏捷开发绩效管理之三:个体动力之源——同行压力(松结对编程,师徒制度,跨职能团队,绩效考核)...
- favicon.ico 404的问题(title栏前面的图标)
- mysql无法启动服务,错误1067