目录

前言

飞翔小鸟的代码

实现代码

1、下落的小鸟

2、打印障碍物

3、移动障碍物

4、判断是否相撞

5、障碍物的循环出现

总结


前言

代码参考了《C语言课程设计与游戏开发实践教程》

小游戏介绍:

玩家通过空格键来控制正在下落的小鸟 ' @ ' 飞起来,并躲过障碍物 ' * '。

飞翔小鸟的代码

首先我们来看整个的代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>// 全局变量
int high, width;                   // 游戏画面大小
int bird_x, bird_y;                // 小鸟的坐标
int bar1_y, bar1_xDown, bar1_xTop; // 障碍物1的相关坐标
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 = 20;width = 20;bird_x = high / 2;bird_y = 3;bar1_y = width;bar1_xDown = high / 3;bar1_xTop = high / 2;score = 0;
}void show() // 显示画面
{gotoxy(0, 0); // 光标移动到原点位置,以下重画清屏int i, j;for (i = 0; i < high; i++){for (j = 0; j < width; j++){if ((i == bird_x) && (j == bird_y))printf("@"); //   输出小鸟else if ((j == bar1_y) && ((i < bar1_xDown) || (i > bar1_xTop)))printf("*"); //   输出墙壁elseprintf(" "); //   输出空格}printf("\n");}printf("得分:%d\n", score);
}void updateWithoutInput() // 与用户输入无关的更新
{bird_x++;bar1_y--;if (bird_y == bar1_y){if ((bird_x >= bar1_xDown) && (bird_x <= bar1_xTop))score++;else{printf("游戏失败\n");system("pause");exit(0);}}if (bar1_y <= 0) // 再新生成一个障碍物{bar1_y = width;int temp = rand() % (int)(high * 0.8);bar1_xDown = temp - high / 10;bar1_xTop = temp + high / 10;}Sleep(150);
}void updateWithInput() // 与用户输入有关的更新
{char input;if (kbhit()) // 判断是否有输入{input = getch(); // 根据用户的不同输入来移动,不必输入回车if (input == ' ')bird_x = bird_x - 2;}
}int main()
{startup(); // 数据初始化while (1)  //  游戏循环执行{show();               // 显示画面updateWithoutInput(); // 与用户输入无关的更新updateWithInput();    // 与用户输入有关的更新}return 0;
}

接下来再来对代码进行一一解析

实现代码

1、下落的小鸟

首先我们来实现一个移动光标到指定位置的函数

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);
}

GetStdHandle函数:具体请看这里

SetConsoleCursorPosition:具体请看这里

接下来我们就开始打印小鸟 ' @ ' ,这里我将打印小鸟放在了显示所有画面的函数中

void show() // 显示画面
{gotoxy(0, 0); // 光标移动到原点位置,以下重画清屏int i, j;for (i = 0; i < high; i++){for (j = 0; j < width; j++){if ((i == bird_x) && (j == bird_y))printf("@"); //   输出小鸟else if ((j == bar1_y) && ((i < bar1_xDown) || (i > bar1_xTop)))printf("*"); //   输出墙壁elseprintf(" "); //   输出空格}printf("\n");}printf("得分:%d\n", score);
}

实现小鸟的打印后我们就要开始让小鸟实现下落了,这里只需要让小鸟的横坐标增加就可以了。纵坐标就不要动了,让障碍物的移动来让小鸟看起来是在移动,而障碍物没有移动。

2、打印障碍物

同上面的打印下落的小鸟,这里我们先实现静止的障碍物(也就是墙壁 ' * '),障碍物的移动和小鸟的移动我们统一放在同一个函数里面。

void show() // 显示画面
{gotoxy(0, 0); // 光标移动到原点位置,以下重画清屏int i, j;for (i = 0; i < high; i++){for (j = 0; j < width; j++){if ((i == bird_x) && (j == bird_y))printf("@"); //   输出小鸟else if ((j == bar1_y) && ((i < bar1_xDown) || (i > bar1_xTop)))printf("*"); //   输出墙壁elseprintf(" "); //   输出空格}printf("\n");}printf("得分:%d\n", score);
}

3、移动障碍物

当我们打印障碍物后就来实现障碍物的移动。和之前我们移动小鸟一样,让障碍物的横坐标减小就可以了。这个时候会发现小鸟和障碍物的移动速度太快了,处理这个问题,我们就要使用一个函数( Sleep() )来实现这个功能。

Sleep() 函数:具体请看这里

4、判断是否相撞

我们已经将小鸟和障碍物都打印出来了,接下来我们就要来实现判断小鸟和障碍物是否相撞(判断小鸟的坐标和障碍物的坐标有没有重合,没有重合就表明两者没有相撞,重合就表明两者想相撞了)。

void updateWithoutInput() // 与用户输入无关的更新
{bird_x++;bar1_y--;if (bird_y == bar1_y){if ((bird_x >= bar1_xDown) && (bird_x <= bar1_xTop))score++;else{printf("游戏失败\n");system("pause");exit(0);}}if (bar1_y <= 0) // 再新生成一个障碍物{bar1_y = width;int temp = rand() % (int)(high * 0.8);bar1_xDown = temp - high / 10;bar1_xTop = temp + high / 10;}Sleep(150);
}

相撞了就结束游戏,没有就继续生成障碍物,同时分数加一(分数可以增加别的分数)。

5、障碍物的循环出现

没有相撞就重新生成障碍物,这里用随机数来生成。

    if (bar1_y <= 0) // 再新生成一个障碍物{bar1_y = width;int temp = rand() % (int)(high * 0.8);bar1_xDown = temp - high / 10;bar1_xTop = temp + high / 10;}

写到这里就已经结束了,下次再见。

总结

飞翔的小鸟主要就是通过移动光标来打印符号、符号位置的变化以及判断符号之间的位置是否重合。

C语言——简单版的飞翔小鸟相关推荐

  1. 杨辉三角(C语言简单版)

    杨辉三角形 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数. 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加. 下面给出了杨辉三角形的前4行: 1 1 1 ...

  2. C语言实现简单版Linux的cp命令

    C语言实现简单版的Linux的cp命令 前言: ​ 这是我的第一篇CSDN文章,写的不够好的地方有请各路大神指正.本人也是接触代码时间很短,在这里希望把自己学习到的知识写成一些有用的代码.后面有空的话 ...

  3. c语言之简单版的图书检索系统

    开发一个简单版的图书检索系统,图书信息包括:编号.作者.书名.出版社.类型.价格.出版日期. 采用简单的c语言语法,结合结构体及自定义函数实现,让大一初学者也能够看懂. 该程序可实现功能(可根据个人需 ...

  4. c语言编程简单小游戏坦克大战,坦克大战1990(c语言文件版)游戏

    坦克大战1990(c语言文件版)是一款很炫的坦克战争类游戏.游戏设计感很强.敌人千变万化,但是你可别被迷惑哦,将他们通通歼灭吧! 作者的话 经过四五天的奋斗,第一次编的游戏终于完成了,好激动. 首先得 ...

  5. PTA浙大版python程序设计题目集--第1章-3 输出“Python语言简单易学” (10 分)

    输入格式: 无 输出格式: 输出一句短语,Python语言简单易学. 如果包含汉字,用"print(s.encode("utf-8"))"输出. 如: s=&q ...

  6. 狼人杀c语言代码,1089 狼人杀-简单版——C/C++实现

    题目 1089 狼人杀-简单版 (20 point(s)) 以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀&quo ...

  7. 铃儿响叮当c语言编程,铃儿响叮当吉他谱C调简单版儿歌

    铃儿响叮当 曲目介绍 1857年,美国波士顿假日学校的学生在教堂有一场感恩节演出,学生们请邻居皮尔彭特写了一首新歌,轻快的旋律让孩子们马上就学会了,这首名为"One Horse Open S ...

  8. 游戏开发的HelloWorld,快速入门,新手上路,使用CocosCreator+JS,flyBird(飞翔小鸟)

    游戏开发的HelloWorld,快速入门,新手上路,使用CocosCreator+JS,flyBird(飞翔小鸟) 介绍 开发环境 游戏原理 文件结构 详细操作 全部代码 介绍 拓展什么的都没有,真正 ...

  9. 主流WEB开发语言简单对比(转)

    主流WEB开发语言简单对比  原文链接:http://www.uml.org.cn/site/201401091.asp   随着时间的飞逝,随着岁月的流失.从世界上第一台计算机ENIAC诞生至今,已 ...

最新文章

  1. 2022-2028年中国顺丁橡胶行业发展模式分析及市场分析预测报告
  2. GPSInfoProvider定位
  3. HAProxy实现动静分离
  4. shell脚本实现无密码交互的SSH自动登陆
  5. IE的documentMode属性
  6. 大数据学习笔记38:Hive - 内置函数(1)
  7. wp实例开发精品文章源码推荐(8.20)
  8. 滴普科技,全场景数据智能服务商
  9. 成为JavaGC专家Part II — 如何监控Java垃圾回收机制
  10. 数据库中的超键 候选键 主键 外键
  11. vue中的混入mix
  12. 微博 php7,PHP_迁移PHP版本到PHP7,今天看到微博上说phpng也就是ph - phpStudy
  13. Python 用10行代码教你画出太阳花
  14. Office EXCEL 如何保留两位小数,四舍五入
  15. the specified jre installation does not exist 规定的jre没有安装
  16. 思维导图 基础篇(06)思维方法-曼陀罗思考法
  17. Latex排版,表格标题总是出现在下方的解决方案
  18. 有意思的hand-crafted features based IQA的论文吧2(图像质量评价)
  19. 贴纸UI效果如何制作,4个做贴纸效果的小技巧
  20. 百万军师v1.0——直播答题答案快速搜索

热门文章

  1. excel xml mysql数据库,数据库文本文档excel表格-excel xml格式的文件 导入到 MYSQL 数据库的语句...
  2. 最全的sublime插件整理
  3. 【技术分享】思科设备ISIS配置
  4. vue element-ui实现获取短信验证码 ,60秒倒计时及页面
  5. CF1491C Pekora and Trampoline
  6. 韩国的品牌创造之路(上)
  7. Promise的用法及如何解决回调地狱
  8. idea编译Java项目的部分java文件并且生成class文件
  9. 阿里巴巴大神发布的Java零基础笔记,实战教程多到手软,跪了
  10. 2023.04.16 学习周报