-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrace.cpp
106 lines (82 loc) · 1.88 KB
/
trace.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <trace.h>
extern int board[4][4];
extern int steps;
QString TraceFilepath="tracefile.tcf";
QString playbackfilepath="tracefile.tcf";
typedef struct traceStackNode{
int save[4][4]={
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 }
};
struct traceStackNode * next=NULL;
struct traceStackNode * prev=NULL;
}TSNode;
TSNode eButtom;
TSNode * buttom= &eButtom;
TSNode * top = buttom;
TSNode * third =NULL;
int playstep=0;
void pushBoard()
{
TSNode * temp=(TSNode *)malloc(sizeof(TSNode));
temp->next=top;
top->prev=temp;
top=temp;
for(int i=0;i<=3;i++)
for(int j=0;j<=3;j++)
{
temp->save[i][j]=board[i][j];
// qDebug()<<temp->save[i][j];
}
third=top;
qDebug()<<temp->save;
QFile tracfile(TraceFilepath);
if(!tracfile.open(QFile::ReadWrite))
{
qDebug() << " Could not open the file for reading";
return;
}
tracfile.seek(steps*16*sizeof(int));
QDataStream tracewrite(&tracfile);
for(int i=0;i<=3;i++)
for(int j=0;j<=3;j++)
{
tracewrite << board[i][j];
// qDebug()<<temp->save[i][j];
}
tracfile.close();
}
bool undo()
{
if(third->next!=buttom)
{
third=third->next;
for(int i=0;i<=3;i++)
for(int j=0;j<=3;j++)
{
board[i][j]=third->save[i][j];
// qDebug()<<temp->save[i][j];
}
top=third;
return true;
}
return false;
}
bool redo()
{
if(third->prev!=NULL)
{
third=third->prev;
for(int i=0;i<=3;i++)
for(int j=0;j<=3;j++)
{
board[i][j]=third->save[i][j];
// qDebug()<<temp->save[i][j];
}
top=third;
return true;
}
return false;
}