俄罗斯方块是咱们大家喜欢玩的一个游戏,但怎么编写这个游戏呢,在此小编用Visual Basic个人的设计思路来实现它,供大家参考学习。
设计思路:文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
咱们都知道俄罗斯方块的图形很简单,翻来覆去就那几种,但这些图形怎么表现出来呢,小编知道两种办法:文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
(1),第一种是将方块所在的框架界面看做一个二维表,在这个二维表中每一一个方格有两个变量,其中一个变量记录是不是有方块停留在上面,此外一个变量记录停留的方块叫什么名字;文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
(2),第二种是用VB较善于的图形界面实现,贪吃蛇的主要图形有&34;、&34;、&34;、反7字形&34;T字形&34;田字形&34;长条形&34;↑&34;↓&34;←&34; →&34;ImageList1&34;属性&34;Images&34;InsertPicture&39;Get X Value文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
3. If MaxX - MinX >= 2 Then文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
4. If MaxX - CurX <= 1 Then文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
5. Adjust_Left = MaxX - 2 - 1文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
6. Else文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
7. Adjust_Left = CurX - 1文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
8. End If文章源自微观生活(93wg.com)微观生活-https://93wg.com/7329.html
9. Get_X_Value = True
10. Exit Function
11. End If
12. End If
13. Get_X_Value = False
14. End Function
15. Function GetValue
16. GetCoor
17. On Error Resume Next
18. Dim OKCount, EmptyCount As Integer
19. MinX = Xs.cX
20. MaxX = Xs.cX
21. MinY = Xs.cY
22. MaxY = Xs.cY
23. For i = 2 To 4
24. If MinX > Xs.cX Then MinX = Xs.cX
25. If MaxX < Xs.cX Then MaxX = Xs.cX
26. If MinY > Xs.cY Then MinY = Xs.cY
27. If MaxY < Xs.cY Then MaxY = Xs.cY
28. Next
29. For i = MinX To MaxX
30. For j = MinY To MaxY
31. If Total Then
32. GetValue = False
33. Exit Function
34. End If
35. Next
36. Next
37. If nType = 0 Then &39;Get MinY
39. OKCount = 0
40. For i = MinY - 1 To MinY - Step -1
41. For j = MinX To MaxX
42. If Total = False Then OKCount = OKCount + 1
43. Next
44. If OKCount >= picNow.Width And OKCount >= picNow.Height Then
45. EmptyCount = EmptyCount + 1
46. OKCount = 0
47. Else
48. Exit For
49. End If
50. Next
51. MinY = MinY - EmptyCount
52. If MinY < 1 Then MinY = 1
53. EmptyCount = 0 &39;Get X Value
69. EmptyCount = 0 &39;GetMaxX
85. OKCount = 0
86. For i = MaxX + 1 To MaxX +
87. For j = MinY To MaxY
88. If Total = False Then OKCount = OKCount + 1
89. Next
90. If OKCount >= picNow.Width And OKCount >= picNow.Height Then
91. EmptyCount = EmptyCount + 1
92. OKCount = 0
93. Else
94. Exit For
95. End If
96. Next
97. MaxX = MaxX + EmptyCount
98. If MaxX > 10 Then MaxX = 10
99. End If
100. GetValue = True
101. End Function
102. Function Get_Y_Value
103. If GetValue Then &39;全局初始化
118. picBackGround.Cls
119. imgNext.Picture = LoadPicture
120. picNow.Visible = False
121. tmrDrop.Enabled = False
122. End Sub
123. Sub Init
124. &39;获取一个方块的 4 个点的坐标
139. For i = 1 To 4 &39;长条
147. If intRotate Mod 2 = 1 Then
148. Xs.cX = CurX
149. Xs.cY = picNow.Top + 1
150. Xs.cZ = True
151. For i = 2 To 4
152. Xs.cX = CurX + i - 1
153. Xs.cY = picNow.Top + 1
154. Xs.cZ = True
155. Next
156. Else
157. Xs.cX = CurX
158. Xs.cY = picNow.Top + 4
159. Xs.cZ = True
160. For i = 2 To 4
161. Xs.cX = CurX
162. Xs.cY = picNow.Top + i - 1
163. Xs.cZ = False
164. Next
165. End If
166. Case 2 &39;7字形
194. Select Case intRotate Mod 4
195. Case 0
196. Xs.cX = CurX
197. Xs.cY = picNow.Top + 1
198. Xs.cZ = True
199. Xs.cX = CurX + 1
200. Xs.cY = picNow.Top + 3
201. Xs.cZ = True
202. For i = 3 To 4
203. Xs.cX = CurX + 1
204. Xs.cY = picNow.Top + i - 2
205. Xs.cZ = False
206. Next
207. Case 1
208. Xs.cX = CurX
209. Xs.cY = picNow.Top + 2
210. Xs.cZ = True
211. Xs.cX = CurX + 1
212. Xs.cY = picNow.Top + 2
213. Xs.cZ = True
214. Xs.cX = CurX + 2
215. Xs.cY = picNow.Top + 2
216. Xs.cZ = True
217. Xs.cX = CurX + 2
218. Xs.cY = picNow.Top + 1
219. Xs.cZ = False
220. Case 2
221. Xs.cX = CurX
222. Xs.cY = picNow.Top + 3
223. Xs.cZ = True
224. Xs.cX = CurX + 1
225. Xs.cY = picNow.Top + 3
226. Xs.cZ = True
227. For i = 3 To 4
228. Xs.cX = CurX
229. Xs.cY = picNow.Top + i - 2
230. Xs.cZ = False
231. Next
232. Case 3
233. Xs.cX = CurX
234. Xs.cY = picNow.Top + 2
235. Xs.cZ = True
236. Xs.cX = CurX + 1
237. Xs.cY = picNow.Top + 1
238. Xs.cZ = True
239. Xs.cX = CurX + 2
240. Xs.cY = picNow.Top + 1
241. Xs.cZ = True
242. Xs.cX = CurX
243. Xs.cY = picNow.Top + 1
244. Xs.cZ = False
245. End Select
246. Case 4 &39;反7字形
300. Select Case intRotate Mod 4
301. Case 0
302. Xs.cX = CurX
303. Xs.cY = picNow.Top + 3
304. Xs.cZ = True
305. Xs.cX = CurX + 1
306. Xs.cY = picNow.Top + 1
307. Xs.cZ = True
308. For i = 3 To 4
309. Xs.cX = CurX
310. Xs.cY = picNow.Top + i - 2
311. Xs.cZ = False
312. Next
313. Case 1
314. Xs.cX = CurX
315. Xs.cY = picNow.Top + 1
316. Xs.cZ = True
317. Xs.cX = CurX + 1
318. Xs.cY = picNow.Top + 1
319. Xs.cZ = True
320. Xs.cX = CurX + 2
321. Xs.cY = picNow.Top + 2
322. Xs.cZ = True
323. Xs.cX = CurX + 2
324. Xs.cY = picNow.Top + 1
325. Xs.cZ = False
326. Case 2
327. Xs.cX = CurX
328. Xs.cY = picNow.Top + 3
329. Xs.cZ = True
330. Xs.cX = CurX + 1
331. Xs.cY = picNow.Top + 3
332. Xs.cZ = True
333. For i = 3 To 4
334. Xs.cX = CurX + 1
335. Xs.cY = picNow.Top + i - 2
336. Xs.cZ = False
337. Next
338. Case 3
339. Xs.cX = CurX
340. Xs.cY = picNow.Top + 2
341. Xs.cZ = True
342. Xs.cX = CurX + 1
343. Xs.cY = picNow.Top + 2
344. Xs.cZ = True
345. Xs.cX = CurX + 2
346. Xs.cY = picNow.Top + 2
347. Xs.cZ = True
348. Xs.cX = CurX
349. Xs.cY = picNow.Top + 1
350. Xs.cZ = False
351. End Select
352. Case 6 &39;田字形
380. Xs.cX = CurX
381. Xs.cY = picNow.Top + 2
382. Xs.cZ = True
383. Xs.cX = CurX + 1
384. Xs.cY = picNow.Top + 2
385. Xs.cZ = True
386. For i = 3 To 4
387. Xs.cX = CurX + i - 3
388. Xs.cY = picNow.Top + 1
389. Xs.cZ = False
390. Next
391. End Select
392. End Sub
393. Sub Judge_Full
394. &39;MinY
396. rx_value = picNow.Top + picNow.Height &39;如果一行已经堆满,则将此行上面的图像全体向下挪动一点
401. k = BitBlt * 20, picBackGround.hDC, 0, 0, vbSrcCopy)
402. For j = i To 1 Step -1
403. For k = 1 To 10
404. Total = Total
405. Next k
406. Next j
407. i = i + 1
408. End If
409. Next i
410. &39;扭转 tmrDrop 的 Interval 值便可扭转游戏速度
422. tmrDrop.Interval = 1000
423. Sel_Next
424. Init
425. Case Else
426. Global_Init
427. End Select
428. End If
429. End Sub
430. &39;长条
434. If intRotate Mod 2 = 1 Then
435. If GetValue Then &39;Get X Value
446. If MaxX - MinX >= 3 Then
447. If MaxX - CurX <= 2 Then
448. Adjust_Left = MaxX - 3 - 1
449. Else
450. If CurX = MinX Then
451. Adjust_Left = CurX - 1
452. Else
453. Adjust_Left = CurX - 1 - 1
454. End If
455. End If
456. Judge_Rotate = True
457. Exit Function
458. End If
459. End If
460. Judge_Rotate = False
461. Exit Function
462. End If
463. Case 2 &39;7字
472. Select Case intRotate Mod 4
473. Case 0
474. Judge_Rotate = Get_X_Value
475. Exit Function
476. Case 1
477. Judge_Rotate = Get_Y_Value
478. Exit Function
479. Case 2
480. Judge_Rotate = Get_X_Value
481. Exit Function
482. Case 3
483. Judge_Rotate = Get_Y_Value
484. Exit Function
485. End Select
486. Case 4 &39;反7字
502. Select Case intRotate Mod 4
503. Case 0
504. Judge_Rotate = Get_X_Value
505. Exit Function
506. Case 1
507. Judge_Rotate = Get_Y_Value
508. Exit Function
509. Case 2
510. Judge_Rotate = Get_X_Value
511. Exit Function
512. Case 3
513. Judge_Rotate = Get_Y_Value
514. Exit Function
515. End Select
516. Case 6 &39;判断能否向左挪动
527. Function JudgeX_Left
528. GetCoor
529. For i = 1 To 4
530. On Error Resume Next
531. If Xs.cY > 0 Then
532. If Total.cX - 1, Xs.cY) Or Xs.cX = 0 Then
533. JudgeX_Left = False
534. Exit Function
535. End If
536. End If
537. Next
538. JudgeX_Left = True
539. End Function
540. &39;判断能否向下挪动
555. Sub JudgeY
556. GetCoor
557. For i = 1 To 4
558. If Xs.cZ Then
559. On Error Resume Next
560. If Xs.cY > 0 Then
561. If Total.cX, Xs.cY + 1) Or Xs.cY = 20 Then
562. &39;随机从 7 个放块当选择一个
577. Randomize
578. Type_Next = Int + 1)
579. Select Case Type_Next
580. Case 1
581. imgNext.Picture = LoadResPicture
582. Case 2
583. imgNext.Picture = LoadResPicture
584. Case 3
585. imgNext.Picture = LoadResPicture
586. Case 4
587. imgNext.Picture = LoadResPicture
588. Case 5
589. imgNext.Picture = LoadResPicture
590. Case 6
591. imgNext.Picture = LoadResPicture
592. Case 7
593. imgNext.Picture = LoadResPicture
594. End Select
595. imgNext.Move \\ 2 - 30, \\ 2 - 30
596. End Sub
(2),键盘节制函数
1. Private Sub Form_KeyDown
2. &39;长条
31. If intRotate Mod 2 = 1 Then
32. &39;picNow.Picture = LoadResPicture
38. picNow.Picture = ImageList1.ListImages.Item.Picture
39. picNow.Top = Adjust_Top
40. picNow.Left = picNow.Left + 1
41. End If
42. Case 2 &39;picNow.Picture = LoadResPicture
45. picNow.Picture = ImageList1.ListImages.Item.Picture
46. picNow.Top = Adjust_Top
47. Else
48. &39;7字形
54. Select Case intRotate Mod 4
55. Case 0
56. &39;picNow.Picture = LoadResPicture
61. picNow.Picture = ImageList1.ListImages.Item.Picture
62. picNow.Top = picNow.Top + 1
63. picNow.Left = Adjust_Left
64. Case 2
65. picNow.Picture = LoadResPicture
66. picNow.Top = Adjust_Top
67. Case 3
68. picNow.Picture = LoadResPicture
69. picNow.Top = picNow.Top + 1
70. picNow.Left = Adjust_Left
71. End Select
72. Case 4 &39;反7字形
90. Select Case intRotate Mod 4
91. Case 0
92. picNow.Picture = LoadResPicture
93. picNow.Top = Adjust_Top
94. Case 1
95. picNow.Picture = LoadResPicture
96. picNow.Top = picNow.Top + 1
97. picNow.Left = Adjust_Left
98. Case 2
99. picNow.Picture = LoadResPicture
100. picNow.Top = Adjust_Top
101. Case 3
102. picNow.Picture = LoadResPicture
103. picNow.Top = picNow.Top + 1
104. picNow.Left = Adjust_Left
105. End Select
106. Case 6 &39;目前X坐标
2. Dim Total As Boolean &39;一个方块的最小 x 坐标,最大 x 坐标,最小 y 坐标,最大 y 坐标
4. Private Type cXs
5. cX As Integer &39;y 坐标
7. cZ As Boolean &39;翻转后向左方调剂的位置
11. Dim Adjust_Top As Integer &39;BitBlt 函数作用:位操作位图,实现不规则的方块的动作
13. Private Declare Function BitBlt Lib &34; As Long
14. Dim Type_Now As Integer &39;下个方块的类型
16. Dim intRotate As Integer &34;Hide&34;Show&39;将 10x20 的坐标全体设置为空
3. For i = 1 To 10
4. For j = 0 To 20
5. Total = False
6. Next j
7. Next i
8. CurX = 0
9. picBackGround.Cls
10. &34;键盘节制办法:&34;← 节制方块向左挪动;&34;→ 节制方块向右挪动;&34;↓ 节制方块向下快速挪动;&34;↑ 节制方块的顺时针方向的翻转。&34;俄罗斯方块 键盘操作帮助&39;方块着落
3. JudgeY
4. picNow.Picture = imgNowBackup.Picture
5. r = BitBlt * 20, vbSrcCopy)
6. picNow.Top = picNow.Top + 1
7. r = BitBlt
8. DoEvents
9. If picNow.Top + picNow.Height > picBackGround.ScaleHeight Then Init
10. End Sub
(9),Label
1. Private Sub Form_Load
2. Label1.Caption = &34;
3. End Sub
5,按F5键运行程序,如下图所示
以上就是微观生活(93wg.com)关于“VB之俄罗斯方块教程”的详细内容,希望对大家有所帮助!
评论