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

    文章

    742

    浏览量

    26316
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136807
  • 编程
    +关注

    关注

    88

    文章

    3615

    浏览量

    93722
  • 源码
    +关注

    关注

    8

    文章

    641

    浏览量

    29206

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    C语言小游戏源码分享

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

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

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

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

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

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

    今天就用C语言写了这么个打字母的小程序,就是以前学习机上那种字母往下掉,然后按相应键字母消失的游戏
    发表于 12-15 15:02 654次阅读

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

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

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

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

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

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

    C语言零基础项目:连连看小游戏

    连连看小游戏速度节奏快,画面清晰可爱,适合细心的玩家。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。
    的头像 发表于 01-04 15:28 827次阅读

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

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

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

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

    C语言小游戏源码大放送

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

    FPGA打砖块小游戏设计思路

      交流问题   Q :FPGA打砖块小游戏,如何基于FPGA用verilog语言在Vivado平台上写打砖块小游戏,最好能用到PS2与VGA。 A :以下是一个基于 FPGA  Verilog
    的头像 发表于 12-09 16:57 194次阅读