summaryrefslogtreecommitdiffstats
path: root/examples/declarative/minehunt/minehunt.qml
blob: fb65fa35c56c70880689e9c1e0d26eba082bc26c (plain)
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
<Item id="field" width="370" height="480">
    <properties>
        <Property name="clickx" type="Int" value="0"/>
        <Property name="clicky" type="Int" value="0"/>
    </properties>
    <resources>
        <Component id="tile">
            <Flipable id="flipable" width="40" height="40">
                <axis>
                    <Axis startX="20" startY="20" endX="20" endY="0" />
                </axis>
                <front>
                    <Image source="pics/front.png" width="40" height="40">
                        <Image anchors.horizontalCenter="{parent.horizontalCenter}"
                               anchors.verticalCenter="{parent.verticalCenter}"
                                source="pics/flag.png" opacity="{modelData.hasFlag}">
                                <opacity>
                                    <Behaviour>
                                        <NumericAnimation property="opacity" duration="250"/>
                                    </Behaviour>
                                </opacity>
                        </Image>
                    </Image>
                </front>
                <back>
                    <Image source="pics/back.png" width="40" height="40">
                        <Text anchors.horizontalCenter="{parent.horizontalCenter}" anchors.verticalCenter="{parent.verticalCenter}" 
                              text="{modelData.hint}" color="white" font.bold="true" 
                              opacity="{modelData.hasMine == false &amp;&amp; modelData.hint > 0}"/>
                        <Image anchors.horizontalCenter="{parent.horizontalCenter}" anchors.verticalCenter="{parent.verticalCenter}" 
                                source="pics/bomb.png" opacity="{modelData.hasMine}"/>
                        <Explosion anchors.horizontalCenter="{parent.horizontalCenter}" anchors.verticalCenter="{parent.verticalCenter}" explode="{modelData.hasMine==true &amp;&amp; modelData.flipped==true}"/>
                    </Image>
                </back>
                <states>
                    <State name="back" when="{modelData.flipped == true}">
                        <SetProperty target="{flipable}" property="rotation" value="180" />
                    </State>
                </states>
                <transitions>
                    <Transition>
                        <SequentialAnimation>
                            <PauseAnimation duration="{var ret = Math.abs(flipable.parent.x-field.clickx) + Math.abs(flipable.parent.y-field.clicky); if (ret > 0) {if(modelData.hasMine==true &amp;&amp; modelData.flipped==true){ret*3;}else{ret;}} else {0}}"/>
                            <NumericAnimation easing="easeInOutQuad" properties="rotation"/>
                        </SequentialAnimation>
                    </Transition>
                </transitions>
                <MouseRegion anchors.fill="{parent}"
                             onClicked="field.clickx = flipable.parent.x; field.clicky = flipable.parent.y; row = Math.floor(index/9); col = index - (Math.floor(index/9) * 9); if(mouse.button==undefined || mouse.button==Qt.RightButton){flag(row,col);}else{flip(row,col);}" />
            </Flipable>
        </Component>
    </resources>
    <Image source="pics/No-Ones-Laughing-3.jpg" tile="true"/>
    <Description text="Use the 'minehunt' executable to run this demo!" width="300" opacity="{tiles?0:1}" anchors.horizontalCenter="{parent.horizontalCenter}" anchors.verticalCenter="{parent.verticalCenter}"/>
    <Repeater dataSource="{tiles}" x="1" y="1">
        <Component>
            <ComponentInstance component="{tile}" 
                           x="{(index - (Math.floor(index/9) * 9)) * 41}"
                           y="{Math.floor(index/9) * 41}"/>
        </Component>
    </Repeater>
    <Item id="gamedata" width="370" height="100" y="380">
        <Text color="white" font.size="18" x="20" y="20">In play:</Text>
        <Image x="100" y="20" source="pics/bomb-color.png"/>
        <Text x="100" y="60" color="white" text="{numMines}"/>
        <Image x="140" y="20" source="pics/flag-color.png"/>
        <Text x="140" y="60" color="white" text="{numFlags}"/>

        <Image x="240" y="0" source="{if(isPlaying==true){'pics/smile.png'}else{if(hasWon==true){'pics/glee.png'}else{'pics/frown.png'}}}">
            <MouseRegion anchors.fill="{parent}" onClicked="reset()"/>
        </Image>
    </Item>
</Item>