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.
27 var dim
: Int # Should it be removed?
31 var hitted
: Bool = false
33 init ( g
: Game, x
, y
: Int )
45 if (20.0*game
.speed_modifier
).to_i
.rand
== 0 then
50 else if (80.0*game
.speed_modifier
).to_i
.rand
== 0 then
54 else if (100.0*game
.speed_modifier
).to_i
.rand
== 0 then
60 fun intercepts
( event
: PointerEvent ) : Bool
64 return ex
> x
and ex
< x
+ dim
and
65 ey
> y
and ey
< y
+ dim
76 abort # should not happen
82 var holes
: Sequence[Hole] = new Array[Hole].with_capacity
(4)
85 var modifier_half_life
: Float = 40.0
91 var speed_modifier
: Float = 1.0
94 var img_ori_dim
: Int = 256
95 fun img_dim
: Int do return 210
96 fun global_speed_modifier
: Float do return 2.0
101 for x
in [ 0 .. rows
[ do
102 for y
in [ 0 .. columns
[ do
103 holes
.add
( new Hole( self, x
*d
, y
*d
) )
109 for hole
in holes
do hole
.do_turn
111 speed_modifier
= modifier_half_life
/ (modifier_half_life
+points
.to_f
) * global_speed_modifier
113 print
"p: {points} sm: {speed_modifier}"
117 # Where all the UI stuff is done
119 var empty_img
: Image
122 var numbers
: NumberImages
124 var game
: Game = new Game
128 empty_img
= app
.load_asset
( "images/empty.png" ).as(Image)
129 up_img
= app
.load_asset
( "images/up.png" ).as(Image)
130 hit_img
= app
.load_asset
( "images/hit.png" ).as(Image)
131 numbers
= app
.load_numbers
("images/#.png")
133 var scale
= game
.img_dim
.to_f
/ game
.img_ori_dim
.to_f
134 empty_img
.scale
= scale
136 hit_img
.scale
= scale
139 fun do_frame
( display
: Display )
141 display
.clear
( 0.0, 0.7, 0.0 )
143 for hole
in game
.holes
do
154 display
.blit
( img
, hole
.x
, hole
.y-64
)
157 display
.blit_number
(numbers
, game
.points
, 20, 20)
160 fun input
( event
: InputEvent ) : Bool
162 if event
isa PointerEvent then
163 for hole
in game
.holes
do
164 if hole
.intercepts
( event
) then
180 var screen
: nullable Screen = null
182 var target_dt
= 20000000
186 redef fun init_window
190 screen
= new Screen( self )
193 redef fun frame_core
( display
)
195 var screen
= self.screen
196 if screen
!= null then
197 var clock
= new Clock
200 screen
.do_frame
( display
)
203 if dt
.sec
== 0 and dt
.nanosec
< target_dt
then
204 var sleep_t
= target_dt
- dt
.nanosec
205 sys
.nanosleep
(0, sleep_t
)
210 redef fun input
( ie
)
213 if ie
isa QuitEvent or
214 ( ie
isa KeyEvent and ie
.to_c
== 'q' ) then
217 else if screen
!= null then
218 return screen
.input
( ie
)
220 print
"unknown input: {ie}"