没想到这里的一篇文章(对于一个大一计科新生,有什么代码行数在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 实现弹跳小球相关推荐

  1. 视频教程-做游戏学Python-Python语言快速入门-Python

    做游戏学Python-Python语言快速入门 20年软件项目开发管理经验 工信部人才交流中心特聘专家讲师 日本U-CAN在线教育特聘主任讲师 国家十二·五规划软件工程教材作者(书:清华大学出版社出版 ...

  2. 教孩子学编程 python语言版_教孩子学编程 PYTHON语言版 PDF_IT教程网

    资源名称:教孩子学编程 PYTHON语言版 PDF 资源目录: 第1章Python基础--认识环境1 1.1认识Python3 1.2用Python编写程序5 1.3运行Python程序5 1.4本章 ...

  3. python教孩子学编程,教孩子学编程(Python语言版)

    教孩子学编程(Python语言版) 第1 章 Python 基础:认识环境 #NiceHexSpiral.py #运行后,挺奇特,整个作画过程,完全呈现. import turtle colors=[ ...

  4. 但凡原神有二十树脂,我也不会来学编程(c语言)

    但凡原神有二十树脂,我也不会来学编程(c语言)<第一天> 编程小白一只,从今天开始,将在本专栏记录本人学习编程的过程与心得~来自甘肃,普通双非,由于地域影响,想要在计算机方面得到好的出路, ...

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

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

  6. 少儿编程python线上课程-少儿编程课堂|python – 用游戏学编程

    学习编程是很快乐的事情.当我们自己开发出一套时下流行的游戏时,这满满的成就感比玩儿游戏本身高出了不知道会有多少倍. 接下来一段时间我们就python从0开始学习怎么开发 flappy brid 游戏. ...

  7. python编程少儿游戏编程_少儿编程课堂|python – 用游戏学编程

    学习编程是很快乐的事情.当我们自己开发出一套时下流行的游戏时,这满满的成就感比玩儿游戏本身高出了不知道会有多少倍. 接下来一段时间我们就python从0开始学习怎么开发 flappy brid 游戏. ...

  8. 优的python少儿编程课_少儿编程课堂|python – 用游戏学编程

    学习编程是很快乐的事情.当我们自己开发出一套时下流行的游戏时,这满满的成就感比玩儿游戏本身高出了不知道会有多少倍. 接下来一段时间我们就python从0开始学习怎么开发 flappy brid 游戏. ...

  9. 学编程c语言高考能加分吗,学好编程,中高考都能加分,还能保送清华北大!...

    原标题:学好编程,中高考都能加分,还能保送清华北大! 前段时间,我跟一位母亲聊起现在的中考.高考,她大是不以为然,为什么?这位母亲跟我诉苦,说她家老大上半年备战中考,每天都早起晚睡地复习,全家都跟着一 ...

  10. 做软件学c易语言可以吗,怎么样做一个易语言程序:

    呵呵,楼主和我当初一样的迷惑. 我当初啃C语言的时候,也是想用C语言做界面出来,走了很多冤枉路,这里希望能给楼主一些提示. 如果你想用"纯"C来做界面的话,那么我会很肯定的告诉你, ...

最新文章

  1. 深入理解分布式技术 - 微服务为什么需要API 网关
  2. 256qam调制星座图_5G调制怎么实现的?一文读懂
  3. NET问答: 如果动态构建 Query 查询 EntityFramework
  4. post 请求 argument type mismatch_Flask-RESTful 请求解析
  5. 《三国志》生僻人名读法集(zz)
  6. ICP算法(Iterative Closest Point迭代最近点算法)
  7. 2013-07-23 IT 要闻速记快想
  8. 又是一岁,又是一年,又是新的开端【我与51CTO的故事】
  9. SQL Server 两个时间段的差and时间截取到时分
  10. java网络编程小结(黑马程序员基础java总结)
  11. LiveGBS国标GB/T28181|GB35114流媒体服务(LiveSMS)如何配置节点集群
  12. 【信息安全导论】HIT2022春季学期《信息安全导论》复习概要
  13. 3D打印gcode命令大全及解析
  14. MCGrating光栅设计软件
  15. 游戏策划笔记:记忆点的构造
  16. 温哥华岛大学计算机科学,温哥华有哪些知名大学排名(温哥华地区大学排名一览)...
  17. 中易云 易云系统 电镀废水处理远程监控解决方案
  18. NotePad++安装HEX-Editor插件
  19. 怎么下载老版本android,剪映旧版下载
  20. 入行程序员培训还是不培训

热门文章

  1. 【less-6】sqli-labs靶场第六关(类似less-5)
  2. 求不小于N且二进制串包含K个1的最小的数字
  3. VMware中linux访问共享文件夹设置流程
  4. 机器学习之降维方法(LDA、PCA)小结
  5. JS小技巧 ----- 遍历一个对象中所有属性
  6. leetcode944. Delete Columns to Make Sorted
  7. leetcode946. Validate Stack Sequences
  8. 敏捷开发绩效管理之三:个体动力之源——同行压力(松结对编程,师徒制度,跨职能团队,绩效考核)...
  9. favicon.ico 404的问题(title栏前面的图标)
  10. mysql无法启动服务,错误1067