C语言实现弹小球游戏

编译环境:vs2019

需求:
小球在控制台界面内不停移动,碰到边界则改变方向,控制棍子接住小球,得分加一,小球没有被接住则游戏结束。

思路:
_getch()函数接收a、d两个字符控制控制棍子移动,使棍子接住小球小球y轴则自减,碰到边界再重新弹回来,接住一次小球得分加一。

做法:
做出小球运动效果的关键就是:通过一个变量控制小球的运动方向,这个变量根据碰到的边界和他当前的值做出改变,从而向一个与飞过来的方向完全相反的方向移动。
再设置小球只有在碰到棍子所在的下边界之后才会上弹,没有碰到棍子所在的下边界则结束游戏。

难点:
小球的运动效果。

说明:
弹小球小游戏程序除了创意是我第一个自己独立写出来的小程序,相比较我写过的几个其他的程序他是最简单的,因为他的核心部分只需要用单个变量就可以写出来,不需要统计多个数据。
我看到的弹小球游戏原本的程序的游戏目标是弹中上边界所有的砖块,但是因为要实现这个效果要更复杂一些,所以我当时为了简略,直接写成了只统计分数的简易版本。

注意:
由于编译器原因程序中_kbhit()和_getch()函数可能在其他编译器上编译会出现错误,解决办法是去掉函数前面的“_”。

运行效果:

代码实现:

#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <time.h>

void gotoxy(int x, int y); //光标定位函数
void anxfx(); //棍子移动
void yxcsh(); //游戏界面初始化
void txqhs(); //弹小球函数
void xtpdhs(); //判断小球运动方向函数
void hzxqhs(); //绘制小球函数
void function(); //功能实现**
void HideCursor(); //隐藏光标函数
void pdyxjs(); //游戏结束

int _x = 0, _y = 0; //小球的x和y坐标
int ab = 1, ab2 = 1; //用于控制开关
int xdir = 0, ydir = 0; //小球运动方向 往右
int bs;
char an = ‘0’; //接收输入的方向键
int x = 36, x2 = 0, x3 = 0; //棍子的x坐标和清除重复字符
int sdf = 1; //判断棍子是否接住球,接住为1,不可以写成0
int n = 0; //游戏得分变量

int main()
{

yxcsh();                //游戏界面和计分
function();             //功能主函数return 0;

}

void yxcsh() //游戏界面
{
HideCursor(); //移除光标
system(“title 弹小球游戏”); //控制台标题
system(“mode con cols=80 lines=25”); //控制台界面大小

for (int i = 0; i < 80; i++)         //头部边界printf("_");gotoxy(23, x);
printf("========");                 //绘制初始棍子

}

void anxfx() //控制棍子移动
{
x2 = x + 7; //根据x的值确定需要在x2的位置输出空格,用来实现清除上一次的棍子的效果
x3 = x;

    gotoxy(23, x2-1);       //刚开始会有多出一个等号的漏洞,找不出问题printf(" ");    an = _getch();          //即使接收值的函数if (an == 'a'){x > 0 ? x-=2 :x;    //如果棍子移动的距离小于边界的距离则停下gotoxy(23, x2);printf("  ");       //用于清除上一次绘制的棍子}if (an == 'd'){x <= 71 ? x+=2 : x;gotoxy(23, x3);printf("  ");}gotoxy(23, x);printf("========");     //绘制下一次按键后的棍子

}

void txqhs() //小球运动函数
{
xtpdhs(); //判断函数

if (bs == 2)                    //下边一面if (_y >= 22) bs = 3;
if (bs == 1)if (_y >= 22) bs = 4;if (bs == 1)                    //右边一面if (_x >= 79) bs = 2;
if (bs == 4)if (_x >= 79) bs = 3;if (bs == 3)if (_y <= 1)  bs = 2;       //上边一面
if (bs == 4)if (_y <= 1)  bs = 1;if (bs == 3)if (_x <= 0)  bs = 4;       //左边一面
if (bs == 2)if (_x <= 0)  bs = 1;hzxqhs();                       //绘制小球函数

}

void xtpdhs() //变量sdf控制小球运动方向
{
if (_y>=22)
{
if (_x >= x && _x <= x2)
{
sdf = 1;
n++;
}
else
{
sdf = 0;
}
}

pdyxjs();
if (bs == 1)        //0是右,下
{_x++; _y++;
}
else if (bs == 2)
{_x--; _y++;
}
else if (bs == 3)
{_x--; _y--;
}
else if (bs == 4)
{_x++; _y--;
}

}

void pdyxjs()
{
if (sdf == 0 || n >= 20) //游戏结束条件
{
gotoxy(_y + 1, _x + 1);
printf(“o”);
Sleep(500);
gotoxy(_y + 1, _x + 1);
printf(" ");

    system("cls");gotoxy(10, 34);printf("游戏结束");gotoxy(12, 32);printf("最终得分:%d", n);if (n >= 20){gotoxy(14, 34);printf("您通关了!");}else{gotoxy(14, 32);printf("您没有弹中!");}gotoxy(21, 0);exit(0);
}

}

void hzxqhs() //绘制小球函数
{
gotoxy(_y, _x);
printf(“o”);

Sleep(100);gotoxy(_y, _x);
printf(" ");

}

void function() //总结函数
{
srand((unsigned)time(NULL)); //随机种子
_x = rand() % 79; //每次小球的初始x坐标为一个随机数

_x > 40 ? bs = 2 : bs = 1;          //因为小球初始的x坐标是一个随机数//所以这里针对他的x坐标确定他的初始运动方向while (1)
{gotoxy(0, 0);printf("得分:%d ", n);         //显示每次循环后分值if (_kbhit())                   //按下键盘时{gotoxy(23, 36);anxfx();                    //棍子的动画效果}txqhs();                        //小球动画效果
}

}

void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void gotoxy(int x, int y)
{
COORD pos = { y,x };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

不足之处:
因为这是我第一个单独完成的小程序,对c语言的使用还有很多不成熟的地方,比如在标识符定义、代码复用性、程序运行效率上海存在着很多问题。


作为一名c语言新手,我对未知的知识始终抱有学习和谦卑的态度,如有贵人能够对我的程序提出建议,我将不胜感激。

C语言 弹小球 小游戏(控制台)相关推荐

  1. 学习跃动小球小游戏(cocos creator)

    学习跃动小球小游戏 玩法:小球会不断的上下跳动,点击屏幕小球会加速掉落,下面的白色跳板一直在移动,小球需要准确的跳到跳板上才能得分. 效果图 [截图] ball脚本 小球碰撞回调 block脚本 初始 ...

  2. Html:简单实现弹砖块小游戏

    用html与js实现简单的弹砖块小游戏(初级) 用键盘的左右键控制一个板块让小球反弹,小球反弹到上面,与其相碰的砖块会消失,小球落地会重新开始游戏. 弹砖块小游戏--初级 第一部分body:要注意格式 ...

  3. 弹弹球小游戏(Java)

    游戏规则:利用键盘上的->或者<-控制方向,用球拍接住小球,否则游戏结束! 该代码主要利用了GUI的绘图,用Timer保证球拍和小球位置的更新,用适配器KeyAdapter获取用户的指令, ...

  4. C语言小游戏大全,C语言贪吃蛇小游戏(附源码)

    一.C语言小游戏大全,C语言贪吃蛇小游戏(附源码) 贪吃蛇小游戏源码和更多C语言课设项目小游戏源码免 费 下 载 链 接 如下: c语言项目课设小游戏源码资料压缩包.zip-C文档类资源-CSDN下载 ...

  5. JavaScript 弹弹球小游戏(二)

    新版弹弹球小游戏,在上一次的基础上,做了改进,可以任意添加小球,而且跑动时可以互不干扰 <html><head><meta charset="utf-8&quo ...

  6. C语言编写2048小游戏

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992424 2 ...

  7. C语言实现2048小游戏

    C语言实现2048小游戏-粤嵌GE6818嵌入式系统实训 部分功能演示视频. 实现的全部功能: 1.字模显示封面组员名字 2.完成2048游戏在板子上的运行 3.成功或者失败需要有标志也可以计分 4. ...

  8. C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训

    C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训 实现的全部功能: 功能演示: 版本介绍 简易版--大佬选这个 完整版--想保研.想得高分.想要装逼的同学选这个 至尊版--零基础的.想要装 ...

  9. C语言 剧情版小游戏

    C语言超简单小游戏,,,剧情版,,, 运行效果图: #include<stdio.h>int main() {/*第一关*/int a,b,c,d,e,f,g,h; // int yx=8 ...

最新文章

  1. 使用IntelliJ IDEA开发SpringMVC网站(一)开发环境
  2. style=background-image: url(__HOMEPAGE__/views/IMJ2V2/images/banner2.jpg)
  3. python无法打开文档_win32com Excel。应用程序无法打开任何文档
  4. 黑马程序员C语言基础(第七天)内存管理
  5. 最近遇到的jsfl开发问题总结
  6. delphi xe6 android ListView增加 Header或Footer 的方法
  7. 文字描边_巧用Illustrator“3D”和“凸出和斜角”功能,制作炫酷立体文字
  8. 完美的代价(蓝桥杯)
  9. 大赛评委共论技术趋势,大咖观点干货满满!
  10. IEquatable「T」和Equal详解
  11. Sauceware Audio Scorch for Mac - 嘻哈说唱音频乐器
  12. java中同步关键字_Java中的同步关键字
  13. 机器学习笔记(参考吴恩达机器学习视频笔记)16_决策树
  14. DOS命令教程 第二章——ping命令
  15. Java进制转换问题(详解)
  16. 围棋棋盘 -《跟小海龟学Python》案例代码
  17. 用 SQL 玩转世界银行全球 GDP 数据
  18. tp5实现短信注册,调用第三方接口,电话通知,和短信通知都可以。
  19. 基于Laravel 框架的内容管理系统
  20. rocksdb配置参数

热门文章

  1. eclipse快捷键——复制当前行到上一行或者下一行
  2. 【沐风老师】3DMAX随机挤出插件2DExtruder使用教程
  3. 使用Qt做一个简单计算器
  4. [Go] String型常用操作
  5. 开发工具篇第三讲:Maven从入门到实战
  6. matlab 冒号范围,MATLAB中冒号的用法
  7. 合服 两个服务器都有什么作用,阴阳师合服是什么意思?合服合区问题汇总详解[多图]...
  8. Linux内核之misc框架
  9. nginx 模糊匹配location写法
  10. WEB前端学习笔记-HTML