一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

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

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

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

2020-07-24 11:04Vincentish Python

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

項目簡介

本項目報名參加了“兗州中材杯”武漢理工大學第十一屆環保創意作品大賽藝術理念組比賽。組員共三名,本人負責代碼實現部分,其余兩人分別負責項目策劃與場景人物繪制。

項目背景

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

玩法介紹

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

項目成果

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

項目實現

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

模塊劃分

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

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

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

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

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

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

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

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

操場界面:背景,人物,垃圾桶,隨機產生的垃圾,圖書館按鈕。

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

圖書館外界面:背景(我校圖書館的像素風繪制)、操場按鈕(會到操場)、進入按鈕(進入圖書館內部)。

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

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

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

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

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

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

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

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

游戲結束界面:勝利界面,失敗界面。

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

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

代碼實現

直接上代碼:

?
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 *
#===========================================================
#========================前期準備===========================
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))
#===========================================================
#=========================圖書館內==========================
 
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()
 #進入事件循環
 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):
     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
 #進入事件循環
 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):
     selection = 0
     break
    #點擊廚余垃圾
    if rubbish1_button.has(pos):
     selection = 1
     break
    #點擊可回收垃圾
    if rubbish2_button.has(pos):
     selection = 2
     break
    #點擊有害垃圾
    if rubbish3_button.has(pos):
     selection = 3
     break
    #點擊不可回收垃圾
    if rubbish4_button.has(pos):
     selection = 4
     break
    #點擊圖鑒
    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))
 #進入圖書館的按鈕
 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
 #進入事件循環
 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):
     selection = 0
     break
    #點擊進入圖書館
    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
    
#===========================================================
#==========================游戲結束=========================
 
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
 
#===========================================================
#==========================操場環節=========================
 
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

點此觀看視頻:垃圾分類小游戲

總結

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 爽好舒服把腿张小说 | 日韩精品视频在线观看免费 | 丝瓜污污 | 韩国三级日本三级香港三级黄 | 脱jk裙的美女露小内内无遮挡 | 青青青国产精品国产精品美女 | 92福利网 | 男男互操文 | gogo人体模特啪啪季玥图片 | 欧美一级视频在线高清观看 | 色吧| 亚洲精品久久久久AV无码 | 三级午夜宅宅伦不卡在线 | 欧美激情 亚洲 | 韩国日本香港毛片免费 | 第一次处破女18分钟 | 日日夜夜撸影院 | 久久99精国产一区二区三区四区 | 欧美成人午夜片一一在线观看 | sao虎影院桃红视频在线观看 | 99久久精品免费观看区一 | 成人亚洲欧美日韩在线观看 | 2018av在线| 精精国产xxxx视频在线播放器 | 国产馆在线观看免费的 | 免费国产好深啊好涨好硬视频 | 亚洲图片一区二区 | 91传媒制片厂制作传媒破解版 | 亚洲国产天堂久久精品网 | 久久午夜一区二区 | 啊哈~嗯哼~用力cao我小说 | 999久久精品国产 | 亚洲国产区中文在线观看 | 午夜理论片YY4399影院 | 国产精品色爱综合网 | ts人妖另类国产 | 啊啊啊好大在线观看 | 男人天堂中文字幕 | 日韩欧美在线视频一区二区 | 91久久精品国产亚洲 | 成人免费视频在 |