设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

菜鸟求教,关于这段代码

查看数: 1998 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-12-27 20:39

正文摘要:

本帖最后由 寒冷魔王 于 2014-12-27 22:42 编辑 CPP 代码复制// 在主空间:#include <conio.h>enum Key { up = 72, down = 80, left = 75, right = 77, esc = 27, enter = 13 } ...

回复

寒冷魔王 发表于 2014-12-27 22:39:55
还是不用switch了,用switch显得乱,而且代码字节数一比还多许多
主要是esc和enter判断比较长,用switch反而不如else if
寒冷魔王 发表于 2014-12-27 22:27:41
本帖最后由 寒冷魔王 于 2014-12-27 22:30 编辑
yagami 发表于 2014-12-27 22:04
goto 做大死 要打断随便加个defult 里作点事情就行比如char key;
while(1){
    key = getch();


谢谢~我喜欢用for,这样改
CPP 代码复制
  1. for (char key = 0; key == 0;)
  2. {
  3.         key = _getch();
  4.         switch (key)
  5.         {
  6.         case (char)Key::up: //编译器严格得话 可能要强转
  7.         case Key::down:
  8.         case Key::left:
  9.         case Key::right:
  10.                 // do something
  11.                 break;
  12.         case esc:
  13.                 // do something
  14.                 break;
  15.         default:
  16.                 key = 0;
  17.         }
  18. }


但是总感觉用switch行数略多
yagami 发表于 2014-12-27 22:04:57
本帖最后由 yagami 于 2014-12-27 22:06 编辑
寒冷魔王 发表于 2014-12-27 21:57
enum Key move;
for (;;)
{


goto 做大死 要打断随便加个defult 里作点事情就行比如
CPP 代码复制
  1. char key;
  2. while(1){
  3.     key = getch();
  4.     switch(key){
  5.         case (char)Key::up: //编译器严格得话 可能要强转
  6.         case Key::down:
  7.         case Key::left:
  8.         case Key::right:
  9.         // do something
  10.             break;
  11.         case esc:
  12.         // do something
  13.             break;
  14.         default:
  15.             key = -1;
  16.     };
  17.     if(key!=-1)
  18.         break;
  19. }

评分

参与人数 1星屑 +60 收起 理由
RyanBern + 60 我很赞同

查看全部评分

寒冷魔王 发表于 2014-12-27 21:57:44
taroxd 发表于 2014-12-27 21:13
要跨平台的一套通用代码还是比较麻烦的吧。Linux 上大概是用 input.h 里的东西判断的。想要跨平台的话,考 ...

CPP 代码复制
  1. enum Key move;
  2. for (;;)
  3. {
  4.         char key = _getch();
  5.         if (key == Key::up || key == Key::down || key == Key::left || key == Key::right)
  6.         {
  7.                 move = static_cast<Key>(key);
  8.                 break;
  9.         }
  10.         else if() {} // 还有其他判断
  11. }

感觉上在循环里每次初始化貌似影响效率
RyanBern 发表于 2014-12-27 21:17:27
本帖最后由 RyanBern 于 2014-12-27 21:22 编辑

差不多是这样?
CPP 代码复制
  1. char key;
  2. while(true){
  3.     key = getch();
  4.     switch(key){
  5.         case up:
  6.         case down:
  7.         case left:
  8.         case right:
  9.         // do something
  10.             break;
  11.         case esc:
  12.         // do something
  13.             break;
  14.     }
  15. }

利用switch-case结构可能更简单些,利用不写break的贯穿结构,比if稍稍好点。
另外我也是没找到标准库里面和getch功能相同的函数,好久不用这个东西都快忘了的说……
taroxd 发表于 2014-12-27 21:13:05
本帖最后由 taroxd 于 2014-12-27 21:40 编辑

要跨平台的一套通用代码还是比较麻烦的吧。Linux 上大概是用 input.h 里的东西判断的。想要跨平台的话,考虑用宏来判断平台怎么样?

conio.h 也好,Windows API 也好,都直接用上吧,没关系的。

P.S. 其实我不是全能大触。我也不是很懂这些。

P.S.2 那个 for 循环和 while(true) 没什么区别吧……
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-10-3 21:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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