erkennt jetzt ob das spiel fertig ist
[darcs-mirror-ozeanien.git] / seatheme.py
1 #!/usr/bin/python
2 # encoding:utf8
3
4 import pygtk
5 pygtk.require('2.0')
6 import gtk
7 import cairo
8 import math
9
10 from cairoboard import *
11 import engine
12
13 class SeaBoard(CairoBoard):
14     def draw_base(self, cr):
15         cr.translate(GRIDPAD, GRIDPAD)
16         cr.scale(GRIDWIDTH, GRIDWIDTH)
17
18         # Sea Background
19         # Unten
20         pat = cairo.LinearGradient (0, 5, 0, 5.5)
21         pat.add_color_stop_rgba(0, 0, 0, 1,1)
22         pat.add_color_stop_rgba(1, 0, 0, 1,0)
23         cr.rectangle(1, 5, 7, 0.5)
24         cr.set_source(pat)
25         cr.fill()
26
27         # Oben
28         pat = cairo.LinearGradient (0, 0, 0, -0.5)
29         pat.add_color_stop_rgba(0, 0, 0, 1,1)
30         pat.add_color_stop_rgba(1, 0, 0, 1,0)
31         cr.rectangle(1, -0.5, 7, 0.5)
32         cr.set_source(pat)
33         cr.fill()
34
35         # Links
36         pat = cairo.LinearGradient (1, 0, 0.5, 0)
37         pat.add_color_stop_rgba(0, 0, 0, 1,1)
38         pat.add_color_stop_rgba(1, 0, 0, 1,0)
39         cr.rectangle(0.5, 0, 0.5, 5)
40         cr.set_source(pat)
41         cr.fill()
42
43         # Rechts
44         pat = cairo.LinearGradient (8, 0, 8.5, 0)
45         pat.add_color_stop_rgba(0, 0, 0, 1,1)
46         pat.add_color_stop_rgba(1, 0, 0, 1,0)
47         cr.rectangle(8, 0, 0.5, 5)
48         cr.set_source(pat)
49         cr.fill()
50
51         # Oben Links
52         pat = cairo.RadialGradient(1,0,0, 1,0, 0.5)
53         pat.add_color_stop_rgba(0, 0, 0, 1, 1)
54         pat.add_color_stop_rgba(1, 0, 0, 1, 0)
55         cr.rectangle(0.5, -0.5, 0.5, 0.5)
56         cr.set_source(pat)
57         cr.fill()
58
59         # Oben Rechts
60         pat = cairo.RadialGradient(8,0,0, 8,0, 0.5)
61         pat.add_color_stop_rgba(0, 0, 0, 1, 1)
62         pat.add_color_stop_rgba(1, 0, 0, 1, 0)
63         cr.rectangle(8, -0.5, 8.5, 0.5)
64         cr.set_source(pat)
65         cr.fill()
66
67         # Unten Rechts
68         pat = cairo.RadialGradient(8,5,0, 8,5, 0.5)
69         pat.add_color_stop_rgba(0, 0, 0, 1, 1)
70         pat.add_color_stop_rgba(1, 0, 0, 1, 0)
71         cr.rectangle(8, 5, 8.5, 5.5)
72         cr.set_source(pat)
73         cr.fill()
74
75         # Unten Links
76         pat = cairo.RadialGradient(1,5,0, 1,5, 0.5)
77         pat.add_color_stop_rgba(0, 0, 0, 1, 1)
78         pat.add_color_stop_rgba(1, 0, 0, 1, 0)
79         cr.rectangle(0.5, 5, 1, 5.5)
80         cr.set_source(pat)
81         cr.fill()
82
83
84         # Frame
85         cr.set_source_rgb(1,1,1)
86         cr.set_line_width(0.05)
87         cr.set_line_cap(cairo.LINE_CAP_ROUND)
88         for x in range(0,8):
89             cr.move_to(1+x, 0)
90             cr.line_to(1+x, 5.5)
91             cr.stroke()
92         for y in range(0,6):
93             cr.move_to(0.5, y)
94             cr.line_to(8.5, y)
95             cr.stroke()
96
97 class SeaSlot(CairoSlot):
98     def __init__(self, fabric, slot):
99         CairoSlot.__init__(self, fabric, slot)
100
101 class SeaHandSlot(CairoHandSlot, SeaSlot):
102     def __init__(self, fabric, slot):
103         SeaSlot.__init__(self, fabric, slot)
104         CairoHandSlot.__init__(self)
105
106 class SeaBoardSlot(CairoBoardSlot, SeaSlot):
107     def __init__(self, fabric, slot):
108         SeaSlot.__init__(self, fabric, slot)
109
110 class SeaPile(CairoPile, SeaSlot):
111     def __init__(self, fabric, slot):
112         SeaSlot.__init__(self, fabric, slot)
113         CairoPile.__init__(self, fabric, slot)
114         self.super = SeaSlot
115
116 class SeaBlackHole(CairoBlackHole):
117     def __init__(self, fabric, bh):
118         CairoBlackHole.__init__(self, fabric, bh)
119
120 class SeaCard(CairoCard):
121     def __init__(self, fabric, card):
122         CairoCard.__init__(self, fabric, card)
123
124     def draw_cache(self, cr):
125         # Meer
126         cr.set_source_rgb(0, 0, 1)
127         cr.rectangle(-1, -1, 2, 2)
128         cr.fill()
129
130         cr.set_source_rgb(0, 1, 0)
131         cr.set_line_cap(cairo.LINE_CAP_ROUND)
132         cr.set_line_join(cairo.LINE_JOIN_ROUND)
133         cr.set_line_width(0.9)
134
135         p2c = [ (1,0), (0,-1), (-1,0), (0,1) ]
136
137         # Land
138         for island in self.card.islands:
139             point = island[0]
140             cr.move_to( *p2c[point] )
141             for point in island[1:]:
142                 cr.line_to( *p2c[point] )
143             cr.close_path()
144             cr.stroke()
145         
146         # Border
147         cr.set_source_rgb(0, 0, 0)
148         cr.set_line_cap(cairo.LINE_CAP_ROUND)
149         cr.set_line_width(0.05)
150         cr.rectangle(-1, -1, 2, 2)
151         cr.stroke()
152
153 class SeaShip(CairoShip):
154     def __init__(self, fabric, ship):
155         CairoShip.__init__(self, fabric, ship)
156
157     def draw_cache(self, cr):
158         cr.move_to(0.9, 0)
159         cr.arc(0, 0, 0.3, math.pi, 0) 
160         cr.line_to(-0.9,0)
161         cr.line_to(-0.6, 0.6)
162         cr.line_to( 0.6, 0.6)
163
164         cr.set_source_rgb(1, 0, 0)
165         cr.fill()
166
167 class SeaFabric(CairoFabric):
168     classes = [ 
169             (engine.Board,      SeaBoard),
170             (engine.BoardSlot,  SeaBoardSlot),
171             (engine.BlackHole,  SeaBlackHole),
172             (engine.HandSlot,   SeaHandSlot),
173             (engine.Pile,       SeaPile),
174             (engine.Slot,       SeaSlot),
175             (engine.Ship,       SeaShip),
176             (engine.Card,       SeaCard),
177     ]
178
179  
180 # vim:ts=4:sw=4:sts=4:et