C语言实现反弹球小游戏

 更新时间:2020年02月24日 19:00:08   作者:Cielfire  
这篇文章主要为大家详细介绍了C语言实现反弹球小游戏,利用函数写的C语言小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家分享了C语言反弹球游戏的具体代码,供大家参考,具体内容如下

这是利用函数写的C语言小游戏,用来检验自己的学习成果

反弹球的实现主要有几个子函数组成

问题也在于如何实现小球的下落,以及碰撞得分等情况

#include<stdio.h>
 
#include<windows.h>
#include<conio.h>
 
//定义全局变量
int high,width; //游戏边界 
int ball_x,ball_y; //小球位置
int ball_vx,ball_vy; //小球速度
int position_x,position_y; //挡板中心坐标
int radius;  //挡板半径 
int left,right; //键盘左右边界 
int ball_number; //反弹小球次数
int block_x,block_y; //方块的位置 
int score; //消掉方块的个数 
 
void HideCursor() //隐藏光标 
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0};
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
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=18; //定义边界 
 width=26;
 
 ball_x=0; //小球坐标 
 ball_y=width/2;
 
 ball_vx=1; //小球速度方向 
 ball_vy=1;
 
 position_x=high-1; //挡板中心坐标
 position_y=width/2; 
 
 radius=5; //挡板半径
 
 left=position_y-radius; //键盘边界 
 right=position_y+radius;
 
 block_x=0;  //方块位置
 block_y=width/2-4; 
 
 ball_number=0; //反弹小球个数
 
 score=0; //消掉小球个数 
 
 HideCursor(); 
 } 
 
void show() //显示界面
{
 gotoxy(0,0);
 int i,j;
 for(i=0;i<=high;i++)
 {
 for(j=0;j<=width;j++)
 {
 if((i==ball_x) && (j==ball_y)) //输出小球 
 printf("0");
 else if((i==block_x)&& (j==block_y)) //输出滑块  //输出下边界 
  printf("@");
 else if(i==high)  //输出下边界 
  printf("-");
 else if(j==width)  //输出右边界 
  printf("|");
 else if((i==high-1)&&(j>left)&&(j<right)) 
  printf("*");
 else printf(" ");
 }
 printf("\n");
 }
 printf("反弹小球次数:%d\n",ball_number);
 printf("消掉小球个数:%d\n",score);
 } 
 
void updateWithoutInpute() //与用户输入无关的更新
{
 if(ball_x==position_x-1)  //小球撞到挡板 
 {
 if((ball_y>=left)&&(ball_y<=right))
 {
 ball_number++;
 //printf("\a");
 }
 else
 {
 printf("游戏失败\n");
 system("pause");
 exit(0);
 }
 }
 
 
 ball_x = ball_x + ball_vx; //小球向速度方向移动 
 ball_y = ball_y + ball_vy;
 
 if((ball_x==0) || (ball_x==high-2)) //小球撞到上下边界 
 ball_vx=-ball_vx;
 if((ball_y==0) || (ball_y==width-1)) //小球撞到左右边界 
 ball_vy=-ball_vy;
 
 if((block_x==ball_x) && (block_y==ball_y)) //小球撞到滑块 
 {
 block_y=rand()%width-1;
 score++;
 }
 Sleep(120);
 
 } 
 
void updateWithInpute() //与用户输入有关的更新
{
 char input;
 if(kbhit())
 {
 input=getch();
 if((input=='a')&&(left>=0))
 {
 position_y--;
 left=position_y-radius; //键盘边界 
 right=position_y+radius;
 }
 if((input=='d')&&(right<width))
 {
 position_y++;
 left=position_y-radius; //键盘边界 
 right=position_y+radius;
 } 
 }
 }
 
int main()
{
 system("color 2f");   //改变控制台颜色
 startup();
 while(1)
 { 
 show();     //显示界面
 updateWithoutInpute();  //与用户输入无关的更新
 updateWithInpute();   //与用户输入有关的更新
 }
 } 

小编之前也收藏了一段代码:C语言实现小球反弹,分享给大家

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
void ball()//1.画出小球
{
 printf("\t\t\t◎");
}
int main()
{
 int h=20;//球的高度初始化为20
 int i,j;//i是用来确定球的起点与终点,j是确定球的位置
 int der=1;//判断等于1时球下落,为0时球上升
 while(h>0)//高度大于0时,球都在动(当高度为0时停止)
 {
 if(der==1)
 {
 for(i=20-h;i<20;i++)//确定起点和终点 下落过程
 {
 system("cls");
 for(j=0;j<=i;j++)//确定球的位置
 {
  printf("\n");
 }
 ball();
 Sleep(50);
 }
 der=0;
 }
 else
 {
 h=h*8/9;//强起来高度是原来的9分之8
 for(i=20;i>=20-h;i--)//确定起点和终点 上升过程
 {
 system("cls");
 for(j=0;j<=i;j++)//确定球的位置
 {
  printf("\n");
 }
 ball();
 Sleep(50);
 }
 der=1;
 }
 
 }
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言详细讲解while语句的用法

    C语言详细讲解while语句的用法

    c语言while语句的使用语法如“while(condition) {statement(s);}”,该语句可以是单个语句,也可以是一个语句块,其条件可以是任意表达式,true是任意非零值,当条件为真时,循环进行迭代
    2022-05-05
  • Unity3D实现经典小游戏Pacman

    Unity3D实现经典小游戏Pacman

    这篇文章主要介绍了基于Unity3D制作一做个经典小游戏Pacman,文中的示例代码讲解详细,对我们学习Unity3D有一定的帮助,感兴趣的小伙伴可以了解一下
    2021-12-12
  • 深入c语言continue和break的区别详解

    深入c语言continue和break的区别详解

    本篇文章是对c语言中continue和break的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++STL之vector模板类详解

    C++STL之vector模板类详解

    这篇文章主要为大家详细介绍了C++vector模板类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 解析在Direct2D中画Bezier曲线的实现方法

    解析在Direct2D中画Bezier曲线的实现方法

    本篇文章是对在Direct2D中画Bezier曲线的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • c++11中的noexcept关键字

    c++11中的noexcept关键字

    这篇文章主要介绍了c++11中的noexcept关键字,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • linux之sed命令的用法

    linux之sed命令的用法

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法
    2013-10-10
  • C语言实现电子英汉词典系统

    C语言实现电子英汉词典系统

    这篇文章主要为大家详细介绍了C语言实现电子英汉词典系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++在成员函数中使用STL的find_if函数实例

    C++在成员函数中使用STL的find_if函数实例

    这篇文章主要介绍了C++在成员函数中使用STL的find_if函数实例,包括了STL中find_if函数的具体用法及相关的完整实例,非常具有参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C++开源库nlohmann/json的介绍和使用详解

    C++开源库nlohmann/json的介绍和使用详解

    nlohmann/json 是一个C++实现的JSON解析器,使用非常方便直观,这篇文章主要为大家详细介绍了nlohmann/json的简介和使用,需要的可以参考下
    2023-12-12

最新评论