拼图游戏二次开发心得

时间:2022-06-01 20:28:11

拼图游戏二次开发心得

 

 

 

 

1. fopen函数遇上空文本

 当fopen函数打开不存在的文件时,其打开模式只能为w","w+","wb","wb+"

这样子会创建一个新文件而模式为rb”等则会发生错误;

当用feof()函数判断是否达到文件尾时,只有文本文件可以用 EOF值(-1),二进制文本如果到达文本末尾则会返回0

 

2. 文本文件的字符集编码问题

在将文件中的player的name写到Qtreewidget 中时,总是乱码,

最后发现自己讲qsting向 char * 转换时,发现了错误,更改代码,

memcpy(buff, m_player_name.toLocal8Bit().data(), 20);

上述代码将qstring转换成 本地utf_8编码。

 

更简单的方法,在头文件中加上

#pragma execution_character_set("utf-8")

可以解决qt中中文显示问题;

 

3. Qt5.8 中开始计时器代码示例

QTimer *timer = new QTimer(this);

    connect(timer, SIGNAL(timeout()), SLOT(displayTime()));//连接槽

  timer->start(1000); //启动定时器

槽函数则为自己想要实现的功能。

 

4. 各种窗口,按钮之间传递signals。

特别强调,合理使用 子控件中parent->parent(),以此链接主窗口。

示例代码:

connect(parent->parent(), SIGNAL(sendGameTime(int)), this, SLOT(GetGameTime(int)));

 

5. 生成随机数

直接贴代码吧,自己研究了好一阵

class WxRand// 获取一个大小为size的动态随机不重复数组,并且最大数为size.

{

public:

    static int * getRand(int size=1)

    {

        int *num=new int[size];

        int i = 1;

        srand(time(NULL));

        num[0]= rand()%size;

        int flag;

        while (1)

        {

 

            num[i]= rand()%size;

            int k = i;

            flag = 0;

            for (int j = 0; j<k; j++)

            {

                if (num[j]== num[i])

                {

                    flag++;

                }

 

            }

            if (flag == 0)

            {

                i++;

            }

            if (i==size)

            {

                break;

            }

        }

        return num;

    }

    WxRand()

    {

 

    }

    ~WxRand(void)

    {

 

    }

   

};