0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言项目:接球小游戏(自制)!详细思路+源码分享

C语言编程学习基地 来源:C语言编程学习基地 2023-01-09 11:00 次阅读

每天一个C语言小项目,提升你的编程能力!

用VS写了一个小小的游戏,在界面右侧有运行时间,接到的小球个数等信息,有 10 个小球下落,玩家可以控制一个盒子左右移动(方向键),来接小球,按 Esc 键退出,最后会显示接到的小球的数目/分数。

游戏就是这么简单,不过也很考验大家的反应能力的哦!

游戏运行截图如下:

c19d37de-8e5d-11ed-bfe3-dac502259ad0.png

简单了解游戏后我们就来试试吧!

本项目编译环境:Visual Studio 2019/2022,EasyX插件

代码展示:

#include 
#include 
#include 
#include 


// 定义常量
#define NUM 10
#define  CMD_LEFT    1
#define  CMD_RIGHT    2
#define  CMD_QUIT    4


int box_x = 10;
int box_y = 420;


// 定义球的结构体
struct Ball
{
  int x, y, v;
};


// 获取用户控制
int GetCommand()
{
  int c = 0;
  if (GetAsyncKeyState(VK_LEFT) & 0x8000)    c |= CMD_LEFT;
  if (GetAsyncKeyState(VK_RIGHT) & 0x8000)  c |= CMD_RIGHT;
  if (GetAsyncKeyState(VK_ESCAPE) & 0x8000)  c |= CMD_QUIT;


  return c;
}


// 倒计时
int Time(int t)
{
  char strsec[10];
  int sec = 20 - (GetTickCount() - t) / 1000;
  itoa(sec, strsec, 10);
  outtextxy(570, 110, "      ");
  outtextxy(570, 110, strcat(strsec, "s"));
  return sec;
}


// 介绍
void menu()
{
  line(449, 0, 449, 480);
  char runTime[] = "游戏倒计时     : ",
    receiveBallNum[] = "接到的球的数量:", copyRight[] = "版权所有:C语言编程",
    finishWorkDate[] = "完成日期:2023年1月7日",
    introductiona[] = "按方向键控制盒子移动接住", introductionb[] = "小球,倒计时为0时游戏结束";


  settextcolor(GREEN);
  outtextxy(450, 10, introductiona);
  outtextxy(450, 30, introductionb);
  outtextxy(450, 110, runTime);
  outtextxy(450, 210, receiveBallNum);
  outtextxy(450, 310, copyRight);
  outtextxy(450, 410, finishWorkDate);
}


// 产生随机球
void ballRandom(Ball ball[], int i)
{
  ball[i].x = 16 + 45 * i;
  ball[i].y = 8 + rand() % 32;
  ball[i].v = 1 + rand() % 5;
}


// 画球,并计算得分
void calculateScore(Ball ball[], int& score)
{
  for (int i = 0; i < NUM; i++)
  {
    fillcircle(ball[i].x, ball[i].y, 8);
    if (ball[i].y >= 472)
    {
      ballRandom(ball, i);
      continue;
    }
    if (box_x + 8 <= ball[i].x && ball[i].x <= box_x + 72 && ball[i].y >= 412)
    {
      score++;
      ballRandom(ball, i);
    }
  }
}


// 主函数
int main()
{
  // 初始化
  initgraph(640, 480);
  srand(time(NULL));
  BeginBatchDraw();
  setlinecolor(GREEN);
  setfillcolor(WHITE);


  menu();


  Ball ball[NUM];
  int dx, i, c, score = 0;
  bool flag = true;


  for (i = 0; i < NUM; i++)
  {
    ballRandom(ball, i);
  }


  int t = GetTickCount();
  char strScore[10], str[] = "your score:";


  // 游戏主循环
  while (flag)
  {
    dx = 0;


    // 显示得分
    char strScore[10];
    itoa(score, strScore, 10);
    outtextxy(570, 210, strScore);


    // 画球,并计算得分
    calculateScore(ball, score);


    // 画盒子
    fillrectangle(box_x, box_y, box_x + 80, box_y + 60);
    FlushBatchDraw();


    // 获取用户控制命令
    c = GetCommand();
    if (c & CMD_LEFT)  dx = -10;
    if (c & CMD_RIGHT)  dx = 10;
    if (c & CMD_QUIT)  flag = false;
    if (!Time(t)) flag = false;


    // 延时
    Sleep(25);


    // 擦除游戏区
    clearrectangle(0, 0, 448, 480);


    // 计算球的新坐标
    for (i = 0; i < NUM; i++)
    {
      ball[i].y += ball[i].v;
    }


    // 移动盒子
    box_x += dx;
    if (box_x < 0)   box_x = 0;
    if (box_x > 368) box_x = 368;
  }


  // 清空键盘缓冲区
  FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));


  // 输出游戏结果
  itoa(score, strScore, 10);
  outtextxy(222, 240, strcat(str, strScore));
  outtextxy(220, 300, "按任意键退出");
  EndBatchDraw();


  // 按任意键退出
  getch();
  closegraph();


  return 0;
}

大家赶紧去动手试试吧!

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 游戏
    +关注

    关注

    2

    文章

    697

    浏览量

    26041
  • C语言
    +关注

    关注

    180

    文章

    7534

    浏览量

    128852
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92424
  • 源码
    +关注

    关注

    8

    文章

    574

    浏览量

    28592

原文标题:C语言项目:接球小游戏(自制)!详细思路+源码分享

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言十字消除游戏详细思路+源码分享

    十字消除,休闲小游戏,在规定时间内,只要是十字线能连接到的相同颜色的方块,就能获得相应的得分,如果点击后没有能够消除的方块会扣除时间,是一款益智小游戏
    发表于 11-28 10:45 835次阅读

    llabview黑白棋小游戏制作详细解析

    `相关课程推荐:《8周LabVIEW视觉项目编程实战特训营》上面这张是效果图编写这样一个界面可以使用到多种不同的思路和技巧,我会按照从简到繁的顺序,分几次来介绍几个不同的方法。 讲由NI 软件工程师阮奇桢为您讲解。llabview黑白棋
    发表于 11-23 15:44

    论坛基于labview的小游戏合集(绝对精彩)

    `老虎机:*** labview黑白棋小游戏制作详细解析https://bbs.elecfans.com/jishu_209415_1_1.html l令人叹服的abview象棋程序(暴强
    发表于 03-01 15:29

    基于LabVIEW小游戏11款合集

    小编给大家整理了一些基于LabVIEW制作的小游戏,供大家学习,如果大家有更好的设计,不论是程序或者是界面上面有改进的话欢迎大家分享,一起讨论哈!1、labview黑白棋小游戏制作详细解析
    发表于 12-10 15:16

    最受欢迎Labview小游戏(程序实现资料下载)

    一个界面可以使用到多种不同的思路和技巧,我会按照从简到繁的顺序,分几次来介绍几个不同的方法。 讲由NI 软件工程师阮奇桢为您讲解。labview黑白棋小游戏制作详细解析:`
    发表于 04-14 20:11

    C语言小游戏源码分享

    C语言小游戏源码24点火柴人俄罗斯等等等35个游戏源码网盘分享链接:https://pan.ba
    发表于 04-12 17:11

    基于stm32的贪吃蛇小游戏的设计资料分享

    目录前言一、主要功能二、主要模块1.贪吃蛇链表2.ADC3.定时器中断三、实际显示效果前言自学完电阻触摸屏之后做的小项目。我采用了C语言链表的方式来形成贪吃蛇。利用相关封装好的函数,将其移植在了野火
    发表于 02-21 07:27

    利用C语言来编写打地鼠小游戏

    C语言模拟打地鼠小游戏
    的头像 发表于 01-26 14:55 1.5w次阅读

    基于Labview的小游戏飞天忍者猫源码

    基于Labview的小游戏飞天忍者猫源码
    发表于 11-15 18:22 47次下载

    C语言零基础项目:迷宫游戏详细思路+源码分享

    每天一个C语言项目,提升你的编程能力!
    的头像 发表于 12-21 10:08 629次阅读

    C语言零基础项目自制军棋游戏详细思路+源码分享

    每天一个C语言项目,提升你的编程能力!
    的头像 发表于 12-29 17:14 7699次阅读

    C语言零基础项目:吃豆人小游戏详细思路+源码分享

    《吃豆游戏》是一款休闲小游戏,和贪吃蛇,球球大作战吃食物都是有差不多的游戏逻辑。
    的头像 发表于 01-03 11:38 990次阅读

    C语言项目:扔香蕉的大猩猩(自制游戏)!详细思路+源码分享

    网上有一个香蕉金刚的跑酷游戏,不过我们这个扔香蕉游戏模仿的并不是这个,而是模仿的微软在 20 多年前的一个小游戏,不知道谁也有印象呢?
    的头像 发表于 01-06 10:58 592次阅读

    C语言项目:矿井逃生游戏(密室)!详细思路+源码分享

    密室逃脱相信大部分都玩过了吧?本游戏就是一种用C语言写的类似的游戏,因为用手电筒照明找路,所以有点像矿工的样子,还是叫它矿井逃生吧!(以下是游戏的简单介绍和源代码展示)。
    的头像 发表于 01-07 09:41 978次阅读

    C语言小游戏源码大放送

    电子发烧友网站提供《C语言小游戏源码大放送.rar》资料免费下载
    发表于 11-21 10:36 1次下载
    C<b class='flag-5'>语言</b><b class='flag-5'>小游戏</b><b class='flag-5'>源码</b>大放送