激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

2020-07-24 11:04Vincentish Python

這篇文章主要介紹了使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

項目簡介

本項目報名參加了“兗州中材杯”武漢理工大學(xué)第十一屆環(huán)保創(chuàng)意作品大賽藝術(shù)理念組比賽。組員共三名,本人負(fù)責(zé)代碼實(shí)現(xiàn)部分,其余兩人分別負(fù)責(zé)項目策劃與場景人物繪制。

項目背景

小組中負(fù)責(zé)策劃的同學(xué)經(jīng)過一定的調(diào)研之后發(fā)現(xiàn),我校在校學(xué)生普遍缺乏垃圾分類方面的知識。經(jīng)過討論后,我們把游戲方向定位于“垃圾分類”,游戲類型定位于像素風(fēng)游戲,由于本人水平和時間有限,只能將玩法設(shè)計得盡量簡單。感謝另外兩位組員,他們的努力掩蓋了我水平上的不足。

玩法介紹

家控制一名角色在操場背景上移動,垃圾桶在操場邊上。撿起垃圾丟進(jìn)相應(yīng)的垃圾桶內(nèi),若全部正確投放則游戲成功,否則游戲失敗。游戲期間,若有不清楚該作何分類的垃圾,則可以點(diǎn)擊圖書館的按鈕,進(jìn)入圖書館查詢。圖書館提供垃圾圖鑒和分類標(biāo)準(zhǔn)兩種信息。垃圾圖鑒幫助玩家分辨自己撿到的垃圾,而分類標(biāo)準(zhǔn)指每種垃圾的定義及舉例。

項目成果

本項目在“兗州中材杯”武漢理工大學(xué)第十一屆環(huán)保創(chuàng)意作品大賽藝術(shù)理念組比賽中最終獲得了第五名、二等獎的成績,距第四名僅差0.5分。

項目實(shí)現(xiàn)

寫項目時本人僅自學(xué)了一個月的Python,且本人是大一新生,對計算機(jī)科學(xué)的基礎(chǔ)知識了解甚少,若代碼風(fēng)格幼稚、愚蠢,還望讀者見諒。

模塊劃分

游戲按場景分為以下幾個模塊:開始游戲界面游戲說明界面人物選擇界面操場界面(主要游戲場地)、圖書館外界面圖書館內(nèi)界面游戲結(jié)束界面

開始游戲界面:背景(像素化的學(xué)校建筑),游戲標(biāo)題,三個按鈕(開始、游戲說明、退出)。

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

游戲說明界面:背景(與開始界面相同),游戲說明文字,返回按鈕。

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

人物選擇界面:背景,提示(選擇人物),兩個可選人物。

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

操場界面:背景,人物,垃圾桶,隨機(jī)產(chǎn)生的垃圾,圖書館按鈕。

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

圖書館外界面:背景(我校圖書館的像素風(fēng)繪制)、操場按鈕(會到操場)、進(jìn)入按鈕(進(jìn)入圖書館內(nèi)部)。

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

圖書館內(nèi)界面:背景(我校圖書館內(nèi)部),各類垃圾圖標(biāo)按鈕(廚余垃圾、可回收垃圾、有害垃圾、其他垃圾),垃圾圖鑒按鈕,返回按鈕。子界面:各類垃圾信息界面,垃圾圖鑒界面,返回按鈕。

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

游戲結(jié)束界面:勝利界面,失敗界面。

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)

代碼實(shí)現(xiàn)

直接上代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
import pygame as py
import sys
import random
from pygame.locals import *
#===========================================================
#========================前期準(zhǔn)備===========================
py.init()
#注:游戲需要的所有文件(圖片等)都放在同游戲目錄的"Files"目錄下。
#定義一個按鈕類
class Button(py.rect.Rect):
 def __init__(self, obj):
  super().__init__(obj)
 def has(self, pos):
  if self.right >= pos[0] >= self.left and self.bottom >= pos[1] >= self.top:
   return True
  else:
   return False
 
screen = py.display.set_mode((1000, 650))
#===========================================================
#=========================圖書館內(nèi)==========================
 
def knowledge(selection):
 path = 'Files\\inside_liberary\\knowledge' + str(selection) + '.jpg'
 know = py.image.load(path)
 know = py.transform.smoothscale(know,(1000,650))
 screen.blit(know,(0,0))
 exits = py.image.load('Files\\inside_liberary\\back.jpg')
 exits = py.transform.smoothscale(exits,(72,72))
 exit_button = screen.blit(exits,(918, 570))
 exit_button = Button(exit_button)
 py.display.flip()
 #進(jìn)入事件循環(huán)
 while True:
  for event in py.event.get():
   if event.type == QUIT:
    sys.exit()
   if event.type == MOUSEBUTTONDOWN:
    pos = py.mouse.get_pos()
    #點(diǎn)擊離開該頁面
    if exit_button.has(pos):
     selection = 0
     break
  if not selection:
   break
 
def inside_Liberary():
 ilib = py.image.load('Files\\inside_liberary\\Inside.jpg')
 ilib = py.transform.smoothscale(ilib,(1000,650))
 screen.blit(ilib,(0,0))
 #退出圖書館的按鈕
 exits = py.image.load('Files\\inside_liberary\\exit.jpg')
 exits = py.transform.smoothscale(exits,(72,81))
 exit_button = screen.blit(exits,(5, 560))
 exit_button = Button(exit_button)
 #廚余垃圾按鈕
 rubbish1 = py.image.load('Files\\inside_liberary\\rubbish1.jpg')
 rubbish1 = py.transform.smoothscale(rubbish1,(150,298))
 rubbish1_button = screen.blit(rubbish1, (80,150))
 rubbish1_button = Button(rubbish1_button)
 #可回收垃圾按鈕
 rubbish2 = py.image.load('Files\\inside_liberary\\rubbish2.jpg')
 rubbish2 = py.transform.smoothscale(rubbish2,(150,298))
 rubbish2_button = screen.blit(rubbish2, (310,150))
 rubbish2_button = Button(rubbish2_button)
 #有害垃圾按鈕
 rubbish3 = py.image.load('Files\\inside_liberary\\rubbish3.jpg')
 rubbish3 = py.transform.smoothscale(rubbish3,(150,298))
 rubbish3_button = screen.blit(rubbish3, (540,150))
 rubbish3_button = Button(rubbish3_button)
 #不可回收垃圾按鈕
 rubbish4 = py.image.load('Files\\inside_liberary\\rubbish4.jpg')
 rubbish4 = py.transform.smoothscale(rubbish4,(150,298))
 rubbish4_button = screen.blit(rubbish4, (770,150))
 rubbish4_button = Button(rubbish4_button)
 #圖鑒按鈕
 rubbish5 = py.image.load('Files\\inside_liberary\\rubbish5.jpg')
 rubbish5 = py.transform.smoothscale(rubbish5,(82, 72))
 rubbish5_button = screen.blit(rubbish5, (903,560))
 rubbish5_button = Button(rubbish5_button)
 
 py.display.flip()
 selection = -1
 #進(jìn)入事件循環(huán)
 while True:
  for event in py.event.get():
   if event.type == QUIT:
    sys.exit()
   if event.type == MOUSEBUTTONDOWN:
    pos = py.mouse.get_pos()
    #點(diǎn)擊離開圖書館
    if exit_button.has(pos):
     selection = 0
     break
    #點(diǎn)擊廚余垃圾
    if rubbish1_button.has(pos):
     selection = 1
     break
    #點(diǎn)擊可回收垃圾
    if rubbish2_button.has(pos):
     selection = 2
     break
    #點(diǎn)擊有害垃圾
    if rubbish3_button.has(pos):
     selection = 3
     break
    #點(diǎn)擊不可回收垃圾
    if rubbish4_button.has(pos):
     selection = 4
     break
    #點(diǎn)擊圖鑒
    if rubbish5_button.has(pos):
     selection = 5
     break
  if selection != -1:
   break
 if selection:
  knowledge(selection)
  inside_Liberary()
#===========================================================
#=========================圖書館外==========================
 
def outside_Liberary():
 olib = py.image.load('Files\\outside_liberary\\Outside.jpg')
 olib = py.transform.smoothscale(olib,(1000,650))
 screen.blit(olib,(0,0))
 #進(jìn)入圖書館的按鈕
 enter = py.image.load('Files\\outside_liberary\\enter_lib.jpg')
 enter = py.transform.smoothscale(enter,(72, 72))
 enter_button = screen.blit(enter,(470,550))
 enter_button = Button(enter_button)
 #退出圖書館的按鈕
 exits = py.image.load('Files\\outside_liberary\\playground.jpg')
 exits = py.transform.smoothscale(exits,(72, 51))
 exit_button = screen.blit(exits,(5, 590))
 exit_button = Button(exit_button)
 py.display.flip()
 selection = -1
 #進(jìn)入事件循環(huán)
 while True:
  for event in py.event.get():
   if event.type == QUIT:
    sys.exit()
   if event.type == MOUSEBUTTONDOWN:
    pos = py.mouse.get_pos()
    #點(diǎn)擊返回操場
    if exit_button.has(pos):
     selection = 0
     break
    #點(diǎn)擊進(jìn)入圖書館
    if enter_button.has(pos):
     selection = 1
     break
  if selection != -1:
   break
 if selection:
  inside_Liberary()
  outside_Liberary()
 
#===========================================================
#==========================游戲幫助=========================
 
def help_page():
 background = py.image.load('Files\\help\\background.jpg')
 background = py.transform.smoothscale(background,(1000,650))
 screen.blit(background,(0,0))
 #返回按鈕
 exits = py.image.load('Files\\help\\back.jpg')
 exits = py.transform.smoothscale(exits,(72,57))
 exit_button = screen.blit(exits,(5, 585))
 exit_button = Button(exit_button)
 py.display.flip()
 back = 0
 while True:
  for event in py.event.get():
   if event.type == QUIT:
    sys.exit()
   if event.type == MOUSEBUTTONDOWN:
    pos = py.mouse.get_pos()
    if exit_button.has(pos):
     back = 1
     break
  if back:
   break
    
#===========================================================
#==========================游戲結(jié)束=========================
 
def game_over(result):
 path = 'Files\\game_over\\result' + str(result) + '.jpg'
 background = py.image.load(path)
 background = py.transform.smoothscale(background,(1000,650))
 screen.blit(background,(0,0))
 py.display.flip()
 temp = 0
 while True:
  for event in py.event.get():
   if event.type == QUIT:
    sys.exit()
   if event.type == MOUSEBUTTONDOWN:
    temp = 1
    break
  if temp:
   break
 
#===========================================================
#==========================操場環(huán)節(jié)=========================
 
choices = ['01', '02', '11', '12', '21', '22', '31']
class Rubbish():
 def __init__(self, sort):
  self.sort = sort
  self.img = py.image.load('Files\\playground\\' + sort + '.jpg')
  x = random.randint(100, 1400)
  y = random.randint(110, 900)
  self.position = self.img.get_rect()
  self.position = self.position.move((x, y))
  screen.blit(self.img, self.position)
class Role():
 def __init__(self, role):
  self.r_side = py.image.load('Files\\playground\\' + role + '1.jpg')
  self.r_walk = py.image.load('Files\\playground\\' + role + '2.jpg')
  self.l_side = py.transform.flip(self.r_side, True, False)
  self.l_walk = py.transform.flip(self.r_walk, True, False)
  self.img = self. r_side
  self.position = self.img.get_rect()
  screen.blit(self.img, self.position)
  self.rubbish = None
 def move(self, key):
  if key == K_UP:
   if self.position.top <= 200:
    return (0, 2)
   else:
    self.position = self.position.move(0, -2)
    return 0
  if key == K_DOWN:
   if self.position.bottom >= 450:
    return (0, -2)
   else:
    self.position = self.position.move(0, 2)
    return 0
  if key == K_RIGHT:
   if self.position.right >= 800:
    return (-2, 0)
   else:
    self.position = self.position.move(2, 0)
    return 0
  if key == K_LEFT:
   if self.position.left <= 200:
    return (2, 0)
   else:
    self.position = self.position.move(-2, 0)
    return 0
  
class Trash_can():
 def __init__(self, num):
  self. num = num
  self.img = py.image.load('Files\\playground\\' + str(num) + '.jpg')
  self.img = py.transform.smoothscale(self.img,(100, 92))
  self.position = self.img.get_rect()
  self.position = self.position.move((100 + num*200, 0))
  screen.blit(self.img, self.position)
def playground(selection):
 background = py.image.load('Files\\playground\\Playground.jpg')
 screen.blit(background, [0, 0])
 lib = py.image.load('Files\\playground\\liberary.jpg')
 lib = py.transform.smoothscale(lib, (78, 72))
 lib_button = screen.blit(lib, (900, 10))
 lib_button = Button(lib_button)
 trash_can = []
 for num in range(0, 4):
  trash_can.append(Trash_can(num))
 role = Role(selection)
 rubbish = []
 for sort in choices:
  rubbish.append(Rubbish(sort))
 py.display.flip()
 down = 0
 go = None
 move_bg = [0, 0]
 temp = 0
 while True:
  for event in py.event.get():
   if event.type == QUIT:
    sys.exit()
   if event.type == MOUSEBUTTONDOWN:
    pos = py.mouse.get_pos()
    if lib_button.has(pos):
     outside_Liberary()
   if event.type == KEYDOWN and\
    event.key in (K_UP, K_DOWN, K_RIGHT, K_LEFT):
    if event.key == K_RIGHT:
     role.img = role.r_side
    elif event.key == K_LEFT:
     role.img = role.l_side
    down = 1
    go = event.key
   if event.type == KEYUP and event.key == go:
    if event.key == K_RIGHT:
     role.img = role.r_side
    elif event.key == K_LEFT:
     role.img = role.l_side
    down = 0
  take = role.position.collidelist([each.position for each in rubbish])
  if take >= 0 and not role.rubbish:
   role.rubbish = rubbish[take].sort[0]
   del rubbish[take]
  put = role.position.collidelist([each.position for each in trash_can])
  if put >= 0 and role.rubbish:
   if role.rubbish == str(trash_can[put].num):
    role.rubbish = None
    if not len(rubbish):
     game_over(1)
     break
   else:
    game_over(2)
    break
  if down:
   moved = role.move(go)
   temp += 1
   if not temp % 20:
    if role.img == role.r_side:
     role.img = role.r_walk
    elif role.img == role.r_walk:
     role.img = role.r_side
    elif role.img == role.l_side:
     role.img = role.l_walk
    else:
     role.img = role.l_side
   if moved:
    if 0 >= moved[0] + move_bg[0] >= -497 and \
     0 >= moved[1] + move_bg[1] >= -326:
     for i in range(2):
      move_bg[i] += moved[i]
     for each in rubbish:
      each.position = each.position.move(moved)
     for each in trash_can:
      each.position = each.position.move(moved)
    elif role.position.left - moved[0] >= 0 and\
      role.position.right - moved[0] <= 1000 and\
      role.position.top - moved[1] >= 0 and\
      role.position.bottom - moved[1] <= 650:
     role. position = role.position.move([-i for i in moved])
  screen.blit(background, move_bg)
  lib = py.image.load('Files\\playground\\liberary.jpg')
  lib = py.transform.smoothscale(lib, (78, 72))
  lib_button = screen.blit(lib, (900, 10))
  lib_button = Button(lib_button)
  for each in trash_can:
   screen.blit(each.img, each.position)
  for each in rubbish:
   screen.blit(each.img, each.position)
  screen.blit(role.img, role.position)
  py.display.flip()
 
 
#===========================================================
#==========================選擇人物=========================
 
def choose_role():
 background = py.image.load('Files\\choose_player\\background.jpg')
 background = py.transform.smoothscale(background,(1000,650))
 screen.blit(background, (0, 0))
 man = py.image.load('Files\\choose_player\\man.jpg')
 man = py.transform.smoothscale(man,(123, 325))
 man_button = screen.blit(man,(200, 200))
 man_button = Button(man_button)
 woman = py.image.load('Files\\choose_player\\woman.jpg')
 woman = py.transform.smoothscale(woman,(113, 325))
 woman_button = screen.blit(woman,(687, 200))
 woman_button = Button(woman_button)
 py.display.flip()
 while True:
  for event in py.event.get():
   if event.type == QUIT:
    sys.exit()
   if event.type == MOUSEBUTTONDOWN:
    pos = py.mouse.get_pos()
    if man_button.has(pos):
     return 'man'
    if woman_button.has(pos):
     return 'woman'
    
#===========================================================
#========================開始游戲界面========================
 
def start():
 background = py.image.load('Files\\start\\background.jpg')
 background = py.transform.smoothscale(background,(1000,650))
 screen.blit(background, (0, 0))
 start_game = py.image.load('Files\\start\\start_game.jpg')
 start_game = py.transform.smoothscale(start_game,(140, 149))
 start_button = screen.blit(start_game,(150, 330))
 start_button = Button(start_button)
 game_help = py.image.load('Files\\start\\game_help.jpg')
 game_help = py.transform.smoothscale(game_help,(280, 182))
 help_button = screen.blit(game_help,(380, 320))
 help_button = Button(help_button)
 quit_game = py.image.load('Files\\start\\quit_game.jpg')
 quit_game = py.transform.smoothscale(quit_game,(200,160))
 quit_button = screen.blit(quit_game,(680, 330))
 quit_button = Button(quit_button)
 py.display.flip()
 while True:
  for event in py.event.get():
   if event.type == QUIT:
    sys.exit()
   if event.type == MOUSEBUTTONDOWN:
    pos = py.mouse.get_pos()
    if start_button.has(pos):
     role = choose_role()
     playground(role)
     break
    elif help_button.has(pos):
     help_page()
     break
    elif quit_button.has(pos):
     sys.exit()
  break
 start()
start()

游戲效果

游戲演示如下:

15

點(diǎn)此觀看視頻:垃圾分類小游戲

總結(jié)

這個游戲是本人第一次寫出一百行以上的代碼,寫完后沒來得及進(jìn)行進(jìn)一步的優(yōu)化就提交了項目。

到此這篇關(guān)于使用pygame實(shí)現(xiàn)垃圾分類小游戲功能(已獲校級二等獎)的文章就介紹到這了,更多相關(guān)pygame垃圾分類小游戲內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/Vincentish/article/details/107495432

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 女人叉开腿让男人桶 | 老司机一级毛片 | 亚洲成人精品在线 | 欧美亚洲国产成人综合在线 | 亚洲一区二区中文字幕在线观看 | 在线播放一区二区三区 | 亚洲精久 | 天天看成人免费毛片视频 | 中文字幕国产一区 | 欧美成人三级视频 | 91久久在线观看 | 成人小视频在线播放 | 久久国产精品系列 | 国产亚洲欧美日韩在线观看不卡 | 成人毛片免费 | 日本中文高清 | 欧美成人精品欧美一级乱黄 | 狠狠色噜噜狠狠狠米奇9999 | 法国性xxx精品hd专区 | 成人视屏网站 | 久久蜜桃精品一区二区三区综合网 | 日本黄色片免费播放 | 日韩视频中文 | 亚洲欧美日韩精品久久亚洲区色播 | 成人午夜天堂 | 久久经典 | 久久蜜臀一区二区三区av | 久久久免费电影 | 欧美aaaaa一级毛片在线 | 欧美一级爱操视频 | www.99re1.com | 欧美一区二区黄色 | 精品国产一级毛片 | 欧美性受ⅹ╳╳╳黑人a性爽 | 久久精品国产99久久久古代 | a视频在线看 | 羞羞视频免费视频欧美 | 精品国产一区二区亚洲人成毛片 | av电影观看 | 亚洲一区二区三区在线免费观看 | 蜜桃视频最新网址 |