VB之俄罗斯方块教程

小微 科技VB之俄罗斯方块教程已关闭评论111字数 7932阅读模式
摘要俄罗斯方块是我们大家喜欢玩的一个游戏,但如何编写这个游戏呢,在此小编用Visual Basic个人的设计思路来实现它,供大家参考学习。设计思路:我们都知道俄罗斯方块的图形很简单,翻...

俄罗斯方块是咱们大家喜欢玩的一个游戏,但怎么编写这个游戏呢,在此小编用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之俄罗斯方块教程”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/7329.html