野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1755|回复: 0

[野火]瑞萨RA MCU创意氛围赛+(原创)机械臂游戏创意制作...

[复制链接]
发表于 2023-7-6 20:29:10 | 显示全部楼层 |阅读模式
本帖最后由 还没吃饭 于 2023-8-25 22:02 编辑

本论坛开源首发:
【野火瑞萨开箱】 https://www.bilibili.com/video/B ... cdfdaee2cf57cf341bc
游戏功能简介:
【[野火]瑞萨RA MCU创意氛围赛+(原创)机械臂游戏创意制作2】https://www.bilibili.com/video/B ... cdfdaee2cf57cf341bc

开始设计游戏开发板。
老虎,杠子,鸡,游戏的机械臂创意版 :扫描按键 玩家输入老虎,杠子,鸡,虫 的4种选项,开发板做出判断并输出到管脚,控制机械臂做出相应的设计动作。



所需硬件:
1,四自由度机械臂一台,用数字舵机驱动。

2,面包板及杜邦线。

3,5V10W开关电源一个。

4, 外接按键2个。


游戏操作流程:
1.打开电源开关,面包板和开发板上电,机械臂会自己动作表示上电正常,已经可以游戏。

2.机械臂动作结束后 可接受按键输入。玩家通过按键输入 自己要选的游戏主角后, AI通过程序也作出相应选择并利用机械臂做出相应动作。

3.机械臂做完动作后,开发板会根据AI的选择和玩家的选择,做出输赢的判断,并利用机械臂做出输、赢或平局的动作。

4.一局结束后 可以再按开发板的复位键 再来一局继续游戏。

微信图片_20230825113341.jpg
玩家和AI平局

AI做出选择

AI做出选择

玩家输AI赢

源代码:
  1. #define KEY_ON  1
  2. #define KEY_OFF 0


  3. /* 按键扫描函数(阻塞式)
  4. * key: KEY1_SW2_PIN 用户按键1(丝印SW2)的引脚
  5. *      KEY2_SW3_PIN 用户按键2(丝印SW3)的引脚
  6. */
  7. uint32_t Key_Scan(bsp_io_port_pin_t key)
  8. {
  9.    bsp_io_level_t state;

  10.    // 读取按键引脚电平
  11.    R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
  12.    if (BSP_IO_LEVEL_HIGH == state)
  13.    {
  14.       return KEY_OFF; //按键没有被按下
  15.    }
  16.    else
  17.    {
  18.       do  //等待按键释放
  19.       {
  20.             R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
  21.       } while (BSP_IO_LEVEL_LOW == state);
  22.    }

  23.    return KEY_ON; //按键被按下了
  24. }

  25. void hal_entry(void)
  26. {
  27.     /* TODO: add your own code here */
  28.         /* 启明6M5开发板,按键引脚定义 */
  29. #define KEY1_SW2_PIN    BSP_IO_PORT_00_PIN_04
  30. #define KEY2_SW3_PIN    BSP_IO_PORT_00_PIN_05
  31. #define KEY3_SW2_PIN    BSP_IO_PORT_06_PIN_00
  32. #define KEY4_SW3_PIN    BSP_IO_PORT_06_PIN_04
  33.         
  34.         
  35. int player;
  36. int computer;
  37. int result;
  38. int v;
  39. R_BSP_PinAccessEnable();
  40.         




  41.                
  42. //游戏开始
  43.                         
  44.                         
  45.                                 for ( v = 80; v > 40 ; v-- )
  46.      {
  47.                   
  48.                         
  49.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_08  , BSP_IO_LEVEL_HIGH);
  50.         R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

  51.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_08   , BSP_IO_LEVEL_LOW);

  52.         R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);
  53.         }
  54.           for ( v = 80; v > 40 ; v-- )
  55.      {
  56.                   
  57.                         
  58.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_06  , BSP_IO_LEVEL_HIGH);
  59.         R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

  60.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_06   , BSP_IO_LEVEL_LOW);
  61.         R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);
  62.         }            
  63.         
  64.   for ( v = 80; v > 40 ; v-- )
  65.      {
  66.                   
  67.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_07   , BSP_IO_LEVEL_HIGH);
  68.         R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);

  69.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_07   , BSP_IO_LEVEL_LOW);
  70.         R_BSP_SoftwareDelay(19, BSP_DELAY_UNITS_MILLISECONDS);
  71.         }
  72.                  
  73.                                 
  74.                  for ( v = 80; v > 40 ; v-- )
  75.      {
  76.                   
  77.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_00   , BSP_IO_LEVEL_HIGH);
  78.         R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);

  79.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_00   , BSP_IO_LEVEL_LOW);
  80.         R_BSP_SoftwareDelay(19, BSP_DELAY_UNITS_MILLISECONDS);
  81.         }
  82.                                                 
  83.                                 
  84.         
  85. /////////////////////////////////////////////////////////////////////

  86.                                     
  87.                                 for ( v = 80; v > 40 ; v-- )
  88.      {
  89.                   
  90.                         
  91.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_08  , BSP_IO_LEVEL_HIGH);
  92.         R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);

  93.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_08   , BSP_IO_LEVEL_LOW);

  94.         R_BSP_SoftwareDelay(19, BSP_DELAY_UNITS_MILLISECONDS);
  95.         }
  96.           for ( v = 80; v > 40 ; v-- )
  97.      {
  98.                   
  99.                         
  100.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_06  , BSP_IO_LEVEL_HIGH);
  101.         R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);

  102.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_06   , BSP_IO_LEVEL_LOW);
  103.         R_BSP_SoftwareDelay(19, BSP_DELAY_UNITS_MILLISECONDS);
  104.         }            
  105.         
  106.   for ( v = 80; v > 40 ; v-- )
  107.      {
  108.                   
  109.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_07   , BSP_IO_LEVEL_HIGH);
  110.         R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

  111.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_07   , BSP_IO_LEVEL_LOW);
  112.         R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);
  113.         }
  114.                  
  115.                                 
  116.                  for ( v = 80; v > 40 ; v-- )
  117.      {
  118.                   
  119.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_00   , BSP_IO_LEVEL_HIGH);
  120.         R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

  121.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_00   , BSP_IO_LEVEL_LOW);
  122.         R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);
  123.         }
  124.                         
  125.                                 
  126.                                 
  127.                                 
  128.                                 
  129.                                 
  130.                                 
  131.         //                 }        
  132.                                 
  133.                                 
  134.                                 
  135.         player = 0;
  136.                                 
  137.                 while(player == 0) {               
  138.                                 
  139. if( Key_Scan(KEY1_SW2_PIN) == KEY_ON )   //扫描按键1
  140.       {
  141.           player = 1;
  142.                                 }
  143.       if( Key_Scan(KEY2_SW3_PIN) == KEY_ON )   //扫描按键2
  144.       {
  145.                       player =  2 ;   
  146.       }
  147.                          if( Key_Scan(KEY3_SW2_PIN) == KEY_ON )   //扫描按键3
  148.       {
  149.           player = 3;
  150.                                 }
  151.       if( Key_Scan(KEY4_SW3_PIN) == KEY_ON )   //扫描按键4
  152.       {
  153.                       player =  4 ;   
  154.       }
  155. }


  156.                         
  157.                         
  158.                          // 计算机选择
  159.     computer =  player;

  160. // 计算机选择了
  161.     switch (computer) {
  162.         case 1:
  163.           //  老虎
  164.                                                 for ( v = 80; v > 40 ; v-- )
  165.      {
  166.                   
  167.                         
  168.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_06  , BSP_IO_LEVEL_HIGH);
  169.         R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

  170.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_06   , BSP_IO_LEVEL_LOW);
  171.         R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);
  172.         }
  173.                  
  174.                                 
  175.             break;
  176.         case 2:
  177.         //杠子
  178.                                                         for ( v = 80; v > 40 ; v-- )
  179.      {
  180.                   
  181.             R_BSP_PinWrite(BSP_IO_PORT_09_PIN_08   , BSP_IO_LEVEL_HIGH);
  182.         R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);

  183.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_08   , BSP_IO_LEVEL_LOW);
  184.         R_BSP_SoftwareDelay(19, BSP_DELAY_UNITS_MILLISECONDS);
  185.         }
  186.                                                         
  187.                                 
  188.                                 
  189.                                 
  190.             break;
  191.         case 3:
  192.      //鸡
  193.                                 
  194.                                                         
  195.                                 for ( v = 80; v > 40 ; v-- )
  196.      {
  197.                   
  198.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_07   , BSP_IO_LEVEL_HIGH);
  199.         R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);

  200.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_07   , BSP_IO_LEVEL_LOW);
  201.         R_BSP_SoftwareDelay(19, BSP_DELAY_UNITS_MILLISECONDS);
  202.         }
  203.                                                         
  204.                                 
  205.                                 
  206.                                 
  207.             break;
  208.         case 4:
  209.          //   虫
  210.                                                         for ( v = 80; v > 40 ; v-- )
  211.      {
  212.                   
  213.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_00   , BSP_IO_LEVEL_HIGH);
  214.         R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);

  215.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_00   , BSP_IO_LEVEL_LOW);
  216.         R_BSP_SoftwareDelay(19, BSP_DELAY_UNITS_MILLISECONDS);
  217.         }
  218.                                 
  219.                                 
  220.             break;
  221.     }

  222. // 判断胜负
  223.     if ( (player == computer) ||  (player == 1 && computer == 4) ||
  224.                      (player == 2 && computer == 3)  ){
  225.         result = 0;  // 平局
  226.    } else if  ((player == 1 && computer == 3) ||
  227.                (player == 2 && computer == 1) ||
  228.                (player == 3 && computer == 4) ||
  229.                (player == 4 && computer == 2)) {

  230.         result = 1;  // 玩家胜利
  231.     } else {
  232.         result = -1;  // 计算机胜利
  233.     }

  234.   // 输出结果
  235.     if (result == 0) {
  236.   //      printf("平局!\n");
  237.                         
  238.                                 for ( v = 80; v > 40 ; v-- )
  239.      {
  240.                   
  241.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_06   , BSP_IO_LEVEL_HIGH);
  242.         R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);

  243.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_06   , BSP_IO_LEVEL_LOW);
  244.         R_BSP_SoftwareDelay(19, BSP_DELAY_UNITS_MILLISECONDS);
  245.         }
  246.                                 
  247.                         
  248.     } else if (result == 1) {
  249.      //   printf("你赢了!\n");
  250.                         
  251.                     
  252.                R_BSP_PinWrite(BSP_IO_PORT_08_PIN_06  , BSP_IO_LEVEL_HIGH);              
  253.                                 for ( v = 80; v > 40 ; v-- )
  254.      {
  255.               
  256.                         
  257.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_07  , BSP_IO_LEVEL_HIGH);
  258.         R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

  259.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_07   , BSP_IO_LEVEL_LOW);

  260.         R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);
  261.         }
  262.                         
  263.                         
  264.                                 for ( v = 80; v > 40 ; v-- )
  265.      {
  266.                   
  267.                         
  268.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_08  , BSP_IO_LEVEL_HIGH);
  269.         R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

  270.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_08   , BSP_IO_LEVEL_LOW);

  271.         R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);
  272.         }
  273.           for ( v = 80; v > 40 ; v-- )
  274.      {
  275.                   
  276.                         
  277.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_06  , BSP_IO_LEVEL_HIGH);
  278.         R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

  279.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_06   , BSP_IO_LEVEL_LOW);
  280.         R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);
  281.         }            
  282.         
  283.   for ( v = 80; v > 40 ; v-- )
  284.      {
  285.                   
  286.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_07   , BSP_IO_LEVEL_HIGH);
  287.         R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);

  288.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_07   , BSP_IO_LEVEL_LOW);
  289.         R_BSP_SoftwareDelay(19, BSP_DELAY_UNITS_MILLISECONDS);
  290.         }
  291.                  R_BSP_PinWrite( BSP_IO_PORT_08_PIN_06   , BSP_IO_LEVEL_LOW);         
  292.                         
  293.     } else {
  294.     //    printf("你输了!\n");
  295.                             R_BSP_PinWrite(BSP_IO_PORT_08_PIN_04  , BSP_IO_LEVEL_HIGH);
  296.                         
  297.                         
  298.                                 for ( v = 80; v > 40 ; v-- )
  299.      {
  300.                   
  301.                         
  302.         R_BSP_PinWrite(BSP_IO_PORT_09_PIN_00  , BSP_IO_LEVEL_HIGH);
  303.         R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_MILLISECONDS);

  304.                           R_BSP_PinWrite( BSP_IO_PORT_09_PIN_00   , BSP_IO_LEVEL_LOW);

  305.         R_BSP_SoftwareDelay(18, BSP_DELAY_UNITS_MILLISECONDS);
  306.         }
  307.                    R_BSP_SoftwareDelay(200, BSP_DELAY_UNITS_MILLISECONDS);
  308.        R_BSP_PinWrite( BSP_IO_PORT_08_PIN_04   , BSP_IO_LEVEL_LOW);            

  309.                 }
  310.                                 
  311. // }
  312. #if BSP_TZ_SECURE_BUILD
  313.     /* Enter non-secure code */
  314.     R_BSP_NonSecureEnter();
  315. #endif
  316. }
复制代码




游戏程序:(游戏构思原创)

AI做出选择 老虎

AI做出选择 老虎

AI做出选择 老虎


我在其他论坛的网名:还没吃饭,jf_39110170

试验品视频:
[url=【[野火]瑞萨RA MCU创意氛围赛(原创)】 https://www.bilibili.com/video/B ... cdfdaee2cf57cf341bc][野火]瑞萨RA MCU创意氛围赛(原创)[/url]

【[野火]瑞萨RA MCU创意氛围赛+(原创)机械臂游戏创意制作2】https://www.bilibili.com/video/B ... cdfdaee2cf57cf341bc




谢谢!



玩家输AI赢

玩家输AI赢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 11:14 , Processed in 0.039624 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表