• 3912阅读
  • 2回复

[提问]QT贪吃蛇//food->move((qrand()%(x/20))*20//qrand()什么意思? [复制链接]

上一主题 下一主题
离线mirro
 
只看楼主 倒序阅读 楼主  发表于: 2012-04-09

  1. #include "Snake.h"
  2. #include <QKeyEvent>
  3. #include <QTime>
  4. Snake::Snake(){
  5. qsrand(QTime::currentTime().msec());
  6. this->resize(600,500);
  7. data.push_back(getFood());
  8. // data[0]->show();
  9. dire=d_right;
  10. speed=20;
  11. this->startTimer(300);
  12. getFood();
  13. }
  14. Snake::~Snake(){
  15. }
  16. void Snake::snakemove(){
  17. int nhx=data[0]->x();
  18. int nhy=data[0]->y();
  19. if(nhx==food->x()&&nhy==food->y()){
  20. data.push_back(food);
  21. food=getFood();
  22. food->show();
  23. }
  24. switch(dire){
  25. case d_up:
  26. nhy=nhy-20;
  27. break;
  28. case d_down:
  29. nhy=nhy+20;
  30. break;
  31. case d_left:
  32. nhx=nhx-20;
  33. break;
  34. case d_right:
  35. nhx=nhx+20;
  36. break;
  37. }
  38. /*从data中的最后一个元素 */
  39. for(int i=data.size()-1;i>0;i--){
  40. data[i]->move(data[i-1]->x(),data[i-1]->y());
  41. }
  42. data[0]->move(nhx,nhy);
  43. if(nhx<=0||nhx>=this->width()||
  44. nhy<=0||nhy>=this->height()){
  45. this->close();
  46. }
  47. }
  48. void Snake::keyPressEvent(QKeyEvent *e){
  49. /*判断 到底那个键被按下*/
  50. if(e->key()==Qt::Key_Up){
  51. dire=d_up;
  52. }else if(e->key()==Qt::Key_Down){
  53. dire=d_down;
  54. }else if(e->key()==Qt::Key_Left){
  55. dire=d_left;
  56. }else if(e->key()==Qt::Key_Right){
  57. dire=d_right;
  58. }else{
  59. ;
  60. }
  61. }
  62. void Snake::timerEvent(QTimerEvent *e){
  63. snakemove();
  64. }
  65. /*生成食物的函数 */
  66. QLabel* Snake::getFood(){
  67. food=new QLabel(this);
  68. food->resize(20,20);
  69. food->setAutoFillBackground(true);
  70. food->setFrameShape(QFrame::Box);
  71. food->setPalette(QPalette(QColor(255,0,0)));
  72. int x=this->width();
  73. int y=this->height();
  74. food->move((qrand()%(x/20))*20,
  75. (qrand()%(y/20))*20);
  76. return food;
  77. }

离线shaoshuai898

只看该作者 1楼 发表于: 2012-04-09
food 是一个QLabel  LZ问的那个函数move()是将QLabel 也就是生成的food移动到新的位置,函数里面长长的那个是随机数产生一个x y的坐标……lz头像挺有feel啊
离线mirro
只看该作者 2楼 发表于: 2012-04-12
回 1楼(shaoshuai898) 的帖子
你的图片也挺萌的
/20 再*20什么意思呀?
快速回复
限100 字节
 
上一个 下一个