a28514cc7fbe47162ef70623346dd19707b3aa36
1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2012-2013 Alexis Laferrière <alexis.laf@xymus.net>
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
26 var dim
: Int # Should it be removed?
30 var hitted
: Bool = false
32 init ( g
: Game, x
, y
: Int )
44 if (20.0*game
.speed_modifier
).to_i
.rand
== 0 then
49 else if (80.0*game
.speed_modifier
).to_i
.rand
== 0 then
53 else if (100.0*game
.speed_modifier
).to_i
.rand
== 0 then
59 fun intercepts
( event
: PointerEvent ) : Bool
63 return ex
> x
and ex
< x
+ dim
and
64 ey
> y
and ey
< y
+ dim
75 abort # should not happen
81 var holes
: Sequence[Hole] = new Array[Hole].with_capacity
(4)
84 var modifier_half_life
: Float = 40.0
90 var speed_modifier
: Float = 1.0
93 var img_ori_dim
: Int = 256
94 fun img_dim
: Int do return 210
95 fun global_speed_modifier
: Float do return 2.0
100 for x
in [ 0 .. rows
[ do
101 for y
in [ 0 .. columns
[ do
102 holes
.add
( new Hole( self, x
*d
, y
*d
) )
108 for hole
in holes
do hole
.do_turn
110 speed_modifier
= modifier_half_life
/ (modifier_half_life
+points
.to_f
) * global_speed_modifier
112 print
"p: {points} sm: {speed_modifier}"
116 # Where all the UI stuff is done
118 var empty_img
: Image
122 var game
: Game = new Game
126 empty_img
= app
.load_asset
( "images/empty.png" ).as(Image)
127 up_img
= app
.load_asset
( "images/up.png" ).as(Image)
128 hit_img
= app
.load_asset
( "images/hit.png" ).as(Image)
130 var scale
= game
.img_dim
.to_f
/ game
.img_ori_dim
.to_f
131 empty_img
.scale
= scale
133 hit_img
.scale
= scale
136 fun do_frame
( display
: Display )
138 display
.clear
( 0.0, 0.7, 0.0 )
140 for hole
in game
.holes
do
151 display
.blit
( img
, hole
.x
, hole
.y-64
)
155 fun input
( event
: InputEvent ) : Bool
157 if event
isa PointerEvent then
158 for hole
in game
.holes
do
159 if hole
.intercepts
( event
) then
175 var screen
: nullable Screen = null
179 redef fun init_window
183 screen
= new Screen( self )
186 redef fun frame_core
( display
)
188 var screen
= self.screen
189 if screen
!= null then
191 screen
.do_frame
( display
)
195 redef fun input
( ie
)
198 if ie
isa QuitEvent or
199 ( ie
isa KeyEvent and ie
.to_c
== 'q' ) then
202 else if screen
!= null then
203 return screen
.input
( ie
)
205 print
"unknown input: {ie}"