找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: zzz19760225

批处理勇士大闯关改中医许阳批处理的可能

[复制链接]
 楼主| 发表于 2025-8-26 16:16:44 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-9-13 21:07 编辑

12345678906
perl处理字符,有对齐功能的吧。大约41个字符页面
开始主页面

  1. echo ╔━━━━╗
  2. echo ★  菜单  ★
  3. echo ╚━━━━╝
  4. echo ╔ ╗╔━━━━╗
  5. echo   1  ┃开始游戏┃
  6. echo ╚ ╝╚━━━━╝
  7. echo ╔ ╗╔━━━━╗
  8. echo   2  ┃游戏说明┃
  9. echo ╚ ╝╚━━━━╝
  10. echo ╔ ╗╔━━━━╗
  11. echo   3  ┃退出游戏┃
  12. echo ╚ ╝╚━━━━╝
  13. echo.
  14. echo 请输入选项:

  15. bat转perl

  16. #!/usr/bin/perl
  17. a1:
  18. print "╔=========╗\n";
  19. print "★  菜单  ★\n";
  20. print "╚=========╝\n";
  21. print "╔-╗╔--------╗\n";
  22. print "-1-┃开始游戏┃\n";
  23. print "╚-╝╚--------╝\n";
  24. print "╔-╗╔--------╗\n";
  25. print "-2-┃游戏说明┃\n";
  26. print "╚-╝╚--------╝\n";
  27. print "╔-╗╔--------╗\n";
  28. print "-3-┃退出游戏┃\n";
  29. print "╚-╝╚--------╝\n";
  30. print;
  31. print "请输入选项:";
  32. goto a00;
  33. a00:
  34. <>;
复制代码
游戏说明123

  1. echo ╲ ╱
  2. echo ╔━╗ ╲ ╱    ╔━━━━━━━━━━━━╗
  3. echo ┃小┃╔━━━╗┃勇士大闯关是升级打怪的游┃
  4. echo ┃机┃┃● ● ┃┃戏,ChEric隆重出品      ┃
  5. echo ┃器┃┃ ☉   ┃┃                        ┃
  6. echo ┃人╠╣ ┌┐ ┃╚━━━━━━━━━━━━╝
  7. echo ╚━╝╚━━━╝

  8. bat转perl

  9. a2:
  10. print "╲ ╱\n";
  11. print "╔--╗ ╲ ╱  ╔------------------------╗\n";
  12. print "┃小┃╔----╗┃勇士大闯关是升级打怪的游┃\n";
  13. print "┃机┃┃● ● ┃┃戏,ChEric隆重出品      ┃\n";
  14. print "┃器┃┃ ☉  ┃┃                        ┃\n";
  15. print "┃人╠╣ ┌┐ ┃╚------------------------╝\n";
  16. print "╚--╝╚----╝\n";
  17. goto a00;
  18. a00:
  19. <>;
复制代码

  1. echo ╲ ╱
  2. echo ╔━╗ ╲ ╱    ╔━━━━━━━━━━━━╗
  3. echo ┃小┃╔━━━╗┃按开始游戏开始,本版本无 ┃
  4. echo ┃机┃┃● ● ┃┃挂,输入勇士名称回车确定┃
  5. echo ┃器┃┃ ☉   ┃┃,武器店是买武器        ┃
  6. echo ┃人╠╣ ┌┐ ┃╚━━━━━━━━━━━━╝
  7. echo ╚━╝╚━━━╝

  8. bat转perl

  9. a2_2:
  10. print "╲ ╱\n";
  11. print "╔--╗ ╲ ╱  ╔------------------------╗\n";
  12. print "┃小┃╔----╗┃按开始游戏开始,本版本无 ┃\n";
  13. print "┃机┃┃● ● ┃┃挂,输入勇士名称回车确定┃\n";
  14. print "┃器┃┃ ☉  ┃┃,武器店是买武器        ┃\n";
  15. print "┃人╠╣ ┌┐ ┃╚------------------------╝\n";
  16. print "╚--╝╚----╝\n";
  17. goto a00;
  18. a00:
  19. <>;
复制代码

  1. echo ╲ ╱
  2. echo ╔━╗ ╲ ╱    ╔━━━━━━━━━━━━╗
  3. echo ┃小┃╔━━━╗┃装备店是买装备的地方,闲┃
  4. echo ┃机┃┃● ● ┃┃话少说,已打败boss为目标┃
  5. echo ┃器┃┃ ☉   ┃┃升级指导人是升级的地方!┃
  6. echo ┃人╠╣ ┌┐ ┃╚━━━━━━━━━━━━╝
  7. echo ╚━╝╚━━━╝
  8. echo 按任意键返回菜单!

  9. bat转perl

  10. a2_3:
  11. print "╲ ╱\n";
  12. print "╔--╗ ╲ ╱  ╔------------------------╗\n";
  13. print "┃小┃╔----╗┃装备店是买装备的地方,闲┃\n";
  14. print "┃机┃┃● ● ┃┃话少说,已打败boss为目标┃\n";
  15. print "┃器┃┃ ☉  ┃┃升级指导人是升级的地方!┃\n";
  16. print "┃人╠╣ ┌┐ ┃╚------------------------╝\n";
  17. print "╚--╝╚----╝\n";
  18. print "按任意键返回菜单!\n";
  19. goto a00;
  20. a00:
  21. <>;
复制代码
创建角色

  1. echo ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  2. echo ▓                                 创建角色                                 ▓
  3. echo ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  4. echo.此游戏是1.9版本哦^_^!
  5. echo 说明一下,在建邺城别什么都不选就按回车,否则会关闭!
  6. echo.1、增加了菜单!
  7. echo.2.增加了声音。
  8. echo.3.增加了小机器人!
  9. echo.
  10. echo 请输入勇士昵称:

  11. bat转perl

  12. a3:
  13. print "╔--------------------------------------------------------------------------╗\n";
  14. print "                                   创建角色                                   \n";
  15. print "╚--------------------------------------------------------------------------╝\n";
  16. print "此游戏是1.9版本哦^_^!\n";
  17. print "说明一下,在建邺城别什么都不选就按回车,否则会关闭!\n";
  18. print "1、增加了菜单!\n";
  19. print "2.增加了声音。\n";
  20. print "3.增加了小机器人!\n";
  21. print ;
  22. print "请输入勇士昵称:\n";
  23. goto a00;
  24. a00:
  25. <>;


  26. a3:
  27. print "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n";
  28. print "▓                                  创建角色                                  ▓\n";
  29. print "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n";
  30. print "此游戏是1.9版本哦^_^!\n";
  31. print "说明一下,在建邺城别什么都不选就按回车,否则会关闭!\n";
  32. print "1、增加了菜单!\n";
  33. print "2.增加了声音。\n";
  34. print "3.增加了小机器人!\n";
  35. print ;
  36. print "请输入勇士昵称:\n";
  37. goto a00;
  38. a00:
  39. <>;
复制代码
菜菜城,建邺城

  1. echo ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  2. echo ▓                                  菜菜城                                  ▓
  3. echo ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓00▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  4. echo 昵称:%nc% 气血:%rhp%/%rhpsx% 法力:%rmp%/%rmpsx% 攻击:%rgj% 防御:%rfy%
  5. echo 等级:%lv% 经验:%exp%/%sjexp% 银两:%yl% 点数:%ds%     饱食度:%bsd%/%bsdsx%
  6. echo 武器:%wqmc% 攻击+%wqgj% 服装:%fzmc% 防御+%fzfy% 商城:S 充值:P
  7. echo 腰带:%ydmc% 气血上限+%ydqx% 饰品:%mzmc% 魔法上限+%mzmf% 详细信息:i
  8. echo ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  9. echo ╲ ╱
  10. echo ╔━╗ ╲ ╱    ╔━━━━━━━━━━━━╗
  11. echo ┃小┃╔━━━╗┃欢迎来到菜菜城!这里是城┃
  12. echo ┃机┃┃∩ ∩ ┃┃市,城市是没有怪的哦!只┃
  13. echo ┃器┃┃ △   ┃┃有出城才能打怪哦!      ┃
  14. echo ┃人╠╣ ┌┐ ┃╚━━━━━━━━━━━━╝
  15. echo ╚━╝╚━━━╝
  16. echo.                        ┏━━━━━┳━━━━━┳━━━━━━━┓
  17. echo                         ┃1.武器店  ┃8.保存记录┃44444.BOSS之国┃
  18. echo.                        ┣━━━━━╋━━━━━╋━━━━━━━┛
  19. echo                         ┃2.服装店  ┃9.读取记录┃
  20. echo.                        ┣━━━━━╋━━━━━┫
  21. echo                         ┃3.饰品店  ┃10.修炼塔 ┃
  22. echo.                        ┣━━━━━╋━━━━━┫
  23. echo                         ┃4.药店    ┃11.干粮店 ┃
  24. echo.                        ┣━━━━━╋━━━━━┫
  25. echo                         ┃5.酒店    ┃          ┃
  26. echo.                        ┣━━━━━╋━━━━━┫
  27. echo                         ┃6.升级指导┃          ┃
  28. echo.                        ┣━━━━━╋━━━━━┫
  29. echo                         ┃7.出城    ┃          ┃
  30. echo.                        ┗━━━━━┻━━━━━┛
  31. echo 请输入:

  32. bat转perl

  33. a4:
  34. print "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n";
  35. print "▓                                  菜菜城                                  ▓\n";
  36. print "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓00▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n";
  37. print "昵称:%nc% 气血:%rhp%/%rhpsx% 法力:%rmp%/%rmpsx% 攻击:%rgj% 防御:%rfy%\n";
  38. print "等级:%lv% 经验:%exp%/%sjexp% 银两:%yl% 点数:%ds%     饱食度:%bsd%/%bsdsx%\n";
  39. print "武器:%wqmc% 攻击+%wqgj% 服装:%fzmc% 防御+%fzfy% 商城:S 充值:P\n";
  40. print "腰带:%ydmc% 气血上限+%ydqx% 饰品:%mzmc% 魔法上限+%mzmf% 详细信息:i\n";
  41. print "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n";
  42. print "╲ ╱\n";
  43. print "╔━━╗ ╲ ╱  ╔━━━━━━━━━━━━━━━━━━━━━━━━╗\n";
  44. print "┃小┃╔━━━━╗┃欢迎来到菜菜城!这里是城┃\n";
  45. print "┃机┃┃∩ ∩ ┃┃市,城市是没有怪的哦!只┃\n";
  46. print "┃器┃┃ △  ┃┃有出城才能打怪哦!      ┃\n";
  47. print "┃人╠╣ ┌┐ ┃╚━━━━━━━━━━━━━━━━━━━━━━━━╝\n";
  48. print "╚━━╝╚━━━━╝\n";
  49. print "                        ┏━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━┓\n";
  50. print "                        ┃1.武器店  ┃8.保存记录┃44444.BOSS之国┃\n";
  51. print "                        ┣━━━━━━━━━━╋━━━━━━━━━━╋━━━━━━━━━━━━━━┛\n";
  52. print "                        ┃2.服装店  ┃9.读取记录┃\n";
  53. print "                        ┣━━━━━━━━━━╋━━━━━━━━━━┫\n";
  54. print "                        ┃3.饰品店  ┃10.修炼塔 ┃\n";
  55. print "                        ┣━━━━━━━━━━╋━━━━━━━━━━┫\n";
  56. print "                        ┃4.药店    ┃11.干粮店 ┃\n";
  57. print "                        ┣━━━━━━━━━━╋━━━━━━━━━━┫\n";
  58. print "                        ┃5.酒店    ┃          ┃\n";
  59. print "                        ┣━━━━━━━━━━╋━━━━━━━━━━┫\n";
  60. print "                        ┃6.升级指导┃          ┃\n";
  61. print "                        ┣━━━━━━━━━━╋━━━━━━━━━━┫\n";
  62. print "                        ┃7.出城    ┃          ┃\n";
  63. print "                        ┗━━━━━━━━━━┻━━━━━━━━━━┛\n";
  64. print "请输入:\n";
  65. goto a00;
  66. a00:
  67. <>;
复制代码
 楼主| 发表于 2025-8-26 16:18:03 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-9-13 20:53 编辑

12345678907
武器店

  1. echo ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  2. echo ▓                                  武器店                                  ▓
  3. echo ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  4. echo 昵称:%nc% 气血:%rhp%/%rhpsx% 法力:%rmp%/%rmpsx% 攻击:%rgj% 防御:%rfy%
  5. echo 等级:%lv% 经验:%exp%/%sjexp% 银两:%yl% 点数:%ds% 饱食度:%bsd%/%bsdsx%
  6. echo 武器:%wqmc% 攻击+%wqgj% 服装:%fzmc% 防御+%fzfy%
  7. echo 腰带:%ydmc% 气血上限+%ydqx% 饰品:%mzmc% 魔法上限+%mzmf%
  8. echo ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  9. echo ╲ ╱
  10. echo ╔━╗ ╲ ╱    ╔━━━━━━━━━━━━╗
  11. echo ┃小┃╔━━━╗┃这里是武器店,武器店可以┃
  12. echo ┃机┃┃∩ ∩ ┃┃购买武器来提升攻击力,打┃
  13. echo ┃器┃┃ △   ┃┃怪可获得金钱!          ┃
  14. echo ┃人╠╣ ┌┐ ┃╚━━━━━━━━━━━━╝
  15. echo ╚━╝╚━━━╝
  16. echo 名称 属性 价格
  17. echo 1.红缨枪 攻击+10 100
  18. echo 2.曲尖枪 攻击+30 100
  19. echo 3.锯齿矛 攻击+60 200
  20. echo 4.乌金三叉戟 攻击+100 255
  21. echo 5.火焰枪 攻击+150 255
  22. echo 6.墨杆金钩 攻击+200 255
  23. echo 7.玄铁矛 攻击+250 255
  24. echo 8.金蛇信 攻击+310 1000
  25. echo 9.丈八点钢矛 攻击+380 1000
  26. echo 10.暗夜 攻击+450 10000
  27. echo 11.梨花 攻击+450 10000
  28. echo 12.霹雳 攻击+450 10000
  29. echo 0.返回
  30. echo.
  31. echo 请输入:

  32. bat转perl

  33. a5:
  34. print "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n";
  35. print "▓                                  武器店                                  ▓\n";
  36. print "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n";
  37. print "昵称:%nc% 气血:%rhp%/%rhpsx% 法力:%rmp%/%rmpsx% 攻击:%rgj% 防御:%rfy%\n";
  38. print "等级:%lv% 经验:%exp%/%sjexp% 银两:%yl% 点数:%ds% 饱食度:%bsd%/%bsdsx%\n";
  39. print "武器:%wqmc% 攻击+%wqgj% 服装:%fzmc% 防御+%fzfy%\n";
  40. print "腰带:%ydmc% 气血上限+%ydqx% 饰品:%mzmc% 魔法上限+%mzmf%\n";
  41. print "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n";
  42. print "╲ ╱\n";
  43. print "╔━━╗ ╲ ╱  ╔━━━━━━━━━━━━━━━━━━━━━━━━╗\n";
  44. print "┃小┃╔━━━━╗┃这里是武器店,武器店可以┃\n";
  45. print "┃机┃┃∩ ∩ ┃┃购买武器来提升攻击力,打┃\n";
  46. print "┃器┃┃ △  ┃┃怪可获得金钱!          ┃\n";
  47. print "┃人╠╣ ┌┐ ┃╚━━━━━━━━━━━━━━━━━━━━━━━━╝\n";
  48. print "╚━━╝╚━━━━╝\n";
  49. print "名称 属性 价格\n";
  50. print "1.红缨枪 攻击+10 100\n";
  51. print "2.曲尖枪 攻击+30 100\n";
  52. print "3.锯齿矛 攻击+60 200\n";
  53. print "4.乌金三叉戟 攻击+100 255\n";
  54. print "5.火焰枪 攻击+150 255\n";
  55. print "6.墨杆金钩 攻击+200 255\n";
  56. print "7.玄铁矛 攻击+250 255\n";
  57. print "8.金蛇信 攻击+310 1000\n";
  58. print "9.丈八点钢矛 攻击+380 1000\n";
  59. print "10.暗夜 攻击+450 10000\n";
  60. print "11.梨花 攻击+450 10000\n";
  61. print "12.霹雳 攻击+450 10000\n";
  62. print "0.返回\n";
  63. print "\n";
  64. print "请输入:\n";
  65. goto a00;
  66. a00:
  67. <>;
复制代码
 楼主| 发表于 2025-8-26 16:19:52 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-9-14 19:06 编辑

12345678908
21个变量

  1. echo 昵称:%nc% 气血:%rhp%/%rhpsx% 法力:%rmp%/%rmpsx% 攻击:%rgj% 防御:%rfy%
  2. echo 等级:%lv% 经验:%exp%/%sjexp% 银两:%yl% 点数:%ds%     饱食度:%bsd%/%bsdsx%
  3. echo 武器:%wqmc% 攻击+%wqgj% 服装:%fzmc% 防御+%fzfy% 商城:S 充值:P
  4. echo 腰带:%ydmc% 气血上限+%ydqx% 饰品:%mzmc% 魔法上限+%mzmf% 详细信息:i


  5. bat转perl

  6. use utf8;
  7. use open ':std', ':encoding(UTF-8)';

  8. my %a0 = ('昵称'=>'1','气血'=>'2','法力'=>'3','攻击'=>'4','防御'=>'5','等级'=>'6',
  9. '经验'=>'7','银两'=>'8','点数'=>'9','饱食度'=>'10','武器'=>'11','攻击+'=>'12',
  10. '服装'=>'13','防御+'=>'14','商城'=>'15','充值'=>'16','腰带'=>'17','气血上限'=>'18',
  11. '饰品'=>'19','魔法上限'=>'20','详细信息'=>'21');
  12. print 0+keys(%a0);
  13. print "\n";
  14. print "昵称:$a0{昵称}";
  15. print "\n";
  16. foreach my $key (keys %a0){
  17. print "$key => $a0{$key}\n";
  18. }
  19. <>;

  20. 21
  21. 昵称:1
  22. 魔法上限 => 20
  23. 法力 => 3
  24. 饱食度 => 10
  25. 武器 => 11
  26. 商城 => 15
  27. 攻击 => 4
  28. 昵称 => 1
  29. 攻击+ => 12
  30. 经验 => 7
  31. 气血上限 => 18
  32. 饰品 => 19
  33. 等级 => 6
  34. 点数 => 9
  35. 防御+ => 14
  36. 详细信息 => 21
  37. 服装 => 13
  38. 气血 => 2
  39. 充值 => 16
  40. 防御 => 5
  41. 银两 => 8
  42. 腰带 => 17


复制代码
需要如何排序和对齐才好
 楼主| 发表于 2025-8-26 16:25:06 | 显示全部楼层
12345678909
 楼主| 发表于 2025-8-26 16:26:15 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-10-28 10:37 编辑

123456789010
perl+Tk单字符17X19点阵字体

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Tk;
  5. use utf8;                     # 估计召唤

  6. use Encode qw(decode encode); # 估计召唤

  7. binmode STDOUT, ':utf8';      # 估计召唤

  8. binmode STDERR, ':utf8';      # 估计召唤
  9. # 创建主窗口
  10. my $mw = MainWindow->new;
  11. $mw->title("17x19 点阵显示");
  12. $mw->geometry("500x500");

  13. # 创建17x19的二维数组(0表示关闭,1表示开启)
  14. my @matrix;
  15. for my $i (0..16) {
  16.     for my $j (0..18) {
  17.         $matrix[$i][$j] = 0;  # 初始化为全0
  18.     }
  19. }

  20. # 创建画布
  21. my $canvas = $mw->Canvas(
  22.     -width => 450,
  23.     -height => 450,
  24.     -bg => 'gray'
  25. )->pack(-padx => 10, -pady => 10);

  26. # 绘制点阵
  27. draw_matrix();

  28. # 添加控制按钮框架
  29. my $control_frame = $mw->Frame->pack(-pady => 5);
  30. $control_frame->Button(
  31.     -text => "随机填充",
  32.     -command => \&random_fill
  33. )->pack(-side => 'left', -padx => 5);

  34. $control_frame->Button(
  35.     -text => "清空",
  36.     -command => \&clear_matrix
  37. )->pack(-side => 'left', -padx => 5);

  38. $control_frame->Button(
  39.     -text => "反选",
  40.     -command => \&invert_matrix
  41. )->pack(-side => 'left', -padx => 5);

  42. # 添加点击事件
  43. $canvas->bind('all', '<Button-1>', \&toggle_cell);

  44. # 绘制点阵函数
  45. sub draw_matrix {
  46.     $canvas->delete('all');  # 清空画布
  47.    
  48.     my $cell_size = 18;     # 单元格大小
  49.     my $spacing = 2;        # 间距
  50.     my $start_x = 20;       # 起始x坐标
  51.     my $start_y = 20;       # 起始y坐标
  52.    
  53.     for my $i (0..16) {     # 17行
  54.         for my $j (0..18) { # 19列
  55.             my $x1 = $start_x + $j * ($cell_size + $spacing);
  56.             my $y1 = $start_y + $i * ($cell_size + $spacing);
  57.             my $x2 = $x1 + $cell_size;
  58.             my $y2 = $y1 + $cell_size;
  59.             
  60.             my $color = $matrix[$i][$j] ? 'black' : 'lightgray';
  61.             
  62.             # 绘制矩形
  63.             $canvas->createRectangle(
  64.                 $x1, $y1, $x2, $y2,
  65.                 -fill => $color,
  66.                 -outline => 'gray',
  67.                 -tags => "cell_${i}_${j}"
  68.             );
  69.         }
  70.     }
  71. }

  72. # 切换单元格状态
  73. sub toggle_cell {
  74.     my ($canvas) = @_;
  75.     my $x = $canvas->XEvent->x;
  76.     my $y = $canvas->XEvent->y;
  77.    
  78.     my $cell_size = 18;
  79.     my $spacing = 2;
  80.     my $start_x = 20;
  81.     my $start_y = 20;
  82.    
  83.     # 计算点击的单元格坐标
  84.     my $j = int(($x - $start_x) / ($cell_size + $spacing));
  85.     my $i = int(($y - $start_y) / ($cell_size + $spacing));
  86.    
  87.     # 检查是否在有效范围内
  88.     if ($i >= 0 && $i <= 16 && $j >= 0 && $j <= 18) {
  89.         $matrix[$i][$j] = $matrix[$i][$j] ? 0 : 1;  # 切换状态
  90.         draw_matrix();  # 重绘
  91.     }
  92. }

  93. # 随机填充函数
  94. sub random_fill {
  95.     for my $i (0..16) {
  96.         for my $j (0..18) {
  97.             $matrix[$i][$j] = int(rand(2));  # 随机0或1
  98.         }
  99.     }
  100.     draw_matrix();
  101. }

  102. # 清空矩阵函数
  103. sub clear_matrix {
  104.     for my $i (0..16) {
  105.         for my $j (0..18) {
  106.             $matrix[$i][$j] = 0;
  107.         }
  108.     }
  109.     draw_matrix();
  110. }

  111. # 反选矩阵函数
  112. sub invert_matrix {
  113.     for my $i (0..16) {
  114.         for my $j (0..18) {
  115.             $matrix[$i][$j] = $matrix[$i][$j] ? 0 : 1;
  116.         }
  117.     }
  118.     draw_matrix();
  119. }

  120. # 打印当前矩阵(用于调试)
  121. sub print_matrix {
  122.     print "当前矩阵状态:\n";
  123.     for my $i (0..16) {
  124.         for my $j (0..18) {
  125.             print $matrix[$i][$j] ? "1 " : "0 ";
  126.         }
  127.         print "\n";
  128.     }
  129.     print "\n";
  130. }

  131. # 添加打印按钮
  132. $control_frame->Button(
  133.     -text => "打印矩阵",
  134.     -command => \&print_matrix
  135. )->pack(-side => 'left', -padx => 5);

  136. MainLoop;
复制代码
要间隔1个点阵,然后3X5为一个缩位十进制集合,集合之间间隔1个点阵线,共12个数量集合。
 楼主| 发表于 2025-8-26 16:27:56 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-12-10 21:01 编辑

123456789012
tty下fb0屏幕修改的c语言绘图
1.c

  1. #include <fcntl.h>               // 打开和创建文件使用的头文件
  2. #include <linux/fb.h>            // Linux framebuffer设备接口相关的头文件
  3. #include <stdint.h>              // 固定宽度整数类型定义
  4. #include <stdio.h>               // 标准输入输出库
  5. #include <stdlib.h>              // 通用工具函数如malloc等
  6. #include <sys/ioctl.h>           // ioctl系统调用相关定义
  7. #include <sys/mman.h>            // 内存映射相关函数
  8. #include <unistd.h>              // POSIX操作系统API

  9. #define DOT_SIZE 5               // 定义每个点阵的大小(像素)
  10. #define COLS     3               // 点阵列数
  11. #define ROWS     5               // 点阵行数

  12. int main() {
  13.     int fbfd = open("/dev/fb0", O_RDWR); // 打开framebuffer设备
  14.     if (fbfd == -1) {                    // 如果打开失败
  15.         perror("open /dev/fb0");         // 输出错误信息
  16.         exit(1);                         // 退出程序
  17.     }

  18.     struct fb_var_screeninfo vinfo;      // 定义屏幕可变信息结构体
  19.     struct fb_fix_screeninfo finfo;      // 定义屏幕固定信息结构体
  20.     if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) || // 获取屏幕可变信息
  21.         ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) { // 获取屏幕固定信息
  22.         perror("ioctl");                 // 如果获取信息失败,输出错误信息
  23.         close(fbfd);                     // 关闭framebuffer设备
  24.         exit(2);                         // 退出程序
  25.     }

  26.     if (vinfo.bits_per_pixel != 32) {    // 检查是否支持32位色深
  27.         fprintf(stderr, "Only 32bpp framebuffer supported.\n"); // 不支持则输出错误信息
  28.         close(fbfd);                     // 关闭framebuffer设备
  29.         exit(3);                         // 退出程序
  30.     }

  31.     size_t screensize = vinfo.xres * vinfo.yres * 4; // 计算屏幕总大小(字节)
  32.     char *fbp = mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0); // 映射framebuffer到内存
  33.     if (fbp == MAP_FAILED) {             // 如果映射失败
  34.         perror("mmap");                  // 输出错误信息
  35.         close(fbfd);                     // 关闭framebuffer设备
  36.         exit(4);                         // 退出程序
  37.     }

  38.     uint32_t color = 0x0000FF00;         // 设置颜色为绿色(ARGB格式)

  39.     // 计算起始位置,使点阵尽量靠近右侧但不越界
  40.     int start_x = vinfo.xres - (COLS * DOT_SIZE) - 10; // 减去点阵宽度并留出一些边距
  41.     int start_y = 50;                   // 起始 y 坐标

  42.     for (int row = 0; row < ROWS; row++) { // 循环行数
  43.         for (int col = 0; col < COLS; col++) { // 循环列数
  44.             int base_x = start_x + col * DOT_SIZE; // 计算每一列的起点x坐标
  45.             int base_y = start_y + row * DOT_SIZE; // 计算每一行的起点y坐标

  46.             // 画一个 DOT_SIZE × DOT_SIZE 的实心方块
  47.             for (int dy = 0; dy < DOT_SIZE; dy++) { // 绘制每个小方块的垂直方向
  48.                 for (int dx = 0; dx < DOT_SIZE; dx++) { // 绘制每个小方块的水平方向
  49.                     int x = base_x + dx; // 当前点的x坐标
  50.                     int y = base_y + dy; // 当前点的y坐标
  51.                     if (x < vinfo.xres && y < vinfo.yres) { // 确保坐标在屏幕范围内
  52.                         ((uint32_t*)fbp)[y * vinfo.xres + x] = color; // 设置颜色
  53.                     }
  54.                 }
  55.             }
  56.         }
  57.     }

  58.     munmap(fbp, screensize);             // 解除内存映射
  59.     close(fbfd);                         // 关闭framebuffer设备
  60.     printf("&#9989; Drawn %d×%d = %d tightly-packed green blocks near the right side of the screen.\n", COLS, ROWS, COLS * ROWS);
  61.     return 0;                            // 正常结束程序
  62. }
复制代码
编译

  1. gcc -o 1 1.c
复制代码
tty下执行

  1. sudo ./1
复制代码
屏幕靠近右边,出现一个绿色长方形。(自动中文注释方便多了)
 楼主| 发表于 2025-8-26 16:29:51 | 显示全部楼层
123456789013
 楼主| 发表于 2025-8-26 16:36:03 | 显示全部楼层
123456789014
 楼主| 发表于 2025-8-26 16:45:17 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-12-11 12:30 编辑

123456789015
图形游戏里的模块单元,整体容器组合布置。
1个电视机图片,图片的电视机屏幕里,是一个ffpemg播放器。
 楼主| 发表于 2025-8-26 16:46:39 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-12-5 07:58 编辑

123456789016
通义:C语言GOTO跳转标签里显示图形内容,然后关闭图形,再GOTO跳转。

  1. // 包含标准输入输出头文件,用于 printf 等函数
  2. #include <stdio.h>

  3. // 包含 SDL2 图形库头文件,用于创建窗口、绘制图形等
  4. #include <SDL2/SDL.h>

  5. // 主函数,不接收命令行参数(因此用 void)
  6. int main(void) {
  7.     // 声明一个指向 SDL 窗口的指针,初始为 NULL
  8.     SDL_Window* window = NULL;

  9.     // 声明一个指向 SDL 渲染器的指针,用于绘图,初始为 NULL
  10.     SDL_Renderer* renderer = NULL;

  11.     // 声明事件变量,用于处理窗口关闭等事件
  12.     SDL_Event event;

  13.     // 声明一个标志变量,用于控制是否退出程序
  14.     int quit = 0;

  15.     // 初始化 SDL 的视频子系统(必须先调用才能使用图形功能)
  16.     if (SDL_Init(SDL_INIT_VIDEO) < 0) {
  17.         // 如果初始化失败,打印错误信息并返回 -1
  18.         printf("SDL 初始化失败!错误:%s\n", SDL_GetError());
  19.         return -1;
  20.     }

  21.     // 创建一个 640x480 像素的窗口,标题为 "GOTO + SDL2 Example"
  22.     window = SDL_CreateWindow("GOTO + SDL2 Example",
  23.                               SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
  24.                               640, 480, SDL_WINDOW_SHOWN);
  25.     // 如果窗口创建失败,打印错误并清理 SDL 后退出
  26.     if (!window) {
  27.         printf("窗口创建失败!错误:%s\n", SDL_GetError());
  28.         SDL_Quit();  // 关闭 SDL
  29.         return -1;
  30.     }

  31.     // 为窗口创建一个硬件加速的渲染器
  32.     renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  33.     // 如果渲染器创建失败,打印错误,销毁窗口,退出 SDL
  34.     if (!renderer) {
  35.         printf("渲染器创建失败!错误:%s\n", SDL_GetError());
  36.         SDL_DestroyWindow(window);  // 销毁窗口
  37.         SDL_Quit();                 // 关闭 SDL
  38.         return -1;
  39.     }

  40.     // 使用 goto 跳转到 render_loop 标签处开始渲染循环
  41.     goto render_loop;

  42. // 定义一个标签,作为 goto 的目标位置
  43. render_loop:
  44.     // 设置清屏颜色为蓝色(R=0, G=0, B=255, A=255)
  45.     SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);

  46.     // 用当前设置的颜色清空整个渲染目标(即窗口内容)
  47.     SDL_RenderClear(renderer);

  48.     // 设置绘制颜色为红色(用于画矩形)
  49.     SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);

  50.     // 定义一个矩形区域:左上角 (200,150),宽 240,高 180
  51.     SDL_Rect rect = { 200, 150, 240, 180 };

  52.     // 用红色填充这个矩形
  53.     SDL_RenderFillRect(renderer, &rect);

  54.     // 将所有绘制内容提交到屏幕上显示
  55.     SDL_RenderPresent(renderer);

  56.     // 暂停程序 2000 毫秒(即 2 秒),让图形停留一会儿
  57.     SDL_Delay(2000);

  58.     // 检查是否有用户操作事件(如点击关闭按钮)
  59.     while (SDL_PollEvent(&event)) {
  60.         // 如果检测到窗口关闭事件(比如点 ×)
  61.         if (event.type == SDL_QUIT) {
  62.             quit = 1;  // 设置退出标志为真
  63.         }
  64.     }

  65.     // 如果用户没有要求退出,则重新打开窗口并跳回 render_loop
  66.     if (!quit) {
  67.         // 打印提示信息,表示即将关闭并重新打开窗口
  68.         printf("正在关闭窗口并重新初始化...\n");

  69.         // 销毁当前的渲染器
  70.         SDL_DestroyRenderer(renderer);

  71.         // 销毁当前的窗口
  72.         SDL_DestroyWindow(window);

  73.         // 重新创建一个新窗口,标题稍作修改以示区别
  74.         window = SDL_CreateWindow("GOTO + SDL2 Example (Re-opened)",
  75.                                   SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
  76.                                   640, 480, SDL_WINDOW_SHOWN);
  77.         // 如果重新创建窗口失败,报错并退出
  78.         if (!window) {
  79.             printf("重新创建窗口失败!错误:%s\n", SDL_GetError());
  80.             SDL_Quit();
  81.             return -1;
  82.         }

  83.         // 重新创建渲染器
  84.         renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  85.         // 如果重新创建渲染器失败,报错并退出
  86.         if (!renderer) {
  87.             printf("重新创建渲染器失败!错误:%s\n", SDL_GetError());
  88.             SDL_DestroyWindow(window);
  89.             SDL_Quit();
  90.             return -1;
  91.         }

  92.         // 跳转回 render_loop 标签,重新开始绘图流程
  93.         goto render_loop;
  94.     }

  95.     // 用户已请求退出,开始清理资源

  96.     // 销毁渲染器
  97.     SDL_DestroyRenderer(renderer);

  98.     // 销毁窗口
  99.     SDL_DestroyWindow(window);

  100.     // 关闭 SDL 所有子系统
  101.     SDL_Quit();

  102.     // 程序正常结束,返回 0
  103.     return 0;
  104. }
复制代码
警示,但是完成了,可以执行,一个画面重复循环跳。
完成goto标签作为容器的假设实验,容器里面装什么不需要考虑,以goto为开关,一刀切简化这个过程。后面可以是内部变量和指针记录相对指向,可以反向步子溯源。goto类似一个时钟频率跳动,整体变量刷新一次。
 楼主| 发表于 2025-8-26 16:48:15 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-12-4 11:54 编辑

123456789017
通义Qwen3-Max:linux mint22.2 C sdl2 4X4的点阵,用多维数组总量,内部的更小数组,指针穿针引线联系关系组合,间隔时间输出其组合内容。色块每隔一段时间(如 1 秒)修改内容递增

  1. // 包含 SDL2 图形库头文件,用于创建窗口、渲染等
  2. #include <SDL2/SDL.h>
  3. // 包含标准输入输出库,用于 fprintf、stderr 等
  4. #include <stdio.h>
  5. // 包含标准库,用于 exit() 函数
  6. #include <stdlib.h>

  7. // 定义网格大小为 4x4
  8. #define GRID_SIZE 4
  9. // 定义每个格子的像素尺寸(宽高均为 80 像素)
  10. #define CELL_SIZE 80
  11. // 计算窗口总宽度:4 列 × 每列 80 像素
  12. #define WINDOW_WIDTH  (GRID_SIZE * CELL_SIZE)
  13. // 计算窗口总高度:4 行 × 每行 80 像素
  14. #define WINDOW_HEIGHT (GRID_SIZE * CELL_SIZE)

  15. // 定义一个结构体 Cell,表示网格中的每一个单元格
  16. typedef struct {
  17.     int value; // 存储该格子的数值,用于控制颜色亮度
  18. } Cell;

  19. // 主函数
  20. int main(int argc, char* argv[]) {
  21.     // 初始化 SDL 视频子系统;如果失败,打印错误并退出
  22.     if (SDL_Init(SDL_INIT_VIDEO) != 0) {
  23.         fprintf(stderr, "SDL初始化失败: %s\n", SDL_GetError());
  24.         return 1; // 直接返回错误码
  25.     }

  26.     // 创建一个 SDL 窗口:标题、位置居中、尺寸、显示标志
  27.     SDL_Window* window = SDL_CreateWindow("4x4 点阵 - 每秒递增",
  28.                                           SDL_WINDOWPOS_CENTERED,   // 窗口X坐标居中
  29.                                           SDL_WINDOWPOS_CENTERed,   // 窗口Y坐标居中(注意拼写修正)
  30.                                           WINDOW_WIDTH,             // 窗口宽度
  31.                                           WINDOW_HEIGHT,            // 窗口高度
  32.                                           SDL_WINDOW_SHOWN);        // 创建后立即显示
  33.     // 如果窗口创建失败,打印错误,清理 SDL 并退出
  34.     if (!window) {
  35.         fprintf(stderr, "窗口创建失败: %s\n", SDL_GetError());
  36.         SDL_Quit(); // 释放 SDL 资源
  37.         return 1;
  38.     }

  39.     // 创建硬件加速的渲染器,用于绘制图形
  40.     SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  41.     // 如果渲染器创建失败,打印错误,销毁窗口,清理 SDL,并退出
  42.     if (!renderer) {
  43.         fprintf(stderr, "渲染器创建失败: %s\n", SDL_GetError());
  44.         SDL_DestroyWindow(window); // 销毁窗口
  45.         SDL_Quit();                // 清理 SDL
  46.         return 1;                  // 返回错误码(不再用 SDL_Exit)
  47.     }

  48.     // 声明一个 4x4 的二维数组 grid,每个元素是 Cell 结构体,初始值为 0
  49.     Cell grid[GRID_SIZE][GRID_SIZE] = {0};

  50.     // 声明一个指针数组 ptr_grid,用于“穿针引线”地指向每一行(演示指针与数组的关系)
  51.     Cell* ptr_grid[GRID_SIZE];
  52.     // 将 ptr_grid 的每个元素指向 grid 的对应行(即 ptr_grid[i] 指向第 i 行首地址)
  53.     for (int i = 0; i < GRID_SIZE; ++i) {
  54.         ptr_grid[i] = grid[i]; // grid[i] 是第 i 行的首地址(类型为 Cell*)
  55.     }

  56.     // 记录上一次更新的时间(单位:毫秒),用于控制每秒更新一次
  57.     Uint32 last_update = SDL_GetTicks();
  58.     // 定义更新间隔为 1000 毫秒(即 1 秒)
  59.     const Uint32 UPDATE_INTERVAL = 1000;

  60.     // 控制主循环是否继续运行的标志
  61.     int running = 1;
  62.     // 声明事件变量,用于处理窗口关闭等事件
  63.     SDL_Event e;

  64.     // 主游戏/应用循环
  65.     while (running) {
  66.         // 处理所有待处理的 SDL 事件(如点击关闭按钮)
  67.         while (SDL_PollEvent(&e)) {
  68.             // 如果用户点击了窗口的关闭按钮,则设置 running 为 0 以退出循环
  69.             if (e.type == SDL_QUIT) {
  70.                 running = 0;
  71.             }
  72.         }

  73.         // 获取当前时间(毫秒)
  74.         Uint32 now = SDL_GetTicks();
  75.         // 如果距离上次更新已超过 1 秒,则更新所有格子的值
  76.         if (now - last_update >= UPDATE_INTERVAL) {
  77.             // 遍历 4x4 网格的每一行
  78.             for (int i = 0; i < GRID_SIZE; ++i) {
  79.                 // 遍历当前行的每一列
  80.                 for (int j = 0; j < GRID_SIZE; ++j) {
  81.                     // 通过指针数组访问并递增该格子的值(体现“指针穿针引线”)
  82.                     ptr_grid[i][j].value++;
  83.                 }
  84.             }
  85.             // 更新“上次更新时间”为当前时间
  86.             last_update = now;
  87.         }

  88.         // 设置清屏颜色为深灰色 (R=30, G=30, B=30, A=255)
  89.         SDL_SetRenderDrawColor(renderer, 30, 30, 30, 255);
  90.         // 执行清屏操作
  91.         SDL_RenderClear(renderer);

  92.         // 遍历整个 4x4 网格,绘制每个色块
  93.         for (int i = 0; i < GRID_SIZE; ++i) {
  94.             for (int j = 0; j < GRID_SIZE; ++j) {
  95.                 // 取 value 对 256 取模,确保颜色值在 0~255 范围内(避免溢出)
  96.                 int val = ptr_grid[i][j].value % 256;

  97.                 // 设置当前绘制颜色为灰度色(R=G=B=val)
  98.                 SDL_SetRenderDrawColor(renderer, val, val, val, 255);

  99.                 // 定义当前格子的矩形区域:
  100.                 // x = 列索引 j × 每格宽度
  101.                 // y = 行索引 i × 每格高度
  102.                 // w = 每格宽度
  103.                 // h = 每格高度
  104.                 SDL_Rect rect = {
  105.                     j * CELL_SIZE,   // x 坐标(从左到右)
  106.                     i * CELL_SIZE,   // y 坐标(从上到下)
  107.                     CELL_SIZE,       // 宽度
  108.                     CELL_SIZE        // 高度
  109.                 };
  110.                 // 填充该矩形区域(绘制色块)
  111.                 SDL_RenderFillRect(renderer, &rect);
  112.             }
  113.         }

  114.         // 将渲染器的内容呈现到窗口上(双缓冲交换)
  115.         SDL_RenderPresent(renderer);

  116.         // 短暂延迟约 16 毫秒,实现大约 60 帧/秒的刷新率,避免 CPU 占用过高
  117.         SDL_Delay(16);
  118.     }

  119.     // 程序结束前,依次释放资源:
  120.     SDL_DestroyRenderer(renderer); // 销毁渲染器
  121.     SDL_DestroyWindow(window);     // 销毁窗口
  122.     SDL_Quit();                    // 清理 SDL 所有子系统

  123.     // 正常退出程序
  124.     return 0;
  125. }
复制代码
gcc -o grid grid.c -lSDL2
./grid
编译修改一个exit问题后,执行显示一个黑色页面。但是没有递增的点阵显示效果?一直保留页面,会是变成灰色的。
 楼主| 发表于 2025-8-26 16:49:04 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-12-4 11:54 编辑

123456789018

继续通义:单元依次从全白,一个黑,到全部黑的递增,循环重置
可以产生依次行列白页面上,递增黑单元,重复循环。

  1. // 引入 SDL2 图形库头文件,用于创建窗口和绘制图形
  2. #include <SDL2/SDL.h>

  3. // 引入标准输入输出库,用于错误信息打印(如 fprintf)
  4. #include <stdio.h>

  5. // 引入标准库,虽然本程序未直接调用 exit(),但良好习惯保留
  6. #include <stdlib.h>

  7. // 定义网格的行列数:4 行 4 列
  8. #define GRID_SIZE 4

  9. // 定义每个格子的像素尺寸(宽高均为 80 像素)
  10. #define CELL_SIZE 80

  11. // 计算窗口总宽度:4 列 × 每列 80 像素 = 320 像素
  12. #define WINDOW_WIDTH  (GRID_SIZE * CELL_SIZE)

  13. // 计算窗口总高度:4 行 × 每行 80 像素 = 320 像素
  14. #define WINDOW_HEIGHT (GRID_SIZE * CELL_SIZE)

  15. // 主函数入口
  16. int main(int argc, char* argv[]) {
  17.     // 初始化 SDL 的视频子系统(用于窗口和渲染)
  18.     // 如果初始化失败(返回值不为 0),则打印错误信息并退出程序
  19.     if (SDL_Init(SDL_INIT_VIDEO) != 0) {
  20.         fprintf(stderr, "SDL初始化失败: %s\n", SDL_GetError()); // 打印 SDL 错误信息到标准错误流
  21.         return 1; // 返回非零值表示程序异常退出
  22.     }

  23.     // 创建一个 SDL 窗口:
  24.     // - 标题为 "4x4 点阵 - 逐个变黑"
  25.     // - 窗口在屏幕水平和垂直方向居中
  26.     // - 宽度和高度由宏定义决定(320x320)
  27.     // - SDL_WINDOW_SHOWN 表示创建后立即显示
  28.     SDL_Window* window = SDL_CreateWindow("4x4 点阵 - 逐个变黑",
  29.                                           SDL_WINDOWPOS_CENTERED, // X 坐标居中
  30.                                           SDL_WINDOWPOS_CENTERED, // Y 坐标居中
  31.                                           WINDOW_WIDTH,           // 窗口宽度
  32.                                           WINDOW_HEIGHT,          // 窗口高度
  33.                                           SDL_WINDOW_SHOWN);      // 显示标志
  34.     // 如果窗口创建失败(window 为 NULL),打印错误并清理 SDL 后退出
  35.     if (!window) {
  36.         fprintf(stderr, "窗口创建失败: %s\n", SDL_GetError());
  37.         SDL_Quit(); // 释放 SDL 初始化的资源
  38.         return 1;
  39.     }

  40.     // 创建一个硬件加速的渲染器,用于高效绘制图形
  41.     // 参数 -1 表示使用默认渲染驱动
  42.     SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  43.     // 如果渲染器创建失败,打印错误,销毁窗口,清理 SDL,然后退出
  44.     if (!renderer) {
  45.         fprintf(stderr, "渲染器创建失败: %s\n", SDL_GetError());
  46.         SDL_DestroyWindow(window); // 先销毁窗口
  47.         SDL_Quit();                // 再清理 SDL
  48.         return 1;
  49.     }

  50.     // 定义一个整型变量 step,表示当前动画步骤:
  51.     // step = 0 → 全白;step = 1 → 第1个黑;...;step = 16 → 全黑
  52.     int step = 0;

  53.     // 记录上一次更新的时间(单位:毫秒),用于控制每秒更新一次
  54.     Uint32 last_update = SDL_GetTicks();

  55.     // 定义更新间隔为 1000 毫秒(即 1 秒)
  56.     const Uint32 UPDATE_INTERVAL = 1000;

  57.     // 控制主循环是否继续运行的标志(1=运行,0=退出)
  58.     int running = 1;

  59.     // 声明 SDL 事件变量,用于接收用户操作(如关闭窗口)
  60.     SDL_Event e;

  61.     // 主循环:只要 running 为真,就持续运行
  62.     while (running) {
  63.         // 处理所有待处理的 SDL 事件(如鼠标、键盘、窗口关闭等)
  64.         while (SDL_PollEvent(&e)) {
  65.             // 如果事件类型是“窗口关闭”(点击了 X 按钮)
  66.             if (e.type == SDL_QUIT) {
  67.                 running = 0; // 设置标志,退出主循环
  68.             }
  69.         }

  70.         // 获取当前时间(自 SDL 启动以来的毫秒数)
  71.         Uint32 now = SDL_GetTicks();

  72.         // 判断是否已经过去至少 1 秒(UPDATE_INTERVAL)
  73.         if (now - last_update >= UPDATE_INTERVAL) {
  74.             step++; // 动画步骤加 1

  75.             // 如果 step 超过 16(即第 17 步),说明已全部变黑,需要重置
  76.             if (step > 16) {
  77.                 step = 0; // 重置为 0,重新从全白开始
  78.             }

  79.             // 更新“上次更新时间”为当前时间,用于下一次计时
  80.             last_update = now;
  81.         }

  82.         // 设置清屏颜色为白色(R=255, G=255, B=255, A=255)
  83.         SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);

  84.         // 执行清屏操作(用白色填充整个窗口背景)
  85.         SDL_RenderClear(renderer);

  86.         // 遍历网格的每一行(i 从 0 到 3)
  87.         for (int i = 0; i < GRID_SIZE; ++i) {
  88.             // 遍历当前行的每一列(j 从 0 到 3)
  89.             for (int j = 0; j < GRID_SIZE; ++j) {
  90.                 // 将二维坐标 (i, j) 转换为一维索引(行优先顺序):
  91.                 // 第0行:0,1,2,3;第1行:4,5,6,7;...;第3行:12,13,14,15
  92.                 int index = i * GRID_SIZE + j;

  93.                 // 判断当前格子是否应该显示为黑色:
  94.                 // 如果它的索引小于当前 step,说明它已经被“熄灭”(变黑)
  95.                 if (index < step) {
  96.                     // 设置绘制颜色为黑色(R=0, G=0, B=0)
  97.                     SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
  98.                 } else {
  99.                     // 否则保持白色
  100.                     SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
  101.                 }

  102.                 // 定义当前格子的矩形区域:
  103.                 // x = 列号 j × 每格宽度
  104.                 // y = 行号 i × 每格高度
  105.                 // w = 每格宽度
  106.                 // h = 每格高度
  107.                 SDL_Rect rect = {
  108.                     j * CELL_SIZE,   // x 坐标(从左到右)
  109.                     i * CELL_SIZE,   // y 坐标(从上到下)
  110.                     CELL_SIZE,       // 宽度
  111.                     CELL_SIZE        // 高度
  112.                 };

  113.                 // 用当前设置的颜色填充这个矩形(即绘制一个色块)
  114.                 SDL_RenderFillRect(renderer, &rect);
  115.             }
  116.         }

  117.         // 将渲染器中绘制的内容提交到窗口上显示(双缓冲交换)
  118.         SDL_RenderPresent(renderer);

  119.         // 暂停约 16 毫秒,使主循环大约以 60 帧/秒运行,避免 CPU 占用过高
  120.         SDL_Delay(16);
  121.     }

  122.     // 程序结束前,按顺序释放资源:
  123.     SDL_DestroyRenderer(renderer); // 销毁渲染器
  124.     SDL_DestroyWindow(window);     // 销毁窗口
  125.     SDL_Quit();                    // 清理 SDL 所有子系统

  126.     // 正常退出程序(返回 0 表示成功)
  127.     return 0;
  128. }
复制代码
下面应该是全组合了!
 楼主| 发表于 2025-8-26 16:50:13 | 显示全部楼层
本帖最后由 zzz19760225 于 2025-12-4 12:06 编辑

123456789019
可以依次递增显示组合内容

  1. // 引入 SDL2 图形库,用于创建窗口和绘制
  2. #include <SDL2/SDL.h>

  3. // 引入标准输入输出,用于错误提示
  4. #include <stdio.h>

  5. // 定义网格大小:4x4
  6. #define GRID_SIZE 4

  7. // 每个格子的像素尺寸(80x80)
  8. #define CELL_SIZE 80

  9. // 窗口总宽高:320x320
  10. #define WINDOW_WIDTH  (GRID_SIZE * CELL_SIZE)
  11. #define WINDOW_HEIGHT (GRID_SIZE * CELL_SIZE)

  12. // 总状态数:2^16 = 65536
  13. #define TOTAL_STATES (1 << (GRID_SIZE * GRID_SIZE))  // 1 << 16 = 65536

  14. int main(int argc, char* argv[]) {
  15.     // 初始化 SDL 视频子系统
  16.     if (SDL_Init(SDL_INIT_VIDEO) != 0) {
  17.         fprintf(stderr, "SDL初始化失败: %s\n", SDL_GetError());
  18.         return 1;
  19.     }

  20.     // 创建居中显示的窗口
  21.     SDL_Window* window = SDL_CreateWindow("4x4 全组合遍历",
  22.                                           SDL_WINDOWPOS_CENTERED,
  23.                                           SDL_WINDOWPOS_CENTERED,
  24.                                           WINDOW_WIDTH, WINDOW_HEIGHT,
  25.                                           SDL_WINDOW_SHOWN);
  26.     if (!window) {
  27.         fprintf(stderr, "窗口创建失败: %s\n", SDL_GetError());
  28.         SDL_Quit();
  29.         return 1;
  30.     }

  31.     // 创建硬件加速渲染器
  32.     SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  33.     if (!renderer) {
  34.         fprintf(stderr, "渲染器创建失败: %s\n", SDL_GetError());
  35.         SDL_DestroyWindow(window);
  36.         SDL_Quit();
  37.         return 1;
  38.     }

  39.     // 当前状态编号:0 = 全白,65535 = 全黑
  40.     unsigned int state = 0;

  41.     // 上次更新时间(毫秒)
  42.     Uint32 last_update = SDL_GetTicks();

  43.     // 更新间隔:1000 毫秒 = 1 秒
  44.     const Uint32 UPDATE_INTERVAL = 1000;

  45.     // 主循环运行标志
  46.     int running = 1;
  47.     SDL_Event e;

  48.     // 主事件与渲染循环
  49.     while (running) {
  50.         // 处理事件(如关闭窗口)
  51.         while (SDL_PollEvent(&e)) {
  52.             if (e.type == SDL_QUIT) {
  53.                 running = 0;
  54.             }
  55.         }

  56.         // 检查是否到更新时间
  57.         Uint32 now = SDL_GetTicks();
  58.         if (now - last_update >= UPDATE_INTERVAL) {
  59.             state++; // 状态递增
  60.             if (state >= TOTAL_STATES) {
  61.                 state = 0; // 循环重置:回到全白
  62.             }
  63.             last_update = now;
  64.         }

  65.         // 清屏(可选,我们直接覆盖所有格子)
  66.         SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
  67.         SDL_RenderClear(renderer);

  68.         // 遍历每个格子
  69.         for (int i = 0; i < GRID_SIZE; ++i) {
  70.             for (int j = 0; j < GRID_SIZE; ++j) {
  71.                 // 将 (i,j) 转换为位索引(0 ~ 15)
  72.                 int bit_index = i * GRID_SIZE + j;

  73.                 // 检查 state 的第 bit_index 位是否为 1
  74.                 // 方法:右移 bit_index 位,再与 1 取按位与
  75.                 int is_black = (state >> bit_index) & 1;

  76.                 // 根据位值设置颜色
  77.                 if (is_black) {
  78.                     SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);   // 黑色
  79.                 } else {
  80.                     SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); // 白色
  81.                 }

  82.                 // 定义当前格子的矩形区域
  83.                 SDL_Rect rect = {
  84.                     j * CELL_SIZE,   // x 坐标(列方向)
  85.                     i * CELL_SIZE,   // y 坐标(行方向)
  86.                     CELL_SIZE,       // 宽度
  87.                     CELL_SIZE        // 高度
  88.                 };

  89.                 // 填充该矩形
  90.                 SDL_RenderFillRect(renderer, &rect);
  91.             }
  92.         }

  93.         // 显示当前帧
  94.         SDL_RenderPresent(renderer);

  95.         // 控制帧率(避免 CPU 占用过高)
  96.         SDL_Delay(16);
  97.     }

  98.     // 释放资源
  99.     SDL_DestroyRenderer(renderer);
  100.     SDL_DestroyWindow(window);
  101.     SDL_Quit();

  102.     return 0;
  103. }
复制代码
 楼主| 发表于 2025-8-26 16:53:09 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-2-23 14:41 编辑

123456789020

语言,语文,文字,文章的语法文法的内容,中文编程的内容。(按序重复路线执行,比较选择=匹配二进制布尔值开关)

文字,字类,多字组合的词类,
句子和文章的整体容器圈层级。
字的图形与指向的概念空间意,字图形组合的内部单元部首偏旁笔画。
整体道,气,混沌,圈层级的太极太集,太集集合相对的阴阳。抽象的太极内容,装载年代具体存在的人事物,依然使用太极相对关系结构。相对关系里的主次,同同叠加,同异反等相对关系的逻辑关系。微观无限小太极里的已有有限极限的原子能量物质空间,圈层级的太极单元,组成的山河,人物。


:ksyx开始游戏
:tcyx退出游戏

建立用户
删除用户
------nc昵称
------lv等级
------yl银两
------ds点数

------bsd饱食度
------bsdsx饱食度最大值

------rgj攻击
------wqmc武器
------wqgj武器攻击+

------rfy防御
------fzmc服装
------fzfy服装防御+

------rhp气血
------rhpsx气血最大值
------ydmc腰带
------ydqx腰带气血+

------rmp法力
------rmpsx法力最大值
------mzmc饰品
------mzmf饰品魔法+

------exp经验
------sjexp升级经验值 经验最大值

:svjl保存记录
:rejl读取记录

地图:
:jyc建邺城 菜菜城
-----------:wqd武器店
-----------:fzd服装店
-----------:spd饰品店
-----------:yd药店
-----------:jd酒店
-----------:shop干粮店
-----------:zhd杂货店
-----------:xlc训练场
-----------:xlt修炼塔
-----------:sjzdr升级指导人
:cw城外
-----------:dhw东海湾
-----------:dhyd东海岩洞
-----------:dhcc东海沉船
-----------:ccnb沉船内部
-----------:rdl热带林
-----------:fff热带林内部
-----------:mwg迷雾谷
-----------:mwd迷雾洞
-----------:mwdnb迷雾洞内部
-----------:pmhf飘渺幻府

1有形变量
2无形变量
3家单人和夫妻,子女
4地图:家环境的独家,村社
5地图:家环境独家或村社外的乡镇县城郡府洲国(地星村),多星村,太阳乡,银河县......
游戏中的自观信息阵列结构,游戏中的理论机器金手指系统思维流程集中统计分析比较匹配选择,游戏中的各种现实关系拟人磨刀石练习。
 楼主| 发表于 2025-8-26 16:53:28 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-2-23 13:20 编辑

1234567890

1显示变量
2储存变量
3标签

变量:

显示变量内容18个(22个变量):
昵称:%nc%
气血:%rhp%/%rhpsx%
法力:%rmp%/%rmpsx%
攻击:%rgj%
防御:%rfy%
等级:%lv%
经验:%exp%/%sjexp%
银两:%yl%
点数:%ds%
饱食度:%bsd%/%bsdsx%
武器:%wqmc%
攻击+%wqgj%
服装:%fzmc%
防御+%fzfy%
腰带:%ydmc%
气血上限+%ydqx%
饰品:%mzmc%
魔法上限+%mzmf%
商城:S
充值:P
详细信息:i

储存取变量大概算38个:

  1. 1 nc= 昵称

  2. 2 lv=1 等级
  3. 3 ds=0 充值点数
  4. 4 yl=0 银两
  5. 5 suiyin=0 碎银(不是整银,需要一个操作合成银两)
  6. 6 exp=0 经验
  7. 7 sjexp=20 最大升级经验值
  8. 8 sjexpdz=10 最大升级经验值
  9. 9 bsd=1000 饱食度
  10. 10 bsdsx=1000 最大饱食值

  11. 11 rgj=20 攻击
  12. 12 rfy=10 防御

  13. 13 rhp=30 气血值
  14. 14 rhpsx=30 最大气血值

  15. 15 rmp=30 魔法值
  16. 16 rmpsx=30 最大魔法值

  17. 17 wqmc=无 武器
  18. 18 wqgj=0 武器攻击
  19. 19 fzmc=无 服装
  20. 20 fzfy=0 服装防御
  21. 21 ydmc=无 腰带
  22. 22 ydqx=0 腰带加气血
  23. 23 mzmc=无 戒指
  24. 24 mzmf=0 戒指加魔法

  25. 25 xixue=0 吸血
  26. 26 mfhf=3 免费恢复气血和魔法的次数

  27. 27 hh=1 回合

  28. 28 mb=0 面包
  29. 29 bg=0 饼干
  30. 30 jcy=0 金创药
  31. 31 xhy=0 仙狐延
  32. 32 lhd=0 龙魂丹

  33. 33 jnl1=空卡槽 技能1
  34. 34 jnl2=空卡槽 技能2
  35. 35 jnl3=空卡槽 技能3

  36. 36 qnfyj=0 劝降翻译机
  37. 37 bosszgr=%random%%%10 怪老大装备暴率

  38. 38 js=0 击杀数
复制代码
大概219个标签

  1. :ysdmx游戏结构

  2. :cd菜单
  3. :tcyx退出游戏
  4. :yxsm游戏说明
  5. :ksyx开始游戏

  6. :jyc建邺城 菜菜城
  7. :svjl保存记录
  8. :savejl保存记录
  9. :rejl读取记录
  10. :readjl读取记录
  11. :nojl没有保存记录

  12. :wqd武器店

  13. :hyq红缨枪
  14. :qjq曲尖枪
  15. :jcm锯齿矛
  16. :wjsyc乌金三夜叉
  17. :huoyanqiang火焰枪
  18. :mgjg墨杆金钩
  19. :xtm玄蛇矛
  20. :jsx金蛇信
  21. :zbdgm丈八点钢矛
  22. :ay暗夜
  23. :lh梨花
  24. :pl霹雳

  25. :wqgm武器购买
  26. :gmwqcg购买武器成功

  27. :fzd服装店

  28. :by布衣
  29. :py皮衣
  30. :lj鳞甲
  31. :szy梭子衣
  32. :jsy紧身衣
  33. :gangjia钢甲
  34. :ympf夜魔披风
  35. :lgj龙骨甲
  36. :swdp死亡斗篷
  37. :sypf神谕披风

  38. :fzgm服装购买
  39. :gmfzcg购买服装成功

  40. :spd饰品店

  41. :minijz迷你戒指
  42. :tjz铜戒指
  43. :jjz金戒指
  44. :mfzh魔法指环
  45. :mjzh魔晶指环
  46. :yszh元素指环
  47. :amzh暗魔指环
  48. :xhzh星河指环
  49. :lmzh猎魔指环
  50. :ltzh雷霆指环
  51. :hlzx幻龙之心

  52. :mzgm
  53. :gmmzgm

  54. :yd药店

  55. :gmjcy购买金疮药
  56. :gmjcycg购买金疮药成功
  57. :gmxhy购买仙狐延
  58. :gmxhycg购买仙狐延成功
  59. :gmlhd购买龙魂丹
  60. :gmlhdcg购买龙魂丹成功
  61. :hf恢复

  62. :jd酒店
  63. :cbz吃包子
  64. :cbzcg吃包子成功
  65. :zhudian住店
  66. :zhudiancg住店成功
  67. :timer
  68. :zhudianok住店

  69. :sjzdr升级指导人
  70. :sj升级
  71. :sjcg升级成功

  72. :dhw东海湾
  73. :dhg大海龟
  74. :dhgtl大海龟首领

  75. :dhcc东海沉船
  76. :jw巨蛙
  77. :jwtl巨蛙头领

  78. :dhyd东海岩洞
  79. :xq小强
  80. :xqtl小强头领

  81. :ccnb沉船内部
  82. :hmc海毛虫
  83. :hmctl海毛虫头领
  84. :boss怪头领

  85. :zd战斗
  86. :qx劝降

  87. :nofyj没有翻译机
  88. :qxsb劝降失败
  89. :qxsb2劝降失败2
  90. :gj攻击
  91. :dj道具
  92. :cjcy吃金创药
  93. :cjcycg吃金创药成功
  94. :cxhy吃仙狐延
  95. :cxhycg吃仙狐延成功
  96. :clhd吃龙魂丹
  97. :clhdcg吃龙魂丹成功

  98. :fs法术
  99. :ndxs牛刀小试
  100. :ndxscg牛刀小试成功

  101. :0技能为空

  102. :空卡槽
  103. :222222

  104. :st撕天
  105. :333333

  106. :hm幻灭

  107. :tp逃跑
  108. :win胜利
  109. :lose挂了
  110. :esl饿死了
  111. :pay充值
  112. :czcg充值成功

  113. :bosszgBOSS之国
  114. :swk孙悟空
  115. :atm奥特曼
  116. :cr超人
  117. :yxzz游戏作者

  118. :mwg迷雾谷
  119. :yl幽灵
  120. :ynzm怨念之魔

  121. :mwd迷雾洞
  122. :klr骷髅人
  123. :sl死灵
  124. :jwtl怨念之魔

  125. :mwdnb迷雾洞内部
  126. :mw冥王

  127. :pmhf飘渺幻府

  128. :zhd杂货店
  129. :a布腰带
  130. :b皮腰带
  131. :c铁腰带
  132. :d钢腰带
  133. :e阴阳腰带
  134. :f玄冥腰带
  135. :g金蛇腰带
  136. :h赤炎
  137. :i玄冰
  138. :j盘龙
  139. :k翻译机

  140. :mzgm
  141. :gmmzgm

  142. :wqda武器店

  143. :hyq红缨枪
  144. :qjq曲尖枪
  145. :jcm锯齿矛
  146. :wjsyc乌金三夜叉
  147. :huoyanqiang火焰枪
  148. :mgjg墨杆金钩
  149. :xtm玄蛇矛
  150. :jsx金蛇信
  151. :zbdgm丈八点钢矛
  152. :ay暗夜
  153. :lh梨花
  154. :pl霹雳

  155. :wqgm武器购买
  156. :gmwqcg购买武器成功

  157. :fzda服装店

  158. :by布衣
  159. :py皮衣
  160. :lj鳞甲
  161. :szy梭子衣
  162. :jsy紧身衣
  163. :gangjia钢甲
  164. :ympf夜魔披风
  165. :lgj龙骨甲
  166. :swdp死亡斗篷
  167. :sypf神谕披风

  168. :fzgm服装购买
  169. :gmfzcg购买服装成功

  170. :spda饰品店

  171. :tjz铜戒指
  172. :jjz金戒指
  173. :mfzh魔法指环
  174. :mjzh魔晶指环
  175. :yszh元素指环
  176. :amzh暗魔指环
  177. :xhzh星河指环
  178. :lmzh猎魔指环
  179. :ltzh雷霆指环
  180. :hlzx幻龙之心

  181. :mzgm
  182. :gmmzgm

  183. :sjzdra升级指导人
  184. :sja升级
  185. :sjcg升级成功

  186. :jnyw ?今年以外 金陵以外

  187. :cw城外

  188. :rdl热带林
  189. :hm变异河马
  190. :xn变异犀牛
  191. :fzs变异非洲狮
  192. :jdw变异箭毒蛙

  193. :fff热带林内部
  194. :srh变异食人花
  195. :jyl捡银两

  196. :xlt修炼塔
  197. :xiulian修炼
  198. :timer计时器
  199. :xiuliancg修炼成功
  200. :xlcg修炼成功

  201. :111111长距离瞬移
  202. :jnl2cg技能2成功

  203. :el饿了
  204. :elkx饿了亏血

  205. :zbda迷雾毒药自爆自杀(后面da基本是飘渺府的标志)
  206. :xxxx

  207. :shop干粮店
  208. :mb面包
  209. :mbcg面包成功
  210. :bg饼干
  211. :bgcg饼干成功

  212. :beibao背包
  213. :cmb吃面包
  214. :cmbcg吃面包成功
  215. :cbg吃饼干
  216. :cbgcg吃饼干成功

  217. :liu溜溜溜666六六六
  218. :xixue吸血
  219. :xlc训练场
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 19:28 , Processed in 0.026996 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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