专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Qt写2048游戏

  用Qt写2048游戏。
  程序功能:
  0.游戏的开始按钮、重新开始按钮、规则提示
  1.格子的左右移动 WASD
  2.数字合并时的计算
  3.得分计算
  4.每次操作后随机出现2
  5.判断游戏是否结束
  6.游戏界面
  设计思路:
  0.对于2048这个4*4棋盘的游戏而言,我们可以设计一个int[4][4],于是直接对数组操作即可。
  1.初始化函数,使得得分变为0,格子清空
  2.随机函数生成2(检测有没有空的格子,若是有,那么直接生成2,如果没有,那么判断游戏是否结束)
  3.格子的绘制paintEvent()
  接下来,我们开始吧。
  0.新建空项目
  1.初始化部分    for(int i=0;i<4;i++){         for(int j=0;j<4;j++){             s[i][j]=0;         }     }     button=new QPushButton("开始游戏");     button->setGeometry(60,400,200,50);          //随机种子     qsrand(uint(QTime(0,0,0).secsTo(QTime::currentTime())));     //槽与信号     connect(button,SIGNAL(clicked()),this,SLOT(slotStart()));
  2.绘制格子(此处只贴出设置2和0的格子,其余数字(4,8,16,32......)以此类推,改变数字和颜色即可)void MainWindow::PaintEvent(QPaintEvent *) {     QPainter p(this);     p.setBrush(Qt::blue);     p.setFont(QFont("微软雅黑",20,700,false));      //设置字体,颜色      QString strscore;     p.drawText(QPoint(20,60),"分数:"+QString::number(score));//显示分数      //绘制格子     for(int i=0;i<4;i++){         for(int j=0;j<4;j++){             p.setPen(Qt::transparent);             if(s[i][j]==0){                 p.setBrush(Qt::gray);                 p.drawRect(i*60+40,j*60+120,55,55);              }             else if (s[i][j]==2){                 p.setBrush(QColor(255,250,222,255));                 p.drawRect(i*60+40,j*60+120,55,55);                  p.setPen(Qt::black);                  p.setFont(QFont("微软雅黑",10,700,false));                  //在格子中部显示出当前数字,并居中对齐                  p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(2),QTextOption(Qt::AlignCenter));             }                     }     } }
  3.控制读取键盘,完成数字的移动和相加(此处演示向上移动+相加,左下右以此类推,具体细节见最终源码)void MainWindow::PressUp()     {         //看上方是否为空格,若是,则上移(注意:此处为整体上移)         for(int i=0;i<4;i++){             for(int j=1;j<3;j++){                 if(s[i][j]==0) continue;                 for(int p=0;p #include  #include  #include  #include  #include  //用来 Debug #include //自定义消息提示框   QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE  class MainWindow : public QMainWindow {     Q_OBJECT   public:     explicit MainWindow(QWidget *parent = nullptr);     ~MainWindow();     void paintEvent(QPaintEvent *);     void keyPressEvent(QKeyEvent *event);      void PressUp();     void PressDown();     void PressLeft();     void PressRight();     void myRand();      QPushButton *button;     int s[4][4];     int score=0;     bool state;      struct Ns{         int i;         int j;     };   public slots:         void slotStart();                    //槽函数  private:     Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
  main.cpp:#include "mainwindow.h"  #include   int main(int argc, char *argv[]) {     QApplication a(argc, argv);     MainWindow w;                         //显示窗体     w.setFixedSize(320,480);        //设置窗体固定的长宽     w.setWindowTitle("2048");       //设置窗体名     w.show();     return a.exec(); }
  mainwindow.cpp:#include "MainWindow.h" #include "ui_MainWindow.h"  MainWindow::MainWindow(QWidget *parent) :     QMainWindow(parent),     ui(new Ui::MainWindow) {     ui->setupUi(this);     //初始化     for(int i=0;i<4;i++){         for(int j=0;j<4;j++){             s[i][j]=0;         }     }     button = new QPushButton("开始游戏",this);     button->setGeometry(60,400,200,50);//从(60,400)做一个200*50的按钮     //随机函数     qsrand(uint(QTime(0,0,0).secsTo(QTime::currentTime())));      connect(button,SIGNAL(clicked()),this,SLOT(slotStart()));  }  MainWindow::~MainWindow() {     delete ui; }  void MainWindow::paintEvent(QPaintEvent *) {     QPainter p(this);     p.setBrush(Qt::blue);     p.setFont(QFont("微软雅黑",20,700,false));      QString strscore;     p.drawText(QPoint(20,60),"分数: "+QString::number(score));      for (int i=0;i<4;i++) {         for (int j=0;j<4;j++) {             p.setPen(Qt::transparent);//?             if(s[i][j]==0){                 p.setBrush(QColor(255,250,222,255));                 p.drawRect(i*60+40,j*60+120,55,55);             }             else if (s[i][j]==2) {                 p.setBrush(QColor(255,229,168,255));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 //在方块中 绘制Text, 并且文本位置位于中部                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(2),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==4) {                 p.setBrush(QColor(255,197,136,255));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(4),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==8) {                 p.setBrush(QColor(251,179,129,255));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(8),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==16) {                 p.setBrush(QColor(250,160,99,255));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(16),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==32) {                 p.setBrush(QColor(251,103,55,255));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(32),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==64) {                 p.setBrush(QColor(213,92,14,255));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(64),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==128) {                 p.setBrush(QColor(252,161,159,255));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(128),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==256) {                 p.setBrush(QColor(248,126,124,147));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(256),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==512) {                 p.setBrush(QColor(255,50,80,255));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(512),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==1024) {                 p.setBrush(QColor(188,25,22,255));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(1024),QTextOption(Qt::AlignCenter));             }             else if (s[i][j]==2048) {                 p.setBrush(QColor(245,69,67,15));                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(2048),QTextOption(Qt::AlignCenter));             }             else{                 p.setBrush(Qt::darkBlue);                 p.drawRect(i*60+40,j*60+120,55,55);                 p.setPen(Qt::black);                 p.setFont(QFont("微软雅黑",10,700,false));                 p.drawText(QRectF(i*60+40,j*60+120,55,55),QString::number(s[i][j]),QTextOption(Qt::AlignCenter));             }         }     } }  void MainWindow::keyPressEvent(QKeyEvent *event) {     if(!state){         return ;     }         switch (event->key()) {         case Qt::Key_W:             PressUp();             break;          case Qt::Key_S:             PressDown();             break;          case Qt::Key_A:             PressLeft();             break;          case Qt::Key_D:             PressRight();             break;          default:             return;//忽略其他按钮         }         myRand();         update(); } void MainWindow::slotStart(){     QMessageBox::about(this,"游戏规则","WSAD控制方块上下左右移动");     score=0;     for (int i=0;i<4;i++) {         for (int j=0;j<4;j++) {             s[i][j]=0;         }     }     button->setText("重新游戏");      int randi=qrand()%4;     int randj=qrand()%4;     s[randi][randj]=2;      state=true;     update(); } void MainWindow::PressUp(){     //移动     for (int i=0;i<4;i++) {         for (int j=1;j<4;j++) {             if(s[i][j]==0)continue;             for (int p=0;p=0;j--) {             if(s[i][j]==0)continue;             for (int p=3;p>j;p--) {                 //查看前面是否有空格子可移动                 if(s[i][p]==0){                     s[i][p]=s[i][j];                     s[i][j]=0;                     break;                 }             }         }     }     //相加     for (int i=0;i<4;i++) {         for (int j=3;j>0;j--) {             if(s[i][j]==s[i][j-1]){                 s[i][j]=2*s[i][j];                 s[i][j-1]=0;                 score+=s[i][j];                 for (int p=j-2;p>=0;p--) {                     s[i][p+1]=s[i][p];                 }             }         }     } } void MainWindow::PressLeft(){     //移动     for (int j=0;j<4;j++) {         for (int i=1;i<4;i++) {             if(s[i][j]==0){                 continue;             }             for (int p=0;p=0;i--) {             if(s[i][j]==0){                 continue;             }             for (int p=3;p>i;p--) {                 //查看前面是否有空格可移入                 if(s[p][j] == 0){                     s[p][j] = s[i][j];                     s[i][j] = 0;                     break;                 }             }         }     }     //相加     for (int j=0;j<4;j++) {         for (int i=3;i>=0;i--) {             if(s[i][j]==s[i-1][j]){                 s[i][j]=s[i][j]*2;                 s[i-1][j]=0;                 score+=s[i][j];                 for(int p=i-2;p>=0;p--){                     s[p+1][j] = s[p][j];                 }             }         }     } } void MainWindow::myRand(){     int i=0,j=0;     //找出格子     struct Ns n[15];     int ni=0;     for (i=0;i<4;i++) {         for (j=0;j<4;j++) {             if(s[i][j]==0){                 n[ni].i=i;                 n[ni].j=j;                 ni++;             }         }     }      //判断游戏是否结束     if (ni==0) {         for (i=0;i<4;i++) {             for (j=0;j<3;j++) {                 if(s[i][j]==s[i][j+1]){                     return;                 }             }         }         for (j=0;j<4;j++) {             for (i=0;i<3;i++) {                 if(s[i][j]==s[i+1][j]){                     return;                 }             }         }         QMessageBox::about(this,"游戏失败","分数为:"+QString::number(score)+" ");         return;     }     int rand=qrand()%ni;     s[n[rand].i][n[rand].j]=2; }

年画之乡滩头古镇直到小学的时候,才知道世界到底有多大。尽管如此,直到初中毕业之前,我都是极少离开滩头镇的,那是我童年生活的全部。虽然今非昔比,但往事如在眼前历历在目。我的出生地,在一个偏僻的小山村河南这六个刚入选的全国乡村旅游重点村,每一个都不容错过点击右上关注,邀您共同领略探讨中原历史文化,方便下次阅读相关文章,感谢您的支持!10月27日,文旅部发布公示名单,河南6家单位拟入选第四批全国乡村旅游重点村,分别是巩义米河镇明月村小伙穷游厦门,勇敢攀登光溜溜的日光岩,差点滑了下来幸亏我命大大家好,今天我来到了厦门鼓浪屿的日光岩,这里是鼓浪屿的最高点,海拔92。7米,日光岩的名字由民族英雄郑成功所起,厉害吧。还没登上鼓浪屿,仅仅是在半路的轮船上面,远远望见岛上硕大无比散文六狗和他的侄儿今年八月十五,是李六苟八十岁的生日,也是他第三十次过生日。与往年生日不同的是,今年的生日,李六苟品尝到了五年珍藏的倒缸酒这是他侄儿专门为他八十大寿提前备好的。聚餐后,身着新衣的李六许世友的母亲亲手缝寿衣,用血汗钱买棺材,没用过儿子的一分钱在新中国的众多开国将帅中,要说谁的母亲给笔者留下的印象最深刻,非胶东猛将许世友莫属。许世友的母亲行得端坐得正,所以才能培养出许世友这样的好干部好同志。许世友自认为,自己亏欠母亲太多2000年武汉设计院长移民美国,将家人骗至美国,全家溺亡于地下室有国才有家。这句话从来都不是一句空话。然而,在任何国家总会有那么一群崇洋媚外的人,他们有的人日子过得苦,就要把罪责全部推给国家,有的人日子过得好,却还是觉得外国的月亮更圆。这些人来平安烟台曾经的烟火气,焕发新生机!烟台这些农贸市场大变样位于牟平区的海德农贸市场大众网海报新闻记者屈晨晨烟台报道为充分展示烟台平安创建成效,提升公众对平安创建活动知晓度,营造平安创建浓厚氛围,近日,平安烟台建设领导小组组织开展2022年写给焦虑的母亲怎样面对油盐不进的孩子?刚才看头条,一位母亲在哭诉她油盐不进的孩子,我感受到了她的悲痛和无助。突然好想写这篇文章,想帮助同样有困惑的朋友们。因为,我也是母亲,通过大量的学习和实践,现在情况大有好转。希望能我最喜欢千年银杏树我阅读临泉县2005年编写的第三部临泉县志,在第467页文物遗址第一节,有这样的一段记载公元前1042年,周成王姬诵置沈子国(又称沈国)。沈子国古城遗址在今临泉县城外西侧,居高地,神秘的量子纠缠对你的父母好一些,才会心想事成财运亨通2022年诺贝尔文学物理学奖颁给了在量子纠缠有重大贡献的三位科学家。量子纠缠用物理学的角度说起来晦涩难懂,用通俗的语言来解释,你和父母是一对量子纠缠体,你的意念和外边世界的某些事物双11预售开启WiFi万能钥匙全连接服务助推直播带货今年的双11购物节作为年度消费大戏,被寄予了促进消费复苏,提振消费增长的厚望。销售模式上,直播带货依然是各平台C位,直播带货的商家平台和消费者们也都做好了万全准备。拥有WiFi万能
一家人之间,为什么变得冷漠?感情最怕的就是两个字算计!头条创作挑战赛有个老年朋友告诉我,她家里的兄弟姊妹多,但一家人之间的关系并不好,感情很淡薄,彼此像陌生人一样冷漠。原来可能是因为家里穷,大家只能各顾各的,后来生活条件好了,可兄弟姊不知道自己为什么这么辛苦,到底为什么活着?每天醒来都觉得时间不够用,每天都要做一些事来填补,每天都感觉很累很辛苦,但又不知道自己为什么这么辛苦,到底为什么活着?我也问过自己很多次,可还是没有答案。就像今天早上在去公司的路上春天总是没胃口,推荐10家常菜,开胃又下饭大人小孩都喜欢吃新年美食市集大家好,欢迎大家来到我的美食自媒体,我是美食领域创作者锦绣V山东专注美食,让生活更有味。今天为大家带来了几道家常美食的做法,这几道美食也是深受大家的喜欢,而且是很常见的不要小看金针菇,大厨教你秘制吃法,赛过大鱼大肉,这味道绝了不要小看金针菇,大厨教你秘制吃法,赛过大鱼大肉,这味道绝了。金针菇是秋冬与早春栽培的食用菌,以其菌盖滑嫩柄脆营养丰富味美适口而著称,其营养丰富清香扑鼻而且味道鲜美,深受大众的喜爱。人头马君度集团旗下酒吧DENTREE启幕,成为全球首个可持续发展主题酒吧实习记者丨田欣编辑丨严之俊近日,人头马君度集团携手筑酒师打造的旗下全球首个可持续发展主题酒吧DENTREE落户上海,满足人们对于美食饮品鸡尾酒和佳酿品鉴体验等不同消费场景需求。DE水煮荷包蛋原来这么简单!牢记2个窍门,荷包蛋圆润漂亮不散花鸡蛋是我们生活当中非常常吃的一种食材了,如果是吃泡面的时候没有别的肉是那么也可以建立个荷包蛋搭配着一起吃,泡面一下子也都被升华了。而且鸡蛋当中含有丰富的营养元素,是所有的食材当中最暖胃又下饭!8款美味砂锅菜做法教给您,让冬天热乎起来冬天窝在家里吃一锅热气腾腾的砂锅煲简直不要太幸福!今天给大家整理了几道砂锅菜做法,简单好上手,赶快学起来板栗鸡煲食材鸡肉500g板栗250g姜葱蒜50g热水500ml油适量盐少许生自学烘焙原味古早蛋糕原味古早蛋糕的配方是参考Tinrry甜悦家的,这个配方蛋糕体比较软嫩,老人小孩也容易入口,试过有些配方做出来蛋糕体比较干噎,这个配方烤完又有浓浓蛋香味,也没有加香草香精值得一试。准千万不要小看了茄子,大厨教你秘制吃法,赛过大鱼大肉,太解馋了千万不要小看了茄子,大厨教你秘制吃法,赛过大鱼大肉,太解馋了。说起茄子,它一年四季都有,是我们很常见的蔬菜,也是我和儿子很爱吃的蔬菜,可老公不太喜欢,知道为啥,因为他妈妈不喜欢,基日本人每天要吃的长寿菜,我国产量大却没人吃,错过就可惜了中国是一个十分讲究吃的国家,许多外国不怎么吃的食物,在中国大厨的手下一炒就会被吃的灭绝,但是也有很多种食物被疏忽,比如日本的菜品非常有营养,才中国却很少人吃。那日本人天天吃的长寿菜北海道函馆美食推荐,到神户牛游膳吃超划算和牛套餐日本自由行推荐必吃和牛!和牛往往给人高级又昂贵的印象,更不用说是像是神户牛这类人气品牌牛肉了,不过来北海道函馆旅行的人有口福啦!到神户牛肉餐厅神户牛游膳,即可享用到经济实惠又入口即
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软件