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

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

3天内不再提示

C/C++自制程序:双人击球游戏

C语言编程学习基地 来源:C语言编程学习基地 2023-02-13 14:51 次阅读

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

游戏说明

Player1玩家通过 W、S 按键控制左板上下移动,Player2 玩家通过 O、L 按键控制右板上下移动。在游戏过程中,小球的速度会随着接触木板的次数增加而加快,增加游戏难度。当小球没有碰到木板时游戏结束。

游戏效果

ee0b542c-aaa0-11ed-bfe3-dac502259ad0.png

简单了解游戏后我们就来试试吧!(直接上源码,大家可以看注释)

///////////////////////////////////////////////////
// 程序名称:双人击球游戏
// 编译环境:VS2010,EasyX_20200902
//


#include 
#include 


int main()
{
  initgraph(640, 480);
  srand(GetTickCount());
  setbkcolor(WHITE);
  cleardevice();


  setfillcolor(BLACK);
  setlinecolor(BLACK);
  settextstyle(30, 0, L"verdana");
  settextcolor(BLACK);


  int p1_x, p1_y, p2_x, p2_y, ball_x, ball_y;
  int dx, dy;
  int win = 1;              // 赢玩家
  p1_x = 45;                // 左板
  p1_y= 240;
  p2_x = 595;                // 右板
  p2_y = 240;  
  ball_x = rand() % 240 + 200;      // 小球 x 坐标
  ball_y = rand() % 180 + 150;      // 小球 y 坐标
  dx = (rand() % 2 * 2 - 1)*2;      // 小球移动增量
  dy = (rand() % 2 * 2 - 1)*2;      // 小球移动增量


  outtextxy(190, 200, L"Put Enter To Begin");
  while(_getwch() != 13);


  cleardevice();


  // player
  settextstyle(20, 0, L"Verdana");
  outtextxy(20, 50, L"Payer1");
  outtextxy(565, 50, L"Player2");


  // 提示
  settextstyle(15, 0, L"Verdana");
  outtextxy(20, 400, L"W 向上");
  outtextxy(20, 425, L"S 向下");
  outtextxy(590, 400, L"O 向上");
  outtextxy(590, 425, L"L 向下");


  line(50, 100, 590, 100);                      // 上边界
  line(50, 380, 590, 380);                      // 下边界
  solidcircle(ball_x, ball_y, 10);


  wchar_t key=0;
  while(true)
  {
    clearcircle(ball_x, ball_y, 10);                // 清除小球位置
    clearrectangle(p1_x - 5, p1_y - 20, p1_x + 5, p1_y + 20);    // 清除左板
    clearrectangle(p2_x - 5, p2_y - 20, p2_x + 5, p2_y + 20);    // 清除右板


    if(_kbhit())
    {
      // 获取按键
      key = _getwch();    
  
      // 判断板移动的位置
      if(key == L's')
        p1_y += 30;
      else if(key == L'w')
        p1_y -= 30;
      else if(key == L'l')
        p2_y += 30;
      else if(key == L'o')
        p2_y -= 30;
    }


    // 判断左右俩板是否超出移动界限
    if((p1_y - 20) < 100)
      p1_y = 120;
    else if((p1_y + 20) > 380)
      p1_y = 360;
    else if((p2_y - 20) < 100)
      p2_y = 120;
    else if((p2_y + 20)> 380)
      p2_y = 360;


    // 画左右两板位置
    solidrectangle(p1_x - 5, p1_y - 20, p1_x + 5, p1_y + 20);
    solidrectangle(p2_x - 5, p2_y - 20, p2_x + 5, p2_y + 20);


    ball_x = ball_x + dx;
    ball_y = ball_y + dy;


    // 判断小球遇到左右板反弹
    if(ball_x < 62 )
    {
      if(ball_y < p1_y + 20 && ball_y > p1_y - 20)
      {
        dx = -dx;
        dx += dx / 10;
      }
      else 
      {
        win = 2;
        solidcircle(ball_x, ball_y, 10);
        break;
      }
    }
    else if(ball_x > 578)
    {
      if(ball_y < p2_y + 20 && ball_y > p2_y - 20)
      {
        dx = -dx;
        dx += dx / 10;
      }
      else
      {
        solidcircle(ball_x, ball_y, 10);
        break;
      }
    }


    // 判断小球遇到上下边界反弹
    if(ball_y < 115)
      dy = -dy;
    else if(ball_y > 364)
      dy = -dy;


    solidcircle(ball_x, ball_y, 10);


    Sleep(20);
  }


  settextstyle(30, 0, L"Verdana");
  if(win == 1)
    outtextxy(250, 200, L"Player1 赢");
  else
    outtextxy(250, 200, L"Player2 赢");
  
  _getch();
  closegraph();
  return 0;
}

大家赶紧去动手试试吧!

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

    关注

    2

    文章

    696

    浏览量

    26040
  • 编程
    +关注

    关注

    88

    文章

    3440

    浏览量

    92400
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79543
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900

原文标题:【项目实战】C/C++自制程序:双人击球游戏

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

收藏 人收藏

    评论

    相关推荐

    4.4 C++游戏逆向插件开发 脱壳客户端程序并且修复上帝视角

    C++
    电路设计
    发布于 :2023年01月10日 12:23:09

    C++游戏逆向辅助 CSGO_透视的实现

    C++
    电路设计
    发布于 :2023年01月10日 13:37:05

    C语言C++常见学习问题

    C++
    电路设计
    发布于 :2023年01月10日 14:07:23

    C++小白自学基础课之简单的C++程序helloworld02

    C++
    电子学习
    发布于 :2023年01月12日 22:27:52

    C++程序设计原理与实践》(C++之父最新力作)

    `《C++程序设计原理与实践》(C++之父最新力作)`
    发表于 08-19 16:30

    C++实现的经典小游戏源代码

    C++实现的经典小游戏源代码
    发表于 08-20 15:31

    c++程序设计

    以下是一些常用的c++程序设计,以处理图片为基础
    发表于 05-08 19:12

    C/ C++/ Java 程序设计经典教程》

    本帖最后由 圈圈7029 于 2014-11-13 11:41 编辑 《C/ C++/ Java 程序设计经典教程》(Deitel 著)●集作者几十年程序设计经验之精华,从软件工
    发表于 11-13 11:22

    【上海】诚聘C++游戏后端开发工程师

    猎头推荐职位:c++游戏后端开发工程师(15-30K)工作职责:1. 服务器端代码测试与维护;2. 服务器端核心模块与逻辑代码实现。岗位要求:1. 1年以上Linux平台C/C++开发
    发表于 07-10 11:56

    C++不得不说的前景展望

    。  除了在游戏开发中运用的比较多,很多互联网公司的后台服务器程序也都是基于C++开发的,而且大部分是linux,unix等类似操作系统。从IBM、微软、中软、用友、阿里巴巴、TOM、新浪、联想、大唐电信
    发表于 08-13 15:12

    学习c++的经验分享!

    和不遗余力的博览群书;8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;9.看
    发表于 10-08 03:46

    如何学习C++,如何学好C++

    最近,很多学员都给我发邮件问我应该如何学习C++,如何学好C++?那么作为一个从C语言小白摸爬滚打、入坑无数到成长为如今的高级C++游戏开发
    发表于 08-20 06:27

    基于51单片机的双人对战小游戏设计

    做出多姿多彩的东西。最后不要忘记,我们的目标是星辰大海!51单片机系列(三)51 单片机游戏设计 —— 双人对战小游戏(石头剪刀布)实验游戏规则介绍实验
    发表于 11-09 06:57

    C语言C++运用

    很多同学在大学都学过CC++,那么CC++就业怎么样?薪资高吗?小编今天就给大家详细解读一下。学c++ 好不好?
    发表于 11-25 10:47

    如何选择C/C++开发方向

    C/C++开发方向如何选择,嵌入式,qt/mfc,游戏开发,后端开发【经验分享】专注于服务器后台开发,包括C/C++,Linux,Nginx
    发表于 12-24 07:10