设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 神思
打印 上一主题 下一主题

撤..........

 关闭 [复制链接]

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

11
 楼主| 发表于 2007-5-17 16:06:20 | 只看该作者
汗`` 美兽殿不介意的话看一下我最初的原版
  1. module STG
  2. Player = [
  3. [28, 6],[28, 7],[28, 8],[28, 9],[28,10],[28,11],[28,12],[28,13],
  4. [28,14],[28,15],[28,16],[28,17],[28,18],[28,19],[28,20],[28,21],
  5. [29, 6],[30, 6],[31, 6],[31, 7],[31, 8],[31, 9],[31,10],[31,11],
  6. [31,12],[31,13],[31,14],[31,15],[31,16],[31,17],[31,18],[31,19],
  7. [31,20],[31,21],[32,21],[33,21],[34,21],[35,21],[36,21],[37,21],
  8. [37,22],[37,23],[37,24],[37,25],[37,26],[37,27],[38,27],[39,27],
  9. [40,27],[40,28],[40,29],[40,30],[40,31],[40,32],[40,33],[40,34],
  10. [41,34],[42,34],[43,34],[43,35],[43,36],[43,37],[43,38],[44,38],
  11. [45,38],[46,38],[47,38],[48,38],[49,38],[50,38],[51,38],[51,37],
  12. [51,36],[51,35],[51,34],[51,33],[51,32],[52,32],[53,32],[54,32],
  13. [54,33],[54,34],[54,35],[54,36],[54,37],[54,38],[54,39],[54,40],
  14. [54,41],[54,42],[53,42],[52,42],[51,42],[50,42],[49,42],[48,42],
  15. [47,42],[46,42],[45,42],[44,42],[43,42],[42,42],[41,42],[40,42],
  16. [39,42],[38,42],[37,42],[36,42],[35,42],[34,42],[33,42],[32,42],
  17. [31,42],[30,42],[29,42],[28,42],[27,42],[26,42],[25,42],[24,42],
  18. [23,42],[22,42],[21,42],[20,42],[19,42],[18,42],[17,42],[16,42],
  19. [15,42],[14,42],[13,42],[12,42],[11,42],[10,42],[9, 42],[8, 42],
  20. [8, 41],[8, 40],[8, 39],[9, 39],[10,39],[8, 38],[8, 37],[8, 36],
  21. [8, 35],[8, 34],[8, 33],[8, 32],[8, 31],[9, 31],[10,31],[10,32],
  22. [10,33],[10,34],[10,35],[10,36],[10,37],[11,37],[12,37],[13,37],
  23. [14,37],[15,37],[16,37],[17,37],[17,36],[17,35],[17,34],[17,33],
  24. [17,32],[18,32],[19,32],[19,31],[19,30],[19,29],[20,29],[21,29],
  25. [21,28],[21,27],[21,26],[21,25],[22,25],[23,25],[24,25],[24,24],
  26. [24,23],[24,22],[25,22],[26,22],[27,22],[28,22]]
  27. Enemy = [
  28. [16, 8],[16, 9],[16,10],[16,11],[16,12],[16,13],[16,14],[16,15],
  29. [16,16],[15,16],[14,16],[13,16],[12,16],[11,16],[10,16],[9, 16],
  30. [8, 16],[7, 16],[6, 16],[6, 17],[6, 18],[6, 19],[6, 20],[6, 21],
  31. [6, 22],[6, 23],[6, 24],[6, 25],[6, 26],[6, 27],[6, 28],[6, 29],
  32. [6, 30],[6, 31],[6, 32],[6, 33],[6, 34],[6, 35],[7, 35],[8, 35],
  33. [8, 34],[8, 33],[8, 32],[8, 31],[8, 30],[8, 29],[8, 28],[8, 27],
  34. [8, 26],[9, 26],[10,26],[11,26],[12,26],[13,26],[14,26],[15,26],
  35. [15,27],[15,28],[15,29],[15,30],[15,31],[15,32],[15,33],[15,34],
  36. [15,35],[15,36],[15,37],[15,38],[15,39],[15,40],[15,41],[15,42],
  37. [16,42],[17,42],[18,42],[19,42],[20,42],[21,42],[22,42],[23,42],
  38. [24,42],[25,42],[26,42],[27,42],[27,41],[27,40],[27,39],[27,38],
  39. [27,37],[27,36],[27,35],[27,34],[27,33],[27,32],[27,31],[27,30],
  40. [27,29],[27,28],[27,27],[27,26],[27,25],[28,25],[29,25],[30,25],
  41. [31,25],[32,25],[32,26],[32,27],[32,28],[32,29],[32,30],[32,31],
  42. [32,32],[32,33],[32,34],[32,35],[33,35],[34,35],[35,35],[36,35],
  43. [36,34],[36,33],[36,32],[36,31],[36,30],[36,29],[36,28],[36,27],
  44. [36,26],[36,25],[36,24],[36,23],[36,22],[36,21],[36,20],[36,19],
  45. [36,18],[36,17],[35,17],[34,17],[33,17],[32,17],[31,17],[30,17],
  46. [29,17],[28,17],[27,17],[26,17],[25,17],[24,17],[24,16],[24,15],
  47. [24,14],[24,13],[24,12],[24,11],[24,10],[24, 9],[24, 8],[24, 7],
  48. [24, 6],[24, 5],[24, 4],[24, 3],[24, 2],[23, 2],[22, 2],[21, 2],
  49. [20, 2],[19, 2],[18, 2],[18, 3],[18, 4],[18, 5],[18, 6],[18, 7],
  50. [18, 8],[18, 9],[17, 9],[12,27],[12,28],[12,29],[12,30],[29,26],
  51. [29,27],[16,34],[17,34],[18,34],[18,35],[18,36],[18,37],[18,38],
  52. [18,39],[18,40],[18,41],[23,41],[23,40],[23,39],[23,38],[23,37],
  53. [23,36],[23,35],[23,34],[23,33],[24,33],[25,33],[17,26],[18,26],
  54. [19,26],[20,26],[21,26],[22,26],[23,26],[24,26],[15, 9],[15, 8],
  55. [15, 7],[15, 6],[15, 5],[15, 4],[15, 3],[16, 3],[17, 3],[20, 3],
  56. [20, 4],[20, 5],[20, 6],[20, 7],[20, 8],[21, 8],[22, 8],[23, 8]]
  57. Back = []
  58. end
  59. module STG
  60. module Draw
  61. module_function
  62. def get_player
  63. pixel = STG::Player
  64. bitmap = Bitmap.new(64,64)
  65. for xy in pixel
  66. bitmap.set_pixel(xy[0],xy[1],Color.new(255,0,0))
  67. end
  68. return bitmap
  69. end
  70. def get_enemy
  71. pixel = STG::Enemy
  72. bitmap = Bitmap.new(48,48)
  73. for xy in pixel
  74. bitmap.set_pixel(xy[0],xy[1],Color.new(255,0,0))
  75. end
  76. return bitmap
  77. end
  78. def get_bullet
  79. bitmap = Bitmap.new(2,4)
  80. bitmap.fill_rect(bitmap.rect, Color.new(0,0,255))
  81. return bitmap
  82. end
  83. def get_back
  84. bitmap = Bitmap.new(640,480)
  85. bitmap.fill_rect(bitmap.rect,Color.new(255,255,0))
  86. return bitmap
  87. end
  88. def draw_bitmap(bitmap)
  89. data = []
  90. sprite = Sprite.new
  91. sprite.bitmap = Bitmap.new(2,2)
  92. sprite.bitmap.fill_rect(sprite.bitmap.rect,Color.new(255,0,0))
  93. while true
  94. Graphics.update
  95. Input.update
  96. if Input.press?(Input::C)
  97. bitmap.fill_rect(sprite.x,sprite.y,1,1,Color.new(255,0,0))
  98. data.push([sprite.x,sprite.y]) if !data.include?([sprite.x,sprite.y])
  99. end
  100. if Input.press?(Input::B)
  101. save_data(data, "pixel.rxdata")
  102. exit
  103. end
  104. case Input.dir4
  105. when 2
  106. sprite.y += 1
  107. when 4
  108. sprite.x -= 1
  109. when 6
  110. sprite.x += 1
  111. when 8
  112. sprite.y -= 1
  113. end
  114. end
  115. end
  116. end
  117. end
  118. module STG
  119. class Sprite < ::Sprite
  120. attr_accessor :speed
  121. attr_accessor :hp
  122. def initialize(v,type)
  123. super(v)
  124. case type
  125. when 0
  126. self.bitmap = Draw.get_player
  127. self.x = 320 - 32
  128. self.y = 480 - 64
  129. when 1
  130. self.bitmap = Draw.get_enemy
  131. self.y = 0
  132. self.x = rand(600) + 10
  133. when 2
  134. self.bitmap = Draw.get_bullet
  135. end
  136. @speed = 2
  137. end
  138. def update
  139. super
  140. end
  141. def move_down
  142. self.y += @speed
  143. end
  144. def move_left
  145. self.x -= @speed
  146. end
  147. def move_right
  148. self.x += @speed
  149. end
  150. def move_up
  151. self.y -= @speed
  152. end
  153. def move_lower_left
  154. self.x -= @speed
  155. self.y += @speed
  156. end
  157. def move_lower_right
  158. self.x += @speed
  159. self.y += @speed
  160. end
  161. def move_upper_left
  162. self.x -= @speed
  163. self.y -= @speed
  164. end
  165. def move_upper_right
  166. self.x += @speed
  167. self.y -= @speed
  168. end
  169. end
  170. class Bullet < Sprite
  171. attr_reader :direction
  172. def initialize(v,d, x, y, target_x=0, target_y=0)
  173. super(v,2)
  174. @direction = d
  175. @speed = 6
  176. self.x = x
  177. self.y = y
  178. if d == 2
  179. @sx = @speed*(target_x-x) / Math.sqrt((target_x-x)**2+(target_y-y)**2)
  180. @sy = @speed*(target_y-y) / Math.sqrt((target_x-x)**2+(target_y-y)**2)
  181. end
  182. end
  183. def update
  184. super
  185. case @direction
  186. when 2
  187. self.x += @sx
  188. self.y += @sy
  189. when 8
  190. move_up
  191. end
  192. end
  193. end
  194. class Battler
  195. attr_reader :player
  196. def initialize
  197. @viewport1 = Viewport.new(0, 0, 640, 480)
  198. @back = ::Sprite.new(@viewport1)
  199. @back.bitmap = STG::Draw.get_back
  200. @player = Sprite.new(@viewport1, 0)
  201. @player.speed = 4
  202. @player.hp = 100
  203. enemy = Sprite.new(@viewport1, 1)
  204. enemy.hp = 30
  205. @enemys = [enemy]
  206. @bullets = []
  207. @hpbarsprite = ::Sprite.new(@viewport1)
  208. @hpbarsprite.bitmap = Bitmap.new(128,16)
  209. @hpbarsprite.bitmap.fill_rect(@hpbarsprite.bitmap.rect, Color.new(255,255,255))
  210. @hpsprite = ::Sprite.new(@viewport1)
  211. @hpsprite.bitmap = Bitmap.new(128,16)
  212. w = 128 * @player.hp / 100
  213. @hpsprite.bitmap.fill_rect(0,0,w,16,Color.new(255,0,0))
  214. main
  215. end
  216. def main
  217. while true
  218. update
  219. end
  220. end
  221. def update
  222. rm_update
  223. player_update
  224. enemy_update
  225. input_update
  226. bullet_update
  227. end
  228. def input_update
  229. if Input.trigger?(Input::C)
  230. @bullets << Bullet.new(@viewport1,8,(@player.x + @player.bitmap.width / 2) - 4, @player.y)
  231. end
  232. end
  233. def enemy_update
  234. for enemy in @enemys
  235. enemy.move_down
  236. if enemy.hp <= 0
  237. enemy.dispose
  238. @enemys.delete(enemy)
  239. next
  240. end
  241. if !enemy.x.between?(0,650) or !enemy.y.between?(0,490)
  242. enemy.dispose
  243. @enemys.delete(enemy)
  244. next
  245. end
  246. if (Graphics.frame_count % (rand(30) + 30)) == 0
  247. @bullets << Bullet.new(@viewport1,2,(enemy.x + enemy.bitmap.width / 2) - 4, enemy.y + enemy.bitmap.height, @player.x, @player.y)
  248. end
  249. end
  250. add_enemy if Graphics.frame_count % 60 == 0
  251. end
  252. def add_enemy
  253. enemy = Sprite.new(@viewport1, 1)
  254. enemy.hp = 30
  255. @enemys << enemy
  256. end
  257. def bullet_update
  258. for b in @bullets
  259. t = false
  260. b.update
  261. if b.direction == 2
  262. if b.x.between?(@player.x,@player.x + @player.bitmap.width)
  263. if b.y.between?(@player.y,@player.y + @player.bitmap.height)
  264. @player.hp -= 10
  265. w = 128 * @player.hp / 100
  266. @hpsprite.src_rect.set(0,0,w,16)
  267. b.dispose
  268. @bullets.delete(b)
  269. next
  270. end
  271. end
  272. end
  273. for enemy in @enemys
  274. if b.direction == 2
  275. break
  276. end
  277. if b.x.between?(enemy.x,enemy.x + enemy.bitmap.width)
  278. if b.y.between?(enemy.y,enemy.y + enemy.bitmap.height)
  279. #if enemy.bitmap.get_pixel((enemy.x - b.x).abs, (enemy.y - b.y).abs).alpha != 0
  280. b.dispose
  281. @bullets.delete(b)
  282. enemy.hp -= 10
  283. t = true
  284. break
  285. #end
  286. end
  287. end
  288. end
  289. if !t and (!b.x.between?(0,644) or !b.y.between?(0,484))
  290. b.dispose
  291. @bullets.delete(b)
  292. end
  293. end
  294. end
  295. def player_update
  296. if @player.hp <= 0
  297. exit
  298. return
  299. end
  300. case Input.dir8
  301. when 2 # 向下移动
  302. @player.move_down
  303. when 4 # 向左移动
  304. @player.move_left
  305. when 6 # 向右移动
  306. @player.move_right
  307. when 8 # 向上移动
  308. @player.move_up
  309. when 1 # 向左下移动
  310. @player.move_lower_left
  311. when 3 # 向右下移动
  312. @player.move_lower_right
  313. when 7 # 向左上移动
  314. @player.move_upper_left
  315. when 9 # 向右上
  316. @player.move_upper_right
  317. end
  318. @player.x = [@player.x, 0].max
  319. @player.x = [@player.x, ([email protected]) + 10].min
  320. @player.y = [@player.y, 0].max
  321. @player.y = [@player.y, ([email protected]) + 22].min
  322. end
  323. def rm_update
  324. Graphics.update
  325. Input.update
  326. end
  327. end
  328. end
  329. STG::Battler.new
复制代码
除了@speed*(target_x-x) / Math.sqrt((target_x-x)**2+(target_y-y)**2)这个公式外 还要说我其他的在模仿美兽殿的话-__-~||我实在无法接受 其实最开始我是写成 @sx = (@speed / 2) * (target_x - x) / 100 @sy = (@speed / 2) * (target_y - y) / 100 来着``{/pz} 后来觉得很不妥..看了美兽殿的后觉得美兽殿比较好就直接套用了```{/gg}
-.-
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

像彗星一样前进的

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-4-27
帖子
890
12
发表于 2007-5-17 17:17:36 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

13
 楼主| 发表于 2007-5-17 17:23:19 | 只看该作者
以下引用西刚于2007-5-17 9:17:36的发言:

难度太低,

-_____-`||~`那是因为2000分就奖励1条命.....一个BOSS就有3000分了
-.-
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-5-17
帖子
182
14
发表于 2007-5-17 17:45:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

像彗星一样前进的

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-4-27
帖子
890
15
发表于 2007-5-17 18:50:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

16
发表于 2007-5-18 03:05:04 | 只看该作者
今天天气真不错啊.
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

17
 楼主| 发表于 2007-5-18 03:48:43 | 只看该作者
格子格子
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

18
发表于 2007-5-18 04:16:15 | 只看该作者
以下引用神思于2007-5-17 19:48:43的发言:

因为我不想自己写的东西被蒙上抄袭之名``如果说错话请见谅````````

碰撞.....因为我实在想不到有什么比get_pixel效果还好的方法了```

还有请问一下recject!这个方法的作用是什么?...
我去RUBY中文网看了一下
只看到这个

reject! {|x| ... }
依次将元素传给块进行计算,若结果为真就删除相应元素。




其余的受教了``~``


那个,抱歉了——

1:如果追求绝对的严丝合缝的碰撞,效率最高的仍是get_pixel,但一般来说用不上那么精确,玩过东方系列的人都见过,当子弹穿越角色的身体边缘时并不会中弹,当接触到身体正中时才会掉血,这个是简化为矩形的例子,
但从你所用游戏的图片来看,是标准的三角形,可以事先求得中点,简化为点距离,比矩形还要方便些。

2:
class A
  def move
      return false
  end  
end  
class B
  def move
      return false
  end  
end  
class C
  def move
      return true
  end  
end  

s = [A.new,B.new,C.new]
s.reject! {|x| x.move}

p s ==> [A,B]


纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-4-16
帖子
915
19
发表于 2007-5-18 04:25:21 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

上弦月主

梦石
0
星屑
50
在线时间
1 小时
注册时间
2006-7-11
帖子
930
20
发表于 2007-5-18 04:47:53 | 只看该作者
看起来很不错{/se}佩服絮絮找个这样一个师傅 {/cy}   {/ll}由衷地..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-3-7 08:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表